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

  1. /* -- --------------------------------------------------------------- -- *
  2.  * -- Programname..........: ViewGroup.e                              -- *
  3.  * -- Description..........: Simple translation from the existing     -- *
  4.  * --                        C-Version.                               -- *
  5.  * --                                                                 -- *
  6.  * -- Author...............: Daniel Kasmeroglu (alias Deekah)         -- *
  7.  * -- Version..............: 0.1     (22.02.1997)                     -- *
  8.  * -- --                                                           -- -- *
  9.  * -- History..............:                                          -- *
  10.  * --                                                                 -- *
  11.  * --         0.1          - Die erste Version ;-)                    -- *
  12.  * --                        (22.02.1997)                             -- *
  13.  * -- --------------------------------------------------------------- -- */
  14.  
  15.  
  16.      /* -- ------------------------------------------------- -- *
  17.       * --                     Compiler-Options              -- *
  18.       * -- ------------------------------------------------- -- */
  19.  
  20. OPT REG = 5                -> activate register-optimization
  21. OPT PREPROCESS             -> enable preprocessor
  22.  
  23.  
  24.      /* -- ------------------------------------------------- -- *
  25.       * --                          Macros                   -- *
  26.       * -- ------------------------------------------------- -- */
  27.  
  28. #define PageLab  [ 'Information', 'Buttons', 'Strings', 'CheckBoxes', 'Radio-Buttons', NIL ]
  29. #define MxLab    [ 'MX #1', 'MX #2', 'MX #3', 'MX #4', NIL ]
  30.  
  31. #define MyCheckBox( label, id )\
  32.   CheckBoxObject,\
  33.     LAB_Label,         label,\
  34.     GA_ID,             id,\
  35.   EndObject
  36.  
  37.  
  38.      /* -- ------------------------------------------------- -- *
  39.       * --                         E-Modules                 -- *
  40.       * -- ------------------------------------------------- -- */
  41.  
  42. MODULE 'libraries/bguim',
  43.        'libraries/bgui',
  44.        'bgui',
  45.        'bgui/bgui_image',
  46.        'bgui/bgui_obsolete',
  47.        'devices/inputevent',
  48.        'devices/input',
  49.        'utility/tagitem',
  50.        'utility/hooks',
  51.        'tools/installhook',
  52.        'tools/inithook',
  53.        'tools/boopsi',
  54.        'intuition/gadgetclass',
  55.        'intuition/intuition',
  56.        'intuition/classusr',
  57.        'intuition/classes',
  58.        'intuition/imageclass'
  59.  
  60.  
  61. MODULE 'bgui'
  62.  
  63.  
  64.      /* -- ------------------------------------------------- -- *
  65.       * --                        Constants                  -- *
  66.       * -- ------------------------------------------------- -- */
  67.  
  68. CONST BOTH_SHIFT = IEQUALIFIER_LSHIFT OR IEQUALIFIER_RSHIFT
  69.  
  70. ENUM GID_TABS = 1,        -> Gadget-IDs
  71.      GID_DEPTH,
  72.      GID_HELP,
  73.      GID_PROPHORIZ,
  74.      GID_PROPVERT,
  75.      GID_INFO,
  76.      GID_QUIT,
  77.      GID_BUTTON1,
  78.      GID_BUTTON2,
  79.      GID_BUTTON3,
  80.      GID_STRING1,
  81.      GID_STRING2,
  82.      GID_STRING3,
  83.      GID_CHECK1,
  84.      GID_CHECK2,
  85.      GID_CHECK3,
  86.      GID_RADIO,
  87.      GRID_PAGE,           -> GRoup-IDs
  88.      GRID_VIEW
  89.  
  90.  
  91.      /* -- ------------------------------------------------- -- *
  92.       * --                        Structures                 -- *
  93.       * -- ------------------------------------------------- -- */
  94.  
  95. OBJECT ehook OF hook      -> the data field is used by `installhook'
  96.   privatedata : LONG
  97. ENDOBJECT
  98.  
  99.  
  100. OBJECT viewgui
  101.   owindow       : PTR TO object
  102.   window        : PTR TO window
  103.   gadgets[ 19 ] : ARRAY OF LONG
  104.   ehook         : ehook
  105. ENDOBJECT
  106.  
  107.  
  108.      /* -- ------------------------------------------------- -- *
  109.       * --                        Methoden                   -- *
  110.       * -- ------------------------------------------------- -- */
  111.  
  112. PROC vie_Constructor() OF viewgui
  113.  
  114.   -> installation of the hook (I don't know what `inithook' does
  115.   -> but this combination works in all my examples )
  116.   installhook( self.ehook, {glo_TabHookFunc} )
  117.   inithook(    self.ehook, {glo_TabHookFunc} )
  118.  
  119.   -> initializing simple objects
  120.   self.vie_InitGadgets()
  121.  
  122.   -> if the GRID_VIEW-Object exists all went ok !
  123.   IF self.gadgets[ GRID_VIEW - 1 ] <> NIL
  124.  
  125.     -> setup the window-object
  126.     self.owindow := WindowObject,
  127.                       WINDOW_Title,              'Border gadgets',
  128.                       WINDOW_AutoKeyLabel,       TRUE,
  129.                       WINDOW_AutoAspect,         TRUE,
  130.                       WINDOW_CloseOnEsc,         TRUE,
  131.                       WINDOW_IDCMPHookBits,      IDCMP_RAWKEY,
  132.                       WINDOW_IDCMPHook,          self.ehook,
  133.                       WINDOW_TBorderGroup, 
  134.                         HGroupObject,
  135.                           StartMember,
  136.                             self.gadgets[ GID_DEPTH - 1 ],
  137.                           EndMember,
  138.                           StartMember,
  139.                             self.gadgets[ GID_HELP - 1 ],
  140.                           EndMember,
  141.                         EndObject,
  142.                       WINDOW_BBorderGroup,
  143.                         HGroupObject,
  144.                           StartMember,
  145.                             self.gadgets[ GID_PROPHORIZ - 1 ],
  146.                           EndMember,
  147.                         EndObject,
  148.                       WINDOW_RBorderGroup,
  149.                         VGroupObject,
  150.                           StartMember,
  151.                             self.gadgets[ GID_PROPVERT - 1 ],
  152.                           EndMember,
  153.                         EndObject,
  154.                       WINDOW_MasterGroup,
  155.                         VGroupObject,
  156.                           StartMember,
  157.                             self.gadgets[ GRID_VIEW - 1 ],
  158.                           EndMember,
  159.                         EndObject,
  160.                     EndObject
  161.              
  162.  
  163.     -> if the creation was successful 
  164.     IF self.owindow <> NIL
  165.  
  166.       -> store the address of the TABS-Object
  167.       self.ehook.privatedata := self.gadgets[ GID_TABS - 1 ]
  168.  
  169.       -> add a simple map
  170.       AddMap( self.gadgets[ GID_TABS - 1 ], self.gadgets[ GRID_PAGE - 1 ], {lab_Cyc2Page} )
  171.  
  172.       -> setup the TabCycling-Order
  173.       domethod( self.owindow, [ WM_TABCYCLE_ORDER,
  174.                                 self.gadgets[ GID_STRING1 - 1 ],
  175.                                 self.gadgets[ GID_STRING2 - 1 ],
  176.                                 self.gadgets[ GID_STRING3 - 1 ], NIL ] )
  177.      
  178.       -> attach some objects to the VIEW-Object
  179.       SetAttrsA( self.gadgets[ GRID_VIEW - 1 ], [ VIEW_HScroller, self.gadgets[ GID_PROPHORIZ - 1 ], TAG_END ] )
  180.       SetAttrsA( self.gadgets[ GRID_VIEW - 1 ], [ VIEW_VScroller, self.gadgets[ GID_PROPVERT  - 1 ], TAG_END ] )
  181.  
  182.     ENDIF
  183.  
  184.   ENDIF
  185.  
  186. ENDPROC
  187.  
  188.  
  189. PROC vie_InitGadgets() OF viewgui
  190. DEF vie_run,vie_ok
  191.  
  192.   -> initialize all objects
  193.   self.gadgets[ GID_TABS  - 1 ] := MxObject,
  194.                                      MX_TabsObject,         TRUE,
  195.                                      MX_Labels,             PageLab, 
  196.                                      GA_ID,                 GID_TABS,
  197.                                    EndObject
  198.  
  199.   self.gadgets[ GID_DEPTH - 1 ] := ButtonObject,
  200.                                      SYSIA_WHICH,           DEPTHIMAGE, 
  201.                                      GA_ID,                 GID_DEPTH,
  202.                                    EndObject
  203.  
  204.   self.gadgets[ GID_HELP  - 1 ] := ButtonObject,
  205.                                      FRM_Type,              FRTYPE_BORDER,
  206.                                      FRM_InnerOffsetTop,    -1,
  207.                                      LAB_Label,             'Help...',
  208.                                      BUTTON_EncloseImage,   TRUE,
  209.                                      GA_ID,                 GID_HELP,
  210.                                    EndObject
  211.  
  212.   self.gadgets[ GID_PROPHORIZ - 1 ] := PropObject,
  213.                                          PGA_TOP,           15,
  214.                                          PGA_TOTAL,         20,
  215.                                          PGA_VISIBLE,       10,
  216.                                          PGA_FREEDOM,       FREEHORIZ,
  217.                                          PGA_NEWLOOK,       TRUE,
  218.                                          PGA_Arrows,        TRUE,
  219.                                          GA_ID,             GID_PROPHORIZ,
  220.                                        EndObject
  221.  
  222.  
  223.   self.gadgets[ GID_PROPVERT  - 1 ] := PropObject,
  224.                                          PGA_TOP,           15,
  225.                                          PGA_TOTAL,         20,
  226.                                          PGA_VISIBLE,       10,
  227.                                          PGA_FREEDOM,       FREEVERT,
  228.                                          PGA_NEWLOOK,       TRUE,
  229.                                          PGA_Arrows,        TRUE,
  230.                                          GA_ID,             GID_PROPVERT,
  231.                                        EndObject
  232.  
  233.   
  234.   self.gadgets[ GID_INFO -  1 ] := InfoObject,
  235.                                      ButtonFrame,
  236.                                      FRM_Flags,             FRF_RECESSED,
  237.                                      INFO_TextFormat,       {lab_Text},
  238.                                      INFO_FixTextWidth,     TRUE,
  239.                                      INFO_MinLines,         14,
  240.                                      GA_ID,                 GID_INFO,
  241.                                    EndObject
  242.  
  243.   self.gadgets[ GID_QUIT - 1 ] := ButtonObject,
  244.                                     GA_ID,                  GID_QUIT,
  245.                                     LAB_Label,              '_Quit',
  246.                                     LAB_Underscore,         "_",
  247.                                   EndObject
  248.  
  249.   self.gadgets[ GID_BUTTON1 - 1 ] := PrefButton( 'Button #_1', GID_BUTTON1 )
  250.   self.gadgets[ GID_BUTTON2 - 1 ] := PrefButton( 'Button #_2', GID_BUTTON2 )
  251.   self.gadgets[ GID_BUTTON3 - 1 ] := PrefButton( 'Button #_3', GID_BUTTON3 )
  252.   
  253.   self.gadgets[ GID_STRING1 - 1 ] := PrefString( 'String #_1', NIL, 256, GID_STRING1 )
  254.   self.gadgets[ GID_STRING2 - 1 ] := PrefString( 'String #_2', NIL, 256, GID_STRING2 )
  255.   self.gadgets[ GID_STRING3 - 1 ] := PrefString( 'String #_3', NIL, 256, GID_STRING3 )
  256.  
  257.   self.gadgets[ GID_CHECK1  - 1 ] := MyCheckBox( 'CheckBox #_1', GID_CHECK1 )
  258.   self.gadgets[ GID_CHECK2  - 1 ] := MyCheckBox( 'CheckBox #_2', GID_CHECK2 )
  259.   self.gadgets[ GID_CHECK3  - 1 ] := MyCheckBox( 'CheckBox #_3', GID_CHECK3 )
  260.  
  261.   self.gadgets[ GID_RADIO   - 1 ] := MxObject,
  262.                                        GROUP_Style,              GRSTYLE_VERTICAL,
  263.                                        LAB_Label,                '_Mx Object',
  264.                                        LAB_Place,                PLACE_ABOVE,
  265.                                        MX_Labels,                MxLab,
  266.                                        GA_ID,                    GID_RADIO,
  267.                                      EndObject
  268.  
  269.  
  270.  
  271.   -> check if all went ok
  272.   vie_ok := TRUE
  273.   FOR vie_run := GID_TABS TO GID_RADIO
  274.     IF self.gadgets[ vie_run - 1 ] = NIL THEN vie_ok := FALSE
  275.   ENDFOR
  276.  
  277.   -> if there was a fault, then dispose all successful
  278.   -> created objects
  279.   IF vie_ok = FALSE
  280.     FOR vie_run := GID_TABS TO GID_RADIO
  281.       IF self.gadgets[ vie_run - 1 ] <> NIL
  282.         DisposeObject( self.gadgets[ vie_run - 1 ] )
  283.         self.gadgets[ vie_run - 1 ] := NIL
  284.       ENDIF
  285.     ENDFOR
  286.   ELSE
  287.  
  288.     -> setup the PAGE-Object
  289.     self.gadgets[ GRID_PAGE - 1 ] := PageObject,
  290.                                        PageMember,
  291.                                          VGroupObject,
  292.                                            NormalSpacing,
  293.                                            StartMember,
  294.                                              self.gadgets[ GID_INFO - 1 ],   
  295.                                            EndMember,
  296.                                            StartMember,
  297.                                              HGroupObject,
  298.                                                VarSpace(50),
  299.                                                StartMember,
  300.                                                  self.gadgets[ GID_QUIT - 1 ],
  301.                                                EndMember,
  302.                                                VarSpace(50),
  303.                                              EndObject,
  304.                                              FixMinHeight,
  305.                                            EndMember,
  306.                                          EndObject,
  307.                                        PageMember,
  308.                                          VGroupObject,
  309.                                            NormalSpacing,
  310.                                            VarSpace(DEFAULT_WEIGHT),
  311.                                            StartMember,
  312.                                              self.gadgets[ GID_BUTTON1 - 1 ],
  313.                                              FixMinHeight,
  314.                                            EndMember,
  315.                                            StartMember,
  316.                                              self.gadgets[ GID_BUTTON2 - 1 ],
  317.                                              FixMinHeight,
  318.                                            EndMember,
  319.                                            StartMember, 
  320.                                              self.gadgets[ GID_BUTTON3 - 1 ],
  321.                                              FixMinHeight,
  322.                                            EndMember,
  323.                                            VarSpace(DEFAULT_WEIGHT),
  324.                                          EndObject,
  325.                                        PageMember,
  326.                                          VGroupObject,
  327.                                            NormalSpacing,
  328.                                            VarSpace(DEFAULT_WEIGHT),
  329.                                            StartMember, 
  330.                                              self.gadgets[ GID_STRING1 - 1 ],
  331.                                              FixMinHeight,
  332.                                            EndMember,
  333.                                            StartMember, 
  334.                                              self.gadgets[ GID_STRING2 - 1 ],
  335.                                              FixMinHeight,
  336.                                            EndMember,
  337.                                            StartMember, 
  338.                                              self.gadgets[ GID_STRING3 - 1 ],
  339.                                              FixMinHeight,
  340.                                            EndMember,
  341.                                            VarSpace(DEFAULT_WEIGHT),
  342.                                          EndObject,
  343.                                        PageMember,
  344.                                          VGroupObject,
  345.                                            NormalSpacing,
  346.                                            VarSpace(DEFAULT_WEIGHT),
  347.                                            StartMember,
  348.                                              HGroupObject,
  349.                                                VarSpace(DEFAULT_WEIGHT),
  350.                                                StartMember,
  351.                                                  VGroupObject, 
  352.                                                    NormalSpacing,
  353.                                                    StartMember, self.gadgets[ GID_CHECK1 - 1 ], EndMember,
  354.                                                    StartMember, self.gadgets[ GID_CHECK2 - 1 ], EndMember,
  355.                                                    StartMember, self.gadgets[ GID_CHECK3 - 1 ], EndMember,
  356.                                                  EndObject, 
  357.                                                  FixMinWidth,
  358.                                                EndMember,
  359.                                                VarSpace(DEFAULT_WEIGHT),
  360.                                              EndObject,
  361.                                            EndMember, 
  362.                                            VarSpace(DEFAULT_WEIGHT),
  363.                                          EndObject,
  364.                                        PageMember,
  365.                                          VGroupObject,
  366.                                            VarSpace(DEFAULT_WEIGHT),
  367.                                            StartMember,
  368.                                              HGroupObject,
  369.                                                VarSpace( DEFAULT_WEIGHT ),
  370.                                                StartMember, self.gadgets[ GID_RADIO - 1 ], EndMember,
  371.                                                VarSpace( DEFAULT_WEIGHT ),
  372.                                              EndObject, 
  373.                                              FixMinHeight,
  374.                                            EndMember,
  375.                                            VarSpace(DEFAULT_WEIGHT),
  376.                                          EndObject,
  377.                                      EndObject
  378.  
  379.  
  380.     -> if PAGE-Object was successfully created then create
  381.     -> the VIEW-Object
  382.     IF self.gadgets[ GRID_PAGE - 1 ] <> NIL
  383.  
  384.       self.gadgets[ GRID_VIEW - 1 ] := ViewObject,
  385.                                          FRM_Type,                  FRTYPE_NONE,
  386.                                          VIEW_ScaleMinWidth,        25,
  387.                                          VIEW_ScaleMinHeight,       25,
  388.                                          VIEW_Object,
  389.                                            VGroupObject,
  390.                                              NormalOffset,
  391.                                              NormalSpacing,
  392.                                              StartMember,
  393.                                                self.gadgets[ GID_TABS - 1 ],
  394.                                                FixMinHeight,
  395.                                              EndMember,
  396.                                              StartMember,
  397.                                                self.gadgets[ GRID_PAGE - 1 ],
  398.                                              EndMember,
  399.                                            EndObject,
  400.                                        EndObject
  401.  
  402.     ENDIF
  403.  
  404.   ENDIF
  405.   
  406. ENDPROC
  407.  
  408.  
  409. PROC vie_StartInterface() OF viewgui
  410. DEF sta_rc,sta_running,sta_signal
  411.  
  412.   -> the window-object should be available
  413.   IF self.owindow <> NIL
  414.  
  415.     -> open the window to make it visible
  416.     self.window := WindowOpen( self.owindow )
  417.     IF self.window <> NIL
  418.  
  419.       -> get the signal-mask
  420.       GetAttr( WINDOW_SigMask, self.owindow, {sta_signal} )
  421.  
  422.       sta_running := TRUE
  423.       WHILE sta_running = TRUE
  424.  
  425.         -> wait until an event arrives
  426.         Wait( sta_signal )
  427.  
  428.         WHILE (sta_rc := HandleEvent( self.owindow )) <> WMHI_NOMORE
  429.  
  430.           -> wow, what a great program or not 8)
  431.           SELECT sta_rc
  432.           CASE WMHI_CLOSEWINDOW ; sta_running := FALSE
  433.           CASE GID_QUIT         ; sta_running := FALSE
  434.           ENDSELECT
  435.  
  436.         ENDWHILE
  437.  
  438.       ENDWHILE
  439.  
  440.       -> this call is not necessary if the window should
  441.       -> be opened only for one time because `DisposeObject'
  442.       -> would close it, too
  443.       WindowClose( self.owindow )
  444.  
  445.     ENDIF
  446.  
  447.   ENDIF
  448.  
  449. ENDPROC
  450.  
  451.  
  452. PROC end() OF viewgui
  453.   IF self.owindow <> NIL 
  454.     DisposeObject( self.owindow )
  455.   ELSEIF self.gadgets[ GRID_VIEW - 1 ] <> NIL
  456.     DisposeObject( self.gadgets[ GRID_VIEW     - 1 ] )
  457.     DisposeObject( self.gadgets[ GRID_PAGE     - 1 ] )
  458.     DisposeObject( self.gadgets[ GID_DEPTH     - 1 ] )
  459.     DisposeObject( self.gadgets[ GID_HELP      - 1 ] )
  460.     DisposeObject( self.gadgets[ GID_PROPVERT  - 1 ] )
  461.     DisposeObject( self.gadgets[ GID_PROPHORIZ - 1 ] )
  462.   ENDIF
  463. ENDPROC
  464.  
  465.  
  466.      /* -- ------------------------------------------------- -- *
  467.       * --                      Hook-Functions               -- *
  468.       * -- ------------------------------------------------- -- */
  469.  
  470. PROC glo_TabHookFunc( tab_ehook : PTR TO ehook, tab_obj : PTR TO object, tab_msg : PTR TO intuimessage )
  471. DEF tab_window : PTR TO window
  472. DEF tab_mxobj  : PTR TO object
  473. DEF tab_pos
  474.  
  475.   tab_mxobj := tab_ehook.privatedata
  476.  
  477.   GetAttr( WINDOW_Window, tab_obj,   {tab_window} )
  478.   GetAttr( MX_Active,     tab_mxobj, {tab_pos}    )
  479.  
  480.   -> 66
  481.   IF tab_msg.code = $42
  482.  
  483.     IF (tab_msg.qualifier AND BOTH_SHIFT) <> NIL
  484.       tab_pos--
  485.     ELSE
  486.       tab_pos++
  487.     ENDIF
  488.  
  489.     SetGadgetAttrsA( tab_mxobj, tab_window, NIL,
  490.     [ MX_Active, tab_pos, TAG_END ] )
  491.  
  492.   ENDIF
  493.  
  494. ENDPROC
  495.  
  496.  
  497.      /* -- ------------------------------------------------- -- *
  498.       * --                          Main                     -- *
  499.       * -- ------------------------------------------------- -- */
  500.  
  501. PROC main() HANDLE
  502. DEF ma_viewgui : PTR TO viewgui
  503.  
  504.   ma_viewgui := NIL
  505.   bguibase   := OpenLibrary( 'bgui.library', 41 )
  506.   IF bguibase <> NIL
  507.     
  508.     NEW ma_viewgui.vie_Constructor()
  509.     ma_viewgui.vie_StartInterface()
  510.  
  511.   ENDIF
  512.  
  513. EXCEPT DO
  514.  
  515.   IF ma_viewgui <> NIL THEN END ma_viewgui
  516.   IF bguibase   <> NIL THEN CloseLibrary( bguibase )
  517.    
  518. ENDPROC exception
  519.  
  520.  
  521.      /* -- ------------------------------------------------- -- *
  522.       * --                          Data                     -- *
  523.       * -- ------------------------------------------------- -- */
  524.  
  525. lab_Cyc2Page:
  526. LONG MX_Active,        PAGE_Active,
  527.      TAG_END
  528.  
  529.  
  530. lab_Text:
  531. CHAR 'This is also an updated example of how to manage border gadgets\n',
  532.      'with BGUI.\n\n',
  533.      '1. It is not necessary (or recommended) to add GA_#?Border\n',
  534.      'tags anymore, BGUI now handles this automatically.\n\n',
  535.      '2. You may use FRTYPE_BORDER for gadgets to get the proper\n',
  536.      'fill colors.\n\n',
  537.      '3. You do not need to specify any frames for prop gadgets,\n',
  538.      'these are done automatically.\n\n',
  539.      '4. Prop gadgets that are in borders now use sysiclass images\n',
  540.      'for their arrows for a more conforming look.\n',0
  541.