home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tv20cpp.zip / demos / TVEDIT3.CPP < prev   
Text File  |  1999-06-11  |  7KB  |  190 lines

  1. /*----------------------------------------------------------*/
  2. /*                                                          */
  3. /*   Turbo Vision 1.0                                       */
  4. /*   Copyright (c) 1991 by Borland International            */
  5. /*                                                          */
  6. /*   Turbo Vision TVEDIT source file                        */
  7. /*----------------------------------------------------------*/
  8.  
  9. #define Uses_TApplication
  10. #define Uses_TMenuBar
  11. #define Uses_TRect
  12. #define Uses_TSubMenu
  13. #define Uses_TKeys
  14. #define Uses_TMenuItem
  15. #define Uses_TStatusLine
  16. #define Uses_TStatusItem
  17. #define Uses_TStatusDef
  18. #define Uses_TPoint
  19. #define Uses_TEditor
  20. #define Uses_MsgBox
  21. #define Uses_TFileDialog
  22. #define Uses_TDeskTop
  23.  
  24. #include <tv.h>
  25.  
  26. #include "tvedit.h"
  27.  
  28. #include <stdarg.h>
  29. #include <strstrea.h>
  30. #include <iomanip.h>
  31.  
  32. TMenuBar *TEditorApp::initMenuBar( TRect r )
  33. {
  34.  
  35.       TSubMenu& sub1 = *new TSubMenu( "~F~ile", kbAltF ) +
  36.         *new TMenuItem( "~O~pen", cmOpen, kbF3, hcNoContext, "F3") +
  37.         *new TMenuItem( "~N~ew", cmNew, kbNoKey ) +
  38.         *new TMenuItem( "~S~ave", cmSave, kbF2, hcNoContext, "F2" ) +
  39.         *new TMenuItem( "S~a~ve as...", cmSaveAs, kbNoKey ) +
  40.              newLine() +
  41.         *new TMenuItem( "~C~hange dir...", cmChangeDrct, kbNoKey ) +
  42.         *new TMenuItem( "~D~OS shell", cmDosShell, kbNoKey ) +
  43.         *new TMenuItem( "E~x~it", cmQuit, kbAltX, hcNoContext, "Alt-X" );
  44.  
  45.       TSubMenu& sub2 = *new TSubMenu( "~E~dit", kbAltE ) +
  46.         *new TMenuItem( "~U~ndo", cmUndo, kbNoKey ) +
  47.              newLine() +
  48.         *new TMenuItem( "Cu~t~", cmCut, kbShiftDel, hcNoContext, "Shift-Del" ) +
  49.         *new TMenuItem( "~C~opy", cmCopy, kbCtrlIns, hcNoContext, "Ctrl-Ins" ) +
  50.         *new TMenuItem( "~P~aste", cmPaste, kbShiftIns, hcNoContext, "Shift-Ins" ) +
  51.         *new TMenuItem( "~S~how clipboard", cmShowClip, kbNoKey ) +
  52.              newLine() +
  53.         *new TMenuItem( "~C~lear", cmClear, kbCtrlDel, hcNoContext, "Ctrl-Del" );
  54.  
  55.       TSubMenu& sub3 = *new TSubMenu( "~S~earch", kbAltS ) +
  56.         *new TMenuItem( "~F~ind...", cmFind, kbNoKey ) +
  57.         *new TMenuItem( "~R~eplace...", cmReplace, kbNoKey ) +
  58.         *new TMenuItem( "~S~earch again", cmSearchAgain, kbNoKey );
  59.  
  60.       TSubMenu& sub4 = *new TSubMenu( "~W~indows", kbAltW ) +
  61.         *new TMenuItem( "~S~ize/move",cmResize, kbCtrlF5, hcNoContext, "Ctrl-F5" ) +
  62.         *new TMenuItem( "~Z~oom", cmZoom, kbF5, hcNoContext, "F5" ) +
  63.         *new TMenuItem( "~T~ile", cmTile, kbNoKey ) +
  64.         *new TMenuItem( "C~a~scade", cmCascade, kbNoKey ) +
  65.         *new TMenuItem( "~N~ext", cmNext, kbF6, hcNoContext, "F6" ) +
  66.         *new TMenuItem( "~P~revious", cmPrev, kbShiftF6, hcNoContext, "Shift-F6" ) +
  67.         *new TMenuItem( "~C~lose", cmClose, kbAltF3, hcNoContext, "Alt-F3" );
  68.  
  69.     r.b.y = r.a.y+1;
  70.     return new TMenuBar( r, sub1 + sub2 + sub3 + sub4 );
  71. }
  72.  
  73. TStatusLine *TEditorApp::initStatusLine( TRect r )
  74. {
  75.     r.a.y = r.b.y-1;
  76.     return new TStatusLine( r,
  77.         *new TStatusDef( 0, 0xFFFF ) +
  78.             *new TStatusItem("~F2~ Save", kbF2, cmSave ) +
  79.             *new TStatusItem( "~Alt-F3~ Close", kbAltF3, cmClose ) +
  80.             *new TStatusItem( "~F5~ Zoom", kbF5, cmZoom ) +
  81.             *new TStatusItem( "~F6~ Next", kbF6, cmNext ) +
  82.             *new TStatusItem( "~F10~ Menu", kbF10, cmMenu ) +
  83.             *new TStatusItem( 0, kbCtrlF5, cmResize )
  84.             );
  85.  
  86. }
  87.  
  88. void TEditorApp::outOfMemory()
  89. {
  90.     messageBox("Not enough memory for this operation.", mfError | mfOKButton );
  91. }
  92.  
  93. typedef char *_charPtr;
  94. typedef TPoint *PPoint;
  95.  
  96. #pragma warn -rvl
  97.  
  98. ushort doEditDialog( int dialog, ... )
  99. {
  100.     va_list arg;
  101.  
  102.     char buf[80];
  103.     ostrstream os( buf, sizeof( buf ) );
  104.     switch( dialog )
  105.         {
  106.         case edOutOfMemory:
  107.             return messageBox( "Not enough memory for this operation",
  108.                                mfError | mfOKButton );
  109.         case edReadError:
  110.             {
  111.             va_start( arg, dialog );
  112.             os << "Error reading file " << va_arg( arg, _charPtr )
  113.                << "." << ends;
  114.             va_end( arg );
  115.             return messageBox( buf, mfError | mfOKButton );
  116.             }
  117.         case edWriteError:
  118.             {
  119.             va_start( arg, dialog );
  120.             os << "Error writing file " << va_arg( arg,_charPtr )
  121.                << "." << ends;
  122.             va_end( arg );
  123.             return messageBox( buf, mfError | mfOKButton );
  124.             }
  125.         case edCreateError:
  126.             {
  127.             va_start( arg, dialog );
  128.             os << "Error creating file " << va_arg( arg, _charPtr )
  129.                << "." << ends;
  130.             va_end( arg );
  131.             return messageBox( buf, mfError | mfOKButton );
  132.             }
  133.         case edSaveModify:
  134.             {
  135.             va_start( arg, dialog );
  136.             os << va_arg( arg, _charPtr )
  137.                << " has been modified. Save?" << ends;
  138.             va_end( arg );
  139.             return messageBox( buf, mfInformation | mfYesNoCancel );
  140.             }
  141.         case edSaveUntitled:
  142.             return messageBox( "Save untitled file?",
  143.                                mfInformation | mfYesNoCancel );
  144.         case edSaveAs:
  145.             {
  146.             va_start( arg, dialog );
  147.             return execDialog( new TFileDialog( "*.*",
  148.                                                 "Save file as",
  149.                                                 "~N~ame",
  150.                                                 fdOKButton,
  151.                                                 101 ), va_arg( arg, _charPtr ) );
  152.             }
  153.  
  154.         case edFind:
  155.             {
  156.             va_start( arg, dialog );
  157.             return execDialog( createFindDialog(), va_arg( arg, _charPtr ) );
  158.             }
  159.  
  160.         case edSearchFailed:
  161.             return messageBox( "Search string not found.",
  162.                                mfError | mfOKButton );
  163.         case edReplace:
  164.             {
  165.             va_start( arg, dialog );
  166.             return execDialog( createReplaceDialog(), va_arg( arg, _charPtr ) );
  167.             }
  168.  
  169.         case edReplacePrompt:
  170.             //  Avoid placing the dialog on the same line as the cursor
  171.             TRect r( 0, 1, 40, 8 );
  172.             r.move( (TProgram::deskTop->size.x-r.b.x)/2, 0 );
  173.             TPoint t = TProgram::deskTop->makeGlobal( r.b );
  174.             t.y++;
  175.             va_start( arg, dialog );
  176.             TPoint *pt = va_arg( arg, PPoint );
  177.             if( pt->y <= t.y )
  178.                 r.move( 0, TProgram::deskTop->size.y - r.b.y - 2 );
  179.             va_end( arg );
  180.             return messageBoxRect( r, "Replace this occurence?",
  181.                                    mfYesNoCancel | mfInformation );
  182.  
  183.         }
  184.     return 0; // keep compiler quiet
  185. }
  186.  
  187. #pragma warn .rvl
  188.  
  189.  
  190.