home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pwrgu2.zip / POWERGU2.EXE / DM / MENUDRAG / MENUDRAG.CPP < prev    next >
Text File  |  1995-07-25  |  2KB  |  91 lines

  1. //************************************************************
  2. // Direct Manipulation - Menu Drag Example
  3. //
  4. // Copyright (C) 1994, Law, Leong, Love, Olson, Tsuji.
  5. // All Rights Reserved.
  6. //************************************************************
  7. #include <iframe.hpp>
  8. #include <imenubar.hpp>
  9. #include <imnitem.hpp>
  10. #include <ipushbut.hpp>
  11. #include <istattxt.hpp>
  12. #include <icconst.h>
  13. #include <itrace.hpp>
  14. #include <ifont.hpp>
  15. #include <idmhndlr.hpp>
  16. #include <idmprov.hpp>
  17. #include "cmditem.hpp"
  18.  
  19. static const int
  20.   numButtons  = 3,
  21.   buttonWidth = 75;
  22.  
  23.  
  24. void main()
  25.   {
  26.   // Create the frame and its components. 
  27.   IFrameWindow
  28.     frame( "Menu Direct Manipulation Example" );
  29.   IMenuBar
  30.     menuBar( IC_DEFAULT_FRAME_ID, &frame );
  31.   IStaticText
  32.     text( 0, &frame, &frame );
  33.   IPushButton
  34.    *buttons[ numButtons ];
  35.  
  36.   // Create some buttons for dropping.
  37.   IDMItemProviderFor< CommandItem >
  38.     provider;
  39.   for ( unsigned i = 0; i < numButtons; i++ )
  40.     {
  41.     IPushButton
  42.      *p = new IPushButton( 0, &frame, &frame );
  43.     p -> setText( "" );
  44.     p -> disable();
  45.     p -> setItemProvider( &provider );
  46.     IDMHandler::enableDropOn( p );
  47.     frame.addExtension( p,
  48.                         IFrameWindow::rightOfMenuBar,
  49.                         buttonWidth );
  50.     buttons[ i ] = p;
  51.     }
  52.  
  53.   // Use a menu cursor to iterate the menu items and
  54.   // enable drag from them.
  55.   IMenu::Cursor
  56.     cursor( menuBar );
  57.   for ( cursor.setToFirst(); cursor.isValid(); cursor.setToNext() )
  58.     {
  59.     IWindowHandle
  60.       sub = menuBar.elementAt( cursor ).submenuHandle();
  61.     ITRACE_DEVELOP( "Hooking submenu->" + sub.asString() );
  62.     IWindow
  63.      *p = new IWindow( sub );
  64.     p -> setAutoDeleteObject();
  65.     p -> setItemProvider( &provider );
  66.     IDMHandler::enableDragFrom( p );
  67.     }
  68.  
  69.   // Create and attach the command handler.
  70.   CmdHandler
  71.     cmdHandler( text );
  72.   cmdHandler.handleEventsFor( &frame );
  73.  
  74.   // Set up the alignment and font of the text.
  75.   text
  76.     .setAlignment( IStaticText::centerCenter )
  77.     .setFont( IFont( "Times Roman", 72 ) );
  78.  
  79.   // Give the frame and icon, put the text in
  80.   // the client window, and show the frame.
  81.   frame.setFocus();
  82.   frame
  83.     .setIcon( IC_DEFAULT_FRAME_ID )
  84.     .setClient( &text )
  85.     .showModally();
  86.  
  87.   // Clean up the buttons.
  88.   for ( i = 0; i < numButtons; i++ )
  89.     delete buttons[ i ];
  90.   }
  91.