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

  1. /*------------------------------------------------------------*/
  2. /* filename -       tscrolle.cpp                              */
  3. /*                                                            */
  4. /* function(s)                                                */
  5. /*                  TScroller 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_TScroller
  19. #define Uses_TScrollBar
  20. #define Uses_TEvent
  21. #define Uses_TRect
  22. #define Uses_opstream
  23. #define Uses_ipstream
  24. #include <tv.h>
  25.  
  26. #if !defined( __CTYPE_H )
  27. #include <ctype.h>
  28. #endif  // __CTYPE_H
  29.  
  30. #if !defined( __STRING_H )
  31. #include <String.h>
  32. #endif  // __STRING_H
  33.  
  34. #if !defined( __DOS_H )
  35. #include <Dos.h>
  36. #endif  // __DOS_H
  37.  
  38. #define cpScroller "\x06\x07"
  39.  
  40. TScroller::TScroller( const TRect& bounds,
  41.                       TScrollBar *aHScrollBar,
  42.                       TScrollBar *aVScrollBar) :
  43.     TView( bounds ),
  44.     drawLock( 0 ),
  45.     drawFlag( False ),
  46.     hScrollBar( aHScrollBar ),
  47.     vScrollBar( aVScrollBar )
  48. {
  49.     delta.x = delta.y = limit.x = limit.y = 0;
  50.     options |= ofSelectable;
  51.     eventMask |= evBroadcast;
  52. }
  53.  
  54. void TScroller::shutDown()
  55. {
  56.     hScrollBar = 0;
  57.     vScrollBar = 0;
  58.     TView::shutDown();
  59. }
  60.  
  61. void TScroller::changeBounds( const TRect& bounds )
  62. {
  63.     setBounds(bounds);
  64.     drawLock++;
  65.     setLimit(limit.x, limit.y);
  66.     drawLock--;
  67.     drawFlag = False;
  68.     drawView();
  69. }
  70.  
  71. void TScroller::checkDraw()
  72. {
  73.     if( drawLock == 0 && drawFlag != False )
  74.         {
  75.         drawFlag = False;
  76.         drawView();
  77.         }
  78. }
  79.  
  80. TPalette& TScroller::getPalette() const
  81. {
  82.     static TPalette palette( cpScroller, sizeof( cpScroller )-1 );
  83.     return palette;
  84. }
  85.  
  86. void TScroller::handleEvent(TEvent& event)
  87. {
  88.     TView::handleEvent(event);
  89.  
  90.     if( event.what == evBroadcast &&
  91.         event.message.command == cmScrollBarChanged &&
  92.           ( event.message.infoPtr == hScrollBar ||
  93.             event.message.infoPtr == vScrollBar )
  94.       )
  95.         scrollDraw();
  96. }
  97.  
  98. void TScroller::scrollDraw()
  99. {
  100.     TPoint  d;
  101.  
  102.     if( hScrollBar != 0 )
  103.         d.x = hScrollBar->value;
  104.     else
  105.         d.x = 0;
  106.  
  107.     if( vScrollBar != 0 )
  108.         d.y = vScrollBar->value;
  109.     else
  110.         d.y = 0;
  111.  
  112.     if( d.x != delta.x || d.y != delta.y )
  113.         {
  114.         setCursor( cursor.x + delta.x - d.x, cursor.y + delta.y - d.y );
  115.         delta = d;
  116.         if( drawLock != 0 )
  117.             drawFlag = True;
  118.         else
  119.             drawView();
  120.         }
  121. }
  122.  
  123. void TScroller::scrollTo( short x, short y )
  124. {
  125.     drawLock++;
  126.     if( hScrollBar != 0 )
  127.         hScrollBar->setValue(x);
  128.     if( vScrollBar != 0 )
  129.         vScrollBar->setValue(y);
  130.     drawLock--;
  131.     checkDraw();
  132. }
  133.  
  134. void TScroller::setLimit( short x, short y )
  135. {
  136.     limit.x = x;
  137.     limit.y = y;
  138.     drawLock++;
  139.     if( hScrollBar != 0 )
  140.         hScrollBar->setParams( hScrollBar->value,
  141.                                0,
  142.                                x - size.x,
  143.                                size.x-1,
  144.                                1
  145.                              );
  146.     if( vScrollBar != 0 )
  147.         vScrollBar->setParams( vScrollBar->value,
  148.                                0,
  149.                                y - size.y,
  150.                                size.y-1,
  151.                                1
  152.                              );
  153.     drawLock--;
  154.     checkDraw();
  155. }
  156.  
  157. void TScroller::showSBar( TScrollBar *sBar )
  158. {
  159.     if( sBar != 0 )
  160.         if( getState(sfActive | sfSelected) != 0 )
  161.             sBar->show();
  162.         else
  163.             sBar->hide();
  164. }
  165.  
  166. void TScroller::setState( ushort aState, Boolean enable )
  167. {
  168.     TView::setState(aState, enable);
  169.     if( (aState & (sfActive | sfSelected)) != 0 )
  170.         {
  171.         showSBar(hScrollBar);
  172.         showSBar(vScrollBar);
  173.         }
  174. }
  175.  
  176. void TScroller::write( opstream& os )
  177. {
  178.     TView::write( os );
  179.     os << hScrollBar << vScrollBar << delta << limit;
  180. }
  181.  
  182. void *TScroller::read( ipstream& is )
  183. {
  184.     TView::read( is );
  185.     is >> hScrollBar >> vScrollBar >> delta >> limit;
  186.     drawLock = 0;
  187.     drawFlag = False;
  188.     return this;
  189. }
  190.  
  191. TStreamable *TScroller::build()
  192. {
  193.     return new TScroller( streamableInit );
  194. }
  195.  
  196. TScroller::TScroller( StreamableInit ) : TView( streamableInit )
  197. {
  198. }
  199.  
  200.  
  201.