home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / powergui / advframe / drawextn / myextns.cpp < prev    next >
Text File  |  1996-10-29  |  3KB  |  87 lines

  1. //************************************************************
  2. // Advanced Frame - Frame Extension Drawing Example
  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 <icoordsy.hpp>
  9. #include <igrafctx.hpp>
  10. #include <igrect.hpp>
  11. #include <irect.hpp>
  12. #include "myextns.hpp"
  13.  
  14. MyExtension::MyExtension( IWindow *control,
  15.                           IFrameWindow::Location loc )
  16.     : IFrameExtension( control, loc, IFrameWindow::none ),
  17.       width( 5 ),
  18.       color( IColor::white )
  19.     {
  20.     }
  21.  
  22. MyExtension::MyExtension( IWindow *control,
  23.                IFrameWindow::Location loc,
  24.                double size )
  25.     : IFrameExtension( control, loc, size, IFrameWindow::none ),
  26.       width( 5 ),
  27.       color( IColor::white )
  28.     {
  29.     }
  30.  
  31. MyExtension::MyExtension( IWindow *control,
  32.                IFrameWindow::Location loc,
  33.                int size )
  34.     : IFrameExtension( control, loc, (unsigned long)size,
  35.                        IFrameWindow::none ),
  36.       width( 5 ),
  37.       color( IColor::white )
  38.     {
  39.     }
  40.  
  41. unsigned long MyExtension:: separatorWidth ( ) const
  42.   {
  43.   return width;
  44.   }
  45. void MyExtension::drawSeparator ( const IPresSpaceHandle &hps )
  46.   {
  47.   IRectangle
  48.     separator;
  49.   Boolean isUpperLeft =
  50.      (ICoordinateSystem::nativeOrientation() ==
  51.       ICoordinateSystem::originUpperLeft );
  52.  
  53.   if ( location() == IFrameWindow::aboveClient)
  54.      // Puts separator beneath control.
  55.      separator = control()->nativeRect()
  56.         .moveBy( IPair( 0, isUpperLeft ?
  57.                            control()->size().height() : -width) );
  58.   else
  59.     // Puts separator above control.
  60.     separator = control()->nativeRect()
  61.        .moveBy( IPair( 0, isUpperLeft ?
  62.                           -width : control()->size().height()) );
  63.  
  64.   separator.sizeTo( separator.size().setHeight( width-1 ) );
  65.   // Draw the separator.   Don't draw it if width is 0.
  66.   if (width != 0)
  67.      {
  68.      IGraphicContext gc(hps);
  69.      gc.setFillColor(color);
  70.      gc.setPenColor(color);
  71.      gc.draw( IGRectangle( separator ) );
  72.      }
  73.   }
  74.  
  75. MyExtension& MyExtension::setSeparatorWidth ( unsigned long width )
  76.   {
  77.   this->width = width;
  78.   return *this;
  79.   }
  80.  
  81. MyExtension& MyExtension::setSeparatorColor (
  82.                              const IColor& newColor )
  83. {
  84.   this->color = newColor;
  85.   return *this;
  86. }
  87.