diff options
-rw-r--r-- | mwidget.mod/.cvsignore | 6 | ||||
-rw-r--r-- | mwidget.mod/mwidget.bmx | 1357 |
2 files changed, 1363 insertions, 0 deletions
diff --git a/mwidget.mod/.cvsignore b/mwidget.mod/.cvsignore new file mode 100644 index 0000000..c7027e3 --- /dev/null +++ b/mwidget.mod/.cvsignore @@ -0,0 +1,6 @@ +mwidget.release.win32.i
+mwidget.debug.win32.a
+mwidget.debug.win32.i
+mwidget.release.win32.a
+.bmx
+doc
diff --git a/mwidget.mod/mwidget.bmx b/mwidget.mod/mwidget.bmx new file mode 100644 index 0000000..139de6d --- /dev/null +++ b/mwidget.mod/mwidget.bmx @@ -0,0 +1,1357 @@ +Rem
+bbdoc: noddybox.mwidget
+about: Provides a simply class based interface to the MaxGUI. Note that all widgets have create type methods. For thes to work correctly with
+sub-classes they must be called through a new operation, e.g.
+<pre>
+Type MyApp Extends TMWindow
+ Method OnClose(e:TEvent)
+ closed=Confirm("Really quit?")
+ End Method
+End Type
+
+Local window:TMWindow=New MyApp.Create("Test",100,100,640,400)
+</pre>
+EndRem
+Module noddybox.mwidget
+
+ModuleInfo "Framework: Simple Managed Widget Classes"
+ModuleInfo "Copyright: Public Domain"
+ModuleInfo "Author: Ian Cowburn"
+ModuleInfo "Version: $Revision$"
+
+' $Id$
+
+Strict
+Import brl.maxgui
+Import brl.linkedlist
+Import brl.event
+Import brl.timer
+
+Rem
+bbdoc: Defines a base managed widget type.
+EndRem
+Type TMWidget Abstract
+
+ Rem
+ bbdoc: The underlying BlitzMAX GUI Gadget
+ EndRem
+ Field gadget:TGadget
+
+ Rem
+ bbdoc: The parent of this managed widget
+ EndRem
+ Field parent:TMWidget
+
+ Rem
+ bbdoc: Children of this managed widget
+ EndRem
+ Field children:TList
+
+ Field typename:String
+ Field timer:TTimer
+
+ Method Delete()
+ FreeGadget(gadget)
+ End Method
+
+ Rem
+ bbdoc: Handles an event.
+ about: Sub-classes will generally override this to handle events directed at themselves.
+ If the event is unhandled then the event should be passed up to the parent type. @e holds the TEvent.
+ EndRem
+ Method Handle(e:TEvent)
+ Select e.id
+ Case EVENT_MOUSEENTER
+ OnMouseEnter(e)
+ Case EVENT_MOUSELEAVE
+ OnMouseEnter(e)
+ Case EVENT_TIMERTICK
+ OnTimer()
+ End Select
+ End Method
+
+ Rem
+ bbdoc: Enables/disables a widget.
+ EndRem
+ Method Enabled(state:Int)
+ If state
+ EnableGadget(gadget)
+ Else
+ DisableGadget(gadget)
+ EndIf
+ End Method
+
+ Rem
+ bbdoc: Is widget enabled.
+ returns: TRUE if enabled.
+ EndRem
+ Method IsEnabled:Int()
+ Return Not GadgetDisabled(gadget)
+ End Method
+
+ Rem
+ bbdoc: Hide/show the widget.
+ EndRem
+ Method Hidden(state:Int)
+ If state
+ HideGadget(gadget)
+ Else
+ ShowGadget(gadget)
+ EndIf
+ End Method
+
+ Rem
+ bbdoc: Is widget hidden.
+ returns: TRUE if hidden.
+ EndRem
+ Method IsHidden:Int()
+ Return GadgetHidden(gadget)
+ End Method
+
+ Rem
+ bbdoc: The widget's position.
+ returns: The widget's X co-ordinate.
+ EndRem
+ Method X:Int()
+ Return GadgetX(gadget)
+ End Method
+
+ Rem
+ bbdoc: The widget's position.
+ returns: The widget's Y co-ordinate.
+ EndRem
+ Method Y:Int()
+ Return GadgetY(gadget)
+ End Method
+
+ Rem
+ bbdoc: The widget's size.
+ returns: The widget's width.
+ EndRem
+ Method Width:Int()
+ Return GadgetWidth(gadget)
+ End Method
+
+ Rem
+ bbdoc: The widget's size.
+ returns: The widget's height.
+ EndRem
+ Method Height:Int()
+ Return GadgetHeight(gadget)
+ End Method
+
+ Rem
+ bbdoc: The widget's client size.
+ returns: The widget's client width.
+ EndRem
+ Method Client_Width:Int()
+ Return ClientWidth(gadget)
+ End Method
+
+ Rem
+ bbdoc: The widget's client size.
+ returns: The widget's client height.
+ EndRem
+ Method Client_Height:Int()
+ Return ClientHeight(gadget)
+ End Method
+
+ Rem
+ bbdoc: Set the widget's font.
+ EndRem
+ Method Font(font:TGUIFont)
+ SetGadgetFont(gadget,font)
+ End Method
+
+ Rem
+ bbdoc: Set the widgets's layout. See Max GUIs SetGadgetLayout() for details.
+ EndRem
+ Method Layout(Left:Int, Right:Int, top:Int, bottom:Int)
+ SetGadgetLayout(gadget,Left,Right,top,bottom)
+ End Method
+
+ Rem
+ bbdoc: Set the widget's position and size.
+ EndRem
+ Method SetShape(x:Int, y:Int, width:Int, height:Int)
+ SetGadgetShape(gadget,x,y,width,height)
+ End Method
+
+ Rem
+ bbdoc: Set the widgets's alpha.
+ EndRem
+ Method Alpha(a:Double)
+ SetGadgetAlpha(gadget,a)
+ End Method
+
+ Rem
+ bbdoc: Set the widgets's text colour.
+ EndRem
+ Method TextColour(r:Int, g:Int, b:Int)
+ SetGadgetTextColor(gadget,r,g,b)
+ End Method
+
+ Rem
+ bbdoc: Set the widgets's background colour.
+ EndRem
+ Method BackColour(r:Int, g:Int, b:Int)
+ SetGadgetColor(gadget,r,g,b)
+ End Method
+
+ Rem
+ bbdoc: Set the widgets's text.
+ EndRem
+ Method Text(s:String)
+ SetGadgetText(gadget,s)
+ End Method
+
+ Rem
+ bbdoc: Print the widget
+ EndRem
+ Method Print()
+ GadgetPrint(gadget)
+ End Method
+
+ Rem
+ bbdoc: Perform a cut on the widget
+ EndRem
+ Method Cut()
+ GadgetCut(gadget)
+ End Method
+
+ Rem
+ bbdoc: Perform a copy on the widget
+ EndRem
+ Method Copy()
+ GadgetCopy(gadget)
+ End Method
+
+ Rem
+ bbdoc: Perform a paste on the widget
+ EndRem
+ Method Paste()
+ GadgetPaste(gadget)
+ End Method
+
+ Rem
+ bbdoc: Allocates a timer for this widget.
+ about: Create a Blitz MAX TTimer that is fired @hertz times a second. When the timer pulses then @OnTimer() is called.
+ If this routine is called when a timer is already active, then the timer is re-initialised with the passed hertz.
+ EndRem
+ Method SetTimer(hertz:Double)
+ ClearTimer()
+ timer=CreateTimer(hertz,CreateEvent(EVENT_TIMERTICK,gadget))
+ End Method
+
+ Rem
+ bbdoc: Clears timer previously activated by @SetTimer().
+ EndRem
+ Method ClearTimer()
+ If timer
+ StopTimer(timer)
+ EndIf
+ timer=Null
+ End Method
+
+ Rem
+ bbdoc: Called when the widget's timer fires.
+ EndRem
+ Method OnTimer()
+ End Method
+
+ Rem
+ bbdoc: Called when the widget is managed.
+ EndRem
+ Method OnManage()
+ End Method
+
+ Rem
+ bbdoc: Called when the widget is unmanaged.
+ EndRem
+ Method OnUnmanage()
+ End Method
+
+ Rem
+ bbdoc: Called when the mouse enters.
+ EndRem
+ Method OnMouseEnter(e:TEvent)
+ End Method
+
+ Rem
+ bbdoc: Called when the mouse leaves.
+ EndRem
+ Method OnMouseLeave(e:TEvent)
+ End Method
+
+ Rem
+ bbdoc: Fires an event at this managed widget.
+ about: The arguments are the same as @CreateEvent(), but not source is passed in.
+ EndRem
+ Method Emit(id:Int, data:Int=0, mods:Int=0, x:Int=0, y:Int=0,extra:Object=Null)
+ EmitEvent(CreateEvent(id,gadget,data,mods,x,y,extra))
+ End Method
+
+ Rem
+ bbdoc: Initialises the base managed widget stuff.
+ about: All sub-classes must call this! @gadget is the created TGadget for this instance,
+ and @parent is the parent managed widget (NULL for none).
+ EndRem
+ Method BaseInitialise(gadget:TGadget, parent:TMWidget)
+ self.children=CreateList()
+ self.gadget=gadget
+ self.parent=parent
+
+ If self.parent
+ self.parent.children.AddLast(Self)
+ EndIf
+
+ Static.Register(Self)
+ End Method
+
+ Rem
+ bbdoc: Removes the managed widget from the internal lists.
+ about: All child objects will also be unmanaged.
+ EndRem
+ Method Unmanage()
+ Static.Deregister(Self)
+ End Method
+
+ Method ToString:String()
+ Return typename+":"+super.ToString()
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a managed window.
+EndRem
+Type TMWindow Extends TMWidget
+
+ Rem
+ bbdoc: Creates a managed window.
+ returns: The created window.
+ about: @name, @x, @y, @w, @h, @group and @flags act the same as the MaxGUI arguments to @CreateWindow(), except that @group is a TMWidget.
+ EndRem
+ Method Create:TMWindow(name:String, x:Int,y:Int, w:Int, h:Int, group:TMWidget=Null, flags:Int=15)
+ closed=False
+
+ Local g:TGadget
+
+ If group
+ g=CreateWindow(name,x,y,w,h,group.gadget,flags)
+ Else
+ g=CreateWindow(name,x,y,w,h,Null,flags)
+ EndIf
+
+ BaseInitialise(g,group)
+ typename="TMWindow"
+ Return Self
+ End Method
+
+ Rem
+ bbdoc: Set to TRUE when the window is closed (the user has pressed the close gadget).
+ EndRem
+ Field closed:Int
+
+ Rem
+ bbdoc: Send a close event to this window.
+ EndRem
+ Method Close()
+ Emit(EVENT_WINDOWCLOSE)
+ End Method
+
+ Rem
+ bbdoc: Hide to show the window.
+ about: Note that this sets the @closed field to the @state passed in.
+ EndRem
+ Method Hidden(state:Int)
+ closed=state
+ super.Hidden(state)
+ End Method
+
+ Rem
+ bbdoc: Set the window's status text.
+ EndRem
+ Method StatusText(text:String)
+ SetStatusText(gadget,text)
+ End Method
+
+ Rem
+ bbdoc: Set the window's minimum size.
+ EndRem
+ Method MinSize(width:Int, height:Int)
+ Return SetMinWindowSize(gadget,width,height)
+ End Method
+
+ Rem
+ bbdoc: Restore a minimizwed or maximized window.
+ EndRem
+ Method Restore()
+ Return RestoreWindow(gadget)
+ End Method
+
+ Rem
+ bbdoc: Maximize the window.
+ EndRem
+ Method Maximize()
+ Return MaximizeWindow(gadget)
+ End Method
+
+ Rem
+ bbdoc: Is the window maximized?
+ returns:TRUE if the window is maximized
+ EndRem
+ Method IsMaximized()
+ Return WindowMaximized(gadget)
+ End Method
+
+ Rem
+ bbdoc: Minimize the window.
+ EndRem
+ Method Minimize()
+ Return MinimizeWindow(gadget)
+ End Method
+
+ Rem
+ bbdoc: Is the window minimized?
+ returns:TRUE if the window is minimized
+ EndRem
+ Method IsMinimized()
+ Return WindowMinimized(gadget)
+ End Method
+
+ Rem
+ bbdoc: Called when the window is moved.
+ EndRem
+ Method OnMove(e:TEvent)
+ End Method
+
+ Rem
+ bbdoc: Called when the window is resized.
+ EndRem
+ Method OnResize(e:TEvent)
+ End Method
+
+ Rem
+ bbdoc: Called when the window's close gadget is pressed.
+ EndRem
+ Method OnClose(e:TEvent)
+ closed=True
+ Hidden(True)
+ End Method
+
+ Method Handle(e:TEvent)
+ Select e.id
+ Case EVENT_WINDOWMOVE
+ OnMove(e)
+ Case EVENT_WINDOWSIZE
+ OnResize(e)
+ Case EVENT_WINDOWCLOSE
+ OnClose(e)
+ Default
+ super.Handle(e)
+ End Select
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a managed menu.
+EndRem
+Type TMMenu Extends TMWidget
+
+ Rem
+ bbdoc: Creates a managed menu.
+ returns: The created button.
+ about: @label, @tag, @group, @hotkey and @modifier act the same as the MaxGUI arguments to @CreateMenu(), except that @group is a TMWidget.
+ EndRem
+ Method Create:TMMenu(label:String, tag:Int, group:TMWidget, hotkey:Int=0, modifier:Int=0)
+ BaseInitialise(CreateMenu(label,tag,group.gadget,hotkey,modifier),group)
+ typename="TMMenu"
+ Return Self
+ End Method
+
+ Method Delete()
+ FreeMenu(gadget)
+ End Method
+
+ Rem
+ bbdoc: Called when the button is pressed.
+ EndRem
+ Method OnPress(e:TEvent)
+ End Method
+
+ Method Handle(e:TEvent)
+ Select e.id
+ Case EVENT_GADGETACTION
+ OnPress(e)
+ Default
+ super.Handle(e)
+ End Select
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a managed button push button.
+EndRem
+Type TMButton Extends TMWidget
+
+ Rem
+ bbdoc: Creates a managed push button.
+ returns: The created button.
+ about: @label, @x, @y, @w, @h, and @group act the same as the MaxGUI arguments to @CreateButton(), except that @group is a TMWidget.
+ EndRem
+ Method Create:TMButton(label:String, x:Int,y:Int, w:Int, h:Int, group:TMWidget)
+ BaseInitialise(CreateButton(label,x,y,w,h,group.gadget,BUTTON_PUSH),group)
+ typename="TMButton"
+ Return Self
+ End Method
+
+ Rem
+ bbdoc: Creates a managed push button used for an OK button
+ returns: The created button.
+ about: @label, @x, @y, @w, @h, and @group act the same as the MaxGUI arguments to @CreateButton(), except that @group is a TMWidget.
+ EndRem
+ Method CreateOK:TMButton(label:String, x:Int,y:Int, w:Int, h:Int, group:TMWidget)
+ BaseInitialise(CreateButton(label,x,y,w,h,group.gadget,BUTTON_OK),group)
+ typename="TMButton"
+ Return Self
+ End Method
+
+ Rem
+ bbdoc: Creates a managed push button used for a Cancel button
+ returns: The created button.
+ about: @label, @x, @y, @w, @h, and @group act the same as the MaxGUI arguments to @CreateButton(), except that @group is a TMWidget.
+ EndRem
+ Method CreateCancel:TMButton(label:String, x:Int,y:Int, w:Int, h:Int, group:TMWidget)
+ BaseInitialise(CreateButton(label,x,y,w,h,group.gadget,BUTTON_OK),group)
+ typename="TMButton"
+ Return Self
+ End Method
+
+ Rem
+ bbdoc: Called when the button is pressed.
+ EndRem
+ Method OnPress(e:TEvent)
+ End Method
+
+ Method Handle(e:TEvent)
+ Select e.id
+ Case EVENT_GADGETACTION
+ OnPress(e)
+ Default
+ super.Handle(e)
+ End Select
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a managed checkbox.
+EndRem
+Type TMCheckbox Extends TMWidget
+ Rem
+ bbdoc: Creates a managed checkbox.
+ returns: The created checkbox.
+ about: @label, @x, @y, @w, @h, and @group act the same as the MaxGUI arguments to @CreateButton(), except that @group is a TMWidget.
+ EndRem
+ Method Create:TMCheckbox(label:String, x:Int,y:Int, w:Int, h:Int, group:TMWidget)
+ BaseInitialise(CreateButton(label,x,y,w,h,group.gadget,BUTTON_CHECKBOX),group)
+ typename="TMCheckbox"
+ Return Self
+ End Method
+
+ Rem
+ bbdoc: Sets the state of the check.
+ EndRem
+ Method Checked(check:Int)
+ SetButtonState(gadget,check)
+ End Method
+
+ Rem
+ bbdoc: Is the checkbox checked?
+ returns:TRUE if the checkbox is checked.
+ EndRem
+ Method IsChecked()
+ Return ButtonState(gadget)
+ End Method
+
+ Rem
+ bbdoc: Called when the checkbox is pressed.
+ EndRem
+ Method OnPress(e:TEvent)
+ End Method
+
+ Method Handle(e:TEvent)
+ Select e.id
+ Case EVENT_GADGETACTION
+ OnPress(e)
+ Default
+ super.Handle(e)
+ End Select
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a managed radio button.
+EndRem
+Type TMRadioButton Extends TMCheckbox
+ Rem
+ bbdoc: Creates a managed radio button.
+ returns: The created radio button.
+ about: @label, @x, @y, @w, @h, and @group act the same as the MaxGUI arguments to @CreateButton(), except that @group is a TMWidget.
+ EndRem
+ Method Create:TMRadioButton(label:String, x:Int,y:Int, w:Int, h:Int, group:TMWidget)
+ BaseInitialise(CreateButton(label,x,y,w,h,group.gadget,BUTTON_RADIO),group)
+ typename="TMRadioButton"
+ Return Self
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a set of managed radio button.
+EndRem
+Type TMRadioButtonSet
+ Field but:TMRadioButton[]
+
+ Rem
+ bbdoc: Creates a set of managed radio buttons.
+ returns: The created set.
+ about: The radio buttons must have been created prior to calling this.
+ EndRem
+ Method Create:TMRadioButtonSet(buttons:TMRadioButton[])
+ but=buttons
+ Return Self
+ End Method
+
+ Rem
+ bbdoc: Sets the active radio button.
+ about: @index is the index of the button to set.
+ EndRem
+ Method Set(index:Int)
+ but[index].Checked(True)
+ End Method
+
+ Rem
+ bbdoc: Get the active radio button.
+ returns: The index of the button set. -1 if no button is set.
+ EndRem
+ Method Current()
+ For Local f:Int=0 Until but.length
+ If but[f].IsChecked()
+ Return f
+ EndIf
+ Next
+ Return -1
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a managed label.
+EndRem
+Type TMLabel Extends TMWidget
+
+ Rem
+ bbdoc: Creates a managed label.
+ returns: The created label.
+ about: @label, @x, @y, @w, @h, @group and @style act the same as the MaxGUI arguments to @CreateLabel(), except that @group is a TMWidget.
+ EndRem
+ Method Create:TMLabel(label:String, x:Int,y:Int, w:Int, h:Int, group:TMWidget, style:Int=0)
+ BaseInitialise(CreateLabel(label,x,y,w,h,group.gadget,style),group)
+ typename="TMLabel"
+ Return Self
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a managed text field.
+EndRem
+Type TMTextField Extends TMWidget
+ Rem
+ bbdoc: Creates a managed text field.
+ returns: The created text field.
+ about: @x, @y, @w, @h, and @group act the same as the MaxGUI arguments to @CreateTextField(), except that @group is a TMWidget.
+ EndRem
+ Method Create:TMTextField(x:Int,y:Int, w:Int, h:Int, group:TMWidget)
+ BaseInitialise(CreateTextField(x,y,w,h,group.gadget),group)
+ typename="TMTextField"
+ Return Self
+ End Method
+
+ Rem
+ bbdoc: Creates a managed text field for entering passwords.
+ returns: The created text field.
+ about: @x, @y, @w, @h, and @group act the same as the MaxGUI arguments to @CreateTextField(), except that @group is a TMWidget.
+ EndRem
+ Method CreateSecret:TMTextField(x:Int,y:Int, w:Int, h:Int, group:TMWidget)
+ BaseInitialise(CreateTextField(x,y,w,h,group.gadget,TEXTFIELD_PASSWORD),group)
+ typename="TMTextField"
+ Return Self
+ End Method
+
+ Rem
+ bbdoc: The field's text.
+ returns:The text.
+ EndRem
+ Method GetText:String()
+ Return TextFieldText(gadget)
+ End Method
+
+ Rem
+ bbdoc: Called when a character is entered into the field.
+ EndRem
+ Method OnKey(e:TEvent)
+ End Method
+
+ Method Handle(e:TEvent)
+ Select e.id
+ Case EVENT_GADGETACTION
+ OnKey(e)
+ Default
+ super.Handle(e)
+ End Select
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a managed text area.
+EndRem
+Type TMTextArea Extends TMWidget
+ Rem
+ bbdoc: Creates a managed text area.
+ returns: The created text area.
+ about: @x, @y, @w, @h,, @group and @style act the same as the MaxGUI arguments to @CreateTextArea(), except that @group is a TMWidget.
+ EndRem
+ Method Create:TMTextArea(x:Int, y:Int, w:Int, h:Int, group:TMWidget, style:Int=0)
+ BaseInitialise(CreateTextArea(x,y,w,h,group.gadget,style),group)
+ typename="TMTextArea"
+ Return Self
+ End Method
+
+ Rem
+ bbdoc: The text area's text.
+ returns:The text.
+ EndRem
+ Method GetText:String(pos:Int=0, length:Int=TEXTAREA_ALL, units:Int=TEXTAREA_CHARS)
+ Return TextAreaText(gadget,pos,length,units)
+ End Method
+
+ Rem
+ bbdoc: Set the widget's font.
+ EndRem
+ Method Font(font:TGUIFont)
+ SetTextAreaFont(gadget,font)
+ End Method
+
+ Rem
+ bbdoc: Set the widgets's text colour.
+ EndRem
+ Method TextColour(r:Int, g:Int, b:Int)
+ SetTextAreaColor(gadget,r,g,b,False)
+ End Method
+
+ Rem
+ bbdoc: Set the widgets's background colour.
+ EndRem
+ Method BackColour(r:Int, g:Int, b:Int)
+ SetTextAreaColor(gadget,r,g,b,True)
+ End Method
+
+ Rem
+ bbdoc: Set the widgets's text.
+ EndRem
+ Method Text(s:String)
+ SetText(s)
+ End Method
+
+ Rem
+ bbdoc: Set the widgets's text (see the MaxGUI docs for argument details)
+ EndRem
+ Method SetText(s:String, pos:Int=0, length:Int=TEXTAREA_ALL, units:Int=TEXTAREA_CHARS)
+ SetTextAreaText(gadget,s,pos,length,units)
+ End Method
+
+ Rem
+ bbdoc: Set the text area's tab size
+ EndRem
+ Method SetTabSize(size:Int)
+ SetTextAreaTabs(gadget,size)
+ End Method
+
+ Rem
+ bbdoc: Get the character position of the specified line.
+ EndRem
+ Method GetCharPos:Int(line:Int)
+ Return TextAreaChar(gadget,line)
+ End Method
+
+ Rem
+ bbdoc: Get the cursor's column.
+ EndRem
+ Method GetCursorColumn:Int()
+ Return TextAreaCursor(gadget,TEXTAREA_CHARS)
+ End Method
+
+ Rem
+ bbdoc: Get the cursor's row.
+ EndRem
+ Method GetCursorRow:Int()
+ Return TextAreaCursor(gadget,TEXTAREA_LINES)
+ End Method
+
+ Rem
+ bbdoc: Get the text length.
+ EndRem
+ Method GetLength:Int()
+ Return TextAreaLen(gadget)
+ End Method
+
+ Rem
+ bbdoc: Get the selected texts length.
+ EndRem
+ Method GetSelectionLength:Int()
+ Return TextAreaSelLen(gadget,TEXTAREA_CHARS)
+ End Method
+
+ Rem
+ bbdoc: Get the number of selected rows.
+ EndRem
+ Method GetSelectionRows:Int()
+ Return TextAreaSelLen(gadget,TEXTAREA_LINES)
+ End Method
+
+ Rem
+ bbdoc: Lock the text area.
+ EndRem
+ Method Lock()
+ Return LockTextArea(gadget)
+ End Method
+
+ Rem
+ bbdoc: Unlock the text area.
+ EndRem
+ Method Unlock()
+ Return UnlockTextArea(gadget)
+ End Method
+
+ Rem
+ bbdoc: Set the format. See the MaxGUI docs for details.
+ EndRem
+ Method Format(r:Int, g:Int, b:Int, flags:Int, pos:Int=0, length:Int=TEXTAREA_ALL, units:Int=TEXTAREA_CHARS )
+ FormatTextAreaText(gadget,r,g,b,flags,pos,length,units)
+ End Method
+
+ Rem
+ bbdoc: Called when a character is entered into the text.
+ EndRem
+ Method OnKey(e:TEvent)
+ End Method
+
+ Rem
+ bbdoc: Called when the selection or cursor changes.
+ EndRem
+ Method OnSelection(e:TEvent)
+ End Method
+
+ Rem
+ bbdoc: Called when the context menu is requested.
+ EndRem
+ Method OnMenu(e:TEvent)
+ End Method
+
+ Method Handle(e:TEvent)
+ Select e.id
+ Case EVENT_GADGETACTION
+ OnKey(e)
+ Case EVENT_GADGETSELECT
+ OnSelection(e)
+ Case EVENT_GADGETMENU
+ OnMenu(e)
+ Default
+ super.Handle(e)
+ End Select
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a managed slider.
+EndRem
+Type TMSlider Extends TMWidget
+ Rem
+ bbdoc: Creates a managed slider.
+ returns: The created slider.
+ about: @x, @y, @w, @h, @group and @style act the same as the MaxGUI arguments to @CreateSlider(), except that @group is a TMWidget.
+ EndRem
+ Method Create:TMSlider(x:Int, y:Int, w:Int, h:Int, group:TMWidget, style:Int=0)
+ BaseInitialise(CreateSlider(x,y,w,h,group.gadget,style),group)
+ typename="TMSlider"
+ Return Self
+ End Method
+
+ Rem
+ bbdoc: Set the sliders's min/max values.
+ about: See the MaxGUI docs for how this affects scrollbar style sliders.
+ EndRem
+ Method SetRange(range0:Int,range1:Int)
+ Return SetSliderRange(gadget,range0,range1)
+ End Method
+
+ Rem
+ bbdoc: Set the sliders's value.
+ EndRem
+ Method SetValue(value:Int)
+ Return SetSliderValue(gadget,value)
+ End Method
+
+ Rem
+ bbdoc: The sliders's value.
+ returns:The value.
+ EndRem
+ Method GetValue:Int()
+ Return SliderValue(gadget)
+ End Method
+
+ Rem
+ bbdoc: Called when the slider moves.
+ EndRem
+ Method OnValueChanged(e:TEvent)
+ End Method
+
+ Method Handle(e:TEvent)
+ Select e.id
+ Case EVENT_GADGETACTION
+ OnValueChanged(e)
+ Default
+ super.Handle(e)
+ End Select
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines an entry in a list style gadget.
+about: Always use @CreateListEntry() to create this object.
+EndRem
+Type TMListEntry
+ Rem
+ bbdoc: The text associated with a list entry.
+ EndRem
+ Field text:String
+ Rem
+ bbdoc: The flags associated with a list entry.
+ EndRem
+ Field flags:Int
+ Rem
+ bbdoc: The icon associated with a list entry.
+ EndRem
+ Field icon:Int
+ Rem
+ bbdoc: The tooltip associated with a list entry.
+ EndRem
+ Field tip:String
+ Rem
+ bbdoc: The extra object associated with a list entry.
+ EndRem
+ Field extra:Object
+
+ Function Create:TMListEntry(text:String,flags:Int,icon:Int,tip:String,extra:Object)
+ Local o:TMListEntry=New TMListEntry
+ o.text=text
+ o.flags=flags
+ o.icon=icon
+ o.tip=tip
+ o.extra=extra
+ Return o
+ End Function
+End Type
+
+
+Rem
+bbdoc: Creates a list entry.
+returns: The list entry.
+about: @text, @flags, @icon, @tip and @extra are the fields detailed in MaxGUI @AddGadgetItem().
+EndRem
+Function CreateListEntry:TMListEntry(text:String,flags:Int=0,icon:Int=-1,tip:String="",extra:Object=Null)
+ Return TMListEntry.Create(text,flags,icon,tip,extra)
+End Function
+
+
+Rem
+bbdoc: Defines a base for list style gadgets.
+EndRem
+Type TMListWidget Extends TMWidget Abstract
+ Rem
+ bbdoc: Removes all items from the list.
+ EndRem
+ Method Clear()
+ ClearGadgetItems(gadget)
+ End Method
+
+ Rem
+ bbdoc: Adds an item to the list.
+ EndRem
+ Method AddItem(entry:TMListEntry)
+ AddGadgetItem(gadget,entry.text,entry.flags,entry.icon,entry.tip,entry.extra)
+ End Method
+
+ Rem
+ bbdoc: Adds items to the list.
+ EndRem
+ Method AddItems(entry:TMListEntry[])
+ For Local f:Int=0 Until entry.length
+ AddItem(entry[f])
+ Next
+ End Method
+
+ Rem
+ bbdoc: Modify an item in the list.
+ EndRem
+ Method ModifyItem(index:Int, entry:TMListEntry)
+ ModifyGadgetItem(gadget,index,entry.text,entry.flags,entry.icon,entry.tip,entry.extra)
+ End Method
+
+ Rem
+ bbdoc: Set an icon strip for the list.
+ EndRem
+ Method SetIconStrip(icons:TIconStrip)
+ SetGadgetIconStrip(gadget,icons)
+ End Method
+
+ Rem
+ bbdoc: Get an item from the list.
+ about: Note that the @tip field is not set on return
+ EndRem
+ Method GetItem:TMListEntry(index:Int)
+ Return CreateListEntry(GadgetItemText(gadget,index), ..
+ GadgetItemFlags(gadget,index), ..
+ GadgetItemIcon(gadget,index), ..
+ "", ..
+ GadgetItemExtra(gadget,index))
+ End Method
+
+ Rem
+ bbdoc: Enable or disable a particular item.
+ EndRem
+ Method ItemEnabled(index:Int, state:Int)
+ If state
+ EnableGadgetItem(gadget,index)
+ Else
+ DisableGadgetItem(gadget,index)
+ EndIf
+ End Method
+
+ Rem
+ bbdoc: Set the currently selected item.
+ EndRem
+ Method SetSelectedIndex(index:Int)
+ SelectGadgetItem(gadget,index)
+ End Method
+
+ Rem
+ bbdoc: Get the index of the first selected item.
+ EndRem
+ Method SelectedIndex:Int()
+ Return SelectedGadgetItem(gadget)
+ End Method
+
+ Rem
+ bbdoc: Get the indexes of the selected items.
+ EndRem
+ Method SelectedIndexes:Int[]()
+ Return SelectedGadgetItems(gadget)
+ End Method
+
+ Rem
+ bbdoc: Get the first selected item, NULL if nothing selected.
+ EndRem
+ Method SelectedItem:TMListEntry()
+ If SelectedIndex()=-1
+ Return Null
+ EndIf
+
+ Return GetItem(SelectedIndex())
+ End Method
+
+ Rem
+ bbdoc: Get the selected items, NULL if nothing selected.
+ EndRem
+ Method SelectedItems:TMListEntry[]()
+ If SelectedIndex()=-1
+ Return Null
+ EndIf
+
+ Local sel:Int[]=SelectedIndexes()
+ Local ret:TMListEntry[]=New TMListEntry[sel.length]
+
+ For Local f:Int=0 Until sel.length
+ ret[f]=GetItem(sel[f])
+ Next
+ Return ret
+ End Method
+
+ Rem
+ bbdoc: Called when the selection changes.
+ EndRem
+ Method OnIndexChanged(e:TEvent)
+ End Method
+
+ Method Handle(e:TEvent)
+ Select e.id
+ Case EVENT_GADGETACTION
+ OnIndexChanged(e)
+ Default
+ super.Handle(e)
+ End Select
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a managed combo box.
+EndRem
+Type TMComboBox Extends TMListWidget
+ Rem
+ bbdoc: Creates a managed combo box.
+ returns: The created combo box.
+ about: @x, @y, @w, @h, @group and @style act the same as the MaxGUI arguments to @CreateComboBox(), except that @group is a TMWidget.
+ If @values is not NULL it is used to load up the initial options.
+ <b>IMPORTANT</b>: It is really not recommended to use COMBOBOX_EDITABLE as OnIndexChanged() is called when the user edits the field.
+ There seems to be no easy way to remedy this.
+ EndRem
+ Method Create:TMComboBox(x:Int,y:Int, w:Int, h:Int, group:TMWidget, style:Int=0, values:TMListEntry[]=Null)
+ BaseInitialise(CreateComboBox(x,y,w,h,group.gadget,style),group)
+ typename="TMComboBox"
+ If values
+ AddItems(values)
+ EndIf
+ Return Self
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a managed list box.
+EndRem
+Type TMListBox Extends TMListWidget
+ Rem
+ bbdoc: Creates a managed list box.
+ returns: The created list box.
+ about: @x, @y, @w, @h, and @group act the same as the MaxGUI arguments to @CreateListBox(), except that @group is a TMWidget.
+ If @values is not NULL it is used to load up the initial options.
+ EndRem
+ Method Create:TMListBox(x:Int,y:Int, w:Int, h:Int, group:TMWidget, values:TMListEntry[]=Null)
+ BaseInitialise(CreateListBox(x,y,w,h,group.gadget),group)
+ typename="TMListBox"
+ If values
+ AddItems(values)
+ EndIf
+ Return Self
+ End Method
+End Type
+
+
+Rem
+bbdoc: Defines a managed tabber.
+EndRem
+Type TMTabber Extends TMListWidget
+ Field pages:TMWidget[][]
+
+ Rem
+ bbdoc: Creates a managed tabber.
+ returns: The created tabber.
+ about: @x, @y, @w, @h, and @group act the same as the MaxGUI arguments to @CreateTabber(), except that @group is a TMWidget.
+ If @values is not NULL it is used to load up the initial options.
+ EndRem
+ Method Create:TMTabber(x:Int,y:Int, w:Int, h:Int, group:TMWidget, values:TMListEntry[]=Null)
+ BaseInitialise(CreateTabber(x,y,w,h,group.gadget),group)
+ typename="TMTabber"
+ If values
+ AddItems(values)
+ EndIf
+ Return Self
+ End Method
+
+ Rem
+ bbdoc: Defines the gadgets to appear on each page of the tabber.
+ about: @widgets is an array of @TMWidget arrays. Each sub-array is one page.
+ EndRem
+ Method SetPages(widgets:TMWidget[][])
+ pages=widgets
+ End Method
+
+ Rem
+ bbdoc: Set the currently selected page.
+ about: This will hide/show the widgets defined by @DefinePages() as appropriate.
+ EndRem
+ Method SetSelectedIndex(index:Int)
+ SelectGadgetItem(gadget,index)
+
+ If pages
+ For Local f:Int=0 Until pages.length
+ For Local w:TMWidget=EachIn pages[f]
+ w.Hidden(f<>index)
+ Next
+ Next
+ EndIf
+ End Method
+
+ Rem
+ bbdoc: This default information will switch the widgets as defined by @DefinePages()
+ EndRem
+ Method OnIndexChanged(e:TEvent)
+ Local sel:Int=SelectedIndex()
+
+ If sel>-1 And pages
+ For Local f:Int=0 Until pages.length
+ For Local w:TMWidget=EachIn pages[f]
+ w.Hidden(f<>sel)
+ Next
+ Next
+ EndIf
+ End Method
+
+End Type
+
+
+Rem
+bbdoc: Defines a managed HTML View.
+EndRem
+Type TMHTMLView Extends TMWidget
+ Rem
+ bbdoc: Creates a managed HTML View.
+ returns: The created HTML View.
+ about: @x, @y, @w, @h, @group and @style act the same as the MaxGUI arguments to @CreateHMTLView(), except that @group is a TMWidget.
+ EndRem
+ Method Create:TMHTMLView(x:Int, y:Int, w:Int, h:Int, group:TMWidget, style:Int=0)
+ BaseInitialise(CreateHTMLView(x,y,w,h,group.gadget,style),group)
+ typename="TMHTMLView"
+ Return Self
+ End Method
+
+ Rem
+ bbdoc: The current URL.
+ EndRem
+ Method URL:String()
+ Return HtmlViewCurrentURL(gadget)
+ End Method
+
+ Rem
+ bbdoc: Enter the URL to goto.
+ EndRem
+ Method Go(url:String)
+ HtmlViewGo(gadget,url)
+ End Method
+
+ Rem
+ bbdoc: Go back in the history.
+ EndRem
+ Method Back()
+ HtmlViewBack(gadget)
+ End Method
+
+ Rem
+ bbdoc: Go forward in the history.
+ EndRem
+ Method Forward()
+ HtmlViewForward(gadget)
+ End Method
+
+ Rem
+ bbdoc:Run a script.
+ EndRem
+ Method RunScript:String(script:String)
+ HtmlViewRun(gadget,script)
+ End Method
+
+ Rem
+ bbdoc: If HTMLVIEW_NONAVIGATE is set in the styles, then this is called when a link is clicked.
+ EndRem
+ Method OnSelectURL(e:TEvent)
+ End Method
+
+ Rem
+ bbdoc: Called when the page finishes loading moves.
+ EndRem
+ Method OnPageLoaded(e:TEvent)
+ End Method
+
+ Method Handle(e:TEvent)
+ Select e.id
+ Case EVENT_GADGETACTION
+ OnSelectURL(e)
+ Case EVENT_GADGETDONE
+ OnPageLoaded(e)
+ Default
+ super.Handle(e)
+ End Select
+ End Method
+End Type
+
+
+Rem
+bbdoc: Enters the event processing loop.
+about: @top is the top level TMWindow For the application. The loop continues Until the @closed Field of this window is TRUE.
+Your code can do it's own event loop if required -- all this function does is continually call WaitEvent and is simply provided as
+a basic main loop.
+EndRem
+Function MWidgetMainLoop(top:TMWindow)
+ While Not top.closed
+ WaitEvent()
+ Wend
+End Function
+
+
+Private
+
+Type Static
+ Global list:TList
+
+ Function Init()
+ list=CreateList()
+ AddHook(EmitEventHook,EventHandler)
+ End Function
+
+ Function EventHandler:Object(id:Int, data:Object, context:Object)
+ Local e:TEvent=TEvent(data)
+
+ DebugLog "Got event : " + e.ToString()
+
+ If e
+ For Local g:TMWidget=EachIn list
+ If g And g.gadget And g.gadget=e.source
+ DebugLog "Passing event to " + g.ToString()
+ g.Handle(e)
+ EndIf
+ Next
+ EndIf
+
+ Return e
+ End Function
+
+ Function Register(w:TMWidget)
+ list.AddLast(w)
+ w.OnManage()
+ End Function
+
+ Function Deregister(w:TMWidget)
+ If w.children.Count()
+ For Local c:TMWidget=EachIn w.children
+ If c
+ Deregister(c)
+ EndIf
+ Next
+ EndIf
+
+ w.OnUnmanage()
+ list.Remove(w)
+ End Function
+End Type
+
+Static.Init()
\ No newline at end of file |