home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tv20os2.zip / src / TLabel.cpp < prev    next >
C/C++ Source or Header  |  1999-05-26  |  3KB  |  135 lines

  1. /*
  2.  * TLabel.cc
  3.  *
  4.  * Turbo Vision - Version 2.0
  5.  *
  6.  * Copyright (c) 1994 by Borland International
  7.  * All Rights Reserved.
  8.  *
  9.  * Modified by Sergio Sigala <ssigala@globalnet.it>
  10.  */
  11.  
  12. #define Uses_TLabel
  13. #define Uses_TEvent
  14. #define Uses_TDrawBuffer
  15. #define Uses_TGroup
  16. #define Uses_TView
  17. #define Uses_opstream
  18. #define Uses_ipstream
  19. #include <tvision/tv.h>
  20.  
  21. #include <ctype.h>
  22.  
  23. #define cpLabel "\x07\x08\x09\x09"
  24.  
  25. TLabel::TLabel( const TRect& bounds, const char *aText, TView* aLink) :
  26.     TStaticText( bounds, aText ),
  27.     link( aLink ),
  28.     light( False )
  29. {
  30.     options |= ofPreProcess | ofPostProcess;
  31.     eventMask |= evBroadcast;
  32. }
  33.  
  34. void TLabel::shutDown()
  35. {
  36.     link = 0;
  37.     TStaticText::shutDown();
  38. }
  39.  
  40. void TLabel::draw()
  41. {
  42.     ushort color;
  43.     TDrawBuffer b;
  44.     uchar scOff;
  45.  
  46.     if( light )
  47.         {
  48.         color = getColor(0x0402);
  49.         scOff = 0;
  50.         }
  51.     else
  52.         {
  53.         color = getColor(0x0301);
  54.         scOff = 4;
  55.         }
  56.  
  57.     b.moveChar( 0, ' ', color, size.x );
  58.     if( text != 0 )
  59.         b.moveCStr( 1, text, color );
  60.     if( showMarkers )
  61.         b.putChar( 0, specialChars[scOff] );
  62.     writeLine( 0, 0, size.x, 1, b );
  63. }
  64.  
  65. TPalette& TLabel::getPalette() const
  66. {
  67.     static TPalette palette( cpLabel, sizeof( cpLabel )-1 );
  68.     return palette;
  69. }
  70.  
  71. void TLabel::focusLink(TEvent& event)
  72. {
  73.     if (link && (link->options & ofSelectable))
  74.         link->focus();
  75.     clearEvent(event);
  76. }
  77.  
  78. void TLabel::handleEvent( TEvent& event )
  79. {
  80.     TStaticText::handleEvent(event);
  81.     if( event.what == evMouseDown )
  82.         focusLink(event);
  83.  
  84.     else if( event.what == evKeyDown )
  85.         {
  86.         char c = hotKey( text );
  87.         char cpchar;
  88.         if( hab == NULLHANDLE )
  89.                 cpchar = toupper(event.keyDown.charScan.charCode);
  90.         else
  91.                 cpchar = WinUpperChar( hab, Codepage, Country, event.keyDown.charScan.charCode );
  92.         if( getAltCode(c) == event.keyDown.keyCode ||
  93.                 ( c != 0 && owner->phase == TGroup::phPostProcess &&
  94.                 cpchar == c )
  95.           )
  96.         focusLink(event);
  97.         }
  98.     else if( event.what == evBroadcast && link &&
  99.             ( event.message.command == cmReceivedFocus ||
  100.               event.message.command == cmReleasedFocus )
  101.            )
  102.             {
  103.             light = Boolean( (link->state & sfFocused) != 0 );
  104.             drawView();
  105.             }
  106. }
  107.  
  108. #if !defined(NO_STREAMABLE)
  109.  
  110. void TLabel::write( opstream& os )
  111. {
  112.     TStaticText::write( os );
  113.     os << link;
  114. }
  115.  
  116. void *TLabel::read( ipstream& is )
  117. {
  118.     TStaticText::read( is );
  119.     is >> link;
  120.     light = False;
  121.     return this;
  122. }
  123.  
  124. TStreamable *TLabel::build()
  125. {
  126.     return new TLabel( streamableInit );
  127. }
  128.  
  129. TLabel::TLabel( StreamableInit ) : TStaticText( streamableInit )
  130. {
  131. }
  132.  
  133.  
  134. #endif
  135.