home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 15 / AACD15.ISO / AACD / Programming / BGUI / bgui_e / sources / examples / TreeViewDemo.e < prev    next >
Encoding:
Text File  |  1999-08-28  |  8.7 KB  |  327 lines

  1. /*
  2.  *
  3.  * BGUI Tree List View class
  4.  *
  5.  * (C) Copyright 1999 Manuel Lemos.
  6.  * (C) Copyright 1996-1999 Nick Christie.
  7.  * All Rights Reserved.
  8.  *
  9.  */
  10.  
  11. OPT PREPROCESS
  12.  
  13. /************************************************************************
  14. *************************  TREEVIEW CLASS DEMO  *************************
  15. ************************************************************************/
  16.  
  17. MODULE     'libraries/bgui',
  18.         'libraries/bguim',
  19.         'bgui',
  20.         'bgui/bgui_treeview',
  21.         'bgui/bgui_image',
  22.         'devices/inputevent',
  23.         'intuition/intuition',
  24.         'intuition/classes',
  25.         'intuition/classusr',
  26.         'intuition/gadgetclass',
  27.         'utility/hooks',
  28.         'utility/tagitem',
  29.         'tools/installhook',
  30.         'tools/inithook',
  31.         'tools/boopsi'
  32.  
  33.  
  34. /************************************************************************
  35. *****************************  DEFINITIONS  *****************************
  36. ************************************************************************/
  37.  
  38.  
  39. /*
  40.  * Object IDs
  41.  */
  42.  
  43. CONST ID_TV_TEST          = 1
  44. CONST ID_BT_ADD           = 2
  45. CONST ID_BT_REMOVE        = 3
  46. CONST ID_BT_QUIT          = 4
  47.  
  48. /*
  49.  * Some rawkey codes
  50.  */
  51.  
  52. CONST RAW_RETURN      = 68
  53. CONST RAW_UPARROW     = 76
  54. CONST RAW_DOWNARROW   = 77
  55.  
  56. #define SHIFTKEYS       (IEQUALIFIER_LSHIFT OR IEQUALIFIER_RSHIFT)
  57. #define CTRLKEY         (IEQUALIFIER_CONTROL)
  58. #define ALTKEYS         (IEQUALIFIER_LALT OR IEQUALIFIER_RALT)
  59.  
  60. /************************************************************************
  61. *******************************  MAIN()  ********************************
  62. ************************************************************************/
  63.  
  64. PROC main()
  65.     
  66.     DEF wo_main:PTR TO object, tv_Test:PTR TO object, bt_Add:PTR TO object, bt_Remove:PTR TO object, bt_Quit:PTR TO object
  67.     DEF idcmphook:hook
  68.     DEF win:PTR TO window
  69.     DEF ok
  70.     DEF grandParent:PTR TO CHAR
  71.     DEF newEntry:PTR TO CHAR
  72.     DEF parent:PTR TO LONG
  73.     DEF childA:PTR TO LONG
  74.     DEF childB:PTR TO CHAR
  75.     DEF grandA:PTR TO LONG
  76.     DEF winsig,sigs,id
  77.     DEF running
  78.  
  79.     IF (bguibase := OpenLibrary('bgui.library',40))
  80.  
  81.         tv_Test := BgUI_NewObjectA(BGUI_TREEVIEW_GADGET, [GA_ID,             ID_TV_TEST,
  82.                                 TVA_Indentation,    12,
  83.                                 TVA_ImageStyle,     TVIS_BOX,
  84.                                 TVA_LineStyle,      TVLS_DOTS,
  85.                                 TVA_NoLeafImage,    TRUE,
  86.                                 LISTV_MinEntriesShown,5,
  87.                                 PGA_NEWLOOK,        TRUE,
  88.                                 TAG_DONE])
  89.  
  90.         inithook(idcmphook, {windowHandler}, tv_Test)
  91.  
  92.         wo_main := WindowObject,
  93.             WINDOW_Title,           'TreeView Class Demo',
  94.             WINDOW_ScreenTitle,     'TreeView Class FOR BGUI by Nick Christie (18.09.96)',
  95.             WINDOW_AutoAspect,      TRUE,
  96.             WINDOW_SmartRefresh,    TRUE,
  97.             WINDOW_RMBTrap,         TRUE,
  98.             WINDOW_AutoKeyLabel,    TRUE,
  99.             WINDOW_ScaleHeight,     33,
  100.             WINDOW_IDCMPHook,       idcmphook,
  101.             WINDOW_IDCMPHookBits,   IDCMP_RAWKEY,
  102.             WINDOW_MasterGroup,
  103.                 VGroupObject, HOffset(4), VOffset(4), Spacing(4),
  104.                     StartMember,
  105.                         tv_Test,
  106.                     EndMember,
  107.                     StartMember,
  108.                         HGroupObject, HOffset(4), VOffset(4), Spacing(4),
  109.                             VarSpace(DEFAULT_WEIGHT/2),
  110.                             StartMember,
  111.                                 bt_Add := ButtonObject,
  112.                                     LAB_Label,          '_Add',
  113.                                     GA_ID,              ID_BT_ADD,
  114.                                 EndObject,
  115.                             EndMember,
  116.                             VarSpace(DEFAULT_WEIGHT/2),
  117.                             StartMember,
  118.                                 bt_Remove := ButtonObject,
  119.                                     LAB_Label,          '_Remove',
  120.                                     GA_ID,              ID_BT_REMOVE,
  121.                                     GA_DISABLED,        TRUE,
  122.                                 EndObject,
  123.                             EndMember,
  124.                             VarSpace(DEFAULT_WEIGHT/2),
  125.                             StartMember,
  126.                                 bt_Quit := ButtonObject,
  127.                                     LAB_Label,          '_Quit',
  128.                                     GA_ID,              ID_BT_QUIT,
  129.                                 EndObject,
  130.                             EndMember,
  131.                             VarSpace(DEFAULT_WEIGHT/2),
  132.                         EndObject, FixMinHeight,
  133.                     EndMember,
  134.                 EndObject,
  135.             EndObject
  136.  
  137.         IF (wo_main)
  138.  
  139.             newEntry := 'New Entry'
  140.             grandParent := 'Grandparent'
  141.             parent := ['Parent A', 'Parent B', 'Parent C']
  142.             childA := ['Child A0', 'Child A1', 'Child A2']
  143.             grandA := ['Grandchild A0A', 'Grandchild A0B', 'Grandchild A2A']
  144.             childB := 'Child B0'
  145.             
  146.             ok := BgUI_DoGadgetMethodA(tv_Test, NIL, NIL, [TVM_INSERT, NIL, grandParent, TV_ROOT, TVW_CHILD_LAST, TVF_EXPAND])
  147.  
  148.             IF (ok)
  149.                 ok := BgUI_DoGadgetMethodA(tv_Test, NIL, NIL, [TVM_INSERT, NIL, parent[0], grandParent, TVW_CHILD_LAST, TVF_EXPAND])
  150.             ENDIF
  151.             
  152.             IF (ok)
  153.                 ok := BgUI_DoGadgetMethodA(tv_Test, NIL, NIL, [TVM_INSERT, NIL, parent[1], grandParent, TVW_CHILD_LAST, TVF_EXPAND])
  154.             ENDIF
  155.  
  156.             IF (ok)
  157.                 ok := BgUI_DoGadgetMethodA(tv_Test, NIL, NIL, [TVM_INSERT, NIL, parent[2], grandParent, TVW_CHILD_LAST, TVF_EXPAND])
  158.             ENDIF
  159.  
  160.             IF (ok)
  161.                 ok := BgUI_DoGadgetMethodA(tv_Test, NIL, NIL, [TVM_INSERT, NIL, childA[0], parent[0], TVW_CHILD_LAST, TVF_EXPAND])
  162.             ENDIF
  163.  
  164.             IF (ok)
  165.                 ok := BgUI_DoGadgetMethodA(tv_Test, NIL, NIL, [TVM_INSERT, NIL, childA[1], parent[0], TVW_CHILD_LAST, TVF_EXPAND])
  166.             ENDIF
  167.  
  168.             IF (ok)
  169.                 ok := BgUI_DoGadgetMethodA(tv_Test, NIL, NIL, [TVM_INSERT, NIL, childA[2], parent[0], TVW_CHILD_LAST, TVF_EXPAND])
  170.             ENDIF
  171.  
  172.             IF (ok)
  173.                 ok := BgUI_DoGadgetMethodA(tv_Test, NIL, NIL, [TVM_INSERT, NIL, grandA[0], childA[0], TVW_CHILD_LAST, TVF_EXPAND])
  174.             ENDIF
  175.  
  176.             IF (ok)
  177.                 ok := BgUI_DoGadgetMethodA(tv_Test, NIL, NIL, [TVM_INSERT, NIL, grandA[1], childA[0], TVW_CHILD_LAST, TVF_EXPAND])
  178.             ENDIF
  179.  
  180.             IF (ok)
  181.                 ok := BgUI_DoGadgetMethodA(tv_Test, NIL, NIL, [TVM_INSERT, NIL, grandA[2], childA[2], TVW_CHILD_LAST, TVF_EXPAND])
  182.             ENDIF
  183.  
  184.             IF (ok)
  185.                 ok := BgUI_DoGadgetMethodA(tv_Test, NIL, NIL, [TVM_INSERT, NIL, childB, parent[1], TVW_CHILD_LAST, TVF_EXPAND])
  186.             ENDIF
  187.  
  188.             IF (ok)
  189.  
  190.                 IF (win := WindowOpen(wo_main))
  191.  
  192.                     GetAttr(WINDOW_SigMask,wo_main,{winsig})
  193.                     running := TRUE
  194.  
  195.                     WHILE (running = TRUE)
  196.                                                  
  197.                         sigs := Wait(winsig)
  198.  
  199.                         IF (sigs AND winsig)
  200.  
  201.                             WHILE ((id := HandleEvent(wo_main)) <> WMHI_NOMORE)
  202.  
  203.                                 SELECT id
  204.  
  205.                                     CASE WMHI_CLOSEWINDOW
  206.                                         running := FALSE
  207.  
  208.  
  209.                                     CASE ID_BT_QUIT
  210.                                         running := FALSE
  211.  
  212.  
  213.                                     CASE ID_BT_ADD
  214.                                         IF (ok:=BgUI_DoGadgetMethodA(tv_Test, win, NIL, [TVM_INSERT, NIL, newEntry, TV_SELECTED, TVW_CHILD_FIRST, 0]))
  215.  
  216.                                             SetGadgetAttrsA(bt_Add, win, NIL, [GA_DISABLED, TRUE, TAG_DONE])
  217.                                             SetGadgetAttrsA(bt_Remove, win, NIL, [GA_DISABLED, FALSE, TAG_DONE])
  218.  
  219.                                         ENDIF
  220.  
  221.                                     CASE ID_BT_REMOVE
  222.                                         IF (ok:=BgUI_DoGadgetMethodA(tv_Test, win, NIL, [TVM_REMOVE, NIL, newEntry, TVW_ENTRY, 0]))
  223.  
  224.                                             SetGadgetAttrsA(bt_Add, win, NIL, [GA_DISABLED, FALSE, TAG_DONE])
  225.                                             SetGadgetAttrsA(bt_Remove, win, NIL, [GA_DISABLED, TRUE, TAG_DONE])
  226.  
  227.                                         ENDIF
  228.  
  229.                                 ENDSELECT
  230.                             ENDWHILE
  231.                         ENDIF
  232.  
  233.                     ENDWHILE
  234.                 ELSE
  235.                     WriteF('Can''t open the window\n')
  236.                 ENDIF
  237.             ELSE
  238.                 WriteF('Can''t create the objects\n')
  239.             ENDIF
  240.  
  241.             DisposeObject(wo_main)
  242.         ELSE
  243.             WriteF('Can''t create the window\n')
  244.         ENDIF
  245.         CloseLibrary(bguibase)
  246.     ELSE
  247.         WriteF('Can''t open bgui.library\n')
  248.     ENDIF
  249. ENDPROC
  250.  
  251. /************************************************************************
  252. ***************************  WINDOWHANDLER()  ***************************
  253. *************************************************************************
  254. * Hook for main window IDCMP messages. Called by window object after its
  255. * intuimsg processing has finished, before main() gets control. Used
  256. * here to provide extra keyboard control not possible using normal
  257. * gadget-key assignment, specIFically: crsr up/down to select entry in
  258. * treeview and ESC to close window.
  259. *
  260. *************************************************************************/
  261.  
  262. PROC windowHandler(hook:PTR TO hook,obj:PTR TO object,imsg:PTR TO intuimessage)
  263.     DEF win:PTR TO window
  264.     DEF cursel,method,entry,which,flags
  265.     DEF view:PTR TO object
  266.  
  267.     view := hook.data
  268.     GetAttr(WINDOW_Window, obj, {win})
  269.  
  270.     IF (imsg.class = IDCMP_RAWKEY)
  271.  
  272.         method := TVM_SELECT
  273.         entry := TV_SELECTED
  274.         which := -1
  275.         flags := TVF_MAKEVISIBLE
  276.         cursel := domethod(view,[TVM_GETENTRY, TV_SELECTED, TVW_ENTRY, 0])
  277.  
  278.         IF (imsg.code = RAW_UPARROW)
  279.             IF (cursel)
  280.                 which := TVW_TREE_PREV
  281.  
  282.                 IF (imsg.qualifier AND SHIFTKEYS)
  283.                     which := TVW_TREE_PAGE_UP
  284.                 ENDIF
  285.  
  286.                 IF (imsg.qualifier AND CTRLKEY)
  287.                     entry := TV_ROOT
  288.                     which := TVW_CHILD_FIRST
  289.                 ENDIF
  290.             ELSE
  291.                 which := TVW_CHILD_FIRST
  292.                 entry := TV_ROOT
  293.             ENDIF
  294.         ENDIF
  295.  
  296.         IF (imsg.code = RAW_DOWNARROW)
  297.             IF (cursel)
  298.                 which := TVW_TREE_NEXT
  299.  
  300.                 IF (imsg.qualifier AND SHIFTKEYS)
  301.                     which := TVW_TREE_PAGE_DOWN
  302.                 ENDIF
  303.  
  304.                 IF (imsg.qualifier AND CTRLKEY)
  305.                     entry := TV_ROOT
  306.                     which := TVW_TREE_LAST
  307.                 ENDIF
  308.             ELSE
  309.                 which := TVW_CHILD_FIRST
  310.                 entry := TV_ROOT
  311.             ENDIF
  312.         ENDIF
  313.  
  314.         IF (imsg.code = RAW_RETURN)
  315.             method := TVM_EXPAND
  316.             which := TVW_ENTRY
  317.             flags := TVF_TOGGLE
  318.         ENDIF
  319.  
  320.         IF (which <> 0)
  321.             BgUI_DoGadgetMethodA(view, win, NIL, [method, NIL, entry, which, flags])
  322.         ENDIF
  323.     ENDIF
  324.  
  325. ENDPROC
  326.  
  327.