home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / VISUAL_B / PROGRAMS / EM_EDIT / MDTMSSGB.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-13  |  4.2 KB  |  173 lines

  1. /*  Project emedit
  2.     Early Morning Software
  3.     Copyright ⌐ 1994. All Rights Reserved.
  4.  
  5.     SUBSYSTEM:    emedit.exe Application
  6.     FILE:         mdtmssgb.cpp
  7.     AUTHOR:       Ted Stockwell
  8.  
  9.  
  10.     OVERVIEW
  11.     ========
  12.     Source file for implementation of emeditMessageBar (TMessageBar).
  13. */
  14.  
  15. #include <owl\owlpch.h>
  16. #pragma hdrstop
  17.  
  18. #include "mdtmssgb.h"
  19.  
  20. #define INDICATOR_INSERT 0
  21. #define INDICATOR_MODIFIED 1
  22. #define INDICATOR_POSITION 2
  23. static char* IndicatorStrings[]= { "Insert", "Modified", "Line XXXXXXX of XXXXXXX : Column XXXXX"  };
  24.  
  25.  
  26. //{{emeditMessageBar Implementation}}
  27.  
  28.  
  29. emeditMessageBar::emeditMessageBar (TWindow* parent):
  30.     TMessageBar(parent)
  31. {
  32.     // INSERT>> Your constructor code here.
  33.   XPosition= YPosition= Count= 1;
  34.   Spacing.Value = 2;  // 1/4 em quad
  35.  
  36.   //
  37.   // we want one border height along the top and bottom and 1/2 an em quad
  38.   // along the left and right so we will set pixels and compute the lengths
  39.   // ourselves
  40.   //
  41.   Margins.Units = TMargins::Pixels;
  42.   Margins.Left = Margins.Right = LayoutUnitsToPixels(4);
  43.   Margins.Top = Margins.Bottom = GetSystemMetrics(SM_CYBORDER);
  44.  
  45.   Gadgets->SetBorderStyle(TGadget::Recessed); // Set border style for first gadget
  46.  
  47.   //
  48.   // create text gadgets for mode indicators
  49.   //
  50.   InsertGadget= GetIndicatorGadget(INDICATOR_INSERT);
  51.   ModifyGadget= GetIndicatorGadget(INDICATOR_MODIFIED);
  52.   PositionGadget= GetIndicatorGadget(INDICATOR_POSITION);
  53.  
  54.   SetInsertIndicator( TRUE );
  55.   SetModifyIndicator( FALSE );
  56.   SetPositionIndicator( FALSE );
  57. }
  58.  
  59.  
  60. emeditMessageBar::~emeditMessageBar ()
  61. {
  62.     Destroy();
  63.  
  64.     // INSERT>> Your destructor code here.
  65.  
  66. }
  67.  
  68.  
  69.  
  70. TTextGadget* emeditMessageBar::GetIndicatorGadget( int i ) {
  71.   TScreenDC   dc;
  72.   dc.SelectObject(*Font);
  73.       const int    SMALL_MARGIN = 1;
  74.       TSize        extent;
  75.       int          left, top, right, bottom;
  76.       TTextGadget* gadget = new TTextGadget(0, TGadget::Recessed,
  77.                                             TTextGadget::Left,
  78.                                             strlen(IndicatorStrings[i]));
  79.       TMargins     margins = gadget->GetMargins();
  80.  
  81.       //
  82.       // use small left and right margins
  83.       //
  84.       margins.Left = margins.Right = SMALL_MARGIN;
  85.       gadget->SetMargins(margins);
  86.  
  87.       //
  88.       // turn off shrink wrapping for the width and choose a width that is
  89.       // custom fit for the string
  90.       //
  91.       dc.GetTextExtent(IndicatorStrings[i], strlen(IndicatorStrings[i]), extent);
  92.       gadget->SetShrinkWrap(FALSE, TRUE);
  93.       TMessageBar::Insert(*gadget);
  94.       gadget->GetOuterSizes(left, right, top, bottom);
  95.       extent.cx += left + right;
  96.       gadget->SetSize(extent);
  97.   return gadget;
  98. }
  99.  
  100.  
  101. void emeditMessageBar::SetInsertIndicator( BOOL on) {
  102.   if (GetInsertIndicator() != on)
  103.     InsertGadget->SetText(on ? IndicatorStrings[INDICATOR_INSERT] : 0);
  104. }
  105.  
  106.  
  107.  
  108. void emeditMessageBar::SetModifyIndicator( BOOL on ) {
  109.     if (GetModifyIndicator() != on)
  110.       ModifyGadget->SetText(on ? IndicatorStrings[INDICATOR_MODIFIED] : 0);
  111. }
  112.  
  113.  
  114. BOOL emeditMessageBar::GetInsertIndicator() {
  115.   BOOL on= FALSE;
  116.   const char* const T= InsertGadget->GetText();
  117.   if (T)
  118.     if (strcmp(T, IndicatorStrings[INDICATOR_INSERT]) == 0)
  119.       on= TRUE;
  120.   return on;
  121. }
  122.  
  123.  
  124.  
  125. BOOL emeditMessageBar::GetModifyIndicator() {
  126.   BOOL on= FALSE;
  127.   const char* const T= ModifyGadget->GetText();
  128.   if (T)
  129.     if (strcmp(T, IndicatorStrings[INDICATOR_MODIFIED]) == 0)
  130.       on= TRUE;
  131.   return on;
  132. }
  133.  
  134.  
  135.  
  136. void emeditMessageBar::GetPositionIndicator( long& X, long& Y, long& C ) {
  137.  X= XPosition;
  138.  Y= YPosition;
  139.  C= Count;
  140. }
  141.  
  142.  
  143.  
  144. void emeditMessageBar::SetPositionIndicator( long X, long Y, long cnt ) {
  145.   if (X != XPosition  ||  Y != YPosition  ||  cnt != Count) {
  146.     const char* gtext= 0;
  147.     string S= "Line ";
  148.     if (0 < X  &&  0 < Y  &&  0 < cnt) {
  149.       char B[34];
  150.       S+= ltoa( Y, B, 10 );
  151.       S+= " of ";
  152.       S+= ltoa( cnt, B, 10 );
  153.       S+= " : Column ";
  154.       S+= ltoa( X, B, 10 );
  155.       gtext= S.c_str();
  156.       XPosition= X;
  157.       YPosition= Y;
  158.       Count= cnt;
  159.     } else {
  160.       XPosition= 0;
  161.       YPosition= 0;
  162.       Count= 0;
  163.     }
  164.     PositionGadget->SetText(gtext);
  165.   }
  166. }
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.