///////////////////////////////////////////////////////////////////////////// // Name: datadesigner.cc // Purpose: Main Program for DataDesigner // Author: Daniel Horak // Modified by: // RCS-ID: $Id: datadesigner.cc,v 1.3 2003/12/21 22:04:33 horakdan Exp $ // Copyright: (c) Daniel Horak // Licence: GPL ///////////////////////////////////////////////////////////////////////////// // ============================================================================ // declarations // ============================================================================ // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- // For compilers that support precompilation, includes "wx/wx.h". #include #ifdef __BORLANDC__ #pragma hdrstop #endif // for all others, include the necessary headers (this file is usually all you // need because it includes almost all "standard" wxWindows headers #ifndef WX_PRECOMP #include #endif #if !wxUSE_DOC_VIEW_ARCHITECTURE #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h! #endif #if !wxUSE_MDI_ARCHITECTURE #error You must set wxUSE_MDI_ARCHITECTURE to 1 in setup.h! #endif #include #include #include #include #include "config.h" #include "datadesigner.h" #include "project.h" #include "doc.h" #include "view.h" #include "objects/dbobject.h" #include "servers/dbserver.h" #ifdef __WXMSW__ #define USE_XPM_BITMAPS 0 #else #define USE_XPM_BITMAPS 1 #endif #if USE_XPM_BITMAPS #include "bitmaps/new.xpm" #include "bitmaps/open.xpm" #include "bitmaps/save.xpm" #include "bitmaps/print.xpm" #include "bitmaps/help.xpm" #endif // USE_XPM_BITMAPS DataDesignerFrame *frame = (DataDesignerFrame *) NULL; IMPLEMENT_APP(DataDesignerApp) DataDesignerApp::DataDesignerApp() { m_docmanager = (wxDocManager *) NULL; } // `Main program' equivalent: the program execution "starts" here bool DataDesignerApp::OnInit() { m_docmanager = new wxDocManager; (void) new wxDocTemplate((wxDocManager *) m_docmanager, _T("DataDesigner Project"), _T("*.ddp"), _T(""), _T("ddp"), _T("DataDesigner Project"), _T("DataDesigner View"), CLASSINFO(DataDesignerDocument), CLASSINFO(DataDesignerView)); #ifdef ENABLE_NLS // enable locale wxLocale *locale = new wxLocale(wxLANGUAGE_DEFAULT); locale->AddCatalog(PACKAGE); #endif wxOGLInitialize(); // create main application frame frame = new DataDesignerFrame(m_docmanager, (wxFrame *)NULL, "Data Designer", wxDefaultPosition, wxSize(600, 400), wxDEFAULT_FRAME_STYLE); wxMenu *menuFile = new wxMenu; menuFile->Append(wxID_NEW, _("&New project\tCtrl-N"), _("New project")); menuFile->Append(wxID_OPEN, _("&Open project...\tCtrl-O"), _("Open project")); menuFile->AppendSeparator(); menuFile->Append(wxID_EXIT, _("&Quit\tCtrl-Q"), _("Quit this program")); m_docmanager->FileHistoryUseMenu(menuFile); wxMenu *menuHelp = new wxMenu; menuHelp->Append(DataDesigner_About, _("&About...\tCtrl-A"), _("Show about dialog")); wxMenuBar *menuBar = new wxMenuBar(); menuBar->Append(menuFile, _("&File")); menuBar->Append(menuHelp, _("&Help")); frame->SetMenuBar(menuBar); frame->CenterOnScreen(); frame->Show(TRUE); SetTopWindow(frame); #ifdef ENABLE_DEBUG // setup logging wxString logpath = wxGetHomeDir() + wxFILE_SEP_PATH + "datadesigner.log"; FILE *fp = fopen(logpath.c_str(), "a"); if (fp == NULL) { return FALSE; } wxLog *logger = new wxLogStderr(fp); wxLog::SetActiveTarget(logger); wxLog::SetActiveTarget(new wxLogWindow(frame, "log")); #else wxLog *logger = new wxLogStderr(); wxLog::SetActiveTarget(logger); #endif wxLog::SetTimestamp("[%y/%m/%d %H:%M:%S] "); #ifdef ENABLE_DEBUG wxLogMessage("startup"); #endif InitServers(); return TRUE; } int DataDesignerApp::OnExit() { delete m_docmanager; DestroyServers(); wxOGLCleanUp(); #ifdef ENABLE_DEBUG wxLogMessage("finish"); #endif return 0; } wxMDIChildFrame *DataDesignerApp::CreateChildFrame(wxDocument *doc, wxView *view) { wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame(doc, view, GetMainFrame(), -1, _T("Child Frame"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE); wxMenu *menuFile = new wxMenu; menuFile->Append(wxID_NEW, _("&New project\tCtrl-N"), _("New project")); menuFile->Append(wxID_OPEN, _("&Open project...\tCtrl-O"), _("Open project")); menuFile->Append(wxID_CLOSE, _("&Close\tCtrl-C"), _("Close project")); menuFile->Append(wxID_SAVE, _("&Save...\tCtrl-S"), _("Save project")); menuFile->Append(wxID_SAVEAS, _("Save &As..."), _("Save project as")); menuFile->AppendSeparator(); menuFile->Append(DataDesigner_ExportDDL, _("&Export DDL..."), _("Export DDL commands for project")); menuFile->AppendSeparator(); menuFile->Append(wxID_PRINT, _("&Print...\tCtrl-P"), _("Print schema")); menuFile->Append(wxID_PRINT_SETUP, _("Print setup..."), _("Print setup")); menuFile->Append(wxID_PREVIEW, _("Preview..."), _("Preview")); menuFile->AppendSeparator(); menuFile->Append(wxID_EXIT, _("&Quit\tCtrl-Q"), _("Quit this program")); wxMenu *menuEdit = new wxMenu; menuEdit->Append(wxID_UNDO, _("&Undo"), _("Undo last step")); menuEdit->Append(wxID_REDO, _("&Redo"), _("Redo last step")); doc->GetCommandProcessor()->SetEditMenu(menuEdit); wxMenu *menuObject = new wxMenu; menuObject->Append(DataDesigner_Entity, _("&Entity..."), _("Entity")); menuObject->Append(DataDesigner_Domain, _("&Domain..."), _("Domain")); menuObject->Append(DataDesigner_View, _("&View..."), _("View")); menuObject->Append(DataDesigner_Procedure, _("&Procedure..."), _("Procedure")); menuObject->Append(DataDesigner_Relation, _("&Relation..."), _("Relation")); menuObject->Append(DataDesigner_Sequence, _("&Sequence..."), _("Sequence")); wxMenu *menuView = new wxMenu; menuView->Append(DataDesigner_ZoomIn, _("Zoom in"), _("Zoom in")); menuView->Append(DataDesigner_ZoomOut, _("Zoom out"), _("Zoom out")); menuView->Append(DataDesigner_Zoom100, _("Original"), _("Original size")); wxMenu *menuHelp = new wxMenu; menuHelp->Append(DataDesigner_About, _("&About...\tCtrl-A"), _("Show about dialog")); wxMenuBar *menuBar = new wxMenuBar(); menuBar->Append(menuFile, _("&File")); menuBar->Append(menuEdit, _("&Edit")); menuBar->Append(menuObject, _("&Objects")); menuBar->Append(menuView, _("&View")); menuBar->Append(menuHelp, _("&Help")); subframe->SetMenuBar(menuBar); return subframe; } // ---------------------------------------------------------------------------- // main frame // ---------------------------------------------------------------------------- IMPLEMENT_CLASS(DataDesignerFrame, wxDocMDIParentFrame) BEGIN_EVENT_TABLE(DataDesignerFrame, wxDocMDIParentFrame) EVT_MENU(DataDesigner_About, DataDesignerFrame::OnAbout) END_EVENT_TABLE() // frame constructor DataDesignerFrame::DataDesignerFrame(wxDocManager *mgr, wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size, long type) : wxDocMDIParentFrame(mgr, frame, -1, title, pos, size, type, _T("DataDesignerFrame")) { } // event handlers void DataDesignerFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxString msg; msg.Printf( _T("DataDesigner " VERSION "\n\n(c) 2002-2003 Daniel Horak") ); wxMessageBox(msg, _("About..."), wxOK | wxICON_INFORMATION, this); } DataDesignerSplitter *DataDesignerFrame::CreateSplitter(wxView *view, wxMDIChildFrame *parent) { int width, height; parent->GetClientSize(&width, &height); DataDesignerSplitter *splitter = new DataDesignerSplitter(view, parent, wxDefaultPosition, wxSize(width, height), 0); return splitter; } DataDesignerFrame *GetMainFrame() { return frame; }