serial KeyCodesCNTs,TTreeViewExCNTs,%Const Default %Library.TMTreeView 0 %Library.Boolean 1 %Library.String %Library.Integer 0 %Library.Integer 0 %Library.TMTimer %Library.Boolean 0 %Library.Boolean 0 %Library.String %Library.Integer 0 %Library.String %Library.String %Library.Integer 0 Bevat ORef van laatste node die werd aangeclickt. Let wel: - De ORef (node) is misschien in een later stadium verwijderd, toch zal FLastNodeClicked dezelfde waarde behouden - De ORef bestaat misschien nog, maar in de tussentijd kan alles verwijderd zijn, heropgevuld, en andere node met zelfde ORef zijn plaats hebben ingenomen. %Library.String 0 %Library.String 0 %Library.Integer -1 %Library.String %Library.String %Library.String %Library.String 0.05 %Library.Boolean 0 %Library.String %Library.Integer -1 %Library.String %Library.String %Library.String %Library.String %Library.String ARGS=Sender,Program,RowID,Column,VolgNr,Bookmark,Node,X,Y,Button,Shift %Library.String ARGS=Sender,Program,RowID,Column,VolgNr,Bookmark,Node,X,Y,Button,Shift %Library.String EVENT: ARGS=$LB(Sender,Program,RowID,Column,Bookmark,Node,AllowEdit) Sender=Treeview ORef AllowEdit invullen naargelang wijzigingen toegelaten zijn of niet %Library.String %Library.String EVENT Args=$LB(Sender,Program,RowID,Column,Bookmark,Node,NewVal,AllowChange) %Library.String EVENT: ARGS=$LB(Sender,ParentNode,ParentBookmark) %Library.String EVENT: ARGS=$LB(Sender,Program,FetchID) Array 'aFS' is gevuld met een fetchdefinition (FetchID), je kan deze gegevens nu wijzigen naar eigen noden %Library.String %Library.String EVENT: ARGS=$LB(Sender,Program,Definition,VolgNr) Array 'aLD' is gevuld met een listdefinition aLD(%this,0)=$LB(Program,FetchID) aLD(%this,1)=$LB(Program,FetchID) dus aLD(%this,VolgNr) Wijzigingen aanbrengen in de array is NIET aan te raden en kan leiden tot onverwachte resultaten Interfacekoppeling: iLD(%this,Node.Level)=VolgNr %Library.String EVENT: ARGS=$LB(Sender,Program,RowID,IsHeader) Array 'aLS' is gevuld met een listdefinition (RowID), je kan deze gegevens nu wijzigen naar eigen noden Array 'SortedCols' bevat: SortedCols(1)=column1 SortedCols(2)=column2 enz... %Library.String %Library.String %Library.Boolean 0 %Library.String 0 %Library.Boolean 1 Unique Node Combinatie van: $J _ %this _ "TV" Wordt gebruikt bij ^Hulp als uniek nodenummer Opbouw ^Hulp: ^Hulp(..UN,TreeNodeORef,$$$ntFieldData)=$LB(...): bevat de "data" ^Hulp(..UN,TreeNodeORef,$$$ntHasChildren)=1 of 0, de node bevat 'children' ^Hulp(..UN,TreeNodeORef,$$$ntNodesFetched)=1 of 0, zijn de childnodes reeds gefetched of niet %Library.String $J_+%this_"TV" %Library.Integer +%this For internal use. generator initvalue:%String 0 %Library.Status ParentNode: Oref van de node waaraan deze moet worden toegevoegd ]]> ParentNode:%TMTreeNode=0 0 ParentNode: Oref van de node waaraan deze moet worden toegevoegd
  • HdrRowID: Dit HdrRowID gebruiken ipv default
  • Program: Dit Program gebruiken ipv default
  • ]]>
    ParentNode:%TMTreeNode=0,HdrRowID:%String,Program:%String 0 %Library.TMTreeNode
    ParentNode: Oref van de node waaraan deze moet worden toegevoegd
  • FieldData: $LB met daarin alle veldinhoud (bijv. 3 velden naam,adres,leeftijd: FieldData=$LB("Fons","Krekelstraat",46)
  • Bookmark: Data die moet gekoppeld worden aan de row (bijv. ID's, ORefs, ...)
  • HasChildren: Bij gebruik van OnFetchNodes beslissen of de toe te voegen node kinderen heeft (tekent een '+') of niet
  • RowID: Dit RowID gebruiken ipv default
  • SelRowID: Dit SelRowID gebruiken ipv default
  • IsSelectable: Is de node selecteerbaar?
  • NodesFetched: Zijn de childnodes reeds gefetched of niet
  • Program: Dit Program gebruiken ipv default
  • ]]>
    ParentNode:%TMTreeNode=0,FieldData,Bookmark:%String,HasChildren:%Boolean,RowID,SelRowID:%String,IsSelectable:%Boolean=1,NodesFetched:%Boolean=0,Program:%String 0 %Library.TMTreeNode
    Zwier alles uit de bmpbuffer zodat hertekenen van de rows vereist is (enkel text-redraw). 0 %Library.Boolean Roep dit op ipv %TMTreeView.Items.Clear(). 0 Afsluiten ingelezen programma. 0 - ;============================================================================= ; We verwittigen de buitenwereld dat Program worden ingelezen, er kan ; eventueel een event gekoppeld worden om zaken voor te bereiden New StdArgs Set StdArgs=$LB(%this,..Program,"True") ;ARGS: $LB(Sender,Program,DefaultClose) Do ..FTriggerEvent(..OnBeforeCloseProgram,.StdArgs) If $LI(StdArgs,3)="False" Do Quit 1 ;Nog CloseProgram oproepen, dan sluiten . Do ..FTriggerEvent(..OnAfterCloseProgram,$LB(%this,..Program,"False")) ;============================================================================= ;Validering van een nog eventueel actief veld ;Geen focus op tree daarna, aangezien CloseProgram met de treeview 'off screen' kan gebeuren Do ..FValidateField(0) ;Arrays met definities Do ..FUnPrepareGP() Do ..FUnPrepareLDs() Do ..FUnPrepareFSs() Do ..FUnPrepareLSs() ;Array met fast index access (via Node.Level) Do ..FUnPrepareLDInterfaceIndex() ;Array met verwijzingen naar (+) en (-) buttons Do ..FReleaseBTNs() ;In de loop van de treeview zijn ook icons aangemaakt (denk bijv. aan (+) & (-) btns) Do ..FReleaseBlobIcons() ;Eventueel opgebouwde components de vrijheid geven Do ..FReleaseComponents() ;Clear data: TreeNode objects, $$$ND Do ..ClearData() ;Clear BMP Buffer Do ..FReleaseBMPBuffer() ;Alles uit DQ halen Do ..FClearDrawQueue() ;MaxBufferCount terug op 0 instellen Set i%MaxBufferCount=0 ;Set-method mag niet getriggerd worden ;============================================================================= ; -< EVENT 'OnAfterCloseProgram' >- ;============================================================================= ; We verwittigen de buitenwereld dat Program werden gesloten, er kan ; eventueel een event gekoppeld worden om zaken te herzien,... ; ARGS: $LB(Sender,Program,DefaultClosed) Do ..FTriggerEvent(..OnAfterCloseProgram,$LB(%this,..Program,"True")) ;============================================================================= ;Programma(waarschijnlijk) goed opgekuisd Set ..Program="" Set ..ProgramIsLoaded=0 Quit ]]> Roep dit op ipv %TMTreeNode.Delete(). Node:%TMTreeNode 0 BaseNode: Node to expand, indien 0 dan wordt alles ge-expand, indien niet opgegeven wordt geselecteerde node genomen
  • Level: Expanden tot en met niveau 'Level', indien niet opgegeven wordt ge-expand tot het diepste niveau
  • MaxLevel: Normaliter wordt dit uit iLD gehaald, is deze array echter dynamisch opgebouwd (+gebruik van onfetchnodes) dan kan u hier het maximum opgeven
  • ]]>
    BaseNode:%TMTreeNode,ToLevel,MaxLevel:%Integer 0 MaxLevel Set ToLevel=MaxLevel ;Expanderen maar... Do ..Items.BeginUpdate() If +BaseNode=0 Do ;EXPAND FULL . New tmpNode . Set tmpNode=..Items.GetFirstNode() . Quit:(+tmpNode=0) . Do RecurseExp(tmpNode) . For Set tmpNode=tmpNode.GetNextSibling() Quit:(+tmpNode=0) Do .. Do RecurseExp(tmpNode) Else Do ;EXPAND FROM BASENODE . Do RecurseExp(BaseNode) Do ..Items.EndUpdate() Quit RecurseExp(Base) Quit:(Base.Level=ToLevel) If $$$NDE(Base,$$$ntNodesFetched) && (Base.HasChildren="True") Do . Do Base.Expand("False") Else If $$$NDE(Base,$$$ntHasChildren) Do . Do ..FFirstExpand(Base) Else Quit New tmpChild Set tmpChild=Base.GetFirstChild() Quit:(tmpChild="") Do RecurseExp(tmpChild) For Set tmpChild=tmpChild.GetNextSibling() Quit:(tmpChild="") Do . Do RecurseExp(tmpChild) Quit ]]>
    For internal use only:
    Voeg de opgegeven BMP toe aan de buffer. Geef op aan welke node deze BMP gekoppeld is.]]>
    BMPToBuffer:%TMBitmap,Node:%TMTreeNode 0 %Library.TMBitmap ..MaxBufferCount Do . Set BufferPosition=1 ;Bufferposition onthouden Set pcBMPPool(..aUN)=BufferPosition ;Bitmapspecs kopiëren Set BmpInBuffer.Width=BMPToBuffer.Width Set BmpInBuffer.Height=BMPToBuffer.Height Set BmpInBuffer.PixelFormat=BMPToBuffer.PixelFormat ;Bitmap zelf kopiëren Do BmpInBuffer.Canvas.Draw(0,0,BMPToBuffer) Quit BmpInBuffer ]]>
    For internal use only:
    OnExit event van treeview components (edit, combo, memo, ...)]]>
    Args:%String 0
    For internal use only:
    OnKeyDown event van treeview components (edit, combo, memo, ...)]]>
    Args:%String 0
    For internal use only:
    Tekenen van BMP (gedefinieerd via Program en RowID). U kan een BMP opgegeven om te gebruiken of één laten aanmaken (bij VBitmap=0) Het resultaat van de functie is de getekende bitmap.]]>
    VBitmap:%Library.TMBitmap,Program:%Library.String,RowID:%Library.String 0 %Library.TMBitmap
    For internal use only:
    Wat er eventueel nog in de DrawQueue staat wordt hiermede verwijderd.]]>
    0
    For internal use only:
    Kopiëren van BMP-specs, zijnde PixelFormat,Width,Height. Indien VBitmap=0 dan wordt een nieuwe BMP aangamaakt, indien niet dan wordt de vorige inhoud gewist (FillRect).]]>
    VBitmap,BmpToCopy:%TMBitmap 0 %Library.TMBitmap
    For internal use only:
    Tekent tekst op bitmap. RawData bevat $LB met inhoud van de velden.]]>
    Bitmap:%TMBitmap,Program,RowID,RawData,DefRow:%String 0
    For internal use only:
    Tekent headertekst op bitmap.]]>
    Bitmap:%TMBitmap,Program,RowID:%String 0
    For internal use only:
    Prepare for edit.]]>
    Program,RowID,Column:%String,Node:%TMTreeNode 0
    For internal use only:
    Forceer een eerste expand. Indien uw tree gebruikt maakt van OnFetchNodes en u wenst programmatorisch een fetch te doen, dan kan dat via FFirstExpand. Een node waarbij de children reeds zijn aangemaakt kan eenvoudigweg opgeklapt worden via %TMTreeNode.Expand().]]>
    NodeToExpand:%TMTreeNode,DoExpand:%Boolean=1 0
    For internal use only:
    Verwerk de gegevens die op de DrawQueue staan. Dwz alle nodes die in de huidige viewspace liggen worden getekend.]]>
    0 ..FDisplayY2) Do ;Teken enkel de items binnen de huidige canvas .. Do DrawItem(SMORefNode,.X1,.Y1,.Y2) ;Queue klaarstomen om opnieuw te vullen Do ..FClearDrawQueue() Quit ;============================================================================== DrawItem(Node,X1,Y1,Y2) New Selected Set Selected=$S(Node.Selected="True":1,1:0) ;BMP BUFFER CHECK - IF AVAILABLE: Use and quit If $D(pcBMP(..aUN,+Node)) && ('Selected) Do Quit . If Selected Do .. Do ..Canvas.Draw(X1+$$$NDE(Node,$$$ntSelBSpaceLeft),Y1+$$$NDE(Node,$$$ntSelBSpaceTop),pcBMP(..aUN,+Node)) . Else Do .. Do ..Canvas.Draw(X1+$$$NDE(Node,$$$ntBSpaceLeft),Y1+$$$NDE(Node,$$$ntBSpaceTop),pcBMP(..aUN,+Node)) . If '$$$NDE(Node,$$$ntIsHeader) Do .. If $$$NDE(Node,$$$ntHasChildren) Do ... If Node.Expanded="True" Do .... Set ..Canvas.Brush.Color=..Color .... Do ..Canvas.FillRect($LB(X1-17,Y1,X1,Y2)) .... Do ..Canvas.Draw(X1-17,Y1+((Y2-Y1-13)\2),aBTN(..aUN,Node.Level,$$$inCollapseBtn)) ... Else Do .... Set ..Canvas.Brush.Color=..Color .... Do ..Canvas.FillRect($LB(X1-17,Y1,X1,Y2)) .... Do ..Canvas.Draw(X1-17,Y1+((Y2-Y1-13)\2),aBTN(..aUN,Node.Level,$$$inExpandBtn)) If Node.Level'=..FLastNodeLevel Do . Set ..FCachedProgram=$G(iLD(..aUN,Node.Level,$$$ildProgram),$$$NDE(Node,$$$ntProgram)) New BmpToUse If $$$NDE(Node,$$$ntIsHeader) Do ; *** HEADER *** . Set BmpToUse=$$$NDE(Node,$$$ntVBackground) . Do ..FAddToBMPBuffer(BmpToUse,Node) . Do ..Canvas.Draw(X1+$$$NDE(Node,$$$ntBSpaceLeft),Y1+$$$NDE(Node,$$$ntBSpaceTop),BmpToUse) Else If Selected Do ; *** SELECTED *** . Set BmpToUse=$$$NDE(Node,$$$ntSelVFlip) . Do BmpToUse.Canvas.Draw(0,0,$$$NDE(Node,$$$ntSelVBackground)) . If $$$NDE(Node,$$$ntHasChildren) Do .. If Node.Expanded="True" Do ... Set ..Canvas.Brush.Color=..Color ... Do ..Canvas.FillRect($LB(X1-17,Y1,X1,Y2)) ... Do ..Canvas.Draw(X1-17,Y1+((Y2-Y1-13)\2),aBTN(..aUN,Node.Level,$$$inSelCollapseBtn)) .. Else Do ... Set ..Canvas.Brush.Color=..Color ... Do ..Canvas.FillRect($LB(X1-17,Y1,X1,Y2)) ... Do ..Canvas.Draw(X1-17,Y1+((Y2-Y1-13)\2),aBTN(..aUN,Node.Level,$$$inSelExpandBtn)) . Do ..FDrawTextOnRow(BmpToUse,..FCachedProgram,$$$NDE(Node,$$$ntSelRowID),$$$NDE(Node,$$$ntFieldData),$$$NDE(Node,$$$ntRowID)) . Do ..Canvas.Draw(X1+$$$NDE(Node,$$$ntSelBSpaceLeft),Y1+$$$NDE(Node,$$$ntSelBSpaceTop),BmpToUse) Else Do ; *** NORMAL (default) *** . Set BmpToUse=$$$NDE(Node,$$$ntVFlip) . Do BmpToUse.Canvas.Draw(0,0,$$$NDE(Node,$$$ntVBackground)) . If $$$NDE(Node,$$$ntHasChildren) Do .. If Node.Expanded="True" Do ... Set ..Canvas.Brush.Color=..Color ... Do ..Canvas.FillRect($LB(X1-17,Y1,X1,Y2)) ... Do ..Canvas.Draw(X1-17,Y1+((Y2-Y1-13)\2),aBTN(..aUN,Node.Level,$$$inCollapseBtn)) .. Else Do ... Set ..Canvas.Brush.Color=..Color ... Do ..Canvas.FillRect($LB(X1-17,Y1,X1,Y2)) ... Do ..Canvas.Draw(X1-17,Y1+((Y2-Y1-13)\2),aBTN(..aUN,Node.Level,$$$inExpandBtn)) . Do ..FDrawTextOnRow(BmpToUse,..FCachedProgram,$$$NDE(Node,$$$ntRowID),$$$NDE(Node,$$$ntFieldData),$$$NDE(Node,$$$ntRowID)) . Do ..FAddToBMPBuffer(BmpToUse,Node) . Do ..Canvas.Draw(X1+$$$NDE(Node,$$$ntBSpaceLeft),Y1+$$$NDE(Node,$$$ntBSpaceTop),BmpToUse) Quit ]]>
    For internal use only:
    Called by FCacheVirtualRow()]]>
    Bitmap:%TMBitmap,Program,RowID:%String 0
    For internal use only:
    Maakt bitmaps aan die gebruikt worden voor buffering van treenodes. Aantal wordt bepaald door Program-definitie.]]>
    0 %Library.Boolean ..MaxBufferCount Do Quit 0 . Set ..LastErrorMsg="Fout bij inladen buffer: PreBufferCount("_PreBufferCount_") is groter dan MaxBufferCount("_..MaxBufferCount_")." ;IF PREBUFFERCNT=-1: MAXIMUM BUFFERING If PreBufferCount=-1 Do . Set PreBufferCount=..MaxBufferCount ;BUFFER (AANMAKEN 1->PREBUFFERCOUNT) New Loop,tmpBitmap For Loop=1:1:PreBufferCount Do . Set pcBMPPool(..aUN,Loop)=##class(%TMBitmap).%New($LB(..Parent,0)) . Set pcBMPPool(..aUN,Loop,$$$pcAssocNode)=0 ;Nog geen gekoppelde node... ;COUNT INITIALISEREN Set pcBMPPool(..aUN)=1 Quit 1 ]]>
    For internal use only:
    Buttons (voorgesteld via Icons) voor '+' en '-' van de treenodes. Gedefinieerd in Program-definitie. ]]>
    0 %Library.Boolean
    For internal use only:
    Lees een BlobIcon in. Deze kan verderop hergebruikt worden adhv BlobName. Alles wordt dus maw 1 maal ingelezen.]]>
    BlobName:%String 0 %Library.TMIcon
    For internal use only:
    Creatie van component indien het nog niet bestaat. Result is ORef van component.]]>
    ComponentType:%Integer 0 %Library.Integer
    Program,FetchID:%String 0 %Library.Boolean 0 %Library.Boolean Program:%String 0 %Library.Boolean Program,DefinitionID:%String 0 %Library.Boolean 0 %Library.Boolean Program:%String 0 %Library.Boolean Program,RowID:%String,IsHeader:%Boolean=0 0 %Library.Boolean 0 %Library.Boolean Program,RowID:%String,IsHeader:%Boolean=0 0 %Library.Boolean 0 Do .. Set SortedCols(Loop)=ColLoop ;Checken of volgnummers legaal zijn New VolgNrLoop,EarlyQuit Set EarlyQuit=0 For VolgNrLoop=1:1:AantalCols Quit:(EarlyQuit) Do . If '$D(CheckVolgNrs(VolgNrLoop)) Do .. Set ..LastErrorMsg="In de lijst-definitie van '"_RowID_"' uit het programma '"_Program_"' is een fout volgnummer gevonden." . Else If CheckVolgNrs(VolgNrLoop)>1 Do .. Set ..LastErrorMsg="In de lijst-definitie van '"_RowID_"' uit het programma '"_Program_"' komt het volgnummer '"_VolgNrLoop_"' meermaals voor." Quit:(EarlyQuit) 0 ;Column Specs herinlezen om posities te bepalen (start-end-fulllength): eventueel gewijzigd na vorig event New tmpLength,XOffs,sumLength,SortLoop Set SortLoop="" Set sumLength=$LI(aLS(..aUN,Program,RowID),$$$rcLinkerlijnDikte) Set XOffs=sumLength-1 ;-1 omdat we beginnen van (0,0) For Set SortLoop=$O(SortedCols(SortLoop)) Quit:(SortLoop="") Do . Set ColLoop=SortedCols(SortLoop) . ;Lengte van huidige column uitlezen . Set tmpLength=aLS(..aUN,Program,RowID,ColLoop,$$$ccLength) . ;Instellen van begin-end waarden aparte velden . Set XOffs=XOffs+1 ;+1 omdat we op een volgende pixellijn beginnen met de column . Set aLS(..aUN,Program,RowID,ColLoop,$$$ccRTXBegin)=XOffs . Set XOffs=XOffs+tmpLength-1 ;Lengte van column opschuiven . Set aLS(..aUN,Program,RowID,ColLoop,$$$ccRTXEnd)=XOffs . Set XOffs=XOffs+aLS(..aUN,Program,RowID,ColLoop,$$$ccRechterlijnDikte) ;Lengte van rechterlijn opschuiven . ;Optellen 'Total Length' . Set sumLength=sumLength+tmpLength+aLS(..aUN,Program,RowID,ColLoop,$$$ccRechterlijnDikte) ;Bijvoegen van 'op voorhand berekende waarde': ;full-length van de frame (row) Set $LI(aLS(..aUN,Program,RowID),$$$rcRTLength)=sumLength ;IsHeader parameter (wo gebruikt bij RePrepareLS) Set $LI(aLS(..aUN,Program,RowID),$$$rcRTIsHeader)=IsHeader ;Eventuele Bitmap cachen New VBitmap ;Set VBitmap=$LG(aLS(..aUN,Program,RowID),$$$rcRTVBackground,0) ;Set VBitmap=..FCacheVirtualRow(VBitmap,Program,RowID) Set VBitmap=..FCacheVirtualRow(0,Program,RowID) Set $LI(aLS(..aUN,Program,RowID),$$$rcRTVBackground)=VBitmap ;Onthouden of het een header is of niet voor een eventuele RePrepareLS Set $LI(aLS(..aUN,Program,RowID),$$$rcRTIsHeader)=IsHeader ;Kopie maken (enkel specs), deze bitmap wo gebruikt als 'flipscreen' New VBitmap ;Set VBitmap=$LG(aLS(..aUN,Program,RowID),$$$rcRTVFlip,0) ;Set VBitmap=..FCopyBitmapSpecs(VBitmap,$LI(aLS(..aUN,Program,RowID),$$$rcRTVBackground)) Set VBitmap=..FCopyBitmapSpecs(0,$LI(aLS(..aUN,Program,RowID),$$$rcRTVBackground)) Set $LI(aLS(..aUN,Program,RowID),$$$rcRTVFlip)=VBitmap Quit 1 ]]> 0 %Library.Boolean 0 0 0 0 Node:%TMTreeNode 0 Event:%String,Args:%String="" 0 0 0 0 0 Program,RowID:%String 0 0 0 FocusTreeWhenDone:%Boolean=1 0 Node:%TMTreeNode 0 %Library.String Column:%String,Node:%TMTreeNode 0 %Library.String Column:%String,Node:%TMTreeNode 0 %Library.Integer Level:%Integer 0 %Library.String Level:%Integer 0 %Library.String Level:%Integer 0 %Library.String Node:%TMTreeNode 0 %Library.String Node:%TMTreeNode 0 %Library.String Level:%Integer 0 %Library.String Node:%TMTreeNode 0 %Library.String InsBeforeNode:%TMTreeNode=0 0 InsBeforeNode:%TMTreeNode=0,FieldData,Bookmark:%String,HasChildren:%Boolean,RowID,SelRowID:%String,IsSelectable:%Boolean=1,NodesFetched:%Boolean=0 0 %Library.TMTreeNode Value:%String 0 %Library.Status Program:%String 0 %Library.Boolean - ;============================================================================= ; We verwittigen de buitenwereld dat Program worden ingelezen, er kan ; eventueel een event gekoppeld worden om zaken voor te bereiden New StdArgs Set StdArgs=$LB(%this,Program,0,"True") ;ARGS: $LB(Sender,Program,IsReload,DefaultLoad) Do ..FTriggerEvent(..OnBeforeLoadProgram,.StdArgs) If $LI(StdArgs,4)="False" Do Quit 1 ;Nog LoadProgram oproepen, dan sluiten . Do ..FTriggerEvent(..OnAfterLoadProgram,$LB(%this,Program,0,"False")) ;============================================================================= ;Geen Drawing-update laten gebeuren (in principe overbodig aangezien er toch geen ;elementen zich in de treeview bevinden) Do ..Items.BeginUpdate() ;General variables New PrepareOK ;GENERAL PROPERTIES: GP Set PrepareOK=..FPrepareGP(Program) Quit:('PrepareOK) 0 ;LIST DEFINITIONS: LD Set PrepareOK=..FPrepareLDs(Program) Quit:('PrepareOK) 0 ;FETCH DEFINITIONS: FD Set PrepareOK=..FPrepareFSs() Quit:('PrepareOK) 0 ;LIST STRUCTURES: Deze worden pas ingelezen van zodra ze vereist zijn indien LoadDefaultRows=0 If $LI(aGP(..aUN),$$$gcLoadDefaultRows) Do Quit:('PrepareOK) 0 . Set PrepareOK=..FPrepareLSs() ;LIST DEFINITION INTERFACE INDEX - FAST LOOKUP TABLE Set PrepareOK=..FPrepareLDInterfaceIndex() Quit:('PrepareOK) 0 New LoadOK Set LoadOK=1 ;BUTTONS (+) & (-) voor gewoon en selected If $LI(aGP(..aUN),$$$gcLoadDefaultRows) Do Quit:('LoadOK) 0 . Set LoadOK=..FLoadBTNs() ;BMP BUFFER - Graphical caching van nodes Set LoadOK=..FLoadBMPBuffer() Quit:('LoadOK) 0 ;Drawing-update kan terug van start gaan Do ..Items.EndUpdate() ;============================================================================= ; -< EVENT 'OnAfterLoadProgram' >- ;============================================================================= ; We verwittigen de buitenwereld dat Program werden ingelezen, er kan ; eventueel een event gekoppeld worden om zaken te herzien,... ; ARGS: $LB(Sender,Program,IsReload,DefaultLoaded) Do ..FTriggerEvent(..OnAfterLoadProgram,$LB(%this,Program,0,"True")) ;============================================================================= ;Programma(waarschijnlijk) goed ingelezen Set ..Program=Program Set ..ProgramIsLoaded=1 Quit 1 ]]> Value:%Integer 0 %Library.Status ..MaxBufferCount Do . Set i%MaxBufferCount=Value Else Do . Set ..LastErrorMsg="Het is enkel toegestaan MaxBufferCount te vergroten (Huidig: "_..MaxBufferCount_", Voorstel: "_Value_")." Quit $$$OK ]]> Args:%String 0 Args:%String 0 Args:%String 0 EVENT Wordt getriggerd bij tekenen van treeview. U kan uw eigen ondrawevent koppelen op de klassieke manier. Wilt u dan ook nog de originele oproepen dan kan dat via 'OrigOnDrawItem' Args:%String 0 Args:%String 0 Args:%String 0 XBegin) && (X 0 %Library.Boolean - ;============================================================================= ; We verwittigen de buitenwereld dat Program worden ingelezen, er kan ; eventueel een event gekoppeld worden om zaken voor te bereiden New StdArgs Set StdArgs=$LB(%this,Program,1,"True") ;ARGS: $LB(Sender,Program,IsReload,DefaultLoad) Do ..FTriggerEvent(..OnBeforeLoadProgram,.StdArgs) If $LI(StdArgs,4)="False" Do Quit 1 ;Nog LoadProgram oproepen, dan sluiten . Do ..FTriggerEvent(..OnAfterLoadProgram,$LB(%this,Program,1,"False")) ;============================================================================= Do ..Items.BeginUpdate() ;De eventueel gewijzigde aLS structure opnieuw inlezen-verwerken New RePrepareOK Set RePrepareOK=..FRePrepareLS() Quit:('RePrepareOK) 0 ;Release van buttons niet echt vereist aangezien LD en FS nt veranderd zijn, maar toch Do ..FReleaseBTNs() ;In aLS stonden ook mogelijk nieuwe verwijzingen naar (+) en (-) buttons, cache deze New LoadOK Set LoadOK=..FLoadBTNs() Quit:('LoadOK) 0 ;De oude, gebufferde nodes vrijgeven zodat nieuwe hun plaats kunnen innemen Do ..ClearBMPBuffer() ;NodeData bevat verwijzingen nr oude Background & Flipbitmaps, deze dus ook updaten Do ..FUpdateNodeData() Do ..Items.EndUpdate() ;============================================================================= ; -< EVENT 'OnAfterLoadProgram' >- ;============================================================================= ; We verwittigen de buitenwereld dat Program werden ingelezen, er kan ; eventueel een event gekoppeld worden om zaken te herzien,... ; ARGS: $LB(Sender,Program,IsReload,DefaultLoaded) Do ..FTriggerEvent(..OnAfterLoadProgram,$LB(%this,Program,1,"True")) ;============================================================================= Quit 1 ]]> Nodes:%List="" 0 FileName:%String,Levels:%List="",ColSep:%String=$C(9) 0 Node:%TMTreeNode,Bookmark:%String 0 Column:%String,Value:%String,Node:%TMTreeNode 0 Node:%TMTreeNode,HasChildren:%Boolean 0 Node:%TMTreeNode,IsSelectable:%Boolean 0 NodeA,NodeB:%TMTreeNode 0 %Library.Boolean Canvas:%TMCanvas,Program,RowID,ColID:%String,Color:%Integer,FrameColor:%Integer=$$$clNone,Style:%String="bsSolid" 0 Canvas:%TMCanvas,Program,RowID,ColID,BlobName:%String,Align:%String 0 %Library.CacheSerialState Address ClassName CloseFromClient Parent PropName ClassNameAbsent Tag Constraints Font OnCanResize OnClick OnConstrainedResize OnDblClick OnDragDrop OnDragOver OnEndDock OnEndDrag OnMouseDown OnMouseMove OnMouseUp OnResize OnStartDock OnStartDrag PopupMenu Brush OnDockDrop OnDockOver OnEnter OnExit OnGetSiteInfo OnKeyDown OnKeyPress OnKeyUp OnMouseWheel OnMouseWheelDown OnMouseWheelUp Canvas DropTarget Images Items OnChange OnChanging OnCollapsed OnCollapsing OnCompare OnCustomDraw OnCustomDrawItem OnDeletion OnEdited OnEditing OnExpanded OnExpanding OnGetImageIndex OnGetSelectedIndex OnAfterLoadProgram OnBeforeLoadProgram FProgram LastErrorMsg Program ProgramLoaded OnPrepareGS MaxBufferCount ProgramIsLoaded OnAfterCloseProgram OnBeforeCloseProgram OnPrepareLD AutoHourGlass OnPrepareFS OnPrepareLS AutoShowLastErrorMsg OnErrorMsg UN FCachedProgram FDisplayY1 FDisplayY2 FFlushTimer FForceFlush FInhibitFlush FLastBookmark FLastCalledCMP FLastColumn FLastColumnClicked FLastNode FLastNodeClicked FLastNodeDrawedTimeStamp FLastNodeLevel FLastProgram FLastRowID FLastValue FMinFlushDelay IgnoreNextFlushes ReadOnlyTree OnFetchNodes OnClickField OnDblClickField OnEnterEdit OnExitEdit OnBeforeShowComponent OnPrepareGP RepaintOnFetchNodes aUN