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()