home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / tybc4 / xped4 / xpd4mdic.cpp < prev    next >
C/C++ Source or Header  |  1994-02-13  |  8KB  |  295 lines

  1. /*  Project xped4
  2.     
  3.     Copyright ⌐ 1993. All Rights Reserved.
  4.  
  5.     SUBSYSTEM:    xped4.exe Application
  6.     FILE:         xpd4mdic.cpp
  7.     AUTHOR:       
  8.  
  9.  
  10.     OVERVIEW
  11.     ========
  12.     Source file for implementation of xped4MDIClient (TMDIClient).      
  13. */
  14.  
  15.  
  16. #include <owl\owlpch.h>
  17. #pragma hdrstop
  18.  
  19. #include <dir.h>
  20.  
  21. #include "xped4app.h"
  22. #include "xpd4mdic.h"
  23. #include "xpd4mdi1.h"
  24. #include "apxprint.h"
  25. #include "apxprev.h"
  26.  
  27.  
  28. //{{xped4MDIClient Implementation}}
  29.  
  30.  
  31. //
  32. // Build a response table for all messages/commands handled
  33. // by xped4MDIClient derived from TMDIClient.
  34. //
  35. DEFINE_RESPONSE_TABLE1(xped4MDIClient, TMDIClient)
  36. //{{xped4MDIClientRSP_TBL_BEGIN}}
  37.     EV_COMMAND(CM_MDIFILENEW, CmFileNew),
  38.     EV_COMMAND(CM_MDIFILEOPEN, CmFileOpen),
  39.     EV_COMMAND(CM_FILEPRINT, CmFilePrint),
  40.     EV_COMMAND(CM_FILEPRINTERSETUP, CmFilePrintSetup),
  41.     EV_COMMAND(CM_FILEPRINTPREVIEW, CmFilePrintPreview),
  42.     EV_COMMAND_ENABLE(CM_FILEPRINT, CmPrintEnable),
  43.     EV_COMMAND_ENABLE(CM_FILEPRINTERSETUP, CmPrintEnable),
  44.     EV_COMMAND_ENABLE(CM_FILEPRINTPREVIEW, CmPrintEnable),
  45.     EV_WM_DROPFILES,
  46. //{{xped4MDIClientRSP_TBL_END}}
  47. END_RESPONSE_TABLE;
  48.  
  49.  
  50. //////////////////////////////////////////////////////////
  51. // xped4MDIClient
  52. // ===========
  53. // Construction/Destruction handling.
  54.  xped4MDIClient::xped4MDIClient ()
  55.  : TMDIClient ()
  56. {
  57.     ChildCount = 0;
  58.  
  59.     // INSERT>> Your constructor code here.
  60.  
  61. }
  62.  
  63.  
  64.  xped4MDIClient::~xped4MDIClient ()
  65. {
  66.     Destroy();
  67.  
  68.     // INSERT>> Your destructor code here.
  69.  
  70. }
  71.  
  72.  
  73. //////////////////////////////////////////////////////////
  74. // xped4MDIClient
  75. // ===========
  76. // MDIClient site initialization.
  77. void xped4MDIClient::SetupWindow ()
  78. {
  79.     // Default SetUpWindow processing.
  80.     TMDIClient::SetupWindow ();
  81.  
  82.     // Common file file flags and filters for Open/Save As dialogs.  Filename and directory are
  83.     // computed in the member functions CmFileOpen, and CmFileSaveAs.
  84.     FileData.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
  85.     FileData.SetFilter("All Files (*.*)|*.*|");
  86.  
  87.     // Accept files via drag/drop in the client window.
  88.     DragAcceptFiles(TRUE);
  89. }
  90.  
  91.  
  92. //////////////////////////////////////////////////////////
  93. // xped4MDIClient
  94. // ===========
  95. // Menu File New command
  96. void xped4MDIClient::CmFileNew ()
  97. {
  98.     char    title[255];
  99.  
  100.     // Generate a title for the MDI child window.
  101.     wsprintf(title, "%d", ChildCount++);
  102.  
  103.     xped4MDIChild* child = new xped4MDIChild(*this, title, 0);
  104.  
  105.     // Associate ICON w/ this child window.
  106.     child->SetIcon(GetApplication(), IDI_DOC);
  107.  
  108.     // If the current active MDI child is maximize then this one should be also.
  109.     xped4MDIChild *curChild = (xped4MDIChild *)GetActiveMDIChild();
  110.     if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE))
  111.         child->Attr.Style |= WS_MAXIMIZE;
  112.  
  113.     child->Create();
  114. }
  115.  
  116.  
  117. void xped4MDIClient::OpenFile (const char *fileName)
  118. {
  119.     if (fileName)
  120.         lstrcpy(FileData.FileName, fileName);
  121.  
  122.     //
  123.     // Create a MDIChild window whose client is TEditFile.
  124.     //
  125.     xped4MDIChild* child = new xped4MDIChild(*this, "", new TEditFile(0, 0, 0, 0, 0, 0, 0, FileData.FileName));
  126.  
  127.     // Associate ICON w/ this child window.
  128.     child->SetIcon(GetApplication(), IDI_DOC);
  129.  
  130.     // If the current active MDI child is maximize then this one should be also.
  131.     xped4MDIChild *curChild = (xped4MDIChild *)GetActiveMDIChild();
  132.     if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE))
  133.         child->Attr.Style |= WS_MAXIMIZE;
  134.  
  135.     child->Create();
  136.  
  137.     LoadTextFile();
  138. }
  139.  
  140.  
  141. //////////////////////////////////////////////////////////
  142. // xped4MDIClient
  143. // ===========
  144. // Menu File Open command
  145. void xped4MDIClient::CmFileOpen ()
  146. {
  147.     //
  148.     // Display standard Open dialog box to select a file name.
  149.     //
  150.     *FileData.FileName = 0;
  151.     if (TFileOpenDialog(this, FileData).Execute() == IDOK)
  152.         OpenFile();
  153. }
  154.  
  155.  
  156. // Used by ListBox client to read a text file into the list box.
  157. void xped4MDIClient::LoadTextFile ()
  158. {
  159.     char            buf[255+1];
  160.     ifstream        *inStream;
  161.  
  162.     xped4MDIChild  *curChild = (xped4MDIChild *)GetActiveMDIChild();
  163.     TListBox        *client = TYPESAFE_DOWNCAST(curChild->GetClientWindow(), TListBox);
  164.  
  165.     // Only work if the client class is a TListBox.
  166.     if (client) {
  167.         client->ClearList();
  168.         inStream = new ifstream(FileData.FileName);
  169.         while (inStream->good()) {
  170.             inStream->getline(buf, sizeof(buf) - 1);
  171.             if (inStream->good())
  172.                 client->AddString(buf);
  173.         }
  174.  
  175.         // Return an error message if we had a stream error and it wasn't the eof.
  176.         if (inStream->bad() && !inStream->eof()) {
  177.             string msgTemplate(*GetModule(), IDS_UNABLEREAD);
  178.             char*  msg = new char[MAXPATH + msgTemplate.length()];
  179.             wsprintf(msg, msgTemplate.c_str(), *FileData.FileName);
  180.             MessageBox(msg, GetApplication()->GetName(), MB_ICONEXCLAMATION | MB_OK);
  181.             delete msg;
  182.         }
  183.  
  184.         delete inStream;
  185.     }
  186. }
  187.  
  188.  
  189. //////////////////////////////////////////////////////////
  190. // xped4MDIClient
  191. // ==========
  192. // Menu File Print command
  193. void xped4MDIClient::CmFilePrint ()
  194. {
  195.     //
  196.     // Create Printer object if not already created.
  197.     // 
  198.     XpEd4App *theApp = TYPESAFE_DOWNCAST(GetApplication(), XpEd4App);
  199.     if (theApp) {
  200.         if (!theApp->Printer)
  201.             theApp->Printer = new TPrinter;
  202.  
  203.         //
  204.         // Create Printout window and set characteristics.
  205.         //
  206.         APXPrintOut printout(theApp->Printer, Title, GetActiveMDIChild(), TRUE);
  207.  
  208.         theApp->Printing = TRUE;
  209.  
  210.         //
  211.         // Bring up the Print dialog and print the document.
  212.         //
  213.         theApp->Printer->Print(GetActiveMDIChild()->GetClientWindow(), printout, TRUE);
  214.  
  215.         theApp->Printing = FALSE;
  216.     }
  217. }
  218.  
  219.  
  220. //////////////////////////////////////////////////////////
  221. // xped4MDIClient
  222. // ==========
  223. // Menu File Print Setup command
  224. void xped4MDIClient::CmFilePrintSetup ()
  225. {
  226.     XpEd4App *theApp = TYPESAFE_DOWNCAST(GetApplication(), XpEd4App);
  227.     if (theApp) {
  228.         if (!theApp->Printer)
  229.             theApp->Printer = new TPrinter;
  230.  
  231.         //
  232.         // Bring up the Print Setup dialog.
  233.         //
  234.         theApp->Printer->Setup(this);
  235.     }
  236. }
  237.  
  238.  
  239. //////////////////////////////////////////////////////////
  240. // xped4MDIClient
  241. // ==========
  242. // Menu File Print Preview command
  243. void xped4MDIClient::CmFilePrintPreview ()
  244. {
  245.     XpEd4App *theApp = TYPESAFE_DOWNCAST(GetApplication(), XpEd4App);
  246.     if (theApp) {
  247.         if (!theApp->Printer)
  248.             theApp->Printer = new TPrinter;
  249.  
  250.         theApp->Printing = TRUE;
  251.  
  252.         PreviewWindow *prevW = new PreviewWindow(Parent, theApp->Printer, GetActiveMDIChild(), "Print Preview", new TLayoutWindow(0));
  253.         prevW->Create();
  254.  
  255.         GetApplication()->BeginModal(GetApplication()->MainWindow);
  256.  
  257.         // We must destroy the preview window explicitly.  Otherwise, the window will not be destroyed until
  258.         // it's parent the MainWindow is destroyed.
  259.         prevW->Destroy();
  260.         delete prevW;
  261.  
  262.         theApp->Printing = FALSE;
  263.     }
  264. }
  265.  
  266.  
  267. //////////////////////////////////////////////////////////
  268. // xped4MDIClient
  269. // ==========
  270. // Menu enabler used by Print, Print Setup and Print Preview.
  271. void xped4MDIClient::CmPrintEnable (TCommandEnabler &tce)
  272. {
  273.     if (GetActiveMDIChild()) {
  274.         XpEd4App *theApp = TYPESAFE_DOWNCAST(GetApplication(), XpEd4App);
  275.         if (theApp) {
  276.             // If we have a Printer already created just test if all is okay.
  277.             // Otherwise create a Printer object and make sure the printer
  278.             // really exists and then delete the Printer object.
  279.             if (!theApp->Printer) {
  280.                 theApp->Printer = new TPrinter;
  281.                 
  282.                 tce.Enable(theApp->Printer->GetSetup().Error == 0);
  283.             } else
  284.                 tce.Enable(theApp->Printer->GetSetup().Error == 0);
  285.         }
  286.     } else
  287.         tce.Enable(FALSE);
  288. }
  289.  
  290.  
  291. void xped4MDIClient::EvDropFiles (TDropInfo)
  292. {
  293.     Parent->ForwardMessage();
  294. }
  295.