diff options
author | Ian C <ianc@noddybox.co.uk> | 2006-04-15 01:32:12 +0000 |
---|---|---|
committer | Ian C <ianc@noddybox.co.uk> | 2006-04-15 01:32:12 +0000 |
commit | cadf174debb12e3476a4e34852fa83f333b4da75 (patch) | |
tree | ecb8bdb823f7d801d89b5b4c69d5b747de7483bb | |
parent | e55ff240a70f482d9c782e725e4742090eadf10b (diff) |
Fixed for 1.18
-rw-r--r-- | mwidget.mod/mwidget.bmx | 5572 |
1 files changed, 2786 insertions, 2786 deletions
diff --git a/mwidget.mod/mwidget.bmx b/mwidget.mod/mwidget.bmx index 738f0eb..397e874 100644 --- a/mwidget.mod/mwidget.bmx +++ b/mwidget.mod/mwidget.bmx @@ -1,2787 +1,2787 @@ -Rem
-bbdoc: noddybox.mwidget
-about: <p>Provides a simply class based interface to the MaxGUI. Note that all widgets have create type methods. For these to work correctly with
-sub-classes they must be called through a new operation, e.g.</p>
-<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)
-MWidgetMainLoop(window)
-</pre>
-<p>
-There are two methods of getting events. One is to subclass and override the events, as with the @OnClose() above. The other is to set
-function pointers in the matching event lists, @OnCloseEvent in this instance. For instance:
-</p>
-<pre>
-Function OnClose(o:TMWidget)
- Local w:TMWindow=TMWindow(o)
- w.closed=Confirm("Really quit?")
-End Function
-
-Local window:TMWindow=New TMWindow.Create("Test",100,100,640,400)
-window.OnCloseEvent.Add(OnClose)
-MWidgetMainLoop(window)
-</pre>
-<p>
-When using the function callback method of capturing events, the parameters to the function are the same as the overridable method with the addition
-of the managed widget which is passed in as the first argument.
-</p>
-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
-Import brl.map
-Import brl.filesystem
-
-Type TMWEventListBase Abstract
- Field list:TList
- Method New()
- list=CreateList()
- End Method
-End Type
-
-Type TMWFuncVoid
- Field func(w:TMWidget)
- Function Create:TMWFuncVoid(func(w:TMWidget))
- Local o:TMWFuncVoid=New TMWFuncVoid
- o.func=func
- Return o
- End Function
-End Type
-
-Type TMWFuncInt
- Field func(w:TMWidget, a:Int)
- Function Create:TMWFuncInt(func(w:TMWidget, a:Int))
- Local o:TMWFuncInt=New TMWFuncInt
- o.func=func
- Return o
- End Function
-End Type
-
-Type TMWFuncIntInt
- Field func(w:TMWidget, a:Int, b:Int)
- Function Create:TMWFuncIntInt(func(w:TMWidget, a:Int, b:Int))
- Local o:TMWFuncIntInt=New TMWFuncIntInt
- o.func=func
- Return o
- End Function
-End Type
-
-Type TMWFuncString
- Field func(w:TMWidget, a:String)
- Function Create:TMWFuncString(func(w:TMWidget, a:String))
- Local o:TMWFuncString=New TMWFuncString
- o.func=func
- Return o
- End Function
-End Type
-
-
-Type TMWFuncStringObject
- Field func(w:TMWidget, a:String, b:Object)
- Function Create:TMWFuncStringObject(func(w:TMWidget, a:String, b:Object))
- Local o:TMWFuncStringObject=New TMWFuncStringObject
- o.func=func
- Return o
- End Function
-End Type
-
-
-Rem
-bbdoc: Defines an event list for functions that take the parameters (w:TMWidget)
-EndRem
-Type TMWEventListVoid Extends TMWEventListBase Final
- Rem
- bbdoc: Adds a callback function.
- EndRem
- Method Add(func(w:TMWidget))
- list.AddLast(TMWFuncVoid.Create(func))
- End Method
-
- Rem
- bbdoc: Clears all callback functions.
- EndRem
- Method Clear()
- list.Clear()
- End Method
-
- Rem
- bbdoc: Removes a callback function.
- EndRem
- Method Remove(func(w:TMWidget))
- For Local fp:TMWFuncVoid=EachIn list
- If fp.func=func
- list.Remove(fp)
- Return
- EndIf
- Next
- End Method
-
- Method Fire(w:TMWidget)
- For Local fp:TMWFuncVoid=EachIn list
- fp.func(w)
- Next
- End Method
-End Type
-
-
-Rem
-bbdoc: Defines an event list for functions that take the parameters (w:TMWidget, a:Int)
-EndRem
-Type TMWEventListInt Extends TMWEventListBase Final
- Rem
- bbdoc: Adds a callback function.
- EndRem
- Method Add(func(w:TMWidget, a:Int))
- list.AddLast(TMWFuncInt.Create(func))
- End Method
-
- Rem
- bbdoc: Clears all callback functions.
- EndRem
- Method Clear()
- list.Clear()
- End Method
-
- Rem
- bbdoc: Removes a callback function.
- EndRem
- Method Remove(func(w:TMWidget, a:Int))
- For Local fp:TMWFuncInt=EachIn list
- If fp.func=func
- list.Remove(fp)
- Return
- EndIf
- Next
- End Method
-
- Method Fire(w:TMWidget, a:Int)
- For Local fp:TMWFuncInt=EachIn list
- fp.func(w,a)
- Next
- End Method
-End Type
-
-
-Rem
-bbdoc: Defines an event list for functions that take the parameters (w:TMWidget, a:String)
-EndRem
-Type TMWEventListString Extends TMWEventListBase Final
- Rem
- bbdoc: Adds a callback function.
- EndRem
- Method Add(func(w:TMWidget, a:String))
- list.AddLast(TMWFuncString.Create(func))
- End Method
-
- Rem
- bbdoc: Clears all callback functions.
- EndRem
- Method Clear()
- list.Clear()
- End Method
-
- Rem
- bbdoc: Removes a callback function.
- EndRem
- Method Remove(func(w:TMWidget, a:String))
- For Local fp:TMWFuncString=EachIn list
- If fp.func=func
- list.Remove(fp)
- Return
- EndIf
- Next
- End Method
-
- Method Fire(w:TMWidget, a:String)
- For Local fp:TMWFuncString=EachIn list
- fp.func(w,a)
- Next
- End Method
-End Type
-
-
-Rem
-bbdoc: Defines an event list for functions that take the parameters (w:TMWidget, a:Int, b:Int)
-EndRem
-Type TMWEventListIntInt Extends TMWEventListBase Final
- Rem
- bbdoc: Adds a callback function.
- EndRem
- Method Add(func(w:TMWidget, a:Int, b:Int))
- list.AddLast(TMWFuncIntInt.Create(func))
- End Method
-
- Rem
- bbdoc: Clears all callback functions.
- EndRem
- Method Clear()
- list.Clear()
- End Method
-
- Rem
- bbdoc: Removes a callback function.
- EndRem
- Method Remove(func(w:TMWidget, a:Int, b:Int))
- For Local fp:TMWFuncIntInt=EachIn list
- If fp.func=func
- list.Remove(fp)
- Return
- EndIf
- Next
- End Method
-
- Method Fire(w:TMWidget, a:Int, b:Int)
- For Local fp:TMWFuncIntInt=EachIn list
- fp.func(w,a,b)
- Next
- End Method
-End Type
-
-
-Rem
-bbdoc: Defines an event list for functions that take the parameters (w:TMWidget, a:String, b:Object)
-EndRem
-Type TMWEventListStringObject Extends TMWEventListBase Final
- Rem
- bbdoc: Adds a callback function.
- EndRem
- Method Add(func(w:TMWidget, a:String, b:Object))
- list.AddLast(TMWFuncStringObject.Create(func))
- End Method
-
- Rem
- bbdoc: Clears all callback functions.
- EndRem
- Method Clear()
- list.Clear()
- End Method
-
- Rem
- bbdoc: Removes a callback function.
- EndRem
- Method Remove(func(w:TMWidget, a:String, b:Object))
- For Local fp:TMWFuncStringObject=EachIn list
- If fp.func=func
- list.Remove(fp)
- Return
- EndIf
- Next
- End Method
-
- Method Fire(w:TMWidget, a:String, b:Object)
- For Local fp:TMWFuncStringObject=EachIn list
- fp.func(w,a,b)
- Next
- End Method
-End Type
-
-
-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()
- OnMouseEnterEvent.Fire(Self)
- Case EVENT_MOUSELEAVE
- OnMouseLeave()
- OnMouseLeaveEvent.Fire(Self)
- Case EVENT_TIMERTICK
- OnTimer()
- OnTimerEvent.Fire(Self)
- End Select
- End Method
-
- Rem
- bbdoc: Activate the widget (give it keyboard focus).
- EndRem
- Method Activate(state:Int)
- ActivateGadget(gadget)
- 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's timer fires.
- EndRem
- Field OnTimerEvent:TMWEventListVoid
-
- Rem
- bbdoc: Called when the widget is managed.
- EndRem
- Method OnManage()
- End Method
-
- Rem
- bbdoc: Called when the widget is managed.
- EndRem
- Field OnManageEvent:TMWEventListVoid
-
- Rem
- bbdoc: Called when the widget is unmanaged.
- EndRem
- Method OnUnmanage()
- End Method
-
- Rem
- bbdoc: Called when the widget is unmanaged.
- EndRem
- Field OnUnmanageEvent:TMWEventListVoid
-
- Rem
- bbdoc: Called when the mouse enters.
- EndRem
- Method OnMouseEnter()
- End Method
-
- Rem
- bbdoc: Called when the mouse enters.
- EndRem
- Field OnMouseEnterEvent:TMWEventListVoid
-
- Rem
- bbdoc: Called when the mouse leaves.
- EndRem
- Method OnMouseLeave()
- End Method
-
- Rem
- bbdoc: Called when the mouse leaves.
- EndRem
- Field OnMouseLeaveEvent:TMWEventListVoid
-
- Rem
- bbdoc: Fires an event at this managed widget.
- about: The arguments are the same as @CreateEvent(), but no 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
-
- OnTimerEvent=New TMWEventListVoid
- OnManageEvent=New TMWEventListVoid
- OnUnmanageEvent=New TMWEventListVoid
- OnMouseEnterEvent=New TMWEventListVoid
- OnMouseLeaveEvent=New TMWEventListVoid
-
- 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
-
- OnMoveEvent=New TMWEventListIntInt
- OnResizeEvent=New TMWEventListIntInt
- OnCloseEvent=New TMWEventListVoid
- OnDropEvent=New TMWEventListString
-
- 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: Activate the window.
- EndRem
- Method Activate(state:Int)
- ActivateWindow(gadget)
- End Method
-
- 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.
- about:@x and @y are the new position.
- EndRem
- Method OnMove(x:Int, y:Int)
- End Method
-
- Rem
- bbdoc: Called when the window is moved.
- EndRem
- Field OnMoveEvent:TMWEventListIntInt
-
- Rem
- bbdoc: Called when the window is resized.
- about:@width and @height are the new size.
- EndRem
- Method OnResize(width:Int, height:Int)
- End Method
-
- Rem
- bbdoc: Called when the window is resized.
- EndRem
- Field OnResizeEvent:TMWEventListIntInt
-
- Rem
- bbdoc: Called when the window's close gadget is pressed.
- about: This default implementation sets @closed to TRUE and hide the window if no events are defined in @OnCloseEvent.
- EndRem
- Method OnClose()
- If Not OnCloseEvent.list.Count()
- closed=True
- Hidden(True)
- EndIf
- End Method
-
- Rem
- bbdoc: Called when the window's close gadget is pressed.
- EndRem
- Field OnCloseEvent:TMWEventListVoid
-
- Rem
- bbdoc: Called when a file is dropped in the window.
- about: @path is the dropped file.
- EndRem
- Method OnDrop(path:String)
- End Method
-
- Rem
- bbdoc: Called when a file is dropped in the window.
- EndRem
- Field OnDropEvent:TMWEventListString
-
- Method Handle(e:TEvent)
- Select e.id
- Case EVENT_WINDOWACCEPT
- OnDrop(String(e.extra))
- OnDropEvent.Fire(Self,String(e.extra))
- Case EVENT_WINDOWMOVE
- OnMove(e.x,e.y)
- OnMoveEvent.Fire(Self,e.x,e.y)
- Case EVENT_WINDOWSIZE
- OnResize(e.x,e.y)
- OnResizeEvent.Fire(Self,e.x,e.y)
- Case EVENT_WINDOWCLOSE
- OnClose()
- OnCloseEvent.Fire(Self)
- 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)
- OnPressEvent=New TMWEventListVoid
- 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)
- OnPressEvent=New TMWEventListVoid
- 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)
- OnPressEvent=New TMWEventListVoid
- 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()
- End Method
-
- Rem
- bbdoc: Called when the button is pressed.
- EndRem
- Field OnPressEvent:TMWEventListVoid
-
- Method Handle(e:TEvent)
- Select e.id
- Case EVENT_GADGETACTION
- OnPress()
- OnPressEvent.Fire(Self)
- 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)
- OnPressEvent=New TMWEventListInt
- 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.
- about: @checked is the current state.
- EndRem
- Method OnPress(checked:Int)
- End Method
-
- Rem
- bbdoc: Called when the checkbox is pressed.
- EndRem
- Field OnPressEvent:TMWEventListInt
-
- Method Handle(e:TEvent)
- Select e.id
- Case EVENT_GADGETACTION
- OnPress(e.data)
- OnPressEvent.Fire(Self,e.data)
- Default
- super.Handle(e)
- End Select
- End Method
-End Type
-
-
-Rem
-bbdoc: Defines a managed radio button.
-EndRem
-Type TMRadioButton Extends TMCheckbox
- Field set:TMRadioButtonSet
-
- 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)
- OnPressEvent=New TMWEventListInt
- BaseInitialise(CreateButton(label,x,y,w,h,group.gadget,BUTTON_RADIO),group)
- typename="TMRadioButton"
- Return Self
- End Method
-
- Rem
- bbdoc: Called when the checkbox is pressed.
- about: @checked is the current state. In this default implementation the @TMRadioButtonSet which this button belongs too will fire
- its @OnSelected() member.
- EndRem
- Method OnPress(checked:Int)
- If set
- set.ButtonFired(Self)
- EndIf
- 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[])
- OnSelectedEvent=New TMWEventListInt
- but=buttons
- For Local b:TMRadioButton=EachIn but
- b.set=Self
- Next
- 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: If using the base TMRadioButton implmentation this will be called when the buttons change.
- about: @index is the selected button.
- EndRem
- Method OnSelected(index:Int)
- End Method
-
- Rem
- bbdoc: If using the base TMRadioButton implmentation this will be called when the buttons change.
- about: The radio button that fired will be passed into the event.
- EndRem
- Field OnSelectedEvent:TMWEventListInt
-
- 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
-
- Method ButtonFired(b:TMRadioButton)
- For Local f:Int=0 Until but.length
- If but[f]=b
- OnSelected(f)
- OnSelectedEvent.Fire(b,f)
- Return
- EndIf
- Next
- 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)
- OnTextChangedEvent=New TMWEventListString
- 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 the text changes.
- about: @txt is the content of the field
- EndRem
- Method OnTextChanged(txt:String)
- End Method
-
- Rem
- bbdoc: Called when the text changes.
- EndRem
- Field OnTextChangedEvent:TMWEventListString
-
- Method Handle(e:TEvent)
- Select e.id
- Case EVENT_GADGETACTION
- Local s:String=TextFieldText(gadget)
- OnTextChanged(s)
- OnTextChangedEvent.Fire(Self,s)
- 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)
- OnTextChangedEvent=New TMWEventListVoid
- OnSelectionEvent=New TMWEventListVoid
- OnMenuEvent=New TMWEventListVoid
- 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 the text changes.
- EndRem
- Method OnTextChanged()
- End Method
-
- Rem
- bbdoc: Called when the text changes.
- EndRem
- Field OnTextChangedEvent:TMWEventListVoid
-
- Rem
- bbdoc: Called when the selection or cursor changes.
- EndRem
- Method OnSelection()
- End Method
-
- Rem
- bbdoc: Called when the selection or cursor changes.
- EndRem
- Field OnSelectionEvent:TMWEventListVoid
-
- Rem
- bbdoc: Called when the context menu is requested.
- EndRem
- Method OnMenu()
- End Method
-
- Rem
- bbdoc: Called when the context menu is requested.
- EndRem
- Field OnMenuEvent:TMWEventListVoid
-
- Method Handle(e:TEvent)
- Select e.id
- Case EVENT_GADGETACTION
- OnTextChanged()
- OnTextChangedEvent.Fire(Self)
- Case EVENT_GADGETSELECT
- OnSelection()
- OnSelectionEvent.Fire(Self)
- Case EVENT_GADGETMENU
- OnMenu()
- OnMenuEvent.Fire(Self)
- 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)
- OnValueChangedEvent=New TMWEventListInt
- 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.
- about: @val is the new slider value.
- EndRem
- Method OnValueChanged(val:Int)
- End Method
-
- Rem
- bbdoc: Called when the slider moves.
- EndRem
- Field OnValueChangedEvent:TMWEventListInt
-
- Method Handle(e:TEvent)
- Select e.id
- Case EVENT_GADGETACTION
- OnValueChanged(e.data)
- OnValueChangedEvent.Fire(Self,e.data)
- 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.
- about: @index is the selected index. This can be -1 for no selection.
- EndRem
- Method OnIndexChanged(index:Int)
- End Method
-
- Rem
- bbdoc: Called when the selection changes.
- EndRem
- Field OnIndexChangedEvent:TMWEventListInt
-
- Method Handle(e:TEvent)
- Select e.id
- Case EVENT_GADGETACTION
- OnIndexChanged(e.data)
- OnIndexChangedEvent.Fire(Self,e.data)
- 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)
- OnIndexChangedEvent=New TMWEventListInt
- 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)
- OnIndexChangedEvent=New TMWEventListInt
- 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)
- OnIndexChangedEvent=New TMWEventListInt
- 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 implementation will switch the widgets as defined by @DefinePages()
- EndRem
- Method OnIndexChanged(index:Int)
- If index>-1 And 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
-
-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)
- OnPageLoadedEvent=New TMWEventListString
- OnSelectURLEvent=New TMWEventListString
- BaseInitialise(CreateHTMLView(x,y,w,h,group.gadget,style),group)
- typename="TMHTMLView"
- Return Self
- End Method
-
- Rem
- bbdoc: The current URL.
- EndRem
- Method CurrentURL: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.
- about: @url is the selected URL.
- EndRem
- Method OnSelectURL(url:String)
- End Method
-
- Rem
- bbdoc: If HTMLVIEW_NONAVIGATE is set in the styles, then this is called when a link is clicked.
- EndRem
- Field OnSelectURLEvent:TMWEventListString
-
- Rem
- bbdoc: Called when the page finishes loading.
- about: @url is the loaded URL.
- EndRem
- Method OnPageLoaded(url:String)
- End Method
-
- Rem
- bbdoc: Called when the page finishes loading.
- EndRem
- Field OnPageLoadedEvent:TMWEventListString
-
- Method Handle(e:TEvent)
- Select e.id
- Case EVENT_GADGETACTION
- OnSelectURL(e.extra.ToString())
- OnSelectURLEvent.Fire(Self,e.extra.ToString())
- Case EVENT_GADGETDONE
- OnPageLoaded(CurrentURL())
- OnPageLoadedEvent.Fire(Self,CurrentURL())
- Default
- super.Handle(e)
- End Select
- End Method
-End Type
-
-
-Type TMTreeNode
- Field path:String
- Field node:TGadget
- Field tag:Object
- Field icon:Int
- Function Create:TMTreeNode(path:String, node:TGadget, tag:Object, icon:Int)
- Local o:TMTreeNode=New TMTreeNode
- o.path=path
- o.node=node
- o.tag=tag
- o.icon=icon
- Return o
- End Function
-End Type
-
-Rem
-bbdoc: Defines a managed tree view.
-about: The tree view works by treating its entries as if in a simple file system.
-EndRem
-Type TMTreeView Extends TMWidget
- Field map:TMap
- Field gmap:TMap
- Field update:Int
-
- Rem
- bbdoc: Creates a managed tree view.
- returns: The created tree view.
- about: @x, @y, @w, @h, @group and @style act the same as the MaxGUI arguments to @CreateTreeView(), except that @group is a TMWidget.
- EndRem
- Method Create:TMTreeView(x:Int, y:Int, w:Int, h:Int, group:TMWidget, style:Int=0)
- update=False
- map=New TMap
- gmap=New TMap
- OnSelectedEvent=New TMWEventListStringObject
- OnClickedEvent=New TMWEventListStringObject
- OnMenuEvent=New TMWEventListStringObject
- OnExpandedEvent=New TMWEventListStringObject
- OnCollapsedEvent=New TMWEventListStringObject
- BaseInitialise(CreateTreeView(x,y,w,h,group.gadget,style),group)
- typename="TMNodeView"
- map.Insert("/",TMTreeNode.Create("/",TreeViewRoot(gadget),"/",-1))
- Return Self
- End Method
-
- Method ResolvePath:TMTreeNode(path:String)
- Return TMTreeNode(map.ValueForKey(path))
- End Method
-
- Method ResolveGadget:TMTreeNode(g:TGadget)
- Return ResolvePath(gmap.ValueForKey(g).ToString())
- End Method
-
- Method Prune(path:String)
- Local l:TList=CreateList()
-
- ' Not sure if this is overly ineffecient -- just being safe as in most languages deleting whilst iterating
- ' is not recommended...
- '
- For Local k:String=EachIn map.Keys()
- If k=path Or k.Find(path+"/")=0
- l.AddLast(k)
- EndIf
- Next
-
- For Local k:String=EachIn l
- Local n:TMTreeNode=ResolvePath(k)
- map.Remove(k)
- gmap.Remove(n.node)
- Next
- End Method
-
- Rem
- bbdoc: Set an icon strip.
- EndRem
- Method SetIconStrip(icons:TIconStrip)
- SetGadgetIconStrip(gadget,icons)
- End Method
-
- Rem
- bbdoc: The number of nodes in the view that are direct children on the passed node.
- returns: The number of nodes.
- about: @path is the path to count from. Unfortunately counting from the root (/) doesn't work, so it returns -1.
- EndRem
- Method CountChildren:Int(path:String)
- If path="/"
- Return -1
- EndIf
-
- Local node:TMTreeNode=ResolvePath(path)
-
- If node
- Return CountTreeViewNodes(node.node)
- Else
- Return 0
- EndIf
- End Method
-
- Rem
- bbdoc: Remove nodes from the tree.
- about: Attempting to remove the root node (/) will fail.
- EndRem
- Method Remove(path:String)
- If path<>"/"
- Local node:TMTreeNode=ResolvePath(path)
-
- If node
- FreeTreeViewNode(node.node)
- Prune(path)
- EndIf
- EndIf
- End Method
-
- Rem
- bbdoc: Don't redraw gadget when adding nodes.
- EndRem
- Method BeginUpdate()
- update=True
- End Method
-
-
- Rem
- bbdoc: Allow redraw of gadget when adding nodes.
- EndRem
- Method EndUpdate()
- update=False
- End Method
-
-
- Rem
- bbdoc: Add/modify nodes in the tree.
- about: @path is the path to the node. This silently fails if the parent nodes don't exist. @tag is an Object that the entry is tagged with.
- ToString() is called on this to create the text for the entry (so passing a String works fine).
- @icon is the icon to use. Note that if you set an icon strip, then this seems to use the first icon (on Win32 at least) if set to -1.
- EndRem
- Method Set(path:String, tag:Object, icon:Int=-1)
- Local parent:TMTreeNode=ResolvePath(FixedExtractDir(path))
-
- If parent
- Local node:TMTreeNode=ResolvePath(path)
-
- If node
- ModifyTreeViewNode(node.node,tag.ToString(),icon)
- Else
- node=TMTreeNode.Create(path,AddTreeViewNode(tag.ToString(),parent.node,icon),tag,icon)
- map.Insert(path,node)
- gmap.Insert(node.node,path)
- EndIf
-
- node.tag=tag
- node.icon=icon
-
- If Not update
- RedrawGadget(gadget)
- EndIf
- EndIf
- End Method
-
- Rem
- bbdoc: Get the tag at a node.
- returns: The tag, or NULL for unknown node.
- EndRem
- Method GetNodeTag:Object(path:String)
- Local node:TMTreeNode=ResolvePath(path)
- If node
- Return node.tag
- Else
- Return Null
- EndIf
- End Method
-
- Rem
- bbdoc: Get the icon at a node.
- returns: The icon, or -1 for none or unknown node.
- EndRem
- Method GetNodeIcon:Int(path:String)
- Local node:TMTreeNode=ResolvePath(path)
- If node
- Return node.icon
- Else
- Return -1
- EndIf
- End Method
-
- Rem
- bbdoc: Expand a node on the tree.
- EndRem
- Method ExpandNode(path:String)
- Local node:TMTreeNode=ResolvePath(path)
-
- If node
- ExpandTreeViewNode(node.node)
- EndIf
- End Method
-
- Rem
- bbdoc: Collapse a node on the tree.
- EndRem
- Method CollapseNode(path:String)
- Local node:TMTreeNode=ResolvePath(path)
-
- If node
- CollapseTreeViewNode(node.node)
- EndIf
- End Method
-
- Rem
- bbdoc: Called when the an item is selected.
- about: @path is the path to the selected item, @tag is the tag for that item.
- EndRem
- Method OnSelected(path:String, tag:Object)
- End Method
-
- Rem
- bbdoc: Called when the an item is selected.
- EndRem
- Field OnSelectedEvent:TMWEventListStringObject
-
- Rem
- bbdoc: Called when the an item is double clicked.
- about: @path is the path to the selected item, @tag is the tag for that item.
- EndRem
- Method OnClicked(path:String, tag:Object)
- End Method
-
- Rem
- bbdoc: Called when the an item is double clicked.
- EndRem
- Field OnClickedEvent:TMWEventListStringObject
-
- Rem
- bbdoc: Called when the a context menu is requested.
- about: @path is the path to the selected item, @tag is the tag for that item.
- EndRem
- Method OnMenu(path:String, tag:Object)
- End Method
-
- Rem
- bbdoc: Called when the an item is selected.
- EndRem
- Field OnMenuEvent:TMWEventListStringObject
-
- Rem
- bbdoc: Called when a node is expanded.
- about: @path is the path to the selected item, @tag is the tag for that item.
- EndRem
- Method OnExpanded(path:String, tag:Object)
- End Method
-
- Rem
- bbdoc: Called when a node is expanded.
- EndRem
- Field OnExpandedEvent:TMWEventListStringObject
-
- Rem
- bbdoc: Called when a node is collapsed.
- about: @path is the path to the selected item, @tag is the tag for that item.
- EndRem
- Method OnCollapsed(path:String, tag:Object)
- End Method
-
- Rem
- bbdoc: Called when a node is collapsed.
- EndRem
- Field OnCollapsedEvent:TMWEventListStringObject
-
- Method Handle(e:TEvent)
- Select e.id
- Case EVENT_GADGETSELECT
- Local n:TMTreeNode=ResolveGadget(TGadget(e.extra))
- If n
- OnSelected(n.path,n.tag)
- OnSelectedEvent.Fire(Self,n.path,n.tag)
- EndIf
- Case EVENT_GADGETACTION
- Local n:TMTreeNode=ResolveGadget(TGadget(e.extra))
- If n
- OnClicked(n.path,n.tag)
- OnClickedEvent.Fire(Self,n.path,n.tag)
- EndIf
- Case EVENT_GADGETOPEN
- Local n:TMTreeNode=ResolveGadget(TGadget(e.extra))
- If n
- OnExpanded(n.path,n.tag)
- OnExpandedEvent.Fire(Self,n.path,n.tag)
- EndIf
- Case EVENT_GADGETCLOSE
- Local n:TMTreeNode=ResolveGadget(TGadget(e.extra))
- If n
- OnCollapsed(n.path,n.tag)
- OnCollapsedEvent.Fire(Self,n.path,n.tag)
- EndIf
- Case EVENT_GADGETMENU
- Local n:TMTreeNode=ResolveGadget(TGadget(e.extra))
- If n
- OnMenu(n.path,n.tag)
- OnMenuEvent.Fire(Self,n.path,n.tag)
- EndIf
- Default
- super.Handle(e)
- End Select
- End Method
-End Type
-
-
-Type TMenuItem
- Field id:Int
- Field owner:TMMenu
- Field path:String
- Field tag:Object
- Field gadget:TGadget
- Field callback(menu:TMMenu, path:String, tag:Object)
- Function Create:TMenuItem(owner:TMMenu, id:Int, path:String, gadget:TGadget, tag:Object, callback(menu:TMMenu, path:String, tag:Object))
- Local o:TMenuItem=New TMenuItem
- o.owner=owner
- o.id=id
- o.path=path
- o.gadget=gadget
- o.tag=tag
- o.callback=callback
- Return o
- End Function
-End Type
-
-
-Rem
-bbdoc: Defines a managed menu.
-about: Note that TMMenu is <b>NOT</b> a TMWidget.
-EndRem
-Type TMMenu
-
- Field root:TGadget
- Field map:TMap
- Field win:TMWindow
-
- Rem
- bbdoc: Creates a managed menu that is associated as a window menu.
- returns: The created menu.
- about: @window is the window the menu is attached to.
- EndRem
- Method CreateWindowMenu:TMMenu(window:TMWindow)
- map=New TMap
- root=WindowMenu(window.gadget)
- win=window
- SetRoot()
- Return Self
- End Method
-
- Rem
- bbdoc: Creates a managed menu that can be used as a popup menu.
- returns: The created menu.
- EndRem
- Method CreatePopupMenu:TMMenu()
- map=New TMap
- root=CreateMenu("",0,Null)
- win=Null
- SetRoot()
- Return Self
- End Method
-
- Method Delete()
- Clear()
- If Not win
- FreeMenu(root)
- EndIf
- End Method
-
- Rem
- bbdoc: Clear all items from the menu
- EndRem
- Method Clear()
- For Local m:TMenuItem=EachIn map
- FreeMenu(m.gadget)
- Static.DeregisterMenuItem(m)
- Next
- map.Clear()
- SetRoot()
- End Method
-
- Method SetRoot()
- map.Insert("/",TMenuItem.Create(Self,0,"/",root,Null,Null))
- End Method
-
- Method ResolvePath:TMenuItem(path:String)
- Return TMenuItem(map.ValueForKey(path))
- End Method
-
- Method Prune(path:String)
- Local l:TList=CreateList()
-
- ' Not sure if this is overly ineffecient -- just being safe as in most languages deleting whilst iterating
- ' is not recommended...
- '
- For Local k:String=EachIn map.Keys()
- If k=path Or k.Find(path+"/")=0
- l.AddLast(k)
- EndIf
- Next
-
- For Local k:String=EachIn l
- Local n:TMenuItem=ResolvePath(k)
- map.Remove(k)
- Static.DeregisterMenuItem(n)
- FreeMenu(n.gadget)
- Next
- End Method
-
- Rem
- bbdoc: Add a menu option.
- about: @path is the path to the menu item. This silently fails if the parent menus don't exist. @tag is an Object that the entry is tagged with.
- ToString() is called on this to create the text for the menu (so passing a String works fine). If @callback is not null, then it is called when
- this option is selected.
- @hotkey and @modifier are as in MaxGUI's CreateMenu().
- EndRem
- Method Set(path:String, tag:Object, callback(menu:TMMenu, path:String, tag:Object)=Null, hotkey:Int=0, modifier:Int=0)
- If path<>"/"
- Local parent:TMenuItem=ResolvePath(FixedExtractDir(path))
-
- If parent
- Local node:TMenuItem=ResolvePath(path)
-
- If node
- SetMenuText(node.gadget,tag.ToString())
- Else
- Local id:Int=Static.NextMenuID()
- node=TMenuItem.Create(Self,id,path,CreateMenu(tag.ToString(),id,parent.gadget,hotkey,modifier),tag,callback)
- map.Insert(path,node)
- Static.RegisterMenuItem(node)
- EndIf
-
- node.tag=tag
-
- If win
- UpdateWindowMenu(win.gadget)
- EndIf
- EndIf
- EndIf
- End Method
-
- Rem
- bbdoc: Remove menu item and its children.
- about: @path is the path to the menu item. Root cannot be removed.
- EndRem
- Method Remove(path:String)
- If path<>"/"
- Prune(path)
-
- If win
- UpdateWindowMenu(win.gadget)
- EndIf
- EndIf
- End Method
-
- Rem
- bbdoc: Change a menu tag (and therefore its text).
- about: @path is the path to the menu item. Root cannot be changed.
- EndRem
- Method SetTag(path:String, tag:Object)
- If path<>"/"
- Local node:TMenuItem=ResolvePath(path)
-
- If node
- SetMenuText(node.gadget,tag.ToString())
- node.tag=tag
-
- If win
- UpdateWindowMenu(win.gadget)
- EndIf
- EndIf
- EndIf
- End Method
-
- Rem
- bbdoc: Change a menu check.
- about: @path is the path to the menu item. Root cannot be changed.
- EndRem
- Method Check(path:String, check:Int)
- If path<>"/"
- Local node:TMenuItem=ResolvePath(path)
-
- If node
- If check
- CheckMenu(node.gadget)
- Else
- UncheckMenu(node.gadget)
- EndIf
-
- If win
- UpdateWindowMenu(win.gadget)
- EndIf
- EndIf
- EndIf
- End Method
-
- Rem
- about: Is a menu item checked.
- EndRem
- Method IsChecked:Int(path:String)
- Local ret:Int=False
-
- If path<>"/"
- Local node:TMenuItem=ResolvePath(path)
-
- If node
- ret=MenuChecked(node.gadget)
- EndIf
- EndIf
-
- Return ret
- End Method
-
- Rem
- bbdoc: Enable/disable a menu item.
- about: @path is the path to the menu item. Root cannot be changed.
- EndRem
- Method Enable(path:String, enab:Int)
- If path<>"/"
- Local node:TMenuItem=ResolvePath(path)
-
- If node
- If enab
- EnableMenu(node.gadget)
- Else
- DisableMenu(node.gadget)
- EndIf
-
- If win
- UpdateWindowMenu(win.gadget)
- EndIf
- EndIf
- EndIf
- End Method
-
- Rem
- about: Is a menu item enabled.
- EndRem
- Method IsEnabled:Int(path:String)
- Local ret:Int=False
-
- If path<>"/"
- Local node:TMenuItem=ResolvePath(path)
-
- If node
- ret=MenuEnabled(node.gadget)
- EndIf
- EndIf
-
- Return ret
- End Method
-
- Rem
- bbdoc: Called when the an item is selected in the menu.
- EndRem
- Method OnMenuItem(path:String, tag:Object)
- End Method
-
- Rem
- bbdoc: Popup the menu.
- about: @win is a gadget to pass to MaxGUI. For some reason you need this, and the docs say it should be a window.
- When I've tried any gadget would suffice, but don't come crying to me if it stops working for non-window gadgets.
- EndRem
- Method Popup(g:TMWidget)
- PopupWindowMenu(g.gadget,root)
- End Method
-
- Method ToString:String()
- Return "TMMenu:"+super.ToString()
- End Method
-End Type
-
-
-Rem
-bbdoc: Defines a managed canvas.
-EndRem
-Type TMCanvas Extends TMWidget
-
- Rem
- bbdoc: Creates a managed canvas.
- returns: The created canvas.
- about: @x, @y, @w, @h, @group, @style and @gfxflags act the same as the MaxGUI arguments to @CreateCanvas(), except that @group is a TMWidget.
- EndRem
- Method Create:TMCanvas(x:Int, y:Int, w:Int, h:Int, group:TMWidget, style:Int=0, gfxflags:Int=GRAPHICS_BACKBUFFER)
- OnRedrawEvent=New TMWEventListVoid
- OnButtonDownEvent=New TMWEventListInt
- OnButtonUpEvent=New TMWEventListInt
- OnMouseMoveEvent=New TMWEventListIntInt
- OnMouseWheelEvent=New TMWEventListInt
- OnKeyDownEvent=New TMWEventListInt
- OnKeyUpEvent=New TMWEventListInt
- OnKeyEvent=New TMWEventListInt
- BaseInitialise(CreateCanvas(x,y,w,h,group.gadget,style,gfxflags),group)
- typename="TMCanvas"
- Return Self
- End Method
-
- Rem
- bbdoc: Set the graphics so that the canvas can be drawn onto.
- EndRem
- Method SetupGraphics()
- SetGraphics(CanvasGraphics(gadget))
- End Method
-
- Rem
- bbdoc: Called when the canvas should be redrawn.
- EndRem
- Method OnRedraw()
- End Method
-
- Rem
- bbdoc: Called when the canvas should be redrawn.
- EndRem
- Field OnRedrawEvent:TMWEventListVoid
-
- Rem
- bbdoc: Called when the a mouse button is pressed.
- about: @button is the pressed button.
- EndRem
- Method OnButtonDown(button:Int)
- End Method
-
- Rem
- bbdoc: Called when the a mouse button is pressed.
- EndRem
- Field OnButtonDownEvent:TMWEventListInt
-
- Rem
- bbdoc: Called when the a mouse button is released.
- about: @button is the released button.
- EndRem
- Method OnButtonUp(button:Int)
- End Method
-
- Rem
- bbdoc: Called when the a mouse button is released.
- EndRem
- Field OnButtonUpEvent:TMWEventListInt
-
- Rem
- bbdoc: Called when the mouse moves.
- about: @x and @y are the mouse co-ordinates.
- EndRem
- Method OnMouseMove(x:Int, y:Int)
- End Method
-
- Rem
- bbdoc: Called when the an item is selected.
- EndRem
- Field OnMouseMoveEvent:TMWEventListIntInt
-
- Rem
- bbdoc: Called when the mouse wheel moves.
- about: @delta is the amount the wheel moves.
- EndRem
- Method OnMouseWheel(delta:Int)
- End Method
-
- Rem
- bbdoc: Called when the mouse wheel moves.
- EndRem
- Field OnMouseWheelEvent:TMWEventListInt
-
- Rem
- bbdoc: Called when a key is held down.
- about: @code is the key code.
- EndRem
- Method OnKeyDown(code:Int)
- End Method
-
- Rem
- bbdoc: Called when a key is held down.
- EndRem
- Field OnKeyDownEvent:TMWEventListInt
-
- Rem
- bbdoc: Called when a key is released.
- about: @code is the key code.
- EndRem
- Method OnKeyUp(code:Int)
- End Method
-
- Rem
- bbdoc: Called when a key is released.
- EndRem
- Field OnKeyUpEvent:TMWEventListInt
-
- Rem
- bbdoc: Called when a key character is generated.
- about: @code is the unicode value.
- EndRem
- Method OnKey(code:Int)
- End Method
-
- Rem
- bbdoc: Called when a key character is generated.
- EndRem
- Field OnKeyEvent:TMWEventListInt
-
- Method Handle(e:TEvent)
- Select e.id
- Case EVENT_GADGETPAINT
- OnRedraw()
- OnRedrawEvent.Fire(Self)
- Case EVENT_MOUSEDOWN
- OnButtonDown(e.data)
- OnButtonDownEvent.Fire(Self,e.data)
- Case EVENT_MOUSEUP
- OnButtonUp(e.data)
- OnButtonUpEvent.Fire(Self,e.data)
- Case EVENT_MOUSEMOVE
- OnMouseMove(e.x,e.y)
- OnMouseMoveEvent.Fire(Self,e.x,e.y)
- Case EVENT_MOUSEWHEEL
- OnMouseWheel(e.data)
- OnMouseWheelEvent.Fire(Self,e.data)
- Case EVENT_KEYDOWN
- OnKeyDown(e.data)
- OnKeyDownEvent.Fire(Self,e.data)
- Case EVENT_KEYUP
- OnKeyUp(e.data)
- OnKeyUpEvent.Fire(Self,e.data)
- Case EVENT_KEYCHAR
- OnKey(e.data)
- OnKeyEvent.Fire(Self,e.data)
- Default
- super.Handle(e)
- End Select
- End Method
-End Type
-
-
-Rem
-bbdoc: Defines a toolbar.
-EndRem
-Type TMToolbar Extends TMWidget
- Rem
- bbdoc: Creates a managed toolbar.
- returns: The created toolbar.
- about: @source, @group and @style act the same as the MaxGUI arguments to @CreateToolBar(), 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:TMToolbar(source:Object, group:TMWidget, style:Int=0)
- OnSelectedEvent=New TMWEventListInt
- BaseInitialise(CreateToolBar(source,0,0,0,0,group.gadget,style),group)
- typename="TMToolbar"
- Return Self
- End Method
-
- Rem
- bbdoc: Adds an item to the toolbar.
- EndRem
- Method AddItem(icon:Int, flags:Int=0, tooltip:String=Null)
- AddGadgetItem(gadget,"",flags,icon,tooltip,Null)
- End Method
-
- Rem
- bbdoc: Set the tooltips.
- EndRem
- Method SetTooltips(tips:String[])
- SetToolBarTips(gadget,tips)
- 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: Called when an icon is selected.
- about: @index is the selected index.
- EndRem
- Method OnSelected(index:Int)
- End Method
-
- Rem
- bbdoc: Called when an icon is selected.
- EndRem
- Field OnSelectedEvent:TMWEventListInt
-
- Method Handle(e:TEvent)
- Select e.id
- Case EVENT_GADGETACTION
- OnSelected(e.data)
- OnSelectedEvent.Fire(Self,e.data)
- Default
- super.Handle(e)
- End Select
- End Method
-End Type
-
-
-Rem
-bbdoc: Defines a managed panel.
-EndRem
-Type TMPanel Extends TMWidget
-
- Rem
- bbdoc: Creates a managed panel.
- returns: The created panel.
- about: @x, @y, @w, @h, @group, @style and @title act the same as the MaxGUI arguments to @CreatePanel(), except that @group is a TMWidget.
- EndRem
- Method Create:TMPanel(x:Int, y:Int, w:Int, h:Int, group:TMWidget, style:Int=0, title:String="")
- OnButtonDownEvent=New TMWEventListInt
- OnButtonUpEvent=New TMWEventListInt
- OnMouseMoveEvent=New TMWEventListIntInt
- OnMouseWheelEvent=New TMWEventListInt
- OnKeyDownEvent=New TMWEventListInt
- OnKeyUpEvent=New TMWEventListInt
- OnKeyEvent=New TMWEventListInt
- BaseInitialise(CreatePanel(x,y,w,h,group.gadget,style,title),group)
- typename="TMPanel"
- Return Self
- End Method
-
- Rem
- bbdoc: Called when the a mouse button is pressed.
- about: @button is the pressed button.
- EndRem
- Method OnButtonDown(button:Int)
- End Method
-
- Rem
- bbdoc: Called when the a mouse button is pressed.
- EndRem
- Field OnButtonDownEvent:TMWEventListInt
-
- Rem
- bbdoc: Called when the a mouse button is released.
- about: @button is the released button.
- EndRem
- Method OnButtonUp(button:Int)
- End Method
-
- Rem
- bbdoc: Called when the a mouse button is released.
- EndRem
- Field OnButtonUpEvent:TMWEventListInt
-
- Rem
- bbdoc: Called when the mouse moves.
- about: @x and @y are the mouse co-ordinates.
- EndRem
- Method OnMouseMove(x:Int, y:Int)
- End Method
-
- Rem
- bbdoc: Called when the an item is selected.
- EndRem
- Field OnMouseMoveEvent:TMWEventListIntInt
-
- Rem
- bbdoc: Called when the mouse wheel moves.
- about: @delta is the amount the wheel moves.
- EndRem
- Method OnMouseWheel(delta:Int)
- End Method
-
- Rem
- bbdoc: Called when the mouse wheel moves.
- EndRem
- Field OnMouseWheelEvent:TMWEventListInt
-
- Rem
- bbdoc: Called when a key is held down.
- about: @code is the key code.
- EndRem
- Method OnKeyDown(code:Int)
- End Method
-
- Rem
- bbdoc: Called when a key is held down.
- EndRem
- Field OnKeyDownEvent:TMWEventListInt
-
- Rem
- bbdoc: Called when a key is released.
- about: @code is the key code.
- EndRem
- Method OnKeyUp(code:Int)
- End Method
-
- Rem
- bbdoc: Called when a key is released.
- EndRem
- Field OnKeyUpEvent:TMWEventListInt
-
- Rem
- bbdoc: Called when a key character is generated.
- about: @code is the unicode value.
- EndRem
- Method OnKey(code:Int)
- End Method
-
- Rem
- bbdoc: Called when a key character is generated.
- EndRem
- Field OnKeyEvent:TMWEventListInt
-
- Method Handle(e:TEvent)
- Select e.id
- Case EVENT_MOUSEDOWN
- OnButtonDown(e.data)
- OnButtonDownEvent.Fire(Self,e.data)
- Case EVENT_MOUSEUP
- OnButtonUp(e.data)
- OnButtonUpEvent.Fire(Self,e.data)
- Case EVENT_MOUSEMOVE
- OnMouseMove(e.x,e.y)
- OnMouseMoveEvent.Fire(Self,e.x,e.y)
- Case EVENT_MOUSEWHEEL
- OnMouseWheel(e.data)
- OnMouseWheelEvent.Fire(Self,e.data)
- Case EVENT_KEYDOWN
- OnKeyDown(e.data)
- OnKeyDownEvent.Fire(Self,e.data)
- Case EVENT_KEYUP
- OnKeyUp(e.data)
- OnKeyUpEvent.Fire(Self,e.data)
- Case EVENT_KEYCHAR
- OnKey(e.data)
- OnKeyEvent.Fire(Self,e.data)
- Default
- super.Handle(e)
- End Select
- End Method
-End Type
-
-
-Rem
-bbdoc: Defines a managed progress bar.
-EndRem
-Type TMProgressBar Extends TMWidget
-
- Rem
- bbdoc: Creates a managed progress bar.
- returns: The created progress bar.
- about: @x, @y, @w, @h, @group and @style act the same as the MaxGUI arguments to @CreateProgBar(), except that @group is a TMWidget.
- EndRem
- Method Create:TMProgressBar(x:Int, y:Int, w:Int, h:Int, group:TMWidget, style:Int=0)
- BaseInitialise(CreateProgBar(x,y,w,h,group.gadget,style),group)
- typename="TMProgressBar"
- Return Self
- End Method
-
- Rem
- bbdoc: Set the value for the progress bar.
- about: @value is the value (between 0 and 1).
- EndRem
- Method SetValue(value:Double)
- UpdateProgBar(gadget,value)
- 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
-
-Function FixedExtractDir:String(p:String)
- p=ExtractDir(p)
- If p.length=0
- p="/"
- EndIf
- Return p
-End Function
-
-Type Static
- Global list:TList
- Global menu:TList
- Global menuid:Int
-
- Function Init()
- list=CreateList()
- menu=CreateList()
- menuid=0
- 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
- If e.id=EVENT_MENUACTION
- For Local m:TMenuItem=EachIn menu
- If m.id=e.data
- DebugLog "Passing menu event to " + m.owner.ToString()
- m.owner.OnMenuItem(m.path,m.tag)
- If m.callback
- m.callback(m.owner,m.path,m.tag)
- EndIf
- EndIf
- Next
- Else
- 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
- EndIf
-
- Return e
- End Function
-
- Function Register(w:TMWidget)
- list.AddLast(w)
- w.OnManage()
- w.OnManageEvent.Fire(w)
- End Function
-
- Function Deregister(w:TMWidget)
- w.OnUnmanage()
- w.OnUnmanageEvent.Fire(w)
- list.Remove(w)
- End Function
-
- Function RegisterMenuItem(m:TMenuItem)
- menu.AddLast(m)
- End Function
-
- Function DeregisterMenuItem(m:TMenuItem)
- menu.Remove(m)
- End Function
-
- Function NextMenuID:Int()
- menuid:+1
- Return menuid
- End Function
-End Type
-
+Rem +bbdoc: noddybox.mwidget +about: <p>Provides a simply class based interface to the MaxGUI. Note that all widgets have create type methods. For these to work correctly with +sub-classes they must be called through a new operation, e.g.</p> +<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) +MWidgetMainLoop(window) +</pre> +<p> +There are two methods of getting events. One is to subclass and override the events, as with the @OnClose() above. The other is to set +function pointers in the matching event lists, @OnCloseEvent in this instance. For instance: +</p> +<pre> +Function OnClose(o:TMWidget) + Local w:TMWindow=TMWindow(o) + w.closed=Confirm("Really quit?") +End Function + +Local window:TMWindow=New TMWindow.Create("Test",100,100,640,400) +window.OnCloseEvent.Add(OnClose) +MWidgetMainLoop(window) +</pre> +<p> +When using the function callback method of capturing events, the parameters to the function are the same as the overridable method with the addition +of the managed widget which is passed in as the first argument. +</p> +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 +Import brl.map +Import brl.filesystem + +Type TMWEventListBase Abstract + Field list:TList + Method New() + list=CreateList() + End Method +End Type + +Type TMWFuncVoid + Field func(w:TMWidget) + Function Create:TMWFuncVoid(func(w:TMWidget)) + Local o:TMWFuncVoid=New TMWFuncVoid + o.func=func + Return o + End Function +End Type + +Type TMWFuncInt + Field func(w:TMWidget, a:Int) + Function Create:TMWFuncInt(func(w:TMWidget, a:Int)) + Local o:TMWFuncInt=New TMWFuncInt + o.func=func + Return o + End Function +End Type + +Type TMWFuncIntInt + Field func(w:TMWidget, a:Int, b:Int) + Function Create:TMWFuncIntInt(func(w:TMWidget, a:Int, b:Int)) + Local o:TMWFuncIntInt=New TMWFuncIntInt + o.func=func + Return o + End Function +End Type + +Type TMWFuncString + Field func(w:TMWidget, a:String) + Function Create:TMWFuncString(func(w:TMWidget, a:String)) + Local o:TMWFuncString=New TMWFuncString + o.func=func + Return o + End Function +End Type + + +Type TMWFuncStringObject + Field func(w:TMWidget, a:String, b:Object) + Function Create:TMWFuncStringObject(func(w:TMWidget, a:String, b:Object)) + Local o:TMWFuncStringObject=New TMWFuncStringObject + o.func=func + Return o + End Function +End Type + + +Rem +bbdoc: Defines an event list for functions that take the parameters (w:TMWidget) +EndRem +Type TMWEventListVoid Extends TMWEventListBase Final + Rem + bbdoc: Adds a callback function. + EndRem + Method Add(func(w:TMWidget)) + list.AddLast(TMWFuncVoid.Create(func)) + End Method + + Rem + bbdoc: Clears all callback functions. + EndRem + Method Clear() + list.Clear() + End Method + + Rem + bbdoc: Removes a callback function. + EndRem + Method Remove(func(w:TMWidget)) + For Local fp:TMWFuncVoid=EachIn list + If fp.func=func + list.Remove(fp) + Return + EndIf + Next + End Method + + Method Fire(w:TMWidget) + For Local fp:TMWFuncVoid=EachIn list + fp.func(w) + Next + End Method +End Type + + +Rem +bbdoc: Defines an event list for functions that take the parameters (w:TMWidget, a:Int) +EndRem +Type TMWEventListInt Extends TMWEventListBase Final + Rem + bbdoc: Adds a callback function. + EndRem + Method Add(func(w:TMWidget, a:Int)) + list.AddLast(TMWFuncInt.Create(func)) + End Method + + Rem + bbdoc: Clears all callback functions. + EndRem + Method Clear() + list.Clear() + End Method + + Rem + bbdoc: Removes a callback function. + EndRem + Method Remove(func(w:TMWidget, a:Int)) + For Local fp:TMWFuncInt=EachIn list + If fp.func=func + list.Remove(fp) + Return + EndIf + Next + End Method + + Method Fire(w:TMWidget, a:Int) + For Local fp:TMWFuncInt=EachIn list + fp.func(w,a) + Next + End Method +End Type + + +Rem +bbdoc: Defines an event list for functions that take the parameters (w:TMWidget, a:String) +EndRem +Type TMWEventListString Extends TMWEventListBase Final + Rem + bbdoc: Adds a callback function. + EndRem + Method Add(func(w:TMWidget, a:String)) + list.AddLast(TMWFuncString.Create(func)) + End Method + + Rem + bbdoc: Clears all callback functions. + EndRem + Method Clear() + list.Clear() + End Method + + Rem + bbdoc: Removes a callback function. + EndRem + Method Remove(func(w:TMWidget, a:String)) + For Local fp:TMWFuncString=EachIn list + If fp.func=func + list.Remove(fp) + Return + EndIf + Next + End Method + + Method Fire(w:TMWidget, a:String) + For Local fp:TMWFuncString=EachIn list + fp.func(w,a) + Next + End Method +End Type + + +Rem +bbdoc: Defines an event list for functions that take the parameters (w:TMWidget, a:Int, b:Int) +EndRem +Type TMWEventListIntInt Extends TMWEventListBase Final + Rem + bbdoc: Adds a callback function. + EndRem + Method Add(func(w:TMWidget, a:Int, b:Int)) + list.AddLast(TMWFuncIntInt.Create(func)) + End Method + + Rem + bbdoc: Clears all callback functions. + EndRem + Method Clear() + list.Clear() + End Method + + Rem + bbdoc: Removes a callback function. + EndRem + Method Remove(func(w:TMWidget, a:Int, b:Int)) + For Local fp:TMWFuncIntInt=EachIn list + If fp.func=func + list.Remove(fp) + Return + EndIf + Next + End Method + + Method Fire(w:TMWidget, a:Int, b:Int) + For Local fp:TMWFuncIntInt=EachIn list + fp.func(w,a,b) + Next + End Method +End Type + + +Rem +bbdoc: Defines an event list for functions that take the parameters (w:TMWidget, a:String, b:Object) +EndRem +Type TMWEventListStringObject Extends TMWEventListBase Final + Rem + bbdoc: Adds a callback function. + EndRem + Method Add(func(w:TMWidget, a:String, b:Object)) + list.AddLast(TMWFuncStringObject.Create(func)) + End Method + + Rem + bbdoc: Clears all callback functions. + EndRem + Method Clear() + list.Clear() + End Method + + Rem + bbdoc: Removes a callback function. + EndRem + Method Remove(func(w:TMWidget, a:String, b:Object)) + For Local fp:TMWFuncStringObject=EachIn list + If fp.func=func + list.Remove(fp) + Return + EndIf + Next + End Method + + Method Fire(w:TMWidget, a:String, b:Object) + For Local fp:TMWFuncStringObject=EachIn list + fp.func(w,a,b) + Next + End Method +End Type + + +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() + OnMouseEnterEvent.Fire(Self) + Case EVENT_MOUSELEAVE + OnMouseLeave() + OnMouseLeaveEvent.Fire(Self) + Case EVENT_TIMERTICK + OnTimer() + OnTimerEvent.Fire(Self) + End Select + End Method + + Rem + bbdoc: Activate the widget (give it keyboard focus). + EndRem + Method Activate(state:Int) + ActivateGadget(gadget) + 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's timer fires. + EndRem + Field OnTimerEvent:TMWEventListVoid + + Rem + bbdoc: Called when the widget is managed. + EndRem + Method OnManage() + End Method + + Rem + bbdoc: Called when the widget is managed. + EndRem + Field OnManageEvent:TMWEventListVoid + + Rem + bbdoc: Called when the widget is unmanaged. + EndRem + Method OnUnmanage() + End Method + + Rem + bbdoc: Called when the widget is unmanaged. + EndRem + Field OnUnmanageEvent:TMWEventListVoid + + Rem + bbdoc: Called when the mouse enters. + EndRem + Method OnMouseEnter() + End Method + + Rem + bbdoc: Called when the mouse enters. + EndRem + Field OnMouseEnterEvent:TMWEventListVoid + + Rem + bbdoc: Called when the mouse leaves. + EndRem + Method OnMouseLeave() + End Method + + Rem + bbdoc: Called when the mouse leaves. + EndRem + Field OnMouseLeaveEvent:TMWEventListVoid + + Rem + bbdoc: Fires an event at this managed widget. + about: The arguments are the same as @CreateEvent(), but no 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 + + OnTimerEvent=New TMWEventListVoid + OnManageEvent=New TMWEventListVoid + OnUnmanageEvent=New TMWEventListVoid + OnMouseEnterEvent=New TMWEventListVoid + OnMouseLeaveEvent=New TMWEventListVoid + + 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 + + OnMoveEvent=New TMWEventListIntInt + OnResizeEvent=New TMWEventListIntInt + OnCloseEvent=New TMWEventListVoid + OnDropEvent=New TMWEventListString + + 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: Activate the window. + EndRem + Method Activate(state:Int) + ActivateWindow(gadget) + End Method + + 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. + about:@x and @y are the new position. + EndRem + Method OnMove(x:Int, y:Int) + End Method + + Rem + bbdoc: Called when the window is moved. + EndRem + Field OnMoveEvent:TMWEventListIntInt + + Rem + bbdoc: Called when the window is resized. + about:@width and @height are the new size. + EndRem + Method OnResize(width:Int, height:Int) + End Method + + Rem + bbdoc: Called when the window is resized. + EndRem + Field OnResizeEvent:TMWEventListIntInt + + Rem + bbdoc: Called when the window's close gadget is pressed. + about: This default implementation sets @closed to TRUE and hide the window if no events are defined in @OnCloseEvent. + EndRem + Method OnClose() + If Not OnCloseEvent.list.Count() + closed=True + Hidden(True) + EndIf + End Method + + Rem + bbdoc: Called when the window's close gadget is pressed. + EndRem + Field OnCloseEvent:TMWEventListVoid + + Rem + bbdoc: Called when a file is dropped in the window. + about: @path is the dropped file. + EndRem + Method OnDrop(path:String) + End Method + + Rem + bbdoc: Called when a file is dropped in the window. + EndRem + Field OnDropEvent:TMWEventListString + + Method Handle(e:TEvent) + Select e.id + Case EVENT_WINDOWACCEPT + OnDrop(String(e.extra)) + OnDropEvent.Fire(Self,String(e.extra)) + Case EVENT_WINDOWMOVE + OnMove(e.x,e.y) + OnMoveEvent.Fire(Self,e.x,e.y) + Case EVENT_WINDOWSIZE + OnResize(e.x,e.y) + OnResizeEvent.Fire(Self,e.x,e.y) + Case EVENT_WINDOWCLOSE + OnClose() + OnCloseEvent.Fire(Self) + 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) + OnPressEvent=New TMWEventListVoid + 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) + OnPressEvent=New TMWEventListVoid + 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) + OnPressEvent=New TMWEventListVoid + 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() + End Method + + Rem + bbdoc: Called when the button is pressed. + EndRem + Field OnPressEvent:TMWEventListVoid + + Method Handle(e:TEvent) + Select e.id + Case EVENT_GADGETACTION + OnPress() + OnPressEvent.Fire(Self) + 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) + OnPressEvent=New TMWEventListInt + 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. + about: @checked is the current state. + EndRem + Method OnPress(checked:Int) + End Method + + Rem + bbdoc: Called when the checkbox is pressed. + EndRem + Field OnPressEvent:TMWEventListInt + + Method Handle(e:TEvent) + Select e.id + Case EVENT_GADGETACTION + OnPress(e.data) + OnPressEvent.Fire(Self,e.data) + Default + super.Handle(e) + End Select + End Method +End Type + + +Rem +bbdoc: Defines a managed radio button. +EndRem +Type TMRadioButton Extends TMCheckbox + Field set:TMRadioButtonSet + + 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) + OnPressEvent=New TMWEventListInt + BaseInitialise(CreateButton(label,x,y,w,h,group.gadget,BUTTON_RADIO),group) + typename="TMRadioButton" + Return Self + End Method + + Rem + bbdoc: Called when the checkbox is pressed. + about: @checked is the current state. In this default implementation the @TMRadioButtonSet which this button belongs too will fire + its @OnSelected() member. + EndRem + Method OnPress(checked:Int) + If set + set.ButtonFired(Self) + EndIf + 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[]) + OnSelectedEvent=New TMWEventListInt + but=buttons + For Local b:TMRadioButton=EachIn but + b.set=Self + Next + 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: If using the base TMRadioButton implmentation this will be called when the buttons change. + about: @index is the selected button. + EndRem + Method OnSelected(index:Int) + End Method + + Rem + bbdoc: If using the base TMRadioButton implmentation this will be called when the buttons change. + about: The radio button that fired will be passed into the event. + EndRem + Field OnSelectedEvent:TMWEventListInt + + 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 + + Method ButtonFired(b:TMRadioButton) + For Local f:Int=0 Until but.length + If but[f]=b + OnSelected(f) + OnSelectedEvent.Fire(b,f) + Return + EndIf + Next + 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) + OnTextChangedEvent=New TMWEventListString + 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 the text changes. + about: @txt is the content of the field + EndRem + Method OnTextChanged(txt:String) + End Method + + Rem + bbdoc: Called when the text changes. + EndRem + Field OnTextChangedEvent:TMWEventListString + + Method Handle(e:TEvent) + Select e.id + Case EVENT_GADGETACTION + Local s:String=TextFieldText(gadget) + OnTextChanged(s) + OnTextChangedEvent.Fire(Self,s) + 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) + OnTextChangedEvent=New TMWEventListVoid + OnSelectionEvent=New TMWEventListVoid + OnMenuEvent=New TMWEventListVoid + 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 the text changes. + EndRem + Method OnTextChanged() + End Method + + Rem + bbdoc: Called when the text changes. + EndRem + Field OnTextChangedEvent:TMWEventListVoid + + Rem + bbdoc: Called when the selection or cursor changes. + EndRem + Method OnSelection() + End Method + + Rem + bbdoc: Called when the selection or cursor changes. + EndRem + Field OnSelectionEvent:TMWEventListVoid + + Rem + bbdoc: Called when the context menu is requested. + EndRem + Method OnMenu() + End Method + + Rem + bbdoc: Called when the context menu is requested. + EndRem + Field OnMenuEvent:TMWEventListVoid + + Method Handle(e:TEvent) + Select e.id + Case EVENT_GADGETACTION + OnTextChanged() + OnTextChangedEvent.Fire(Self) + Case EVENT_GADGETSELECT + OnSelection() + OnSelectionEvent.Fire(Self) + Case EVENT_GADGETMENU + OnMenu() + OnMenuEvent.Fire(Self) + 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) + OnValueChangedEvent=New TMWEventListInt + 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. + about: @val is the new slider value. + EndRem + Method OnValueChanged(val:Int) + End Method + + Rem + bbdoc: Called when the slider moves. + EndRem + Field OnValueChangedEvent:TMWEventListInt + + Method Handle(e:TEvent) + Select e.id + Case EVENT_GADGETACTION + OnValueChanged(e.data) + OnValueChangedEvent.Fire(Self,e.data) + 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. + about: @index is the selected index. This can be -1 for no selection. + EndRem + Method OnIndexChanged(index:Int) + End Method + + Rem + bbdoc: Called when the selection changes. + EndRem + Field OnIndexChangedEvent:TMWEventListInt + + Method Handle(e:TEvent) + Select e.id + Case EVENT_GADGETACTION + OnIndexChanged(e.data) + OnIndexChangedEvent.Fire(Self,e.data) + 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) + OnIndexChangedEvent=New TMWEventListInt + 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) + OnIndexChangedEvent=New TMWEventListInt + 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) + OnIndexChangedEvent=New TMWEventListInt + 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 implementation will switch the widgets as defined by @DefinePages() + EndRem + Method OnIndexChanged(index:Int) + If index>-1 And 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 + +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) + OnPageLoadedEvent=New TMWEventListString + OnSelectURLEvent=New TMWEventListString + BaseInitialise(CreateHTMLView(x,y,w,h,group.gadget,style),group) + typename="TMHTMLView" + Return Self + End Method + + Rem + bbdoc: The current URL. + EndRem + Method CurrentURL: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. + about: @url is the selected URL. + EndRem + Method OnSelectURL(url:String) + End Method + + Rem + bbdoc: If HTMLVIEW_NONAVIGATE is set in the styles, then this is called when a link is clicked. + EndRem + Field OnSelectURLEvent:TMWEventListString + + Rem + bbdoc: Called when the page finishes loading. + about: @url is the loaded URL. + EndRem + Method OnPageLoaded(url:String) + End Method + + Rem + bbdoc: Called when the page finishes loading. + EndRem + Field OnPageLoadedEvent:TMWEventListString + + Method Handle(e:TEvent) + Select e.id + Case EVENT_GADGETACTION + OnSelectURL(e.extra.ToString()) + OnSelectURLEvent.Fire(Self,e.extra.ToString()) + Case EVENT_GADGETDONE + OnPageLoaded(CurrentURL()) + OnPageLoadedEvent.Fire(Self,CurrentURL()) + Default + super.Handle(e) + End Select + End Method +End Type + + +Type TMTreeNode + Field path:String + Field node:TGadget + Field tag:Object + Field icon:Int + Function Create:TMTreeNode(path:String, node:TGadget, tag:Object, icon:Int) + Local o:TMTreeNode=New TMTreeNode + o.path=path + o.node=node + o.tag=tag + o.icon=icon + Return o + End Function +End Type + +Rem +bbdoc: Defines a managed tree view. +about: The tree view works by treating its entries as if in a simple file system. +EndRem +Type TMTreeView Extends TMWidget + Field map:TMap + Field gmap:TMap + Field update:Int + + Rem + bbdoc: Creates a managed tree view. + returns: The created tree view. + about: @x, @y, @w, @h, @group and @style act the same as the MaxGUI arguments to @CreateTreeView(), except that @group is a TMWidget. + EndRem + Method Create:TMTreeView(x:Int, y:Int, w:Int, h:Int, group:TMWidget, style:Int=0) + update=False + map=New TMap + gmap=New TMap + OnSelectedEvent=New TMWEventListStringObject + OnClickedEvent=New TMWEventListStringObject + OnMenuEvent=New TMWEventListStringObject + OnExpandedEvent=New TMWEventListStringObject + OnCollapsedEvent=New TMWEventListStringObject + BaseInitialise(CreateTreeView(x,y,w,h,group.gadget,style),group) + typename="TMNodeView" + map.Insert("/",TMTreeNode.Create("/",TreeViewRoot(gadget),"/",-1)) + Return Self + End Method + + Method ResolvePath:TMTreeNode(path:String) + Return TMTreeNode(map.ValueForKey(path)) + End Method + + Method ResolveGadget:TMTreeNode(g:TGadget) + Return ResolvePath(gmap.ValueForKey(g).ToString()) + End Method + + Method Prune(path:String) + Local l:TList=CreateList() + + ' Not sure if this is overly ineffecient -- just being safe as in most languages deleting whilst iterating + ' is not recommended... + ' + For Local k:String=EachIn map.Keys() + If k=path Or k.Find(path+"/")=0 + l.AddLast(k) + EndIf + Next + + For Local k:String=EachIn l + Local n:TMTreeNode=ResolvePath(k) + map.Remove(k) + gmap.Remove(n.node) + Next + End Method + + Rem + bbdoc: Set an icon strip. + EndRem + Method SetIconStrip(icons:TIconStrip) + SetGadgetIconStrip(gadget,icons) + End Method + + Rem + bbdoc: The number of nodes in the view that are direct children on the passed node. + returns: The number of nodes. + about: @path is the path to count from. Unfortunately counting from the root (/) doesn't work, so it returns -1. + EndRem + Method CountChildren:Int(path:String) + If path="/" + Return -1 + EndIf + + Local node:TMTreeNode=ResolvePath(path) + + If node + Return CountTreeViewNodes(node.node) + Else + Return 0 + EndIf + End Method + + Rem + bbdoc: Remove nodes from the tree. + about: Attempting to remove the root node (/) will fail. + EndRem + Method Remove(path:String) + If path<>"/" + Local node:TMTreeNode=ResolvePath(path) + + If node + FreeTreeViewNode(node.node) + Prune(path) + EndIf + EndIf + End Method + + Rem + bbdoc: Don't redraw gadget when adding nodes. + EndRem + Method BeginUpdate() + update=True + End Method + + + Rem + bbdoc: Allow redraw of gadget when adding nodes. + EndRem + Method EndUpdate() + update=False + End Method + + + Rem + bbdoc: Add/modify nodes in the tree. + about: @path is the path to the node. This silently fails if the parent nodes don't exist. @tag is an Object that the entry is tagged with. + ToString() is called on this to create the text for the entry (so passing a String works fine). + @icon is the icon to use. Note that if you set an icon strip, then this seems to use the first icon (on Win32 at least) if set to -1. + EndRem + Method Set(path:String, tag:Object, icon:Int=-1) + Local parent:TMTreeNode=ResolvePath(FixedExtractDir(path)) + + If parent + Local node:TMTreeNode=ResolvePath(path) + + If node + ModifyTreeViewNode(node.node,tag.ToString(),icon) + Else + node=TMTreeNode.Create(path,AddTreeViewNode(tag.ToString(),parent.node,icon),tag,icon) + map.Insert(path,node) + gmap.Insert(node.node,path) + EndIf + + node.tag=tag + node.icon=icon + + If Not update + RedrawGadget(gadget) + EndIf + EndIf + End Method + + Rem + bbdoc: Get the tag at a node. + returns: The tag, or NULL for unknown node. + EndRem + Method GetNodeTag:Object(path:String) + Local node:TMTreeNode=ResolvePath(path) + If node + Return node.tag + Else + Return Null + EndIf + End Method + + Rem + bbdoc: Get the icon at a node. + returns: The icon, or -1 for none or unknown node. + EndRem + Method GetNodeIcon:Int(path:String) + Local node:TMTreeNode=ResolvePath(path) + If node + Return node.icon + Else + Return -1 + EndIf + End Method + + Rem + bbdoc: Expand a node on the tree. + EndRem + Method ExpandNode(path:String) + Local node:TMTreeNode=ResolvePath(path) + + If node + ExpandTreeViewNode(node.node) + EndIf + End Method + + Rem + bbdoc: Collapse a node on the tree. + EndRem + Method CollapseNode(path:String) + Local node:TMTreeNode=ResolvePath(path) + + If node + CollapseTreeViewNode(node.node) + EndIf + End Method + + Rem + bbdoc: Called when the an item is selected. + about: @path is the path to the selected item, @tag is the tag for that item. + EndRem + Method OnSelected(path:String, tag:Object) + End Method + + Rem + bbdoc: Called when the an item is selected. + EndRem + Field OnSelectedEvent:TMWEventListStringObject + + Rem + bbdoc: Called when the an item is double clicked. + about: @path is the path to the selected item, @tag is the tag for that item. + EndRem + Method OnClicked(path:String, tag:Object) + End Method + + Rem + bbdoc: Called when the an item is double clicked. + EndRem + Field OnClickedEvent:TMWEventListStringObject + + Rem + bbdoc: Called when the a context menu is requested. + about: @path is the path to the selected item, @tag is the tag for that item. + EndRem + Method OnMenu(path:String, tag:Object) + End Method + + Rem + bbdoc: Called when the an item is selected. + EndRem + Field OnMenuEvent:TMWEventListStringObject + + Rem + bbdoc: Called when a node is expanded. + about: @path is the path to the selected item, @tag is the tag for that item. + EndRem + Method OnExpanded(path:String, tag:Object) + End Method + + Rem + bbdoc: Called when a node is expanded. + EndRem + Field OnExpandedEvent:TMWEventListStringObject + + Rem + bbdoc: Called when a node is collapsed. + about: @path is the path to the selected item, @tag is the tag for that item. + EndRem + Method OnCollapsed(path:String, tag:Object) + End Method + + Rem + bbdoc: Called when a node is collapsed. + EndRem + Field OnCollapsedEvent:TMWEventListStringObject + + Method Handle(e:TEvent) + Select e.id + Case EVENT_GADGETSELECT + Local n:TMTreeNode=ResolveGadget(TGadget(e.extra)) + If n + OnSelected(n.path,n.tag) + OnSelectedEvent.Fire(Self,n.path,n.tag) + EndIf + Case EVENT_GADGETACTION + Local n:TMTreeNode=ResolveGadget(TGadget(e.extra)) + If n + OnClicked(n.path,n.tag) + OnClickedEvent.Fire(Self,n.path,n.tag) + EndIf + Case EVENT_GADGETOPEN + Local n:TMTreeNode=ResolveGadget(TGadget(e.extra)) + If n + OnExpanded(n.path,n.tag) + OnExpandedEvent.Fire(Self,n.path,n.tag) + EndIf + Case EVENT_GADGETCLOSE + Local n:TMTreeNode=ResolveGadget(TGadget(e.extra)) + If n + OnCollapsed(n.path,n.tag) + OnCollapsedEvent.Fire(Self,n.path,n.tag) + EndIf + Case EVENT_GADGETMENU + Local n:TMTreeNode=ResolveGadget(TGadget(e.extra)) + If n + OnMenu(n.path,n.tag) + OnMenuEvent.Fire(Self,n.path,n.tag) + EndIf + Default + super.Handle(e) + End Select + End Method +End Type + + +Type TMenuItem + Field id:Int + Field owner:TMMenu + Field path:String + Field tag:Object + Field gadget:TGadget + Field callback(menu:TMMenu, path:String, tag:Object) + Function Create:TMenuItem(owner:TMMenu, id:Int, path:String, gadget:TGadget, tag:Object, callback(menu:TMMenu, path:String, tag:Object)) + Local o:TMenuItem=New TMenuItem + o.owner=owner + o.id=id + o.path=path + o.gadget=gadget + o.tag=tag + o.callback=callback + Return o + End Function +End Type + + +Rem +bbdoc: Defines a managed menu. +about: Note that TMMenu is <b>NOT</b> a TMWidget. +EndRem +Type TMMenu + + Field root:TGadget + Field map:TMap + Field win:TMWindow + + Rem + bbdoc: Creates a managed menu that is associated as a window menu. + returns: The created menu. + about: @window is the window the menu is attached to. + EndRem + Method CreateWindowMenu:TMMenu(window:TMWindow) + map=New TMap + root=WindowMenu(window.gadget) + win=window + SetRoot() + Return Self + End Method + + Rem + bbdoc: Creates a managed menu that can be used as a popup menu. + returns: The created menu. + EndRem + Method CreatePopupMenu:TMMenu() + map=New TMap + root=CreateMenu("",0,Null) + win=Null + SetRoot() + Return Self + End Method + + Method Delete() + Clear() + If Not win + FreeMenu(root) + EndIf + End Method + + Rem + bbdoc: Clear all items from the menu + EndRem + Method Clear() + For Local m:TMenuItem=EachIn map + FreeMenu(m.gadget) + Static.DeregisterMenuItem(m) + Next + map.Clear() + SetRoot() + End Method + + Method SetRoot() + map.Insert("/",TMenuItem.Create(Self,0,"/",root,Null,Null)) + End Method + + Method ResolvePath:TMenuItem(path:String) + Return TMenuItem(map.ValueForKey(path)) + End Method + + Method Prune(path:String) + Local l:TList=CreateList() + + ' Not sure if this is overly ineffecient -- just being safe as in most languages deleting whilst iterating + ' is not recommended... + ' + For Local k:String=EachIn map.Keys() + If k=path Or k.Find(path+"/")=0 + l.AddLast(k) + EndIf + Next + + For Local k:String=EachIn l + Local n:TMenuItem=ResolvePath(k) + map.Remove(k) + Static.DeregisterMenuItem(n) + FreeMenu(n.gadget) + Next + End Method + + Rem + bbdoc: Add a menu option. + about: @path is the path to the menu item. This silently fails if the parent menus don't exist. @tag is an Object that the entry is tagged with. + ToString() is called on this to create the text for the menu (so passing a String works fine). If @callback is not null, then it is called when + this option is selected. + @hotkey and @modifier are as in MaxGUI's CreateMenu(). + EndRem + Method Set(path:String, tag:Object, callback(menu:TMMenu, path:String, tag:Object)=Null, hotkey:Int=0, modifier:Int=0) + If path<>"/" + Local parent:TMenuItem=ResolvePath(FixedExtractDir(path)) + + If parent + Local node:TMenuItem=ResolvePath(path) + + If node + SetMenuText(node.gadget,tag.ToString()) + Else + Local id:Int=Static.NextMenuID() + node=TMenuItem.Create(Self,id,path,CreateMenu(tag.ToString(),id,parent.gadget,hotkey,modifier),tag,callback) + map.Insert(path,node) + Static.RegisterMenuItem(node) + EndIf + + node.tag=tag + + If win + UpdateWindowMenu(win.gadget) + EndIf + EndIf + EndIf + End Method + + Rem + bbdoc: Remove menu item and its children. + about: @path is the path to the menu item. Root cannot be removed. + EndRem + Method Remove(path:String) + If path<>"/" + Prune(path) + + If win + UpdateWindowMenu(win.gadget) + EndIf + EndIf + End Method + + Rem + bbdoc: Change a menu tag (and therefore its text). + about: @path is the path to the menu item. Root cannot be changed. + EndRem + Method SetTag(path:String, tag:Object) + If path<>"/" + Local node:TMenuItem=ResolvePath(path) + + If node + SetMenuText(node.gadget,tag.ToString()) + node.tag=tag + + If win + UpdateWindowMenu(win.gadget) + EndIf + EndIf + EndIf + End Method + + Rem + bbdoc: Change a menu check. + about: @path is the path to the menu item. Root cannot be changed. + EndRem + Method Check(path:String, check:Int) + If path<>"/" + Local node:TMenuItem=ResolvePath(path) + + If node + If check + CheckMenu(node.gadget) + Else + UncheckMenu(node.gadget) + EndIf + + If win + UpdateWindowMenu(win.gadget) + EndIf + EndIf + EndIf + End Method + + Rem + about: Is a menu item checked. + EndRem + Method IsChecked:Int(path:String) + Local ret:Int=False + + If path<>"/" + Local node:TMenuItem=ResolvePath(path) + + If node + ret=MenuChecked(node.gadget) + EndIf + EndIf + + Return ret + End Method + + Rem + bbdoc: Enable/disable a menu item. + about: @path is the path to the menu item. Root cannot be changed. + EndRem + Method Enable(path:String, enab:Int) + If path<>"/" + Local node:TMenuItem=ResolvePath(path) + + If node + If enab + EnableMenu(node.gadget) + Else + DisableMenu(node.gadget) + EndIf + + If win + UpdateWindowMenu(win.gadget) + EndIf + EndIf + EndIf + End Method + + Rem + about: Is a menu item enabled. + EndRem + Method IsEnabled:Int(path:String) + Local ret:Int=False + + If path<>"/" + Local node:TMenuItem=ResolvePath(path) + + If node + ret=MenuEnabled(node.gadget) + EndIf + EndIf + + Return ret + End Method + + Rem + bbdoc: Called when the an item is selected in the menu. + EndRem + Method OnMenuItem(path:String, tag:Object) + End Method + + Rem + bbdoc: Popup the menu. + about: @win is a gadget to pass to MaxGUI. For some reason you need this, and the docs say it should be a window. + When I've tried any gadget would suffice, but don't come crying to me if it stops working for non-window gadgets. + EndRem + Method Popup(g:TMWidget) + PopupWindowMenu(g.gadget,root) + End Method + + Method ToString:String() + Return "TMMenu:"+super.ToString() + End Method +End Type + + +Rem +bbdoc: Defines a managed canvas. +EndRem +Type TMCanvas Extends TMWidget + + Rem + bbdoc: Creates a managed canvas. + returns: The created canvas. + about: @x, @y, @w, @h, @group, @style and @gfxflags act the same as the MaxGUI arguments to @CreateCanvas(), except that @group is a TMWidget. + EndRem + Method Create:TMCanvas(x:Int, y:Int, w:Int, h:Int, group:TMWidget, style:Int=0) + OnRedrawEvent=New TMWEventListVoid + OnButtonDownEvent=New TMWEventListInt + OnButtonUpEvent=New TMWEventListInt + OnMouseMoveEvent=New TMWEventListIntInt + OnMouseWheelEvent=New TMWEventListInt + OnKeyDownEvent=New TMWEventListInt + OnKeyUpEvent=New TMWEventListInt + OnKeyEvent=New TMWEventListInt + BaseInitialise(CreateCanvas(x,y,w,h,group.gadget,style),group) + typename="TMCanvas" + Return Self + End Method + + Rem + bbdoc: Set the graphics so that the canvas can be drawn onto. + EndRem + Method SetupGraphics() + SetGraphics(CanvasGraphics(gadget)) + End Method + + Rem + bbdoc: Called when the canvas should be redrawn. + EndRem + Method OnRedraw() + End Method + + Rem + bbdoc: Called when the canvas should be redrawn. + EndRem + Field OnRedrawEvent:TMWEventListVoid + + Rem + bbdoc: Called when the a mouse button is pressed. + about: @button is the pressed button. + EndRem + Method OnButtonDown(button:Int) + End Method + + Rem + bbdoc: Called when the a mouse button is pressed. + EndRem + Field OnButtonDownEvent:TMWEventListInt + + Rem + bbdoc: Called when the a mouse button is released. + about: @button is the released button. + EndRem + Method OnButtonUp(button:Int) + End Method + + Rem + bbdoc: Called when the a mouse button is released. + EndRem + Field OnButtonUpEvent:TMWEventListInt + + Rem + bbdoc: Called when the mouse moves. + about: @x and @y are the mouse co-ordinates. + EndRem + Method OnMouseMove(x:Int, y:Int) + End Method + + Rem + bbdoc: Called when the an item is selected. + EndRem + Field OnMouseMoveEvent:TMWEventListIntInt + + Rem + bbdoc: Called when the mouse wheel moves. + about: @delta is the amount the wheel moves. + EndRem + Method OnMouseWheel(delta:Int) + End Method + + Rem + bbdoc: Called when the mouse wheel moves. + EndRem + Field OnMouseWheelEvent:TMWEventListInt + + Rem + bbdoc: Called when a key is held down. + about: @code is the key code. + EndRem + Method OnKeyDown(code:Int) + End Method + + Rem + bbdoc: Called when a key is held down. + EndRem + Field OnKeyDownEvent:TMWEventListInt + + Rem + bbdoc: Called when a key is released. + about: @code is the key code. + EndRem + Method OnKeyUp(code:Int) + End Method + + Rem + bbdoc: Called when a key is released. + EndRem + Field OnKeyUpEvent:TMWEventListInt + + Rem + bbdoc: Called when a key character is generated. + about: @code is the unicode value. + EndRem + Method OnKey(code:Int) + End Method + + Rem + bbdoc: Called when a key character is generated. + EndRem + Field OnKeyEvent:TMWEventListInt + + Method Handle(e:TEvent) + Select e.id + Case EVENT_GADGETPAINT + OnRedraw() + OnRedrawEvent.Fire(Self) + Case EVENT_MOUSEDOWN + OnButtonDown(e.data) + OnButtonDownEvent.Fire(Self,e.data) + Case EVENT_MOUSEUP + OnButtonUp(e.data) + OnButtonUpEvent.Fire(Self,e.data) + Case EVENT_MOUSEMOVE + OnMouseMove(e.x,e.y) + OnMouseMoveEvent.Fire(Self,e.x,e.y) + Case EVENT_MOUSEWHEEL + OnMouseWheel(e.data) + OnMouseWheelEvent.Fire(Self,e.data) + Case EVENT_KEYDOWN + OnKeyDown(e.data) + OnKeyDownEvent.Fire(Self,e.data) + Case EVENT_KEYUP + OnKeyUp(e.data) + OnKeyUpEvent.Fire(Self,e.data) + Case EVENT_KEYCHAR + OnKey(e.data) + OnKeyEvent.Fire(Self,e.data) + Default + super.Handle(e) + End Select + End Method +End Type + + +Rem +bbdoc: Defines a toolbar. +EndRem +Type TMToolbar Extends TMWidget + Rem + bbdoc: Creates a managed toolbar. + returns: The created toolbar. + about: @source, @group and @style act the same as the MaxGUI arguments to @CreateToolBar(), 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:TMToolbar(source:Object, group:TMWidget, style:Int=0) + OnSelectedEvent=New TMWEventListInt + BaseInitialise(CreateToolBar(source,0,0,0,0,group.gadget,style),group) + typename="TMToolbar" + Return Self + End Method + + Rem + bbdoc: Adds an item to the toolbar. + EndRem + Method AddItem(icon:Int, flags:Int=0, tooltip:String=Null) + AddGadgetItem(gadget,"",flags,icon,tooltip,Null) + End Method + + Rem + bbdoc: Set the tooltips. + EndRem + Method SetTooltips(tips:String[]) + SetToolBarTips(gadget,tips) + 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: Called when an icon is selected. + about: @index is the selected index. + EndRem + Method OnSelected(index:Int) + End Method + + Rem + bbdoc: Called when an icon is selected. + EndRem + Field OnSelectedEvent:TMWEventListInt + + Method Handle(e:TEvent) + Select e.id + Case EVENT_GADGETACTION + OnSelected(e.data) + OnSelectedEvent.Fire(Self,e.data) + Default + super.Handle(e) + End Select + End Method +End Type + + +Rem +bbdoc: Defines a managed panel. +EndRem +Type TMPanel Extends TMWidget + + Rem + bbdoc: Creates a managed panel. + returns: The created panel. + about: @x, @y, @w, @h, @group, @style and @title act the same as the MaxGUI arguments to @CreatePanel(), except that @group is a TMWidget. + EndRem + Method Create:TMPanel(x:Int, y:Int, w:Int, h:Int, group:TMWidget, style:Int=0, title:String="") + OnButtonDownEvent=New TMWEventListInt + OnButtonUpEvent=New TMWEventListInt + OnMouseMoveEvent=New TMWEventListIntInt + OnMouseWheelEvent=New TMWEventListInt + OnKeyDownEvent=New TMWEventListInt + OnKeyUpEvent=New TMWEventListInt + OnKeyEvent=New TMWEventListInt + BaseInitialise(CreatePanel(x,y,w,h,group.gadget,style,title),group) + typename="TMPanel" + Return Self + End Method + + Rem + bbdoc: Called when the a mouse button is pressed. + about: @button is the pressed button. + EndRem + Method OnButtonDown(button:Int) + End Method + + Rem + bbdoc: Called when the a mouse button is pressed. + EndRem + Field OnButtonDownEvent:TMWEventListInt + + Rem + bbdoc: Called when the a mouse button is released. + about: @button is the released button. + EndRem + Method OnButtonUp(button:Int) + End Method + + Rem + bbdoc: Called when the a mouse button is released. + EndRem + Field OnButtonUpEvent:TMWEventListInt + + Rem + bbdoc: Called when the mouse moves. + about: @x and @y are the mouse co-ordinates. + EndRem + Method OnMouseMove(x:Int, y:Int) + End Method + + Rem + bbdoc: Called when the an item is selected. + EndRem + Field OnMouseMoveEvent:TMWEventListIntInt + + Rem + bbdoc: Called when the mouse wheel moves. + about: @delta is the amount the wheel moves. + EndRem + Method OnMouseWheel(delta:Int) + End Method + + Rem + bbdoc: Called when the mouse wheel moves. + EndRem + Field OnMouseWheelEvent:TMWEventListInt + + Rem + bbdoc: Called when a key is held down. + about: @code is the key code. + EndRem + Method OnKeyDown(code:Int) + End Method + + Rem + bbdoc: Called when a key is held down. + EndRem + Field OnKeyDownEvent:TMWEventListInt + + Rem + bbdoc: Called when a key is released. + about: @code is the key code. + EndRem + Method OnKeyUp(code:Int) + End Method + + Rem + bbdoc: Called when a key is released. + EndRem + Field OnKeyUpEvent:TMWEventListInt + + Rem + bbdoc: Called when a key character is generated. + about: @code is the unicode value. + EndRem + Method OnKey(code:Int) + End Method + + Rem + bbdoc: Called when a key character is generated. + EndRem + Field OnKeyEvent:TMWEventListInt + + Method Handle(e:TEvent) + Select e.id + Case EVENT_MOUSEDOWN + OnButtonDown(e.data) + OnButtonDownEvent.Fire(Self,e.data) + Case EVENT_MOUSEUP + OnButtonUp(e.data) + OnButtonUpEvent.Fire(Self,e.data) + Case EVENT_MOUSEMOVE + OnMouseMove(e.x,e.y) + OnMouseMoveEvent.Fire(Self,e.x,e.y) + Case EVENT_MOUSEWHEEL + OnMouseWheel(e.data) + OnMouseWheelEvent.Fire(Self,e.data) + Case EVENT_KEYDOWN + OnKeyDown(e.data) + OnKeyDownEvent.Fire(Self,e.data) + Case EVENT_KEYUP + OnKeyUp(e.data) + OnKeyUpEvent.Fire(Self,e.data) + Case EVENT_KEYCHAR + OnKey(e.data) + OnKeyEvent.Fire(Self,e.data) + Default + super.Handle(e) + End Select + End Method +End Type + + +Rem +bbdoc: Defines a managed progress bar. +EndRem +Type TMProgressBar Extends TMWidget + + Rem + bbdoc: Creates a managed progress bar. + returns: The created progress bar. + about: @x, @y, @w, @h, @group and @style act the same as the MaxGUI arguments to @CreateProgBar(), except that @group is a TMWidget. + EndRem + Method Create:TMProgressBar(x:Int, y:Int, w:Int, h:Int, group:TMWidget, style:Int=0) + BaseInitialise(CreateProgBar(x,y,w,h,group.gadget,style),group) + typename="TMProgressBar" + Return Self + End Method + + Rem + bbdoc: Set the value for the progress bar. + about: @value is the value (between 0 and 1). + EndRem + Method SetValue(value:Double) + UpdateProgBar(gadget,value) + 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 + +Function FixedExtractDir:String(p:String) + p=ExtractDir(p) + If p.length=0 + p="/" + EndIf + Return p +End Function + +Type Static + Global list:TList + Global menu:TList + Global menuid:Int + + Function Init() + list=CreateList() + menu=CreateList() + menuid=0 + 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 + If e.id=EVENT_MENUACTION + For Local m:TMenuItem=EachIn menu + If m.id=e.data + DebugLog "Passing menu event to " + m.owner.ToString() + m.owner.OnMenuItem(m.path,m.tag) + If m.callback + m.callback(m.owner,m.path,m.tag) + EndIf + EndIf + Next + Else + 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 + EndIf + + Return e + End Function + + Function Register(w:TMWidget) + list.AddLast(w) + w.OnManage() + w.OnManageEvent.Fire(w) + End Function + + Function Deregister(w:TMWidget) + w.OnUnmanage() + w.OnUnmanageEvent.Fire(w) + list.Remove(w) + End Function + + Function RegisterMenuItem(m:TMenuItem) + menu.AddLast(m) + End Function + + Function DeregisterMenuItem(m:TMenuItem) + menu.Remove(m) + End Function + + Function NextMenuID:Int() + menuid:+1 + Return menuid + End Function +End Type + Static.Init()
\ No newline at end of file |