##{cheader.snp} #include #pragma hdrstop ##@OPT_APPL_DRAGDROP 2 #include ##QUERY_FILE_H [[FileName]] #include "[[FileName]]" ##<Aggregate) ##@QUERY_APPL_OLE == VALUE_NOOLE DEFINE_AUTOCLASS([[TApplication]]) EXPOSE_APPLICATION([[TApplication]], "Application", "Application object", 0) EXPOSE_QUIT("Quit", "Quit application", 0) //{{[[TApplication]]SYM_TBL_BEGIN}} //{{[[TApplication]]SYM_TBL_END}} ##@QUERY_APPL_OLE != VALUE_NOOLE END_AUTOAGGREGATE([[TApplication]], tfAppObject | tfCanCreate, "[[TApplication]]", 0, 0); ##@QUERY_APPL_OLE == VALUE_NOOLE END_AUTOCLASS([[TApplication]], tfAppObject | tfCanCreate, "[[TApplication]]", 0, 0); ##--END-- @QUERY_APPL_OLE_AUTO ##((@QUERY_APPL_OLE != VALUE_NOOLE) || @QUERY_APPL_OLE_AUTO) 2 DEFINE_APP_DICTIONARY(AppDictionary); ##((@QUERY_APPL_OLE == VALUE_NOOLE) && @QUERY_APPL_OLE_AUTO) static TPointer Registrar; ##((@QUERY_APPL_OLE != VALUE_NOOLE) static TPointer Registrar; ##--BEGIN-- ((@QUERY_APPL_OLE != VALUE_NOOLE) || @QUERY_APPL_OLE_AUTO) REGISTRATION_FORMAT_BUFFER(100) BEGIN_REGISTRATION(ApplicationReg) ##@QUERY_OLE_GUID [[GUID]] REGDATA(clsid, "{[[GUID]]}") ##--BEGIN-- @QUERY_PRJ_NAME [[AppTitle]] ##((@QUERY_APPL_OLE == VALUE_SERVER) || (@QUERY_APPL_OLE == VALUE_OLEBOTH) || @QUERY_APPL_OLE_AUTO) 2 REGDATA(appname, "[[AppTitle]] Server") REGDATA(description, "[[AppTitle]] Server Application") ##((@QUERY_APPL_OLE == VALUE_CONTAINER) && !@QUERY_APPL_OLE_AUTO) 2 REGDATA(appname, "[[AppTitle]] Container") REGDATA(description, "[[AppTitle]] Container Application") ##@QUERY_APPL_OLE_AUTO REGDATA(progid, "[[AppTitle]].Application.1") ##--END-- @QUERY_PRJ_NAME [[AppTitle]] ##@QUERY_APPL_OLE_AUTO REGDATA(cmdline, "/Automation") ##!@QUERY_APPL_OLE_AUTO REGDATA(cmdline, "") ##((@QUERY_APPL_OLE == VALUE_SERVER) || (@QUERY_APPL_OLE == VALUE_OLEBOTH)) REGDATA(usage, ocrMultipleUse) ##--BEGIN-- @QUERY_APPL_OLE_AUTO // REGDATA(debugger, "TDW") ##--END-- @QUERY_APPL_OLE_AUTO END_REGISTRATION ##--END-- @QUERY_APPL_OLE != VALUE_NOOLE ##@QUERY_APPL_OLE != VALUE_NOOLE ##: {AddOleDV.SNP} ##* ##@QUERY_APPL_OLE == VALUE_NOOLE ##: {AddDocV.SNP} ##* ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE // // Build a response table for all messages/commands handled // by the application. // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE DEFINE_RESPONSE_TABLE1([[TApplication]], TApplication) //{{[[TApplication]]RSP_TBL_BEGIN}} EV_OWLVIEW(dnCreate, EvNewView), EV_OWLVIEW(dnClose, EvCloseView), ##:DBResponse(\\"[[TApplication]]", "CM_HELPABOUT", "CmHelpAbout", "", "COMMAND") EV_COMMAND(CM_HELPABOUT, CmHelpAbout), ##@OPT_APPL_HELP 2 ##:DBResponse(\\"[[TApplication]]", "CM_HELPCONTENTS", "CmHelpContents", "", "COMMAND") ##:DBResponse(\\"[[TApplication]]", "CM_HELPUSING", "CmHelpUsing", "", "COMMAND") EV_COMMAND(CM_HELPCONTENTS, CmHelpContents), EV_COMMAND(CM_HELPUSING, CmHelpUsing), ##@OPT_APPL_DRAGDROP ##:DBResponse(\\"[[TApplication]]", "", "", "WM_DROPFILES", "") EV_WM_DROPFILES, ##@OPT_APPL_PRINTING ##:DBResponse(\\"[[TApplication]]", "", "", "WM_WININICHANGE", "") EV_WM_WININICHANGE, //{{[[TApplication]]RSP_TBL_END}} END_RESPONSE_TABLE; ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE ////////////////////////////////////////////////////////// // [[TApplication]] // ===== // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE ##((@QUERY_APPL_OLE == VALUE_NOOLE) && (@QUERY_APPL_OLE_AUTO)) [[TApplication]]::[[TApplication]] () : TApplication(::ApplicationReg["appname"], ::Module, &::AppDictionary) ##@QUERY_APPL_OLE != VALUE_NOOLE [[TApplication]]::[[TApplication]] () : TApplication(::ApplicationReg["appname"], ::Module, &::AppDictionary) ##((@QUERY_APPL_OLE == VALUE_NOOLE) && (!@QUERY_APPL_OLE_AUTO)) ##QUERY_WIND_TITLE [[Title]] [[TApplication]]::[[TApplication]] () : TApplication("[[Title]]") { ##@OPT_APPL_HELP 4 HelpState = false; ContextHelp = false; HelpCursor = 0; ##@OPT_APPL_PRINTING 3 Printer = 0; Printing = 0; SetDocManager(new TDocManager(dmMDI, this)); // INSERT>> Your constructor code here. } [[TApplication]]::~[[TApplication]] () { ##@OPT_APPL_PRINTING 3 if (Printer) delete Printer; // INSERT>> Your destructor code here. } ##--BEGIN-- @OPT_APPL_HELP bool [[TApplication]]::CanClose () { bool result = TApplication::CanClose(); ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE // // Close the help engine if we used it. // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE if (result && HelpState) GetMainWindow()->WinHelp(HelpFileName, HELP_QUIT, 0L); return result; } ##--END-- @OPT_APPL_HELP ##--BEGIN-- @OPT_APPL_TOOLBAR void [[TApplication]]::CreateGadgets (TControlBar *cb, bool server) { if (!server) { cb->Insert(*new TButtonGadget(CM_MDIFILENEW, CM_MDIFILENEW)); cb->Insert(*new TButtonGadget(CM_MDIFILEOPEN, CM_MDIFILEOPEN)); cb->Insert(*new TButtonGadget(CM_FILESAVE, CM_FILESAVE)); cb->Insert(*new TSeparatorGadget(6)); } 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_EDITUNDO, CM_EDITUNDO)); cb->Insert(*new TSeparatorGadget(6)); cb->Insert(*new TButtonGadget(CM_EDITFIND, CM_EDITFIND)); cb->Insert(*new TButtonGadget(CM_EDITFINDNEXT, CM_EDITFINDNEXT)); ##--BEGIN-- @OPT_APPL_PRINTING if (!server) { cb->Insert(*new TSeparatorGadget(6)); cb->Insert(*new TButtonGadget(CM_FILEPRINT, CM_FILEPRINT)); cb->Insert(*new TButtonGadget(CM_FILEPRINTPREVIEW, CM_FILEPRINTPREVIEW)); } ##--END-- @OPT_APPL_PRINTING ##@OPT_APPL_HELP 3 cb->Insert(*new TSeparatorGadget(6)); cb->Insert(*new TButtonGadget(CM_HELPCONTENTS, CM_HELPCONTENTS)); ##@QUERY_APPL_COMMENT == VALUE_VERBOSE // Add fly-over help hints. cb->SetHintMode(TGadgetWindow::EnterHints); } ##@QUERY_APPL_OLE == VALUE_NOOLE void [[TApplication]]::SetupSpeedBar (TDecoratedMDIFrame *frame) ##@QUERY_APPL_OLE != VALUE_NOOLE void [[TApplication]]::SetupSpeedBar (TOleMDIFrame *frame) { ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE // // Create default toolbar New and associate toolbar buttons with commands. // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE TControlBar* cb = new TControlBar(frame); CreateGadgets(cb); ##@QUERY_APPL_COMMENT == VALUE_VERBOSE // Setup the toolbar ID used by OLE 2 for toolbar negotiation. cb->Attr.Id = IDW_TOOLBAR; frame->Insert(*cb, TDecoratedFrame::Top); } ##--END-- @OPT_APPL_TOOLBAR ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE ////////////////////////////////////////////////////////// // [[TApplication]] // ===== // Application intialization. // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE void [[TApplication]]::InitMainWindow () { if (nCmdShow != SW_HIDE) ##@QUERY_APPL_STARTUP == VALUE_NORMAL nCmdShow = (nCmdShow != SW_SHOWMINNOACTIVE) ? SW_SHOWNORMAL : nCmdShow; ##@QUERY_APPL_STARTUP == VALUE_MIN nCmdShow = (nCmdShow != SW_SHOWMINNOACTIVE) ? SW_SHOWMINIMIZED : nCmdShow; ##@QUERY_APPL_STARTUP == VALUE_MAX nCmdShow = (nCmdShow != SW_SHOWMINNOACTIVE) ? SW_SHOWMAXIMIZED : nCmdShow; ##<SetBkgndColor([[BackgroundColor]]); ##--BEGIN-- ((@QUERY_APPL_OLE != VALUE_SERVER) && (@QUERY_APPL_OLE != VALUE_OLEBOTH)) ##@QUERY_APPL_STARTUP == VALUE_NORMAL nCmdShow = (nCmdShow != SW_SHOWMINNOACTIVE) ? SW_SHOWNORMAL : nCmdShow; ##@QUERY_APPL_STARTUP == VALUE_MIN nCmdShow = (nCmdShow != SW_SHOWMINNOACTIVE) ? SW_SHOWMINIMIZED : nCmdShow; ##@QUERY_APPL_STARTUP == VALUE_MAX nCmdShow = (nCmdShow != SW_SHOWMINNOACTIVE) ? SW_SHOWMAXIMIZED : nCmdShow; ##--END-- ((@QUERY_APPL_OLE != VALUE_SERVER) && (@QUERY_APPL_OLE != VALUE_OLEBOTH)) ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE // // Assign ICON w/ this application. // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE frame->SetIcon(this, IDI_MDIAPPLICATION); ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE // // Menu associated with window and accelerator table associated with table. // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE frame->AssignMenu(MDI_MENU); ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE // // Associate with the accelerator table. // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE frame->Attr.AccelTable = MDI_MENU; ##@OPT_APPL_TOOLBAR SetupSpeedBar(frame); ##@OPT_APPL_STATUSBAR 7 TStatusBar *sb = new TStatusBar(frame, TGadget::Recessed, TStatusBar::CapsLock | TStatusBar::NumLock | TStatusBar::ScrollLock | TStatusBar::Overtype); frame->Insert(*sb, TDecoratedFrame::Bottom); SetMainWindow(frame); frame->SetMenuDescr(TMenuDescr(MDI_MENU)); ##--BEGIN-- @QUERY_APPL_CONTROL==VALUE_3D ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE // // Windows 3-D controls. // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE EnableCtl3d(true); ##--END-- @QUERY_APPL_CONTROL==VALUE_3D ##--BEGIN-- @QUERY_APPL_CONTROL==VALUE_BWCC ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE // // Borland Windows custom controls. // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE EnableBWCC(); ##--END-- @QUERY_APPL_CONTROL==VALUE_BWCC } ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE ////////////////////////////////////////////////////////// // [[TApplication]] // ===== // Response Table handlers: // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE void [[TApplication]]::EvNewView (TView& view) { ##--BEGIN-- ((@QUERY_APPL_OLE == VALUE_SERVER) || (@QUERY_APPL_OLE == VALUE_OLEBOTH)) TOleView* ov = TYPESAFE_DOWNCAST(&view, TOleView); // If we're embedded and we're opening out of place then don't create the child window. if (view.GetDocument().IsEmbedded() && ov && !ov->IsOpenEditing()) { TWindow* vw = view.GetWindow(); vw->SetParent(TYPESAFE_DOWNCAST(GetMainWindow(), TOleFrame)->GetRemViewBucket()); vw->Create(); } else { TMDIClient *mdiClient = TYPESAFE_DOWNCAST(GetMainWindow()->GetClientWindow(), TMDIClient); if (mdiClient) { ##<SetIcon(this, IDI_DOC); ##@QUERY_APPL_OLE != VALUE_NOOLE 3 if (view.GetViewMenu()) child->SetMenuDescr(*view.GetViewMenu()); child->Create(); child->SetClientWindow(view.GetWindow()); } } if (!ov || !ov->GetOcRemView()) OcApp->SetOption(amEmbedding, false); ##--END-- ((@QUERY_APPL_OLE == VALUE_SERVER) || (@QUERY_APPL_OLE == VALUE_OLEBOTH)) ##--BEGIN-- ((@QUERY_APPL_OLE != VALUE_SERVER) && (@QUERY_APPL_OLE != VALUE_OLEBOTH)) TMDIClient *mdiClient = TYPESAFE_DOWNCAST(GetMainWindow()->GetClientWindow(), TMDIClient); if (mdiClient) { ##<SetIcon(this, IDI_DOC); ##@QUERY_APPL_OLE != VALUE_NOOLE 3 if (view.GetViewMenu()) child->SetMenuDescr(*view.GetViewMenu()); child->Create(); } ##--END-- ((@QUERY_APPL_OLE != VALUE_SERVER) && (@QUERY_APPL_OLE != VALUE_OLEBOTH)) } void [[TApplication]]::EvCloseView (TView&) { } ##--BEGIN-- @OPT_APPL_HELP ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE ////////////////////////////////////////////////////////// // [[TApplication]] // ===== // Menu Help Contents command ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE void [[TApplication]]::CmHelpContents () { ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE // // Show the help table of contents. // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE HelpState = GetMainWindow()->WinHelp(HelpFileName, HELP_CONTENTS, 0L); } ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE ////////////////////////////////////////////////////////// // [[TApplication]] // ===== // Menu Help Using Help command ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE void [[TApplication]]::CmHelpUsing () { ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE // // Display the contents of the Windows help file. // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE HelpState = GetMainWindow()->WinHelp(HelpFileName, HELP_HELPONHELP, 0L); } ##--END-- @OPT_APPL_HELP ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE ////////////////////////////////////////////////////////// // [[TApplication]] // =========== ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE ##@QUERY_TARGET_NAME [[Target]] // Menu Help About [[Target]] command void [[TApplication]]::CmHelpAbout () { ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE // // Show the modal dialog. // ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE ##--BEGIN-- <DragAcceptFiles(true); } void [[TApplication]]::EvDropFiles (TDropInfo drop) { ##@QUERY_APPL_COMMENT == VALUE_VERBOSE // Number of files dropped. int totalNumberOfFiles = drop.DragQueryFileCount(); TFileList* files = new TFileList; for (int i = 0; i < totalNumberOfFiles; i++) { ##@QUERY_APPL_COMMENT == VALUE_VERBOSE // Tell DragQueryFile the file interested in (i) and the length of your buffer. int fileLength = drop.DragQueryFileNameLen(i) + 1; char *fileName = new char[fileLength]; drop.DragQueryFile(i, fileName, fileLength); ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE // Getting the file dropped. The location is relative to your client coordinates, // and will have negative values if dropped in the non client parts of the window. // // DragQueryPoint copies that point where the file was dropped and returns whether // or not the point is in the client area. Regardless of whether or not the file // is dropped in the client or non-client area of the window, you will still receive // the file name. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE TPoint point; bool inClientArea = drop.DragQueryPoint(point); files->Add(new TFileDrop(fileName, point, inClientArea, this)); } ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE // Open the files that were dropped. AddFiles(files); ##@QUERY_APPL_COMMENT == VALUE_VERBOSE // Release the memory allocated for this handle with DragFinish. drop.DragFinish(); } void [[TApplication]]::AddFiles (TFileList* files) { ##@QUERY_APPL_COMMENT == VALUE_VERBOSE // Open all files dragged in. TFileListIter fileIter(*files); while (fileIter) { TDocTemplate* tpl = GetDocManager()->MatchTemplate(fileIter.Current()->WhoAmI()); if (tpl) tpl->CreateDoc(fileIter.Current()->WhoAmI()); fileIter++; } } ##--END-- @OPT_APPL_DRAGDROP ##{main.owl}