home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 May / Pcwk5b98.iso / Borland / Cplus45 / BC45 / CMDENABL.PAK / CMDENAB3.CPP < prev    next >
C/C++ Source or Header  |  1995-08-29  |  5KB  |  177 lines

  1. //----------------------------------------------------------------------------
  2. //  ObjectWindows - (C) Copyright 199 by Borland International
  3. //    Command-enabling sample application
  4. //    Third version implements check marks on the toggle functions.
  5. //----------------------------------------------------------------------------
  6. #include <owl/owlpch.h>
  7. #include <owl/applicat.h>
  8. #include <owl/framewin.h>
  9. #include "cmdenabl.h"
  10.  
  11. //  Class definitions:
  12. //  TCmdEnableApp -- application object initializes TApplication, overrides
  13. //    InitMainWindow.
  14. class TCmdEnableApp : public TApplication
  15. {
  16.   public:
  17.     TCmdEnableApp() : TApplication() {}
  18.   protected:
  19.     void InitMainWindow();
  20. };
  21.  
  22. //  TCmdEnableWindow -- window object initializes TWindow, adds four event
  23. //    handlers, adds response table for four events.
  24. class TCmdEnableWindow : public TWindow {
  25.   public:
  26.     TCmdEnableWindow(TWindow* parent = 0);
  27.  
  28.   protected:
  29.     bool isDirty;
  30.     bool isNewFile;
  31.  
  32.     // Event handlers
  33.     void CmFileNew();
  34.     void CmFileOpen();
  35.     void CmFileSave();
  36.     void CmFileSaveAs();
  37.     void CmToggleDirty();
  38.     void CmToggleNew();
  39.     void CmShowState();
  40.  
  41.     // Command-enabling functions
  42.     void CeFileNew(TCommandEnabler&);
  43.     void CeFileOpen(TCommandEnabler&);
  44.     void CeFileSave(TCommandEnabler&);
  45.     void CeToggleDirty(TCommandEnabler&);
  46.     void CeToggleNew(TCommandEnabler&);
  47.  
  48.     DECLARE_RESPONSE_TABLE(TCmdEnableWindow);
  49. };
  50.  
  51. DEFINE_RESPONSE_TABLE1(TCmdEnableWindow, TWindow)
  52.   EV_COMMAND(CM_FILENEW, CmFileNew),
  53.   EV_COMMAND(CM_FILEOPEN, CmFileOpen),
  54.   EV_COMMAND(CM_FILESAVE, CmFileSave),
  55.   EV_COMMAND(CM_FILESAVEAS, CmFileSaveAs),
  56.   EV_COMMAND(CM_TOGGLEDIRTY, CmToggleDirty),
  57.   EV_COMMAND(CM_TOGGLENEW, CmToggleNew),
  58.   EV_COMMAND(CM_SHOWSTATE, CmShowState),
  59.   EV_COMMAND_ENABLE(CM_FILENEW, CeFileNew),
  60.   EV_COMMAND_ENABLE(CM_FILEOPEN, CeFileOpen),
  61.   EV_COMMAND_ENABLE(CM_FILESAVE, CeFileSave),
  62.   EV_COMMAND_ENABLE(CM_TOGGLEDIRTY, CeToggleDirty),
  63.   EV_COMMAND_ENABLE(CM_TOGGLENEW, CeToggleNew),
  64. END_RESPONSE_TABLE;
  65.  
  66. // Put the OwlMain here just to get it out of the way
  67. int OwlMain(int /*argc*/, char* /*argv*/ [])
  68. {
  69.   return TCmdEnableApp().Run();
  70. }
  71.  
  72. //  Class function definitions
  73. //  class TCmdEnableApp
  74. //  TCmdEnableApp::InitMainWindow
  75. void
  76. TCmdEnableApp::InitMainWindow()
  77. {
  78.   // Construct the frame window
  79.   TFrameWindow* frame = new TFrameWindow(0, "Command-enabling sample application", new TCmdEnableWindow, true);
  80.  
  81.   // Set the main window and its menu
  82.   SetMainWindow(frame);
  83.   GetMainWindow()->AssignMenu("COMMANDS");
  84. }
  85.  
  86. TCmdEnableWindow::TCmdEnableWindow(TWindow *parent) : TWindow(parent)
  87. {
  88.   isNewFile = true;
  89.   isDirty = false;
  90. }
  91.  
  92. void
  93. TCmdEnableWindow::CmFileNew()
  94. {
  95.   isDirty=false;
  96.   isNewFile=true;
  97.   MessageBox("Opened a new file.\nisDirty=false\nisNewFile=true", "File action taken");
  98. }
  99.  
  100. void
  101. TCmdEnableWindow::CmFileOpen()
  102. {
  103.   isDirty=false;
  104.   isNewFile=false;
  105.   MessageBox("Opened an existing file.\nisDirty=false\nisNewFile=false", "File action taken");
  106. }
  107.  
  108. void
  109. TCmdEnableWindow::CmFileSave()
  110. {
  111.   isDirty=false;
  112.   isNewFile=false;
  113.   MessageBox("Saved an existing file.\nisDirty=false\nisNewFile=false", "File action taken");
  114. }
  115.  
  116. void
  117. TCmdEnableWindow::CmFileSaveAs()
  118. {
  119.   isDirty=false;
  120.   isNewFile=false;
  121.   MessageBox("Saved a file under a new name.\nisDirty=false\nisNewFile=false", "File action taken");
  122. }
  123.  
  124. void
  125. TCmdEnableWindow::CmToggleDirty()
  126. {
  127.   isDirty=!isDirty;
  128. }
  129.  
  130. void
  131. TCmdEnableWindow::CmToggleNew()
  132. {
  133.   isNewFile=!isNewFile;
  134. }
  135.  
  136.  
  137. void
  138. TCmdEnableWindow::CmShowState()
  139. {
  140.   string str(isDirty ? "isDirty = true\n" : "isDirty = false\n");
  141.   str += (isNewFile ? "isNewFile = true" : "isNewFile = false");
  142.   MessageBox(str.c_str(), "Current state");
  143. }
  144.  
  145. void
  146. TCmdEnableWindow::CeFileNew(TCommandEnabler& ce)
  147. {
  148.   // Enable CmFileNew if not dirty
  149.   ce.Enable(!isDirty);
  150. }
  151.  
  152. void
  153. TCmdEnableWindow::CeFileOpen(TCommandEnabler& ce)
  154. {
  155.   // Enable CmFileOpen if not dirty
  156.   ce.Enable(!isDirty);
  157. }
  158.  
  159. void
  160. TCmdEnableWindow::CeFileSave(TCommandEnabler& ce)
  161. {
  162.   // Enable CmFileSave if not new file and is dirty.
  163.   ce.Enable(!isNewFile && isDirty);
  164. }
  165.  
  166. void
  167. TCmdEnableWindow::CeToggleDirty(TCommandEnabler& ce)
  168. {
  169.   ce.SetCheck(isDirty ? TCommandEnabler::Checked : TCommandEnabler::Unchecked);
  170. }
  171.  
  172. void
  173. TCmdEnableWindow::CeToggleNew(TCommandEnabler& ce)
  174. {
  175.   ce.SetCheck(isNewFile ? TCommandEnabler::Checked : TCommandEnabler::Unchecked);
  176. }
  177.