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

  1. /*
  2.  *      MULTISELECT.E
  3.  *
  4.  *      (C) Copyright 1995 Jaba Development.
  5.  *      (C) Copyright 1995 Jan van den Baard.
  6.  *          All Rights Reserved.
  7.  *
  8.  *      On 22 May 96, a dead-end loop bug corrected by Dominique Dutoit.
  9.  *      Updated on 11-Aug-96
  10.  */
  11.  
  12. OPT OSVERSION=37
  13. OPT PREPROCESS
  14.  
  15. MODULE 'libraries/bgui',
  16.        'libraries/bguim',
  17.        'libraries/gadtools',
  18.        'bgui',
  19.        'bgui/bgui_image',
  20.        'bgui/bgui_obsolete',
  21.        'tools/boopsi',
  22.        'utility/tagitem',
  23.         'intuition/intuition',
  24.         'intuition/screens',
  25.        'intuition/classes',
  26.        'intuition/classusr',
  27.        'intuition/gadgetclass'
  28. /*
  29. **      Object ID's.
  30. **/
  31. #define ID_SHOW                 1
  32. #define ID_QUIT                 2
  33. #define ID_ALL                  3
  34. #define ID_NONE                 4
  35.  
  36. PROC main()
  37.  
  38.     DEF wo_window, window:PTR TO window,go_quit, go_show, go_list, go_shift, go_all, go_none,
  39.         signal, rc, str,
  40.         running = TRUE
  41.  
  42.    /*
  43.    **      Open the library.
  44.    **/
  45.    IF bguibase := OpenLibrary( 'bgui.library', BGUIVERSION )
  46.         /*
  47.          *      Create the window object.
  48.          */
  49.         wo_window := WindowObject,
  50.                 WINDOW_Title,           'Multi-Selection Demo',
  51.                 WINDOW_AutoAspect,      TRUE,
  52.                 WINDOW_SmartRefresh,    TRUE,
  53.                 WINDOW_RMBTrap,         TRUE,
  54.                 WINDOW_ScaleWidth,      30,
  55.                 WINDOW_ScaleHeight,     30,
  56.                 WINDOW_AutoKeyLabel,    TRUE,
  57.                 WINDOW_MasterGroup,
  58.                         VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  59.                                 StartMember,
  60.                                         VGroupObject, HOffset( 4 ), VOffset( 4 ),
  61.                                                 FRM_Type,               FRTYPE_BUTTON,
  62.                                                 FRM_Recessed,           TRUE,
  63.                                                 StartMember,
  64.                                                         go_list := ListviewObject,
  65.                                                                 LISTV_EntryArray,               ['\ecThis listview object has multi-',
  66.                                                                 '\ecselection turned on. You can',
  67.                                                                 '\ecmulti-select the items by holding',
  68.                                                                 '\ec down the SHIFT-key while clicking',
  69.                                                                 '\econ the different items or by clicking',
  70.                                                                 '\econ an entry and dragging the mouse',
  71.                                                                 '\ecup or down.',
  72.                                                                 '\ec',
  73.                                                                 '\ecIf you check the No SHIFT checbox',
  74.                                                                 '\ecyou can multi-select the items without',
  75.                                                                 '\ecusing the SHIFT key',NIL],
  76.                                                                 LISTV_MultiSelect,              TRUE,
  77.                                                         EndObject,
  78.                                                 EndMember,
  79.                                                 StartMember,
  80.                                                         HGroupObject,
  81.                                                                 StartMember, go_all  := KeyButton( '_All',  ID_ALL  ), EndMember,
  82.                                                                 StartMember, go_none := KeyButton( 'N_one', ID_NONE ), EndMember,
  83.                                                         EndObject, FixMinHeight,
  84.                                                 EndMember,
  85.                                         EndObject,
  86.                                 EndMember,
  87.                                 StartMember,
  88.                                         HGroupObject, HOffset( 4 ), VOffset( 4 ),
  89.                                                 FRM_Type,               FRTYPE_BUTTON,
  90.                                                 FRM_Recessed,           TRUE,
  91.                                                 VarSpace( DEFAULT_WEIGHT ),
  92.                                                 StartMember, go_shift := KeyCheckBox( '_No SHIFT:', FALSE, 0 ), EndMember,
  93.                                                 VarSpace( DEFAULT_WEIGHT ),
  94.                                         EndObject, FixMinHeight,
  95.                                 EndMember,
  96.                                 StartMember,
  97.                                         HGroupObject, Spacing( 4 ),
  98.                                                 StartMember, go_show := KeyButton( '_Show', ID_SHOW ), EndMember,
  99.                                                 VarSpace( DEFAULT_WEIGHT ),
  100.                                                 StartMember, go_quit := KeyButton( '_Quit', ID_QUIT ), EndMember,
  101.                                         EndObject, FixMinHeight,
  102.                                 EndMember,
  103.                         EndObject,
  104.         EndObject
  105.  
  106.         /*
  107.         **      Object created OK?
  108.         **/
  109.         IF wo_window
  110.             /*
  111.             **      Add notification.
  112.             **/
  113.             IF AddMap( go_shift, go_list, [ GA_SELECTED, LISTV_MultiSelectNoShift, TAG_END ]:tagitem )
  114.                 /*
  115.                 **      try to open the window.
  116.                 **/
  117.                 IF window := WindowOpen( wo_window )
  118.                     /*
  119.                     **      Obtain it's wait mask.
  120.                     **/
  121.                     GetAttr( WINDOW_SigMask, wo_window, {signal} )
  122.                     /*
  123.                     **      Event loop...
  124.                     **/
  125.                     WHILE running = TRUE
  126.                         Wait( signal )
  127.                         /*
  128.                         **      Handle events.
  129.                         **/
  130.                         WHILE ( rc := HandleEvent( wo_window )) <> WMHI_NOMORE
  131.                             /*
  132.                             **      Evaluate return code.
  133.                             **/
  134.                             SELECT rc
  135.  
  136.                                     CASE    WMHI_CLOSEWINDOW
  137.                                             running := FALSE
  138.                                     CASE    ID_QUIT
  139.                                             running := FALSE
  140.                                     CASE    ID_ALL
  141.                                             SetGadgetAttrsA(go_list, window, NIL, [LISTV_SelectMulti, LISTV_Select_All, TAG_END] )
  142.  
  143.                                     CASE    ID_NONE
  144.                                             SetGadgetAttrsA(go_list, window, NIL, [LISTV_Deselect, -1, TAG_END] )
  145.  
  146.                                     CASE    ID_SHOW
  147.  
  148.                                             /*
  149.                                             **      Simply dump all selected entries
  150.                                             **      to the console.
  151.                                             **/
  152.                                             IF str := FirstSelected( go_list )
  153.                                                     REPEAT
  154.                                                             WriteF( '\s\n', str + 2 )
  155.                                                                               ->^^^ A bug fixed by Peter Mysliwy
  156.                                                             str := NextSelected( go_list, str )
  157.                                                                                           
  158.                                                     /* THE BUG !!!!!
  159.                                                     ** The original line was : UNTIL str
  160.                                                     ** Such statement cause a dead-end loop as str is filled with NIL
  161.                                                     */
  162.                                                     UNTIL str = NIL
  163.                                             ELSE
  164.                                                     /*
  165.                                                     **      Oops. There are no selected
  166.                                                     **      entries.
  167.                                                     **/
  168.                                                     WriteF( 'No selections made!\n' )
  169.                                             ENDIF
  170.                             ENDSELECT
  171.                         ENDWHILE
  172.                     ENDWHILE
  173.                 ELSE
  174.                     WriteF( 'Could not open the window\n' )
  175.                 ENDIF
  176.             ELSE
  177.                 WriteF( 'Unable to add notification\n' )
  178.             ENDIF
  179.             /*
  180.             **      Disposing of the window object will
  181.             **      also close the window if it is
  182.             **      already opened and it will dispose of
  183.             **      all objects attached to it.
  184.             **/
  185.             DisposeObject( wo_window )
  186.         ELSE
  187.              WriteF( 'Could not create the window object\n' )
  188.         ENDIF
  189.         CloseLibrary(bguibase)
  190.    ELSE
  191.         WriteF( 'Could not open the bgui.library\n' )
  192.    ENDIF
  193. ENDPROC
  194.