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