home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tv20cpp.zip / tutorial / tvguid05.cpp < prev    next >
C/C++ Source or Header  |  1998-01-19  |  5KB  |  169 lines

  1. /*---------------------------------------------------------*/
  2. /*                                                         */
  3. /*   Turbo Vision 1.0                                      */
  4. /*   TVGUID05 Demo Source File                             */
  5. /*   Copyright (c) 1991 by Borland International           */
  6. /*                                                         */
  7. /*---------------------------------------------------------*/
  8. /*
  9.  * Modified by Sergio Sigala <ssigala@globalnet.it>
  10.  */
  11.  
  12. #include <stdlib.h>               // for random()
  13.  
  14. #define Uses_TEventQueue
  15. #define Uses_TEvent
  16. #define Uses_TApplication
  17. #define Uses_TKeys
  18. #define Uses_TRect
  19. #define Uses_TMenuBar
  20. #define Uses_TSubMenu
  21. #define Uses_TMenuItem
  22. #define Uses_TStatusLine
  23. #define Uses_TStatusItem
  24. #define Uses_TStatusDef
  25. #define Uses_TDeskTop
  26. #define Uses_TView
  27. #define Uses_TWindow
  28. #include <tvision/tv.h>
  29.  
  30. const int cmMyFileOpen = 200; // assign new command values
  31. const int cmMyNewWin   = 201;
  32.  
  33.  
  34. class TMyApp : public TApplication
  35. {
  36.  
  37. public:
  38.     TMyApp();
  39.     static TStatusLine *initStatusLine( TRect r );
  40.     static TMenuBar *initMenuBar( TRect r );
  41.     virtual void handleEvent( TEvent& event);
  42.     void myNewWindow();
  43. };
  44.  
  45.  
  46. static short winNumber = 0;           // initialize window number
  47.  
  48. class TDemoWindow : public TWindow    // define a new window class
  49. {
  50.  
  51. public:
  52.  
  53.     TDemoWindow( const TRect& r, const char *aTitle, short aNumber );
  54.  
  55. };
  56.  
  57. class TInterior : public TView
  58. {
  59.  
  60. public:
  61.  
  62.     TInterior( const TRect& bounds ); // constructor
  63.     virtual void draw();              // override TView::draw
  64. };
  65.  
  66. TInterior::TInterior( const TRect& bounds ) : TView( bounds )
  67. {
  68.     growMode = gfGrowHiX | gfGrowHiY; //make size follow that of the window
  69.     options = options | ofFramed;
  70. }
  71.  
  72. void TInterior::draw()
  73. {
  74.     char *hstr = "Hello World!";
  75.     ushort color = getColor(0x0301);
  76.     TView::draw();
  77.     TDrawBuffer b;
  78.     b.moveStr( 0, hstr, color );
  79.     writeLine( 4, 2, 12, 1, b);
  80. }
  81.  
  82. TMyApp::TMyApp() :
  83.     TProgInit( &TMyApp::initStatusLine,
  84.                &TMyApp::initMenuBar,
  85.                &TMyApp::initDeskTop
  86.              )
  87. {
  88. }
  89.  
  90. TStatusLine *TMyApp::initStatusLine(TRect r)
  91. {
  92.     r.a.y = r.b.y - 1;     // move top to 1 line above bottom
  93.     return new TStatusLine( r,
  94.         *new TStatusDef( 0, 0xFFFF ) +
  95.         // set range of help contexts
  96.             *new TStatusItem( 0, kbF10, cmMenu ) +
  97.             // define an item
  98.             *new TStatusItem( "~Alt-X~ Exit", kbAltX, cmQuit ) +
  99.             // define an item
  100.             *new TStatusItem( "~Alt-F3~ Close", kbAltF3, cmClose )
  101.             // and another one
  102.         );
  103. }
  104.  
  105. TMenuBar *TMyApp::initMenuBar( TRect r )
  106. {
  107.  
  108.     r.b.y = r.a.y + 1;    // set bottom line 1 line below top line
  109.     return new TMenuBar( r,
  110.         *new TSubMenu( "~F~ile", kbAltF )+
  111.             *new TMenuItem( "~O~pen", cmMyFileOpen, kbF3, hcNoContext, "F3" )+
  112.             *new TMenuItem( "~N~ew",  cmMyNewWin,   kbF4, hcNoContext, "F4" )+
  113.             newLine()+
  114.             *new TMenuItem( "E~x~it", cmQuit, cmQuit, hcNoContext, "Alt-X" )+
  115.         *new TSubMenu( "~W~indow", kbAltW )+
  116.             *new TMenuItem( "~N~ext", cmNext,     kbF6, hcNoContext, "F6" )+
  117.             *new TMenuItem( "~Z~oom", cmZoom,     kbF5, hcNoContext, "F5" )
  118.         );
  119. }
  120.  
  121. void TMyApp::handleEvent(TEvent& event)
  122. {
  123.     TApplication::handleEvent(event);   // act like base!
  124.     if( event.what == evCommand )
  125.         {
  126.         switch( event.message.command )
  127.             {
  128.             case cmMyNewWin:            // but respond to additional commands
  129.                 myNewWindow();          // define action for cmMyNewWin
  130.                                         // command
  131.                 break;
  132.             default:
  133.                 return;
  134.             }
  135.         clearEvent( event );            // clear event after handling
  136.         }
  137. }
  138.  
  139. void TMyApp::myNewWindow()
  140. {
  141.     TRect r( 0, 0, 26, 7 );             // set initial size and position
  142.  
  143.     /* SS: micro change here */
  144.  
  145. //    r.move( random(53), random(16) );   // randomly move around screen
  146.     r.move( random() % 53, random() % 16 );   // randomly move around screen
  147.     TDemoWindow *window = new TDemoWindow ( r, "Demo Window", ++winNumber);
  148.     deskTop->insert(window);    // put window into desktop and draw it
  149. }
  150.  
  151.  
  152. TDemoWindow::TDemoWindow( const TRect& bounds, const char *aTitle,
  153.               short aNumber) :
  154.          TWindow( bounds, aTitle, aNumber),
  155.          TWindowInit( &TDemoWindow::initFrame )
  156. {
  157.     TRect r = getClipRect();    // get exposed area
  158.     r.grow(-1, -1);             // make interior fit inside window frame
  159.     insert( new TInterior(r) ); // add interior to window
  160. }
  161.  
  162.  
  163. int main()
  164. {
  165.     TMyApp myApp;
  166.     myApp.run();
  167.     return 0;
  168. }
  169.