//---------------------------------------------------------------------------- // ObjectWindows - (C) Copyright 1991,1993 by Borland International //---------------------------------------------------------------------------- #include #include #include #include #include #include #include #include #include #include "mdifile.h" #include const char AppName[] = "MDI File Editor"; const TDecoratedFrame::TLocation Location[] = { TDecoratedFrame::Top, TDecoratedFrame::Left, TDecoratedFrame::Right }; class TEditFileKB : public TEditFile{ public: TEditFileKB(TWindow* parent = 0, int id = 0, const char far* text = 0, int x = 0, int y = 0, int w = 0, int h = 0, const char far* fileName = 0, TModule* module = 0) : TEditFile(parent, id, text, x, y, w, h, fileName, module) {} DECLARE_RESPONSE_TABLE(TEditFileKB); }; DEFINE_RESPONSE_TABLE1(TEditFileKB, TEditFile) END_RESPONSE_TABLE; //---------------------------------------------------------------------------- class TMDIFileApp : public TApplication { public: TMDIFileApp(const char* name) : TApplication(name) {} void InitMainWindow(); protected: TOpenSaveDialog::TData FileData; TMDIClient* Client; TGadgetWindow::THintMode HintMode; TDecoratedFrame* Frame; TControlBar* ControlBar; int ControlBarLoc; protected: void CmFileNew(); void CmFileOpen(); void CmToggleHint(); void CeToggleHint(TCommandEnabler&); void CmToggleBar(); DECLARE_RESPONSE_TABLE(TMDIFileApp); }; DEFINE_RESPONSE_TABLE1(TMDIFileApp, TApplication) EV_COMMAND(CM_FILENEW, CmFileNew), EV_COMMAND(CM_FILEOPEN, CmFileOpen), EV_COMMAND(CM_TOGGLEHINT, CmToggleHint), EV_COMMAND_ENABLE(CM_TOGGLEHINT, CeToggleHint), EV_COMMAND(CM_TOGGLEBAR, CmToggleBar), END_RESPONSE_TABLE; static TControlBar* BuildControlBar(TWindow* parent, TControlBar::TTileDirection direction) { TControlBar* cb = new TControlBar(parent, direction); cb->Insert(*new TButtonGadget(CM_FILENEW, CM_FILENEW)); cb->Insert(*new TButtonGadget(CM_FILEOPEN, CM_FILEOPEN)); cb->Insert(*new TButtonGadget(CM_FILESAVE, CM_FILESAVE)); cb->Insert(*new TButtonGadget(CM_FILESAVEAS, CM_FILESAVEAS)); cb->Insert(*new TSeparatorGadget(6)); cb->Insert(*new TButtonGadget(CM_EDITUNDO, CM_EDITUNDO)); cb->Insert(*new TButtonGadget(CM_EDITCUT, CM_EDITCUT)); cb->Insert(*new TButtonGadget(CM_EDITCOPY, CM_EDITCOPY)); cb->Insert(*new TButtonGadget(CM_EDITPASTE, CM_EDITPASTE)); cb->Insert(*new TSeparatorGadget(6)); cb->Insert(*new TButtonGadget(CM_EDITFIND, CM_EDITFIND)); cb->Insert(*new TButtonGadget(CM_EDITREPLACE, CM_EDITREPLACE)); cb->Insert(*new TButtonGadget(CM_EDITFINDNEXT, CM_EDITFINDNEXT)); cb->Insert(*new TSeparatorGadget(6)); cb->Insert(*new TButtonGadget(CM_TOGGLEHINT, CM_TOGGLEHINT, TButtonGadget::NonExclusive)); cb->Insert(*new TSeparatorGadget(6)); cb->Insert(*new TButtonGadget(CM_TOGGLEBAR, CM_TOGGLEBAR)); cb->Attr.Style |= WS_CLIPSIBLINGS; // since toolbar may move around cb->Attr.Id = IDW_TOOLBAR; // From MDIFILE.H, so we can hide it return cb; } // // Construct the TMDIFileApp's MainWindow of class TMDIFileWindow, // loading its menu, accelerator table & icon // void TMDIFileApp::InitMainWindow() { Client = new TMDIClient; Frame = new TDecoratedMDIFrame(Name, IDM_EDITFILE_DOC, *Client, TRUE); MainWindow = Frame; Frame->Attr.AccelTable = IDA_MDIFILE; Frame->SetMenuDescr(TMenuDescr(IDM_EDITFILE_DOC, 1, 0, 0, 1, 1, 0)); Frame->SetIcon(this, IDI_MULTIFILE); // // Construct, build and insert a control bar into the frame. Start out at // the top of the frame // HintMode = TGadgetWindow::PressHints; ControlBar = BuildControlBar(Frame, TControlBar::Horizontal); ControlBarLoc = 0; Frame->Insert(*ControlBar, Location[ControlBarLoc]); // Construct a status bar & insert it at the bottom // TStatusBar* sb = new TStatusBar(0, TGadget::Recessed, TStatusBar::CapsLock | TStatusBar::NumLock | TStatusBar::Overtype); Frame->Insert(*sb, TDecoratedFrame::Bottom); EnableCtl3d(TRUE); // Initialize the file data struct used for open and saveas // FileData.Flags = OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT; FileData.SetFilter(string(*this, IDS_FILEFILTER).c_str()); } // // Respond to "New" command by constructing, creating, and setting up a // new TFileWindow MDI child // void TMDIFileApp::CmFileNew() { TMDIChild* child = new TMDIChild(*Client, "", new TEditFile(0, 0, 0)); child->SetMenuDescr(TMenuDescr(IDM_EDITFILE_CHILD, 0, 2, 0, 0, 0, 0)); child->SetIcon(this, IDI_DOC); TMDIChild* curChild = Client->GetActiveMDIChild(); if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE)) child->Attr.Style |= WS_MAXIMIZE; child->Create(); } // // Respond to "Open" command by constructing, creating, and setting up a // new TFileWindow MDI child // void TMDIFileApp::CmFileOpen() { *FileData.FileName = 0; if (TFileOpenDialog(MainWindow, FileData).Execute() == IDOK) { TMDIChild* child = new TMDIChild(*Client, "", new TEditFile(0, 0, 0, 0, 0, 0, 0, FileData.FileName)); child->SetMenuDescr(TMenuDescr(IDM_EDITFILE_CHILD, 0, 2, 0, 0, 0, 0)); child->SetIcon(this, IDI_DOC); TMDIChild* curChild = Client->GetActiveMDIChild(); if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE)) child->Attr.Style |= WS_MAXIMIZE; child->Create(); } } void DoCreateChild(TWindow* win, void*) { if (win->IsFlagSet(wfAutoCreate)) win->Create(); } void TMDIFileApp::CeToggleHint(TCommandEnabler& ce) { ce.SetCheck(HintMode == TGadgetWindow::EnterHints); } void TMDIFileApp::CmToggleHint() { HintMode = HintMode==TGadgetWindow::PressHints ? TGadgetWindow::EnterHints : TGadgetWindow::PressHints; ControlBar->SetHintMode(HintMode); ControlBar->SetHintCommand(-1); // make sure we don't leave hint text dangling } void TMDIFileApp::CmToggleBar() { ControlBarLoc = (ControlBarLoc+1) % COUNTOF(Location); ControlBar->SetDirection(ControlBarLoc==0 ? TControlBar::Horizontal : TControlBar::Vertical); Frame->Insert(*ControlBar, Location[ControlBarLoc]); Frame->Layout(); } int OwlMain(int /*argc*/, char* /*argv*/ []) { return TMDIFileApp(AppName).Run(); }