LauncherGoDev/sysgo/UI/icon_item.go
2018-12-21 16:55:28 +08:00

311 lines
6.3 KiB
Go

package UI
import (
"fmt"
"github.com/veandco/go-sdl2/sdl"
"github.com/veandco/go-sdl2/ttf"
"github.com/cuu/gogame/surface"
"github.com/cuu/gogame/draw"
"github.com/cuu/gogame/color"
"github.com/cuu/gogame/image"
"github.com/cuu/gogame/transform"
"github.com/cuu/gogame/utils"
"github.com/cuu/gogame/rect"
)
type IconItemInterface interface {
Init(x,y,w,h,at int)
Adjust(x,y,w,h,at int)
GetCmdPath() string
SetCmdPath( path string)
SetMyType( thetype int )
GetMyType() int
GetIconIndex() int
SetIconIndex(idx int)
GetIndex() int
SetIndex(i int)
SetParent( p interface{} )
SetLabelColor(col *color.Color)
SetLabelText(text string)
GetLabelText() string
Coord() (int,int)
NewCoord(x,y int)
Size() (int,int)
NewSize(w,h int)
TotalWidth() int
AddLabel(text string, fontobj *ttf.Font)
GetLinkPage() PageInterface
AdjustLinkPage()
GetImgSurf() *sdl.Surface
SetImgSurf(newsurf *sdl.Surface)
CreateImgSurf()
ChangeImgSurfColor(col *color.Color)
Clear()
GetCmdInvoke() PluginInterface
GetFileName() string
Draw()
DrawTopLeft()
}
type IconItem struct {
Widget
ImageName string
ImgSurf *sdl.Surface
Parent PageInterface
Index int
IconIndex int
MyType int
CmdPath string
CmdInvoke PluginInterface
LinkPage PageInterface
Label LabelInterface
Align int
AnimationTime int
FileName string
}
func NewIconItem() *IconItem {
i := &IconItem{}
i.MyType = ICON_TYPES["EXE"]
i.Align = ALIGN["VCenter"]
return i
}
func (self *IconItem) Init(x,y,w,h,at int) {
self.PosX = x
self.PosY = y
self.Width = w
self.Height = h
self.AnimationTime = at
}
func (self *IconItem) Adjust(x,y,w,h,at int) {
self.PosX = x
self.PosY = y
self.Width = w
self.Height = h
self.AnimationTime = at
if self.Label != nil {
self.Label.SetCanvasHWND(self.Parent.GetCanvasHWND())
}
self.CreateImgSurf()
self.AdjustLinkPage()
}
func (self *IconItem) GetCmdPath() string {
return self.CmdPath
}
func (self *IconItem) SetCmdPath( path string) {
self.CmdPath = path
}
func (self *IconItem) SetMyType( thetype int ) {
self.MyType = thetype
}
func (self *IconItem) GetMyType() int {
return self.MyType
}
func (self *IconItem) GetIconIndex() int {
return self.IconIndex
}
func (self *IconItem) SetIconIndex( idx int) {
self.IconIndex = idx
}
func (self *IconItem) GetIndex() int {
return self.Index
}
func (self *IconItem) SetIndex(i int) {
self.Index = i
}
func (self *IconItem) SetParent(p interface{} ) {
self.Parent = p.(PageInterface)
}
func (self *IconItem) SetLabelColor(col *color.Color) {
self.Label.SetColor(col)
}
func (self *IconItem) GetLabelText() string {
return self.Label.GetText()
}
func (self *IconItem) SetLabelText(text string) {
self.Label.SetText(text)
}
func (self *IconItem) Coord() (int,int) {
return self.PosX,self.PosY
}
func (self *IconItem) NewCoord(x,y int) {
self.PosX = x
self.PosY = y
}
func (self *IconItem) TotalWidth() int {
return 0
}
func (self *IconItem) Size() (int,int) {
return self.Width,self.Height
}
func (self *IconItem) AddLabel(text string, fontobj *ttf.Font) {
if self.Label == nil {
l:= NewLabel()
self.Label = l
}
self.Label.Init(text,fontobj,nil)
}
func (self *IconItem) GetLinkPage() PageInterface {
return self.LinkPage
}
func (self *IconItem) AdjustLinkPage() {
if self.MyType == ICON_TYPES["DIR"] && self.LinkPage != nil {
self.LinkPage.SetIndex(0)
self.LinkPage.SetAlign(ALIGN["SLeft"])
self.LinkPage.UpdateIconNumbers()
self.LinkPage.SetScreen(self.Parent.GetScreen())
self.LinkPage.SetCanvasHWND( (self.Parent.GetScreen()).CanvasHWND )
self.LinkPage.SetFootMsg([5]string{ "Nav.","","","Back","Enter" } )
if self.LinkPage.GetAlign() == ALIGN["HLeft"] {
self.LinkPage.AdjustHLeftAlign()
}else if self.LinkPage.GetAlign() == ALIGN["SLeft"] {
self.LinkPage.AdjustSAutoLeftAlign()
if self.LinkPage.GetIconNumbers() > 1 {
self.LinkPage.SetPsIndex(1)
self.LinkPage.SetIconIndex ( 1 )
}
}
}
}
func (self *IconItem) GetImgSurf() *sdl.Surface {
return self.ImgSurf
}
func (self *IconItem) SetImgSurf(newsurf *sdl.Surface) {
self.ImgSurf = newsurf
}
func (self *IconItem) CreateImgSurf() {
if self.ImgSurf == nil && self.ImageName != "" {
self.ImgSurf = image.Load(self.ImageName)
if int(self.ImgSurf.W) > IconWidth || int(self.ImgSurf.H) > IconHeight {
self.ImgSurf = transform.Scale(self.ImgSurf,IconWidth,IconHeight)
}
}
}
func (self *IconItem) ChangeImgSurfColor(col *color.Color) {
utils.ColorSurface(self.ImgSurf,col)
}
func (self *IconItem) Clear() {
}
func (self *IconItem) GetCmdInvoke() PluginInterface {
return self.CmdInvoke
}
func (self *IconItem) GetFileName() string {
return self.FileName
}
func (self *IconItem) DrawTopLeft() {
if self.Parent == nil {
fmt.Println("Error: IconItem Draw Parent nil")
return
}
parent_x,parent_y := self.Parent.Coord()
if self.Label != nil {
// lab_x,lab_y := self.Label.Coord()
lab_w,lab_h:= self.Label.Size()
if self.Align == ALIGN["VCenter"] {
// fmt.Println("IconItem Draw VCenter:",lab_w,lab_h,self.Label.GetText())
self.Label.NewCoord( self.PosX - lab_w/2 + parent_x, self.PosY + self.Height/2+6+parent_y)
}else if self.Align == ALIGN["HLeft"] {
self.Label.NewCoord( self.PosX + self.Width/2+3+parent_x, self.PosY - lab_h/2 + parent_y)
}
self.Label.Draw()
}
if self.ImgSurf != nil {
rect_ := rect.Rect( self.PosX+parent_x,self.PosY+parent_y, self.Width,self.Height ) // DIFF
surface.Blit(self.Parent.GetCanvasHWND(), self.ImgSurf,&rect_,nil)
}
}
func (self *IconItem) Draw() {
if self.Parent == nil {
fmt.Println("Error: IconItem Draw Parent nil")
return
}
parent_x,parent_y := self.Parent.Coord()
if self.Label != nil {
// lab_x,lab_y := self.Label.Coord()
lab_w,lab_h:= self.Label.Size()
if self.Align == ALIGN["VCenter"] {
// fmt.Println("IconItem Draw VCenter:",lab_w,lab_h,self.Label.GetText())
self.Label.NewCoord( self.PosX - lab_w/2 + parent_x, self.PosY + self.Height/2+6+parent_y)
}else if self.Align == ALIGN["HLeft"] {
self.Label.NewCoord( self.PosX + self.Width/2+3+parent_x, self.PosY - lab_h/2 + parent_y)
}
self.Label.Draw()
}
if self.ImgSurf != nil {
surface.Blit(self.Parent.GetCanvasHWND(), self.ImgSurf,draw.MidRect(self.PosX + parent_x, self.PosY + parent_y,
self.Width,self.Height, Width, Height),nil)
}
}