home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 May / Pcwk5b98.iso / Borland / Cplus45 / BC45 / OWLINC.PAK / DOCMANAG.H < prev    next >
C/C++ Source or Header  |  1995-08-29  |  6KB  |  168 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // (C) Copyright 1992, 1994 by Borland International, All Rights Reserved
  4. //
  5. //   Defines class TDocManager
  6. //----------------------------------------------------------------------------
  7. #if !defined(OWL_DOCMANAG_H)
  8. #define OWL_DOCMANAG_H
  9.  
  10. #if !defined(OWL_DOCVIEW_H)
  11. # include <owl/docview.h>
  12. #endif
  13. #if !defined(OWL_APPLICAT_H)
  14. # include <owl/applicat.h>
  15. #endif
  16. #if !defined(OWL_DOCTPL_H)
  17. # include <owl/doctpl.h>
  18. #endif
  19.  
  20. #define _DOCVIEWCLASS _USERCLASS
  21. extern TDocTemplate* DocTemplateStaticHead; // Templates constructed before app
  22.  
  23. //
  24. // definitions of dm??? document manager operational mode flags
  25. //
  26. const int dmSDI        = 0x0001; // does not support multiple open documents
  27. const int dmMDI        = 0x0002; // supports multiple open documents
  28. const int dmMenu       = 0x0004; // set IDs for file menu
  29. const int dmSaveEnable = 0x0010; // enable FileSave even if doc is unmodified
  30. const int dmNoRevert   = 0x0020; // disable FileRevert menu item
  31.  
  32. const long dtProhibited = OFN_ALLOWMULTISELECT | OFN_ENABLEHOOK
  33.                           | OFN_ENABLETEMPLATE | OFN_ENABLETEMPLATEHANDLE;
  34.  
  35. //
  36. // definitions of dn??? document/view message notifications
  37. //
  38. enum {
  39.   dnCreate,                 // new document or view has been created
  40.   dnClose                   // document or view has been closed
  41. };
  42.  
  43. //
  44. //  class TDocManager
  45. //  ----- -----------
  46. //
  47. class _OWLCLASS TDocManager : public TEventHandler, public TStreamableBase {
  48.   public:
  49.     TDocument::List DocList;      // list of attached documents
  50.  
  51.     TDocManager(int mode, TDocTemplate*& templateHead = ::DocTemplateStaticHead);
  52.     TDocManager(int mode, TApplication* app,
  53.                 TDocTemplate*& templateHead = ::DocTemplateStaticHead);
  54.     virtual ~TDocManager();
  55.  
  56.     virtual TDocument*  CreateAnyDoc(const char far* path, long flags = 0);
  57.     virtual TView*      CreateAnyView(TDocument& doc,long flags = 0);
  58.     TDocument*          CreateDoc(TDocTemplate* tpl, const char far* path,
  59.                         TDocument* parent=0, long flags=0);
  60.     TView*              CreateView(TDocument& doc);
  61.     TDocument*          InitDoc(TDocument* doc,const char far* path,long flags);
  62.     bool                SelectSave(TDocument& doc);
  63.     virtual TDocTemplate* SelectAnySave(TDocument& doc, bool samedoc = true);
  64.     virtual TDocTemplate* MatchTemplate(const char far* path);
  65.     virtual TDocument*  GetCurrentDoc();  // return doc with focus, else 0
  66.     virtual bool        FlushDoc(TDocument& doc); // attempt to update changes
  67.     TDocument*          FindDocument(const char far* path); // 0 if not found
  68.     TApplication*       GetApplication() {return Application;}
  69.     bool                IsFlagSet(int flag) {return (Mode & flag) != 0;}
  70.     void                RefTemplate(TDocTemplate&);    // add template ref    
  71.     void                UnRefTemplate(TDocTemplate&);  // drop template ref    
  72.     void                DeleteTemplate(TDocTemplate&); // remove from list
  73.     void                AttachTemplate(TDocTemplate&); // append to list
  74.     TDocTemplate*       GetNextTemplate(TDocTemplate* tpl)
  75.                         {return tpl ? tpl->GetNextTemplate() : TemplateList;}
  76.  
  77.     // primary event handlers, public to allow direct invocation from app
  78.     //
  79.     virtual void CmFileOpen();
  80.     virtual void CmFileNew();
  81.     virtual void CmFileClose();
  82.     virtual void CmFileSave();
  83.     virtual void CmFileSaveAs();
  84.     virtual void CmFileRevert();
  85.     virtual void CmViewCreate();
  86.  
  87.     // overrideable document manager UI functions
  88.     //
  89.     virtual uint  PostDocError(TDocument& doc, uint sid, uint choice = MB_OK);
  90.     virtual void  PostEvent(int id, TDocument& doc); // changed doc status
  91.     virtual void  PostEvent(int id, TView& view);    // changed view status
  92.  
  93.     // delegated methods from TApplication
  94.     //
  95.     void EvPreProcessMenu(HMENU hMenu);
  96.     bool EvCanClose();
  97.     void EvWakeUp();
  98.  
  99.   protected:
  100.  
  101.     // overrideable document manager UI functions
  102.     //
  103.     virtual int   SelectDocPath(TDocTemplate** tpllist, int tplcount,
  104.                      char far* path, int buflen, long flags, bool save=false);
  105.     virtual int   SelectDocType(TDocTemplate** tpllist, int tplcount);
  106.     virtual int   SelectViewType(TDocTemplate** tpllist, int tplcount);
  107.  
  108.   private:
  109.     //
  110.     // Command enabler handlers
  111.     //
  112.     virtual void CeFileNew(TCommandEnabler& ce);
  113.     virtual void CeFileOpen(TCommandEnabler& ce);
  114.     virtual void CeFileSave(TCommandEnabler& ce);
  115.     virtual void CeFileSaveAs(TCommandEnabler& ce);
  116.     virtual void CeFileRevert(TCommandEnabler& ce);
  117.     virtual void CeFileClose(TCommandEnabler& ce);
  118.     virtual void CeViewCreate(TCommandEnabler& ce);
  119.  
  120.     int           Mode;           // mode flags: dmxxx
  121.     TDocTemplate* TemplateList;   // chained list of doc templates, 0 if none
  122.     TApplication* Application;    // current application, set by constructor
  123.     TDocTemplate** TemplateHead;  // saved pointer to DocTemplateStaticHead
  124.  
  125.     // backward compatibility implementation entry points
  126.     // 
  127.     static bool       SelectSave(TDocTemplate* tpl, TDocument& doc);
  128.     static TView*     InitView(TView* view);
  129.     static TDocument* InitDoc(TDocTemplate& tpl, TDocument* doc,
  130.                               const char far* path, long flags);
  131.  
  132.   DECLARE_RESPONSE_TABLE(TDocManager);
  133.   DECLARE_STREAMABLE(_OWLCLASS, TDocManager, 1);
  134.   friend class TDocTemplate;  // access to template list, PostEvent()
  135.   friend class TDocument;     // access to Application
  136. };
  137.  
  138. //
  139. // inline implementations
  140. //
  141.  
  142. inline void
  143. TDocManager::RefTemplate(TDocTemplate& tpl)
  144. {
  145.   ++tpl.RefCnt;
  146. }
  147.  
  148. inline void
  149. TDocManager::UnRefTemplate(TDocTemplate& tpl)
  150. {
  151.   if (--tpl.RefCnt == 0)
  152.     delete &tpl;
  153. }
  154.  
  155. #define EV_WM_PREPROCMENU\
  156.   {WM_OWLPREPROCMENU, 0, (TAnyDispatcher)::v_WPARAM_Dispatch,\
  157.    (TMyPMF)v_HMENU_Sig(&TMyClass::EvPreProcessMenu)}
  158.  
  159. #define EV_WM_CANCLOSE\
  160.   {WM_OWLCANCLOSE, 0, (TAnyDispatcher)::U_Dispatch,\
  161.    (TMyPMF)B_Sig(&TMyClass::EvCanClose)}
  162.  
  163. #define EV_WM_WAKEUP\
  164.   {WM_OWLWAKEUP, 0, (TAnyDispatcher)::v_Dispatch,\
  165.    (TMyPMF)v_Sig(&TMyClass::EvWakeUp)}
  166.  
  167. #endif  // OWL_DOCMANAG_H
  168.