home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / powergui / canvas / vportbmp / vportcmd.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-10-29  |  4.1 KB  |  160 lines

  1. //*********************************************************
  2. // Canvas - IViewPort that Scrolls a Bitmap
  3. //
  4. // Copyright (C) 1994, Law, Leong, Love, Olson, Tsuji.
  5. // Copyright (c) 1997 John Wiley & Sons, Inc. 
  6. // All Rights Reserved.
  7. //*********************************************************
  8. #include <ibmpctl.hpp>
  9. #include <iexcept.hpp>
  10. #include <ivport.hpp>
  11. #include "vportcmd.hpp"
  12. #include "vportbmp.h"
  13.  
  14. ScrollViewCmdHandler::ScrollViewCmdHandler ( IViewPort *viewPort )
  15.   : clViewPort( viewPort )
  16. {
  17.   IASSERTPARM( viewPort != 0 )
  18. }
  19.  
  20. IBase::Boolean
  21.   ScrollViewCmdHandler::command ( ICommandEvent &event )
  22. {
  23.   Boolean
  24.     dontPassOn = false;
  25.   switch ( event.commandId() )
  26.   {
  27.      // Process commands to scroll a view port.
  28.      case ID_SCROLL_TO_TOP:
  29.      {
  30.         ( *clViewPort )
  31.          .scrollViewVerticallyTo( 0 );
  32.         dontPassOn = true;
  33.         break;
  34.      }
  35.      case ID_SCROLL_TO_VERT_MIDDLE:
  36.      {
  37.         IRectangle
  38.           viewWindow( IPoint(), clViewPort->viewWindowSize() ),
  39.           visibleView( clViewPort->viewWindowDrawRectangle() );
  40.         visibleView
  41.          .centerAt( viewWindow.center() );
  42.         ( *clViewPort )
  43.          .scrollViewVerticallyTo( visibleView.bottom() );
  44.         dontPassOn = true;
  45.         break;
  46.      }
  47.      case ID_SCROLL_TO_BOTTOM:
  48.      {
  49.         unsigned long
  50.           viewHeight = clViewPort->viewWindowSize().height(),
  51.           visible = clViewPort->viewWindowDrawRectangle().height();
  52.         ( *clViewPort )
  53.          .scrollViewVerticallyTo( viewHeight - visible );
  54.         dontPassOn = true;
  55.         break;
  56.      }
  57.      case ID_SCROLL_TO_LEFT:
  58.      {
  59.         clViewPort->scrollViewHorizontallyTo( 0 );
  60.         dontPassOn = true;
  61.         break;
  62.      }
  63.      case ID_SCROLL_TO_MIDDLE:
  64.      {
  65.         IRectangle
  66.           viewWindow( IPoint(), clViewPort->viewWindowSize() ),
  67.           visibleView( clViewPort->viewWindowDrawRectangle() );
  68.         visibleView
  69.          .centerAt( viewWindow.center() );
  70.         ( *clViewPort )
  71.          .scrollViewHorizontallyTo( visibleView.left() );
  72.         dontPassOn = true;
  73.         break;
  74.      }
  75.      case ID_SCROLL_TO_RIGHT:
  76.      {
  77.         unsigned long
  78.           viewWidth = clViewPort->viewWindowSize().width(),
  79.           visible = clViewPort->viewWindowDrawRectangle().width();
  80.         ( *clViewPort )
  81.          .scrollViewHorizontallyTo( viewWidth - visible );
  82.         dontPassOn = true;
  83.         break;
  84.      }
  85.      default:
  86.         break;
  87.   }
  88.   return dontPassOn;
  89. }
  90.  
  91. SizeBitmapCmdHandler::SizeBitmapCmdHandler
  92.                         ( IBitmapControl *bitmap,
  93.                           IViewPort      *viewPort )
  94.   : clBitmap( bitmap ),
  95.     clViewPort( viewPort )
  96. {
  97.   IASSERTPARM( bitmap != 0 )
  98. }
  99.  
  100. IBase::Boolean
  101.   SizeBitmapCmdHandler::command ( ICommandEvent &event )
  102. {
  103.   Boolean
  104.     dontPassOn = false;
  105.   unsigned long
  106.     mult = 1,
  107.     div  = 1;
  108.   switch ( event.commandId() )
  109.   {
  110.      // Process commands to resize a bitmap control.
  111.      case ID_DOUBLE_SIZE:
  112.        mult = 2;
  113.        break;
  114.      case ID_HALVE_SIZE:
  115.        div = 2;
  116.        break;
  117.      default:
  118.        break;
  119.   }
  120.  
  121.   if ( mult != 1  ||  div != 1 )
  122.   {
  123.      // The view port is sizing the bitmap to its minimum size,
  124.      // so change the minimum size and the view port will
  125.      // automatically change its size to match.
  126.      ( *clBitmap )
  127.       .setMinimumSize( clBitmap->minimumSize() * mult / div );
  128.      dontPassOn = false;
  129.   }
  130.   return dontPassOn;
  131. }
  132.  
  133. NewBitmapCmdHandler::NewBitmapCmdHandler ( IBitmapControl *bitmap )
  134.   : clBitmap( bitmap )
  135. {
  136.   IASSERTPARM( bitmap != 0 )
  137. }
  138.  
  139. IBase::Boolean
  140.   NewBitmapCmdHandler::command ( ICommandEvent &event )
  141. {
  142.   Boolean
  143.     dontPassOn = false;
  144.   switch ( event.commandId() )
  145.   {
  146.      // Process commands to show a new bitmap.
  147.      case ID_FOUNTAIN_BMP:
  148.      case ID_KIDS_BMP:
  149.      case ID_OLDBOOK_BMP:
  150.        ( *clBitmap )
  151.         .setBitmap( event.commandId() )
  152.         .resetMinimumSize();
  153.        dontPassOn = true;
  154.        break;
  155.      default:
  156.        break;
  157.   }
  158.   return dontPassOn;
  159. }
  160.