home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c082_144 / 9.ddi / TVSRC.ZIP / TFRAME.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-10  |  6.0 KB  |  203 lines

  1. /*------------------------------------------------------------*/
  2. /* filename -       tframe.cpp                                */
  3. /*                                                            */
  4. /* function(s)                                                */
  5. /*                  TFrame member functions                   */
  6. /*------------------------------------------------------------*/
  7.  
  8. /*------------------------------------------------------------*/
  9. /*                                                            */
  10. /*    Turbo Vision -  Version 1.0                             */
  11. /*                                                            */
  12. /*                                                            */
  13. /*    Copyright (c) 1991 by Borland International             */
  14. /*    All Rights Reserved.                                    */
  15. /*                                                            */
  16. /*------------------------------------------------------------*/
  17.  
  18. #define Uses_TFrame
  19. #define Uses_TDrawBuffer
  20. #define Uses_TWindow
  21. #define Uses_TRect
  22. #define Uses_TPoint
  23. #define Uses_TEvent
  24. #include <tv.h>
  25.  
  26. #if !defined( __STRING_H )
  27. #include <String.h>
  28. #endif  // __STRING_H
  29.  
  30. #define cpFrame "\x01\x01\x02\x02\x03"
  31.  
  32. TFrame::TFrame( const TRect& bounds ) : TView( bounds )
  33. {
  34.     growMode = gfGrowHiX + gfGrowHiY;
  35.     eventMask |= evBroadcast;
  36. }
  37.  
  38. void TFrame::draw()
  39. {
  40.     ushort cFrame, cTitle;
  41.     short  f, i, l, width;
  42.     TDrawBuffer b;
  43.  
  44.     if( (state & sfActive) == 0 )
  45.         {
  46.         cFrame = 0x0101;
  47.         cTitle = 0x0002;
  48.         f = 0;
  49.         }
  50.     else
  51.         if( (state & sfDragging) != 0 )
  52.             {
  53.             cFrame = 0x0505;
  54.             cTitle = 0x0005;
  55.             f = 0;
  56.             }
  57.         else
  58.             {
  59.             cFrame = 0x0503;
  60.             cTitle = 0x0004;
  61.             f = 9;
  62.             }
  63.  
  64.     cFrame = getColor(cFrame);
  65.     cTitle = getColor(cTitle);
  66.  
  67.     width = size.x;
  68.     l = width - 10;
  69.  
  70.     if( ( ((TWindow *)owner)->flags & (wfClose | wfZoom) ) != 0 )
  71.         l -= 6;
  72.     frameLine( b, 0, f, uchar(cFrame) );
  73.     if( ((TWindow *)owner)->number != wnNoNumber &&
  74.         ((TWindow *)owner)->number < 10
  75.       )
  76.         {
  77.         l -= 4;
  78.         if( ( ((TWindow *)owner)->flags & wfZoom ) != 0 )
  79.             i = 7;
  80.         else
  81.             i = 3;
  82.         b.putChar( width-i, ((TWindow *)owner)->number + '0' );
  83.         }
  84.  
  85.     if( owner != 0 )
  86.         {
  87.         const char *title = ((TWindow *)owner)->getTitle(l);
  88.         if( title != 0 )
  89.             {
  90.             l = min( cstrlen(title), width - 10 );
  91.             l = max( l, 0 );
  92.             i = (width - l) >> 1;
  93.             b.putChar( i-1, ' ' );
  94.             b.moveBuf( i, title, cTitle, l );
  95.             b.putChar( i+l, ' ' );
  96.             }
  97.         }
  98.  
  99.     if( (state & sfActive) != 0 )
  100.         {
  101.         if( ( ((TWindow *)owner)->flags & wfClose ) != 0 )
  102.             b.moveCStr( 2, closeIcon, cFrame );
  103.         if( ( ((TWindow *)owner)->flags & wfZoom ) != 0 )
  104.             {
  105.             TPoint minSize, maxSize;
  106.             owner->sizeLimits( minSize, maxSize );
  107.             if( owner->size == maxSize )
  108.                 b.moveCStr( width-5, unZoomIcon, cFrame );
  109.             else
  110.                 b.moveCStr( width-5, zoomIcon, cFrame );
  111.             }
  112.         }
  113.  
  114.     writeLine( 0, 0, size.x, 1, b );
  115.     for( i = 1; i <=  size.y - 2; i++ )
  116.         {
  117.         frameLine( b, i, f +  3, cFrame );
  118.         writeLine( 0, i, size.x, 1, b );
  119.         }
  120.     frameLine( b, size.y - 1, f +  6, cFrame );
  121.     if( (state & sfActive) != 0 )
  122.         if( ( ((TWindow *)owner)->flags & wfGrow ) != 0 )
  123.             b.moveCStr( width-2, dragIcon, cFrame );
  124.     writeLine( 0, size.y - 1, size.x, 1, b );
  125. }
  126.  
  127. TPalette& TFrame::getPalette() const
  128. {
  129.     static TPalette palette( cpFrame, sizeof( cpFrame )-1 );
  130.     return palette;
  131. }
  132.  
  133. void TFrame::dragWindow( TEvent& event, uchar mode )
  134. {
  135.     TRect  limits;
  136.     TPoint min, max;
  137.  
  138.     limits = owner->owner->getExtent();
  139.     owner->sizeLimits( min, max );
  140.     owner->dragView( event, owner->dragMode | mode, limits, min, max );
  141.     clearEvent( event );
  142. }
  143.  
  144. void TFrame::handleEvent( TEvent& event )
  145. {
  146.     TView::handleEvent(event);
  147.     if( event.what== evMouseDown && (state & sfActive) != 0 )
  148.         {
  149.         TPoint mouse = makeLocal( event.mouse.where );
  150.         if( mouse.y == 0 )
  151.             {
  152.             if( ( ((TWindow *)owner)->flags & wfClose ) != 0 &&
  153.                     mouse.x >= 2 &&
  154.                     mouse.x <= 4 )
  155.                 {
  156.                 event.what= evCommand;
  157.                 event.message.command = cmClose;
  158.                 event.message.infoPtr = owner;
  159.                 putEvent( event );
  160.                 clearEvent( event );
  161.                 }
  162.             else
  163.                 if( (((TWindow *)owner)->flags & wfZoom) != 0 && 
  164.                     ( (mouse.x >= size.x - 5 && mouse.x <= size.x - 3) ||
  165.                        event.mouse.doubleClick
  166.                     )
  167.                   )
  168.                     {
  169.                     event.what= evCommand;
  170.                     event.message.command = cmZoom;
  171.                     event.message.infoPtr = owner;
  172.                     putEvent( event );
  173.                     clearEvent( event );
  174.                     }
  175.                 else
  176.                     if( ( ((TWindow *)owner)->flags & wfMove ) != 0 )
  177.                         dragWindow( event, dmDragMove );
  178.             }
  179.         else
  180.             if( mouse.x >= size.x - 2 && mouse.y >= size.y - 1 )
  181.                 if( ( ((TWindow *)owner)->flags & wfGrow ) != 0 )
  182.                     dragWindow( event, dmDragGrow );
  183.         }
  184. }
  185.  
  186. void TFrame::setState( ushort aState, Boolean enable )
  187. {
  188.     TView::setState( aState, enable );
  189.     if( (aState & (sfActive | sfDragging)) != 0 )
  190.         drawView();
  191. }
  192.  
  193. TStreamable *TFrame::build()
  194. {
  195.     return new TFrame( streamableInit );
  196. }
  197.  
  198. TFrame::TFrame( StreamableInit ) : TView( streamableInit )
  199. {
  200. }
  201.  
  202.  
  203.