summaryrefslogtreecommitdiff
path: root/mwidget.mod
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2020-04-08 21:23:22 +0000
committerIan C <ianc@noddybox.co.uk>2020-04-08 21:23:22 +0000
commit6c0b11a6bb632a5c7cd29ad8a92ce31fe929c194 (patch)
tree81d8972c24c12b4e1ec51a853ce0bee5737e2a56 /mwidget.mod
parent2fc5b1e06854d1cb1e5ad59ceb6d8748a9d82f32 (diff)
Removed Strict -- doesn't seem to like it anymore.
Diffstat (limited to 'mwidget.mod')
-rw-r--r--mwidget.mod/mwidget.bmx5615
1 files changed, 2807 insertions, 2808 deletions
diff --git a/mwidget.mod/mwidget.bmx b/mwidget.mod/mwidget.bmx
index 397d50d..51b2573 100644
--- a/mwidget.mod/mwidget.bmx
+++ b/mwidget.mod/mwidget.bmx
@@ -1,2808 +1,2807 @@
-' Copyright (c) 2006 Ian Cowburn
-'
-' Permission is hereby granted, free of charge, to any person obtaining a copy of
-' this software and associated documentation files (the "Software"), to deal in
-' the Software without restriction, including without limitation the rights to
-' use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-' of the Software, and to permit persons to whom the Software is furnished to do
-' so, subject to the following conditions:
-'
-' The above copyright notice and this permission notice shall be included in all
-' copies or substantial portions of the Software.
-'
-' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-' IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-' FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-' AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-' LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-' OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-' SOFTWARE.
-'
-' $Id$
-'
-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
-&nbsp;&nbsp;&nbsp;&nbsp;Method OnClose(e:TEvent)
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closed=Confirm("Really quit?")
-&nbsp;&nbsp;&nbsp;&nbsp;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)
-&nbsp;&nbsp;&nbsp;&nbsp;Local w:TMWindow=TMWindow(o)
-&nbsp;&nbsp;&nbsp;&nbsp;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: Ian Cowburn -- released under the MIT License"
-ModuleInfo "Author: Ian Cowburn"
-ModuleInfo "Version: $Revision$"
-
-Strict
-Import maxgui.maxgui
-Import brl.linkedlist
-Import brl.event
-Import brl.timer
-Import brl.map
-Import brl.filesystem
-Import brl.eventqueue
-
-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 TMapEnumerator(MapValues(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()
+' Copyright (c) 2006 Ian Cowburn
+'
+' Permission is hereby granted, free of charge, to any person obtaining a copy of
+' this software and associated documentation files (the "Software"), to deal in
+' the Software without restriction, including without limitation the rights to
+' use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+' of the Software, and to permit persons to whom the Software is furnished to do
+' so, subject to the following conditions:
+'
+' The above copyright notice and this permission notice shall be included in all
+' copies or substantial portions of the Software.
+'
+' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+' IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+' FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+' AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+' LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+' OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+' SOFTWARE.
+'
+' $Id$
+'
+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
+&nbsp;&nbsp;&nbsp;&nbsp;Method OnClose(e:TEvent)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closed=Confirm("Really quit?")
+&nbsp;&nbsp;&nbsp;&nbsp;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)
+&nbsp;&nbsp;&nbsp;&nbsp;Local w:TMWindow=TMWindow(o)
+&nbsp;&nbsp;&nbsp;&nbsp;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: Ian Cowburn -- released under the MIT License"
+ModuleInfo "Author: Ian Cowburn"
+ModuleInfo "Version: $Revision$"
+
+Import maxgui.maxgui
+Import brl.linkedlist
+Import brl.event
+Import brl.timer
+Import brl.map
+Import brl.filesystem
+Import brl.eventqueue
+
+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 TMapEnumerator(MapValues(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()