Navigation: ABC Library Reference > ToolbarReltreeClass >====== ToolbarReltreeClass Overview ====== | |
The ToolbarReltreeClass is a ToolbarTarget that handles events for a RelationTree control LIST. See Control Templates--RelationTree for more information.
ToolbarReltreeClass Concepts
ToolbarReltreeClass objects implement the event handling specific to a RelationTree control LIST. The LIST specific events are primarily scrolling events, but may include other events. There may be zero or several ToolbarTarget objects within a procedure; however, only one is active at a time.
ToolbarReltreeClass Relationship to Other Application Builder Classes
The ToolbarReltreeClass is derived from the ToolbarTarget class.
The ToolbarClass keeps a list of ToolbarTarget objects (including ToolbarReltreeClass objects) so it can forward events and method calls to a particular target.
ToolbarReltreeClass ABC Template Implementation
The RelationTree control template derives a ToolbarReltreeClass object called REL#::Toolbar, where # is the RelationTree template's instance number. The template generates code to register the REL#::Toolbar object with the Toolbar object for the procedure that contains the RelationTree control template. Finally, the template generates the REL#::Toolbar.TakeEvent method to convert toolbar events into actions specific to the RelationTree LIST control.
Toolbar ToolbarReltreeClass Source Files
The ToolbarReltreeClass source code is installed by default to the Clarion \LIBSRC folder. The source code and its respective components are in:
ABTOOLBA.INC | ToolbarReltreeClass declarations |
ABTOOLBA.CLW | ToolbarReltreeClass method definitions |
ToolbarReltreeClass Conceptual Example
The following example shows a typical sequence of statements to declare, instantiate, initialize, use, and terminate a ToolbarClass object and a related ToolbarReltreeClass (ToolbarTarget) object.
This example uses a global toolbar to drive a template generated RelTree control. The program POSTs toolbar events to the active MDI window using the SYSTEM{Prop:Active} property. Then the ToolbarClass object calls on the active ToolbarReltreeClass object to handle the (scrolling) events.
PROGRAM
_ABCDllMode_ EQUATE(0)
_ABCLinkMode_ EQUATE(1)
INCLUDE('ABERROR.INC')
INCLUDE('ABFILE.INC')
INCLUDE('ABWINDOW.INC')
INCLUDE('ABTOOLBA.INC')
INCLUDE('KEYCODES.CLW')
MAP
Main PROCEDURE
OrderTree PROCEDURE
END
GlobalErrors ErrorClass
Access:Customer CLASS(FileManager)
Init PROCEDURE
END
Relate:Customer CLASS(RelationManager)
Init PROCEDURE
Kill PROCEDURE,VIRTUAL
END
Access:Orders CLASS(FileManager)
Init PROCEDURE
END
Relate:Orders CLASS(RelationManager)
Init PROCEDURE
Kill PROCEDURE,VIRTUAL
END
GlobalRequest BYTE(0),THREAD
GlobalResponse BYTE(0),THREAD
VCRRequest LONG(0),THREAD
Customer FILE,DRIVER('TOPSPEED'),PRE(CUS),CREATE,BINDABLE,THREAD
KeyCustNumber KEY(CUS:CustNumber),NOCASE,OPT
KeyCompany KEY(CUS:Company),DUP,NOCASE
Record RECORD,PRE()
CustNumber LONG
Company STRING(20)
ZipCode LONG
END
END
Orders FILE,DRIVER('TOPSPEED'),PRE(ORD),CREATE,BINDABLE,THREAD
KeyOrderNumber KEY(ORD:OrderNumber),NOCASE,OPT,PRIMARY
KeyCustNumber KEY(ORD:CustNumber),DUP,NOCASE,OPT
Record RECORD,PRE()
CustNumber LONG
OrderNumber SHORT
InvoiceAmount DECIMAL(7,2)
END
END
CODE
GlobalErrors.Init
Relate:Customer.Init
Relate:Orders.Init
Main !run Application Frame w/ toolbar
Relate:Customer.Kill
Relate:Orders.Kill
GlobalErrors.Kill
Main PROCEDURE !Application Frame w/ toolbar
Frame APPLICATION('Application'),AT(,,310,210),SYSTEM,MAX,RESIZE,IMM
MENUBAR
ITEM('Orders'),USE(?OrderTree)
END
TOOLBAR,AT(0,0,,20) !must use toolbar EQUATEs
BUTTON,AT(4,4),USE(?Toolbar:Top,Toolbar:Top),DISABLE,ICON('VCRFIRST.ICO')
BUTTON,AT(16,4),USE(?Toolbar:PageUp,Toolbar:PageUp),DISABLE,ICON('VCRPRIOR.ICO')
BUTTON,AT(28,4),USE(?Toolbar:Up,Toolbar:Up),DISABLE,ICON('VCRUP.ICO')
BUTTON,AT(40,4),USE(?Toolbar:Down,Toolbar:Down),DISABLE,ICON('VCRDOWN.ICO')
BUTTON,AT(52,4),USE(?Toolbar:PageDown,Toolbar:PageDown),DISABLE,ICON('VCRNEXT.ICO')
BUTTON,AT(64,4),USE(?Toolbar:Bottom,Toolbar:Bottom),DISABLE,ICON('VCRLAST.ICO')
END
END
ThisWindow CLASS(WindowManager)
Init PROCEDURE(),BYTE,PROC,VIRTUAL
TakeAccepted PROCEDURE(),BYTE,PROC,VIRTUAL
END
CODE
ThisWindow.Run()
ThisWindow.Init PROCEDURE()
ReturnValue BYTE,AUTO
CODE
ReturnValue = PARENT.Init()
SELF.FirstField = 1
OPEN(Frame)
SELF.Opened=True
RETURN ReturnValue
ThisWindow.TakeAccepted PROCEDURE()
CODE
CASE ACCEPTED()
OF Toolbar:First TO Toolbar:Last !post toolbar event to active thread
POST(EVENT:Accepted,ACCEPTED(),SYSTEM{Prop:Active})
RETURN Level:Notify
OF ?OrderTree
START(OrderTree,25000) !start OrderTree procedure/thread
END
RETURN PARENT.TakeAccepted()
OrderTree PROCEDURE !template generated Window procedure
! with RelTree control template
DisplayString STRING(255)
Toolbar ToolbarClass !declare Toolbar object
REL1::Toolbar CLASS(ToolbarReltreeClass) !derive REL1::Toolbar object (target)
TakeEvent PROCEDURE(<;*LONG VCR>,WindowManager WM),VIRTUAL
END
!template generated RelTree QUEUEs and vaiables
window WINDOW('Browse Orders'),AT(,,115,110),SYSTEM,GRAY,DOUBLE,MDI
LIST,AT(5,4,106,100),USE(?RelTree),FORMAT('800LT@s200@'),FROM(Queue:RelTree)
END
ThisWindow CLASS(WindowManager) !derive ThisWindow object
Init PROCEDURE(),BYTE,PROC,VIRTUAL
Kill PROCEDURE(),BYTE,PROC,VIRTUAL
TakeFieldEvent PROCEDURE(),BYTE,PROC,VIRTUAL
END
CODE
GlobalResponse = ThisWindow.Run()
!template generated RelTree ROUTINEs
ThisWindow.Init PROCEDURE()
ReturnValue BYTE,AUTO
CODE
ReturnValue = PARENT.Init()
SELF.FirstField = ?RelTree
SELF.VCRRequest &= VCRRequest
SELF.Errors &= GlobalErrors
SELF.AddItem(Toolbar) !register Toolbar with ThisWindow
Relate:Customer.Open
DO REL1::ContractAll
OPEN(window)
SELF.Opened=True
Toolbar.AddTarget(REL1::Toolbar,?RelTree) !make REL1::Toolbar a toolbar target
Toolbar.SetTarget(?RelTree) !make REL1::Toolbar the active target
?RelTree{Prop:Selected} = 1
SELF.SetAlerts()
RETURN ReturnValue
REL1::Toolbar.TakeEvent PROCEDURE(<;*LONG VCR>,WindowManager WM)
CODE !convert toolbar events to
CASE ACCEPTED() ! Reltree-specific actions
OF Toolbar:Bottom TO Toolbar:Up
SELF.Control{PROPLIST:MouseDownRow} = CHOICE(SELF.Control)
EXECUTE(ACCEPTED()-Toolbar:Bottom+1)
DO REL1::NextParent !on Toolbar:Bottom
DO REL1::PreviousParent !on Toolbar:Top
DO REL1::NextLevel !on Toolbar:PageDown
DO REL1::PreviousLevel !on Toolbar:PageUp
DO REL1::NextRecord !on Toolbar:Down
DO REL1::PreviousRecord !on Toolbar:Up
END
END