summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2005-09-23 23:36:40 +0000
committerIan C <ianc@noddybox.co.uk>2005-09-23 23:36:40 +0000
commit263cefaad986b5fe61084b486422bc618b4d1aa2 (patch)
tree54a87b38f2ca4a3b044947618c1c8f24898763f9
parent565ab31801e4868f59f727cda4c602ddbd7d5077 (diff)
Adde TPanel and simple dialog functionality to the GUI
-rw-r--r--simplegui.mod/simplegui.bmx100
1 files changed, 98 insertions, 2 deletions
diff --git a/simplegui.mod/simplegui.bmx b/simplegui.mod/simplegui.bmx
index 7b5e7ef..2d3a570 100644
--- a/simplegui.mod/simplegui.bmx
+++ b/simplegui.mod/simplegui.bmx
@@ -66,6 +66,10 @@ Type TWidget Abstract
bbdoc: The @TGUIHandler that owns this widget.
EndRem
Field owner:TGUIHandler
+ Rem
+ bbdoc: True if this widget consumes events, False otherwise.
+ EndRem
+ Field consumes:Int
Rem
bbdoc: Override this accept keypresses
@@ -143,6 +147,46 @@ Type TWidget Abstract
End Type
Rem
+bbdoc: The panel widget (simply displays itself as a white bordered black box)
+EndRem
+Type TPanel Extends TWidget
+
+ Rem
+ bbdoc: Create a TPanel widget.
+ returns: The created widget.
+ about: @gui is the @TGUIHandler object managing this wiget. @x, @y, @x and @h are its position and size. If @x or @y is -1 they are centered.
+ EndRem
+ Function Create:TPanel(gui:TGUIHandler,x:Int, y:Int, w:Int, h:Int)
+ Local o:TPanel=New TPanel
+ o.enabled=True
+ o.consumes=False
+
+ If x=-1
+ x=(GraphicsWidth()-w)/2
+ EndIf
+
+ If y=-1
+ y=(GraphicsHeight()-h)/2
+ EndIf
+
+ o.x=x
+ o.y=y
+ o.w=w
+ o.h=h
+ gui.Register(o)
+ Return o
+ End Function
+
+ Method Draw()
+ SetColor(0,0,0)
+ DrawRect(x,y,w,h)
+ SetColor(255,255,255)
+ DrawBox(x,y,w,h)
+ End Method
+
+End Type
+
+Rem
bbdoc: The label widget (simply displays the supplied string)
EndRem
Type TLabel Extends TWidget
@@ -154,6 +198,7 @@ Type TLabel Extends TWidget
Function Create:TLabel(gui:TGUIHandler,x:Int, y:Int, text:String)
Local o:TLabel=New TLabel
o.enabled=True
+ o.consumes=False
o.x=x
o.y=y
o.w=TGUIFont.font.TextWidth(text)+2
@@ -184,6 +229,7 @@ Type TText Extends TWidget
Function Create:TText(gui:TGUIHandler,x:Int, y:Int, text:String, maxlen:Int, callback(w:TWidget)=Null)
Local o:TText=New TText
o.enabled=True
+ o.consumes=True
o.x=x
o.y=y
o.maxlen=maxlen
@@ -249,6 +295,7 @@ Type TCheckbox Extends TWidget
Function Create:TCheckbox(gui:TGUIHandler, x:Int, y:Int, text:String, callback(w:TWidget)=Null)
Local o:TCheckbox=New TCheckbox
o.enabled=True
+ o.consumes=True
o.x=x
o.y=y
o.w=TGUIFont.font.TextWidth(" "+text)+4+TGUIFont.font.MaxHeight()
@@ -302,6 +349,7 @@ Type TButton Extends TWidget
Function Create:TButton(gui:TGUIHandler, x:Int, y:Int, w:Int, h:Int, text:String, callback(w:TWidget))
Local o:TButton=New TButton
o.enabled=True
+ o.consumes=True
o.x=x
o.y=y
o.w=w
@@ -354,6 +402,7 @@ Type TButtonList Extends TWidget
Local o:TButtonList=New TButtonList
Local maxw:Int=0
o.enabled=True
+ o.consumes=True
o.x=x
o.y=y
o.options=options
@@ -431,6 +480,7 @@ Type TNumberFloat Extends TWidget
Function Create:TNumberFloat(gui:TGUIHandler, x:Int, y:Int, callback(w:TWidget)=Null)
Local o:TNumberFloat=New TNumberFloat
o.enabled=True
+ o.consumes=True
o.value=0
o.minval=0
o.maxval=100
@@ -517,6 +567,7 @@ Type TNumberInt Extends TWidget
Function Create:TNumberInt(gui:TGUIHandler, x:Int, y:Int, callback(w:TWidget)=Null)
Local o:TNumberInt=New TNumberInt
o.enabled=True
+ o.consumes=True
o.value=0
o.minval=0
o.maxval=100
@@ -683,7 +734,7 @@ Type TGUIHandler
Local k:Int=GetChar()
- If k<>0 And m_focus<>Null And m_focus.enabled
+ If k<>0 And m_focus<>Null And m_focus.enabled And m_focus.consumes
m_focus.HandleKey(k)
EndIf
End Method
@@ -692,7 +743,7 @@ Type TGUIHandler
'
Method LocateWidget:TWidget(x:Int,y:Int)
For Local w:TWidget=EachIn m_widgets
- If x>=w.x And y>=w.y And x<w.x+w.w And y<w.y+w.h
+ If x>=w.x And y>=w.y And x<w.x+w.w And y<w.y+w.h And w.consumes
Return w
EndIf
Next
@@ -738,6 +789,7 @@ Function GUINotify(s:String, i:TImage=Null)
click=gui.Clicked()
If i<>Null
+ SetColor(255,255,255)
DrawImage(i,MouseX(),MouseY())
EndIf
@@ -785,6 +837,7 @@ Function GUIYesNo:Int(s:String, i:TImage=Null)
click=gui.Clicked()
If i<>Null
+ SetColor(255,255,255)
DrawImage(i,MouseX(),MouseY())
EndIf
@@ -835,6 +888,7 @@ Function GUIMenu(title:String, options:String[], x:Int, y:Int, i:TImage=Null)
click=gui.Clicked()
If i<>Null
+ SetColor(255,255,255)
DrawImage(i,MouseX(),MouseY())
EndIf
@@ -851,6 +905,48 @@ Function GUIMenu(title:String, options:String[], x:Int, y:Int, i:TImage=Null)
Return -1
End Function
+Rem
+bbdoc: Handles a TGUIHandler as if it's a modal dialog.
+returns: True if @ok is pressed, False if @cancel or the ESCAPE key is pressed.
+about: @gui is the GUI handler and widgets to display as a dialog., @ok is the clickable widget that OK's the dialog, @cancel the widget that cancels it.
+about: If @i is not null then this image is drawn as a mouse cursor.
+EndRem
+Function GUIDialog(gui:TGUIHandler, ok:TWidget, cancel:TWidget, i:TImage=Null)
+ Local back:TImage=CreateImage(GraphicsWidth(),GraphicsHeight(),1,0)
+ GrabImage(back,0,0)
+
+ Local done:Int=False
+ Local ok_pressed:Int
+ Local click:TWidget
+
+ While done=False
+ Cls
+ DrawImage(back,0,0)
+ gui.EventLoop()
+ click=gui.Clicked()
+
+ If click=ok
+ done=True
+ ok_pressed=True
+ EndIf
+
+ If click=cancel Or KeyHit(KEY_ESCAPE)
+ done=True
+ ok_pressed=False
+ EndIf
+
+ If i<>Null
+ SetColor(255,255,255)
+ DrawImage(i,MouseX(),MouseY())
+ EndIf
+
+ Flip
+ FlushMem
+ Wend
+
+ Return ok_pressed
+End Function
+
Private
Type TSplitText