First Commit
This commit is contained in:
80
widget.go
Normal file
80
widget.go
Normal file
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
Copyright © Brian Buller <brian@bullercodeworks.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
package widgets
|
||||
|
||||
import "github.com/gdamore/tcell"
|
||||
|
||||
type Widget interface {
|
||||
Init(id string)
|
||||
Id() string
|
||||
HandleResize(*tcell.EventResize)
|
||||
HandleKey(*tcell.EventKey) bool
|
||||
HandleTime(*tcell.EventTime)
|
||||
Draw(tcell.Screen)
|
||||
Active() bool
|
||||
SetActive(bool)
|
||||
Visible() bool
|
||||
SetVisible(bool)
|
||||
Focusable() bool
|
||||
SetX(int)
|
||||
SetY(int)
|
||||
GetX() int
|
||||
GetY() int
|
||||
SetPos(Coord)
|
||||
SetW(int)
|
||||
SetH(int)
|
||||
GetW() int
|
||||
GetH() int
|
||||
WantW() int
|
||||
WantH() int
|
||||
SetSize(Coord)
|
||||
}
|
||||
|
||||
type Coord struct {
|
||||
X, Y int
|
||||
}
|
||||
|
||||
func (p *Coord) Add(o Coord) Coord {
|
||||
return Coord{
|
||||
X: p.X + o.X,
|
||||
Y: p.Y + o.Y,
|
||||
}
|
||||
}
|
||||
|
||||
// To validate that a struct satisfies this interface, you can do:
|
||||
// var _ Widget - (*<struct>)(nil)
|
||||
// where <struct> is the actual struct that you're validating.
|
||||
|
||||
type WidgetList []Widget
|
||||
|
||||
func (w *WidgetList) Contains(id string) bool {
|
||||
return w.Find(id) != nil
|
||||
}
|
||||
|
||||
func (w *WidgetList) Find(id string) Widget {
|
||||
for _, wi := range *w {
|
||||
if wi.Id() == id {
|
||||
return wi
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user