DEFINE TREE
Creates a Tree Control

 

 

 

Standard Syntax (xBase Style):

 

 

      DEFINE TREE <ControlName>

            [ OF | PARENT <ParentWindowName> ]

            AT <nRow> ,<nCol>

            WIDTH <nWidth>

            HEIGHT <nHeight>

            [ VALUE <nValue> ]

            [ FONT <cFontname> SIZE <nFonSize> ]

            [ TOOLTIP <cToolTipText> ]

            [ ON GOTFOCUS <OnGotFocusProcedur> | <bBlock> ]

            [ ON CHANGE <OnChangeProcedure> | <bBlock> ]

            [ ON LOSTFOCUS <OnLostFocusProcedure> | <bBlock> ]

            [ ON DBLCLICK <OnDblClickProcedure> | <bBlock> ]

            [ ON EXPAND <OnExpandProcedure> | <bBlock> ]

            [ ON COLLAPSE <OnCollapseProcedure> | <bBlock> ]

            [ BREAK ]

            [ NODEIMAGES <aImgNode> [ ITEMIMAGES <aImgItem> ]

            [ NOROOTBUTTON ]

            [ ITEMIDS ]

            [ HELPID <nHelpId> ]

            [ NOTRANSPARENT ]

           

            [ NODE <cNodeCaption> ]

                  [ IMAGES <aImage> ]

                  [ ID <nItemID> ]

                  ...

                  [ TREEITEM <cTreeItemCaption>

                        [ IMAGES <aImage> ]

                        [ ID <nItemID> ] ]

                        ...

            [ END NODE ]

            ...

            ...

      END TREE

 

 

Alternate Syntax:

 

 

      DEFINE TREE <ControlName>

            [ PARENT <ParentWindowName> ]

            ROW <nRow>

            COL <nCol>

            WIDTH <nWidth>

            HEIGHT <nHeight>

            [ VALUE <nValue> ]

            [ FONTNAME <cFontname> ]

            [ FONTSIZE <nFonSize> ]

            [ TOOLTIP <cToolTipText> ]

            [ ONGOTFOCUS <OnGotFocusProcedure> | <bBlock> ]

            [ ONCHANGE <OnChangeProcedure> | <bBlock> ]

            [ ONLOSTFOCUS <OnLostFocusProcedure> | <bBlock> ]

            [ ONDBLCLICK <OnDblClickProcedure> | <bBlock> ]

            [ ONEXPAND <OnExpandProcedure> | <bBlock> ]

            [ ONCOLLAPSE <OnCollapseProcedure> | <bBlock> ]

            [ BREAK <lValue> ]

            [ NODEIMAGES <aImgNode> ]

            [ ITEMIMAGES <aImgItem> ]

            [ ROOTBUTTON <lValue> ]

            [ ITEMIDS <lValue> ]

            [ HELPID <nHelpId> ]

            [ TRANSPARENT <lValue> ]

 

           

            [ NODE <cNodeCaption> ]

                  [ IMAGES <aImage> ]

                  [ ID <nItemID> ]

                  ...

                  [ TREEITEM <cTreeItemCaption>

                        [ IMAGES <aImage> ]

                        [ ID <nItemID> ] ]

                        ...

            [ END NODE ]

            ...

            ...

      END TREE

 

 

Properties:

 

 

      - Value

      - Enabled

      - Visible

      - Row

      - Col

      - Width

      - Height

      - Item ( nItemIndex | nItemID )

      - ItemCount

      - FontName

      - FontSize

      - FontBold

      - FontItalic

      - FontUnderline

      - FontStrikeout

      - ToolTip

      - Name (R)

      - Break (D)

      - NodeImages (D)

      - ItemImages (D)

      - HelpId (D)

      - Parent (D)

      - RootButton (D)

 

      D: Available at control definition only

      R: Read-Only

 

 

Events:

 

 

      - OnGotFocus

      - OnChange

      - OnLostFocus

      - OnDblClick

      - OnExpand (*)

      - OnCollapse (*)

       

        (*)Note: Property available for OnExpand and OnCollapse events and DynamicForeColor, DynamicBackColor and DynamicFont properties:

                 This.TreeItemValue

 

 

Methods:

 

 

      - Show

      - Hide

      - AddItem ( cItemText , nParentItemIndex | nParentItemID )

      - DeleteItem ( nItemIndex | nItemID )

      - DeleteAllItems

      - Expand ( nItemIndex | nItemID )

      - Collapse ( nItemIndex | nItemID )

      - SetFocus

      - Release

 

 

When ITEMIDS clause is specified, you can assign a numeric ID (ID clause) to tree items and nodes. That way, all tree properties and methods will work using these ID's instead item position.

 

 

 

# TREE Control improvement

 

 

     Note: nValue = nItemIndex | nItemID

 

 

     - New Get Properties:

 

            <ParentWindowName>.<TreeControlName>.AllValue                           --> anAllItemsValues | NIL

            <ParentWindowName>.<TreeControlName>.RootValue                          --> nValue | NIL

            <ParentWindowName>.<TreeControlName>.FirstItemValue                     --> nValue | NIL

            <ParentWindowName>.<TreeControlName>.ParentValue     ( nValue )         --> nValue | NIL

            <ParentWindowName>.<TreeControlName>.ChildValue      ( nValue )         --> anChildItemsValues | NIL

            <ParentWindowName>.<TreeControlName>.SiblingValue    ( nValue )         --> anSiblingItemsValues | NIL

            <ParentWindowName>.<TreeControlName>.ItemText        ( anItemsValues )  --> acItemsText | NIL

 

            <ParentWindowName>.<TreeControlName>.IsTrueNode      ( nValue )         --> lBoolean

            <ParentWindowName>.<TreeControlName>.NodeFlag        ( nValue )         --> lBoolean

 

            <ParentWindowName>.<TreeControlName>.ImageCount                         --> nImageCount

            <ParentWindowName>.<TreeControlName>.ImageIndex      ( nValue )         --> { iUnSelectItem , iSelectItem }

 

            <ParentWindowName>.<TreeControlName>.IsExpand        ( nValue )         --> lBoolean

 

            <ParentWindowName>.<TreeControlName>.ImageList                          --> hImageList

 

            <ParentWindowName>.<TreeControlName>.HasLines                           --> lBoolean

            <ParentWindowName>.<TreeControlName>.FullRowSelect                      --> lBoolean

            <ParentWindowName>.<TreeControlName>.HasButton ( nValue )               --> lBoolean

 

            <ParentWindowName>.<TreeControlName>.Cargo ( nValue )                   --> xData

            <ParentWindowName>.<TreeControlName>.CargoScan ( xData )                --> nValue | NIL

 

            <ParentWindowName>.<TreeControlName>.GetPathValue     ( nValue )        --> anPathValue | NIL

            <ParentWindowName>.<TreeControlName>.GetPathName      ( nValue )        --> acPathName | NIL

            <ParentWindowName>.<TreeControlName>.GetDisplayLevel  ( nValue )        --> nDisplayColumn | NIL

 

 

     - New Set Properties:

 

            <ParentWindowName>.<TreeControlName>.NodeFlag    ( nValue )  := lBoolean

 

            <ParentWindowName>.<TreeControlName>.ImageIndex  ( nValue )  := { iUnSelectItem , iSelectItem }

            <ParentWindowName>.<TreeControlName>.AddImage                := cImageName

 

            <ParentWindowName>.<TreeControlName>.TextColor               := anRGBcolor

            <ParentWindowName>.<TreeControlName>.BackColor               := anRGBcolor

            <ParentWindowName>.<TreeControlName>.LineColor               := anRGBcolor

 

            <ParentWindowName>.<TreeControlName>.DynamicForeColor        := {|| anRGBcolor }

            <ParentWindowName>.<TreeControlName>.DynamicBackColor        := {|| anRGBcolor }

            <ParentWindowName>.<TreeControlName>.DynamicFont             := {|| {cFontName, nFontSize, [ lBold, lItalic, lUnderline, lStrikeOut ]} }

 

            <ParentWindowName>.<TreeControlName>.ChangeFontSize          := nSize | NIL  // Useful for use Dynamic Font with more (less) Height than the size of font the Tree control

 

            <ParentWindowName>.<TreeControlName>.ImageList               := hImageList

            <ParentWindowName>.<TreeControlName>.HasLines                := lBoolean

            <ParentWindowName>.<TreeControlName>.FullRowSelect           := lBoolean

            <ParentWindowName>.<TreeControlName>.HasButton ( nValue )    := lBoolean

            <ParentWindowName>.<TreeControlName>.Cargo ( nValue )        := xData

 

 

     - New Methods:

 

            <ParentWindowName>.<TreeControlName>.Expand   ( nValue , lRecursive )

            <ParentWindowName>.<TreeControlName>.Collapse ( nValue , lRecursive )

 

            <ParentWindowName>.<TreeControlName>.DisableUpdate

            <ParentWindowName>.<TreeControlName>.EnableUpdate

 

            <ParentWindowName>.<TreeControlName>.SetDefaultAllNodeFlag

            <ParentWindowName>.<TreeControlName>.SetDefaultNodeFlag ( nValue )

            <ParentWindowName>.<TreeControlName>.Sort ( nValue , lRecursive, lCaseSensitive, lAscendingOrder, nNodePosition )

 

            TREESORT ControlName OF ParentName

                    [ ITEM nValue ]

                    [ RECURSIVE lRecursive ]

                    [ CASESENSITIVE lCaseSensitive ]

                    [ ASCENDINGORDER lAscendingOrder ]

                    [ NODEPOSITION nNodePosition ]

 

                    nNodePosition = TREESORTNODE_FIRST | TREESORTNODE_LAST | TREESORTNODE_MIX

 

 

 

Note:

 

    <ParentWindowName>.<TreeControlName>.IsTrueNode ( nValue ) --> Only returns .T. if the item contain sub-items (child items).

 

    <ParentWindowName>.<TreeControlName>.NodeFlag ( nValue ) := lBoolean --> This flag allows you to force an Item to be Node (.T.) or not (.F.). This flag only affect the Nodes positions when run the Sort method.

 

For more information about of the new features see demo SortTreeDir in SAMPLES folder.

 

 

Dynamic Font:

 

   - ARRAY FONT <cFontName> SIZE <nFontSize> [ BOLD ] [ ITALIC ] [ UNDERLINE ] [ STRIKEOUT ] --> { cFontName, nFontSize, lBold, lItalic, lUnderline, lStrikeout }

 

   - CREATE ARRAY FONT <cFontName> SIZE <nFontSize> [ BOLD <lBold> ] [ ITALIC <lIitalic> ] [ UNDERLINE <lUnderline> ] [ STRIKEOUT <lStrikeout> ] --> { cFontName, nFontSize, lBold, lItalic, lUnderline, lStrikeout }