/*---------------------------------------------------------*/ /* */ /* Turbo Vision 1.0 */ /* TVGUID04 Demo Source File */ /* Copyright (c) 1991 by Borland International */ /* */ /*---------------------------------------------------------*/ /* * Modified by Sergio Sigala * Modified by Max Okumoto */ #define Uses_TEvent #define Uses_TApplication #define Uses_TKeys #define Uses_TRect #define Uses_TMenuBar #define Uses_TSubMenu #define Uses_TMenuItem #define Uses_TStatusLine #define Uses_TStatusItem #define Uses_TStatusDef #define Uses_TDeskTop #define Uses_TWindow #include #include // for random() const int cmMyFileOpen = 200; // assign new command values const int cmMyNewWin = 201; class TMyApp : public TApplication { public: TMyApp(); static TStatusLine *initStatusLine( TRect r ); static TMenuBar *initMenuBar( TRect r ); virtual void handleEvent( TEvent& event); void myNewWindow(); }; static short winNumber = 0; // initialize window number class TDemoWindow : public TWindow // define a new window class { public: TDemoWindow( const TRect& r, const char *aTitle, short aNumber ); // declare a constructor // static TFrame *initFrame( TRect r ); // override needed only if you want a nonstandard frame // Here we'll inherit TWindow::initFrame unchanged // so TWindowInit will take &TDemoWindow::initFrame to give // a standard frame }; TMyApp::TMyApp() : TProgInit( &TMyApp::initStatusLine, &TMyApp::initMenuBar, &TMyApp::initDeskTop ) { } TStatusLine *TMyApp::initStatusLine(TRect r) { r.a.y = r.b.y - 1; // move top to 1 line above bottom return new TStatusLine( r, *new TStatusDef( 0, 0xFFFF ) + // set range of help contexts *new TStatusItem( 0, kbF10, cmMenu ) + // define an item *new TStatusItem( "~Alt-X~ Exit", kbAltX, cmQuit ) + // define an item *new TStatusItem( "~Alt-F3~ Close", kbAltF3, cmClose ) // and another one ); } TMenuBar *TMyApp::initMenuBar( TRect r ) { r.b.y = r.a.y + 1; // set bottom line 1 line below top line return new TMenuBar( r, *new TSubMenu( "~F~ile", kbAltF )+ *new TMenuItem( "~O~pen", cmMyFileOpen, kbF3, hcNoContext, "F3" )+ *new TMenuItem( "~N~ew", cmMyNewWin, kbF4, hcNoContext, "F4" )+ newLine()+ *new TMenuItem( "E~x~it", cmQuit, cmQuit, hcNoContext, "Alt-X" )+ *new TSubMenu( "~W~indow", kbAltW )+ *new TMenuItem( "~N~ext", cmNext, kbF6, hcNoContext, "F6" )+ *new TMenuItem( "~Z~oom", cmZoom, kbF5, hcNoContext, "F5" ) ); } void TMyApp::handleEvent(TEvent& event) { TApplication::handleEvent(event); // act like base! if( event.what == evCommand ) { switch( event.message.command ) { case cmMyNewWin: // but respond to additional commands myNewWindow(); // define action for cmMyNewWin break; default: return; } clearEvent( event ); // clear event after handling } } void TMyApp::myNewWindow() { TRect r( 0, 0, 26, 7 ); // set initial size and position /* SS: micro change here */ //r.move( random(53), random(16) ); // randomly move around screen r.move( random() % 53, random() % 16 ); // randomly move around screen TDemoWindow *window = new TDemoWindow ( r, "Demo Window", ++winNumber); deskTop->insert(window); // put window into desktop and draw it } TDemoWindow::TDemoWindow( const TRect& r, const char *aTitle, short aNumber): TWindow( r, aTitle, aNumber), TWindowInit( &TDemoWindow::initFrame ) { } int main() { TMyApp myApp; myApp.run(); return 0; }