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.
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)
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.
IMPORTANT: 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()