diff --git a/Menu/GameShell/10_Settings/About/about.go b/Menu/GameShell/10_Settings/About/about.go new file mode 100644 index 0000000..c4b1eb7 --- /dev/null +++ b/Menu/GameShell/10_Settings/About/about.go @@ -0,0 +1,154 @@ +package main + +import ( + "strings" + "os/exec" + + "github.com/veandco/go-sdl2/ttf" + + "github.com/cuu/gogame/surface" + "github.com/cuu/gogame/event" + "github.com/cuu/gogame/rect" + "github.com/cuu/gogame/color" + + "github.com/cuu/LauncherGo/sysgo/UI" + + +) + +type InfoPageListItem struct{ + UI.Widget + Labels map[string]UI.LabelInterface + Icons map[string]UI.IconItemInterface + Fonts map[string]*ttf.Font + + Parent UI.PageInterface + + Flag string +} + +func NewInfoPageListItem() *InfoPageListItem { + i := &InfoPageListItem{} + i.Labels = make(map[string]UI.LabelInterface) + i.Icons = make( map[string]UI.IconItemInterface) + i.Fonts = make(map[string]*ttf.Font) + + i.Height = 20 + i.Width = 0 + + return i +} + +func (self *InfoPageListItem) Init(text string) { + l := UI.NewLabel() + l.PosX = 10 + l.SetCanvasHWND(self.Parent.GetCanvasHWND()) + l.Init(text,self.Fonts["normal"],nil) + + self.Labels["Text"] = l + +} + +func (self *InfoPageListItem) SetSmallText( text string) { + l := UI.NewMultiLabel() + l.SetCanvasHWND(self.Parent.GetCanvasHWND()) + l.Init(text,self.Fonts["small"],nil) + + self.Labels["Small"] = l + + _,h_ := self.Labels["Small"].Size() + if h_>= self.Height { + self.Height = h_ + 10 + } + +} + +func (self *InfoPageListItem) Draw() { + x_,_ := self.Labels["Text"].Coord() + self.Labels["Text"].NewCoord(x_,self.PosY) + self.Labels["Text"].Draw() + + if _, ok := self.Labels["Small"]; ok { + w_,_ := self.Labels["Text"].Size() + self.Labels["Small"].NewCoord(w_+16,self.PosY) + self.Labels["Small"].Draw() + } + +} + + +type AboutPage struct { + UI.Page + AList map[string]map[string]string + ListFontObj *ttf.Font + Scrolled int + BGwidth int + BGheight int + DrawOnce bool + Scroller *UI.ListScroller + + MyList []*InfoPageListItem + +} + +func NewAboutPage() *AboutPage { + p := &HelloWorldPage{} + + p.FootMsg = [5]string{"Nav.","","","Back",""} + + p.AList = make(map[string]map[string]string) + + p.BGwidth = 320 + p.BGheight = 300 + p.DrawOnce = false + + p.MyList = make([]*InfoPageListItem,0) + + p.ListFontObj = UI.Fonts["varela13"] + + p.Index = 0 + + return p + +} + + + + +func (self *AboutPage) Uname() { + out := make(map[string]string) + + out["key"] = "uname" + out["label"] = "Kernel:" + + out_bytes, err := exec.Command("uname","-srmo").Output() + if err != nil { + fmt.Println(err) + out["value"] = "" + } + + out_str := strings.Trim(string(out_bytes), "\t\n") + + out["value"]= out_str + + self.AList["uname"] = out +} + + +func (self *AboutPage) CpuMhz() { + +} + +func (self *AboutPage) CpuInfo() { + +} + +func (self *AboutPage) MemInfo() { + +} + +func (self *AboutPage) GenList() { + + +} + diff --git a/Menu/GameShell/10_Settings/Settings.go b/Menu/GameShell/10_Settings/Settings.go new file mode 100644 index 0000000..8dcf6d1 --- /dev/null +++ b/Menu/GameShell/10_Settings/Settings.go @@ -0,0 +1,230 @@ +package main + +import ( + "github.com/veandco/go-sdl2/ttf" + +// "github.com/cuu/gogame/surface" + "github.com/cuu/gogame/event" + "github.com/cuu/gogame/rect" + "github.com/cuu/gogame/color" + "github.com/cuu/gogame/draw" + + "github.com/cuu/LauncherGo/sysgo/UI" + +) + +type SettingsPageSelector struct { + UI.PageSelector + BackgroundColor *color.Color + +} + +func NewSettingsPageSelector() *SettingsPageSelector{ + s := &SettingsPageSelector{} + s.BackgroundColor = &color.Color{131,199,219,255} + + s.Width = UI.Width + + return s +} + +func (self *SettingsPageSelector) Draw() { + idx := self.Parent.GetPsIndex() + mylist := self.Parent.GetMyList() + if idx < len( mylist) { + _,y_ := mylist[idx].Coord() + _,h_ := mylist[idx].Size() + + x := 2 + y := y_+1 + h := h_-3 + self.PosX = x + self.PosY = y + self.Height = h + + rect_ := rect.Rect(x,y,self.Width-4,h) + canvas_ := self.Parent.GetCanvasHWND() + draw.AARoundRect(canvas_, &rect_,self.BackgroundColor,4,0,self.BackgroundColor) + + } +} + +//##############################################// + +type SettingsPage struct { + UI.Page + AList map[string]map[string]string + ListFontObj *ttf.Font + Scrolled int + BGwidth int + BGheight int + DrawOnce bool + Scroller *UI.ListScroller + Icons map[string]UI.IconItemInterface + + MyPath string + +} + +func NewSettingsPage() *SettingsPage { + p := &SettingsPage{} + p.FootMsg = [5]string{"Nav","","","Back","Enter"} + p.ListFontObj = UI.Fonts["varela15"] + + p.MyPath = "Menu/GameShell/10_Settings" + + return p +} + +func (self *SettingsPage) Init() { + if self.Screen != nil { + + self.PosX = self.Index * self.Screen.Width + self.Width = self.Screen.Width + self.Height = self.Screen.Height + self.CanvasHWND = self.Screen.CanvasHWND + + + ps := &SettingsPageSelector{} + ps.Parent = self + self.Ps = ps + self.PsIndex = 0 + + + alist := [][]string{ // "so file", "folder name", "label text" + {"about.so","About","About"}, + } + + + start_x := 0 + start_y := 0 + + for i,v := range alist{ + li := UI.NewListItem() + li.Parent = self + li.PosX = start_x + li.PosY = start_y + i*li.Height + li.Width = UI.Width + + li.Fonts["normal"] = self.ListFontObj + + if v[2] != "" { + li.Init(v[2]) + }else{ + li.Init(v[1]) + } + + if UI.FileExists( self.MyPath+"/"+v[1]+"/"+v[0]) { + pi,err := UI.LoadPlugin(self.MyPath+"/"+v[1]+"/"+v[0] ) + UI.Assert(err) + li.LinkObj = UI.InitPlugin(pi,self.Screen) + self.MyList = append(self.MyList,li) + + } + } + + self.Scroller = UI.NewListScroller() + self.Scroller.Parent = self + self.Scroller.PosX = self.Width - 10 + self.Scroller.PosY = 2 + self.Scroller.Init() + + } +} + +func (self *SettingsPage) ScrollUp() { + +} + + +func (self *SettingsPage) ScrollDown() { + +} + +func (self *SettingsPage) Click() { + +} + +func (self *SettingsPage) KeyDown( ev *event.Event) { + + if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] { + self.ReturnToUpLevelPage() + self.Screen.Draw() + self.Screen.SwapAndShow() + } + + + if ev.Data["Key"] == UI.CurKeys["Up"] { + self.ScrollUp() + self.Screen.Draw() + self.Screen.SwapAndShow() + } + + if ev.Data["Key"] == UI.CurKeys["Down"] { + self.ScrollDown() + self.Screen.Draw() + self.Screen.SwapAndShow() + } + + if ev.Data["Key"] == UI.CurKeys["Enter"] { + self.Click() + } +} + + +func (self *SettingsPage) Draw() { + self.ClearCanvas() + + if len(self.MyList) == 0 { + return + } + + _,h_ := self.MyList[0].Size() + + if len(self.MyList) * h_ > self.Height { + _,ph_ := self.Ps.Size() + self.Ps.NewSize(self.Width - 11, ph_) + self.Ps.Draw() + + for _,v := range self.MyList { + v.Draw() + } + + self.Scroller.UpdateSize(len(self.MyList)*h_,self.PsIndex*h_) + self.Scroller.Draw() + + }else { + _,ph_ := self.Ps.Size() + self.Ps.NewSize(self.Width,ph_) + self.Ps.Draw() + for _,v := range self.MyList { + v.Draw() + } + + } +} + + +/******************************************************************************/ +type SettingsPlugin struct { + UI.Plugin + Page UI.PageInterface +} + + +func (self *SettingsPlugin) Init( main_screen *UI.MainScreen ) { + self.Page = NewSettingsPage() + self.Page.SetScreen( main_screen) + self.Page.SetName("Settings") + self.Page.Init() +} + +func (self *SettingsPlugin) Run( main_screen *UI.MainScreen ) { + if main_screen != nil { + main_screen.PushPage(self.Page) + main_screen.Draw() + main_screen.SwapAndShow() + } +} + +var APIOBJ SettingsPlugin diff --git a/Menu/GameShell/10_Settings/Settings.so b/Menu/GameShell/10_Settings/Settings.so new file mode 100644 index 0000000..c77ffff Binary files /dev/null and b/Menu/GameShell/10_Settings/Settings.so differ diff --git a/Menu/GameShell/10_Settings/plugin.config b/Menu/GameShell/10_Settings/plugin.config new file mode 100644 index 0000000..a5b55cf --- /dev/null +++ b/Menu/GameShell/10_Settings/plugin.config @@ -0,0 +1,5 @@ +{ +"SO_FILE":"Settings.so", +"NAME":"Settings" +} + diff --git a/Menu/GameShell/HelloWorld/HelloWorld.so b/Menu/GameShell/HelloWorld/HelloWorld.so index 441752e..2dc72b5 100644 Binary files a/Menu/GameShell/HelloWorld/HelloWorld.so and b/Menu/GameShell/HelloWorld/HelloWorld.so differ diff --git a/Menu/GameShell/HelloWorld/helloworld.go b/Menu/GameShell/HelloWorld/helloworld.go index e233255..229e343 100644 --- a/Menu/GameShell/HelloWorld/helloworld.go +++ b/Menu/GameShell/HelloWorld/helloworld.go @@ -13,10 +13,7 @@ import ( ) type InfoPageListItem struct{ - PosX int - PosY int - Width int - Height int + UI.Widget Labels map[string]UI.LabelInterface Icons map[string]UI.IconItemInterface Fonts map[string]*ttf.Font @@ -83,6 +80,7 @@ type HelloWorldPage struct { Scroller *UI.ListScroller MyList []*InfoPageListItem + } func NewHelloWorldPage() *HelloWorldPage { @@ -99,6 +97,8 @@ func NewHelloWorldPage() *HelloWorldPage { p.MyList = make([]*InfoPageListItem,0) p.ListFontObj = UI.Fonts["varela13"] + + p.Index = 0 return p } diff --git a/build.sh b/build.sh index 597d349..448704a 100755 --- a/build.sh +++ b/build.sh @@ -7,3 +7,8 @@ cd Menu/GameShell/HelloWorld/ go build -o HelloWorld.so -buildmode=plugin cd - + +cd Menu/GameShell/10_Settings +go build -o Settings.so -buildmode=plugin +cd - + diff --git a/skin/default/sysgo/gameshell/icons/DialogBoxs.png b/skin/default/sysgo/gameshell/icons/DialogBoxs.png new file mode 100644 index 0000000..e38d227 Binary files /dev/null and b/skin/default/sysgo/gameshell/icons/DialogBoxs.png differ diff --git a/skin/default/sysgo/gameshell/icons/GS.png b/skin/default/sysgo/gameshell/icons/GS.png new file mode 100644 index 0000000..68b8aff Binary files /dev/null and b/skin/default/sysgo/gameshell/icons/GS.png differ diff --git a/skin/default/sysgo/gameshell/icons/airwire.png b/skin/default/sysgo/gameshell/icons/airwire.png new file mode 100644 index 0000000..625d004 Binary files /dev/null and b/skin/default/sysgo/gameshell/icons/airwire.png differ diff --git a/skin/default/sysgo/gameshell/icons/buttonslayout.png b/skin/default/sysgo/gameshell/icons/buttonslayout.png new file mode 100644 index 0000000..99a2531 Binary files /dev/null and b/skin/default/sysgo/gameshell/icons/buttonslayout.png differ diff --git a/skin/default/sysgo/gameshell/icons/sheep_bg.png b/skin/default/sysgo/gameshell/icons/sheep_bg.png new file mode 100644 index 0000000..f373475 Binary files /dev/null and b/skin/default/sysgo/gameshell/icons/sheep_bg.png differ diff --git a/skin/default/sysgo/gameshell/icons/sheep_body.png b/skin/default/sysgo/gameshell/icons/sheep_body.png new file mode 100644 index 0000000..148ff46 Binary files /dev/null and b/skin/default/sysgo/gameshell/icons/sheep_body.png differ diff --git a/skin/default/sysgo/gameshell/icons/sheep_head.png b/skin/default/sysgo/gameshell/icons/sheep_head.png new file mode 100644 index 0000000..615246b Binary files /dev/null and b/skin/default/sysgo/gameshell/icons/sheep_head.png differ diff --git a/skin/default/sysgo/gameshell/icons/tape.png b/skin/default/sysgo/gameshell/icons/tape.png new file mode 100644 index 0000000..f802820 Binary files /dev/null and b/skin/default/sysgo/gameshell/icons/tape.png differ diff --git a/skin/default/sysgo/gameshell/titlebar_icons/bluetooth.png b/skin/default/sysgo/gameshell/titlebar_icons/bluetooth.png new file mode 100644 index 0000000..439166b Binary files /dev/null and b/skin/default/sysgo/gameshell/titlebar_icons/bluetooth.png differ diff --git a/skin/default/sysgo/gameshell/titlebar_icons/wifi.png b/skin/default/sysgo/gameshell/titlebar_icons/wifi.png index 7384a71..bc1e2c6 100644 Binary files a/skin/default/sysgo/gameshell/titlebar_icons/wifi.png and b/skin/default/sysgo/gameshell/titlebar_icons/wifi.png differ diff --git a/sysgo/UI/UI.go b/sysgo/UI/UI.go index 6e24714..944c786 100644 --- a/sysgo/UI/UI.go +++ b/sysgo/UI/UI.go @@ -10,6 +10,31 @@ import ( "github.com/cuu/LauncherGo/sysgo" ) +type Widget struct { + PosX int + PosY int + Width int + Height int +} + +func (self *Widget) Size() (int,int) { + return self.Width,self.Height +} + +func (self *Widget) NewSize(w,h int) { + self.Width = w + self.Height = h +} + +func (self *Widget) Coord() (int,int) { + return self.PosX,self.PosY +} + +func (self *Widget) NewCoord(x,y int) { + self.PosX = x + self.PosY = y +} + func Init() { font.Init() diff --git a/sysgo/UI/icon_item.go b/sysgo/UI/icon_item.go index 7815cfd..ed0b154 100644 --- a/sysgo/UI/icon_item.go +++ b/sysgo/UI/icon_item.go @@ -37,10 +37,10 @@ type IconItemInterface interface { Coord() (int,int) NewCoord(x,y int) + Size() (int,int) + NewSize(w,h int) TotalWidth() int - Size() (int,int) - AddLabel(text string, fontobj *ttf.Font) GetLinkPage() PageInterface @@ -59,10 +59,7 @@ type IconItemInterface interface { } type IconItem struct { - PosX int - PosY int - Width int - Height int + Widget ImageName string ImgSurf *sdl.Surface Parent PageInterface diff --git a/sysgo/UI/label.go b/sysgo/UI/label.go index c7a797d..94745c8 100644 --- a/sysgo/UI/label.go +++ b/sysgo/UI/label.go @@ -16,6 +16,7 @@ type LabelInterface interface { Coord() (int,int) Size() (int,int) NewCoord(x,y int) + NewSize(w,h int) SetColor(col *color.Color ) GetText() string SetText(text string) @@ -23,10 +24,7 @@ type LabelInterface interface { } type Label struct { - PosX int - PosY int - Width int - Height int + Widget Text string FontObj *ttf.Font Color *color.Color diff --git a/sysgo/UI/list_item.go b/sysgo/UI/list_item.go new file mode 100644 index 0000000..5d54663 --- /dev/null +++ b/sysgo/UI/list_item.go @@ -0,0 +1,78 @@ +package UI + +import ( + "github.com/veandco/go-sdl2/ttf" + + "github.com/cuu/gogame/draw" + "github.com/cuu/gogame/color" + +) + +type ListItemInterface interface { + + Init(text string) + Size() (int,int) + NewSize(w,h int) + Coord() (int,int) + NewCoord(x,y int) + Draw() +} + +type ListItem struct { + Widget + Labels map[string]LabelInterface + Icons map[string]IconItemInterface + Fonts map[string]*ttf.Font + + LinkObj PluginInterface + + Parent PageInterface +} + +func NewListItem() *ListItem { + i := &ListItem{} + i.Labels = make(map[string]LabelInterface) + i.Icons = make( map[string]IconItemInterface) + i.Fonts = make(map[string]*ttf.Font) + + i.Height = 30 + i.Width = 0 + + return i +} + + +func (self *ListItem) Init(text string) { + l := NewLabel() + l.PosX = 16 + l.SetCanvasHWND(self.Parent.GetCanvasHWND()) + l.Init(text,self.Fonts["normal"],nil) + self.Labels["Text"] = l + +} + + +func (self *ListItem) Coord() (int,int) { + return self.PosX,self.PosY +} + +func (self *ListItem) Size() (int,int) { + return self.Width,self.Height +} + + + +func (self *ListItem) Draw() { + x_,_ := self.Labels["Text"].Coord() + h_,_ := self.Labels["Text"].Size() + + self.Labels["Text"].NewCoord(x_, self.PosY+(self.Height - h_)/2) + self.Labels["Text"].Draw() + + + draw.Line(self.Parent.GetCanvasHWND(),&color.Color{169,169,169,255}, + self.PosX, (self.PosY+self.Height-1), + (self.PosX+self.Width),(self.PosY+self.Height-1),1) + + +} diff --git a/sysgo/UI/multilabel.go b/sysgo/UI/multilabel.go index 4a3d9e2..e2f8271 100644 --- a/sysgo/UI/multilabel.go +++ b/sysgo/UI/multilabel.go @@ -14,10 +14,7 @@ import ( //MultiLabel is also a LabelInterface type MultiLabel struct { - PosX int - PosY int - Width int - Height int + Widget Text string FontObj *ttf.Font Color *color.Color @@ -52,19 +49,6 @@ func (self *MultiLabel) SetCanvasHWND( canvas *sdl.Surface) { self.CanvasHWND = canvas } -func (self *MultiLabel) Coord() (int,int) { - return self.PosX,self.PosY -} - -func (self *MultiLabel) Size() (int,int) { - return self.Width,self.Height -} - -func (self *MultiLabel) NewCoord(x,y int) { - self.PosX = x - self.PosY = y - -} func (self *MultiLabel) SetColor(col *color.Color){ if col != nil { diff --git a/sysgo/UI/page.go b/sysgo/UI/page.go index c908848..00f0440 100644 --- a/sysgo/UI/page.go +++ b/sysgo/UI/page.go @@ -73,20 +73,23 @@ type PageSelectorInterface interface { Adjust(x,y,w,h,alpha int) GetOnShow() bool SetOnShow(onshow bool) + + Coord() (int,int) + NewCoord(x,y int) + Size() (int,int) + NewSize(w,h int) + Draw() } type PageSelector struct { + Widget - PosX int - PosY int - Width int - Height int - Parent PageInterface Alpha int OnShow bool IconSurf *sdl.Surface + Parent PageInterface } func NewPageSelector() *PageSelector { @@ -176,8 +179,11 @@ type PageInterface interface { GetIconIndex() int Coord() (int, int) + NewCoord(x,y int) Size() (int,int) - + NewSize(w,h int) + + UpdateIconNumbers() GetIconNumbers() int @@ -188,6 +194,8 @@ type PageInterface interface { AppendIcon( it interface{} ) ClearIcons() DrawIcons() + + GetMyList() []ListItemInterface GetName() string SetName(n string) @@ -212,10 +220,7 @@ type PageInterface interface { } type Page struct { - PosX int - PosY int - Width int - Height int + Widget Icons []IconItemInterface // slice ,use append IconNumbers int IconIndex int @@ -231,6 +236,8 @@ type Page struct { CanvasHWND *sdl.Surface HWND *sdl.Surface + MyList []ListItemInterface + OnShow bool Name string Screen *MainScreen @@ -851,7 +858,9 @@ func (self *Page) DrawIcons() { } } - +func (self *Page) GetMyList() []ListItemInterface { + return self.MyList +} func (self *Page) KeyDown( ev *event.Event) { if ev.Data["Key"] == CurKeys["A"] { @@ -967,15 +976,6 @@ func (self *Page) GetIconIndex() int { } -func (self *Page) Coord() (int,int) { - return self.PosX,self.PosY -} - -func (self *Page) Size() (int,int) { - return self.Width,self.Height -} - - func (self *Page) GetName() string { return self.Name } diff --git a/sysgo/UI/scroller.go b/sysgo/UI/scroller.go index 407d02f..f4ea9fb 100644 --- a/sysgo/UI/scroller.go +++ b/sysgo/UI/scroller.go @@ -14,10 +14,7 @@ import ( ) type ListScroller struct{ - PosX int - PosY int - Width int - Height int + Widget MinHeight int Parent PageInterface Color *color.Color @@ -40,6 +37,8 @@ func NewListScroller() *ListScroller { func (self *ListScroller) Init() { //just set the CanvasHWND + cav_ := self.Parent.GetCanvasHWND() + self.SetCanvasHWND(cav_) } func (self *ListScroller) SetCanvasHWND( canvas *sdl.Surface) { diff --git a/sysgo/UI/untitled_icon.go b/sysgo/UI/untitled_icon.go index 02e6d4f..6568faa 100644 --- a/sysgo/UI/untitled_icon.go +++ b/sysgo/UI/untitled_icon.go @@ -15,11 +15,7 @@ import ( type UntitledIcon struct { - - PosX int - PosY int - Width int - Height int + Widget Words []string FontObj *ttf.Font BG *sdl.Surface