///////////////////////////////////////////////////////////////////////////// // Name: dbmodel.cc // Purpose: Database Objects // Author: Daniel Horak // Modified by: // RCS-ID: $Id: dbmodel.cc,v 1.5 2004/01/04 18:32:16 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 #include #include #include "config.h" #include "xml.h" #include "dbobject.h" #include "dbmodel.h" #include "dbentity.h" #include "dbmodelentity.h" #include "dbmodelrelation.h" #include "project.h" DBModel::DBModel(DataDesignerProject *project, DataDesignerContainer *container) :DBObject(DBModelType, "model", project, container), m_entities(NULL), m_relations(NULL) { } DBModel::~DBModel() { if (m_entities) { m_project->DeleteChildren(m_entities->GetTreeItemId()); delete m_entities; } if (m_relations) { m_project->DeleteChildren(m_relations->GetTreeItemId()); delete m_relations; } } wxDialog *DBModel::Editor(bool edit) { return new DBModelEditor(this, edit); } void DBModel::LoadXmlNode(wxXmlNode *node) { if (node->GetName() == m_typestr) { m_name = node->GetPropVal("name", wxEmptyString); wxXmlNode *child = node->GetChildren(); wxString name; while (child) { name = child->GetName(); if (name == "modelentities") m_entities->LoadXmlNode(child); child = child->GetNext(); } } else { wxLogMessage("wrong type '%s'", node->GetName().c_str()); } m_project->SetItemText(m_treeitemid, m_name); } wxXmlNode *DBModel::GetXmlNode() { wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, m_typestr); node->AddProperty("name", m_name); node->AddChild(m_entities->GetXmlNode()); return node; } wxTreeItemId DBModel::AppendItem() { if (! m_appended) { m_treeitemid = m_project->AppendItem(m_container->GetTreeItemId(), m_name, -1, -1, new DataDesignerItemData(this)); m_entities = new DBModelEntityContainer(m_project, m_project->AppendItem(m_treeitemid, _("Entities"))); m_relations = new DBModelRelationContainer(m_project, m_project->AppendItem(m_treeitemid, _("Relations"))); m_appended = TRUE; } return m_treeitemid; } /* * Editor */ BEGIN_EVENT_TABLE(DBModelEditor, DBObjectEditor) EVT_BUTTON(wxID_APPLY, DBModelEditor::OnApply) END_EVENT_TABLE() DBModelEditor::DBModelEditor(DBObject *object, bool edit) : DBObjectEditor(_("Model"), wxSize(500,300), object, edit) { m_page_entities = new wxPanel(m_notebook); m_list_entities = new DBModelEntityListCtrl(m_page_entities, ((DBModel *)GetObject())->m_entities); if (m_edit) { ((DBModel *)GetObject())->m_entities->SetList(m_list_entities); ((DBModel *)GetObject())->m_entities->AddObjectsToList(); } wxLayoutConstraints *c = new wxLayoutConstraints; c->top.SameAs (m_page_entities, wxTop); c->left.SameAs (m_page_entities, wxLeft); c->right.SameAs (m_page_entities, wxRight); c->bottom.SameAs(m_page_entities, wxBottom); m_list_entities->SetConstraints(c); m_page_entities->SetAutoLayout(TRUE); m_notebook->InsertPage(m_notebook->GetPageCount() - 1, m_page_entities, _("Entities")); m_button_apply = AddButton(wxID_APPLY, _("Apply"), wxSize(60,-1)); if (m_edit) { m_button_ok->SetDefault(); } else { m_button_apply->SetDefault(); m_page_entities->Disable(); } } DBModelEditor::~DBModelEditor() { } void DBModelEditor::OnApply(wxCommandEvent& event) { DBModel *object = (DBModel *)GetObject(); if (Validate() == FALSE) return; TransferDataFromWindow(); object->AppendItem(); m_list_entities->SetContainer(object->m_entities); m_page_entities->Enable(); m_button_apply->Disable(); m_button_ok->SetDefault(); m_edit = TRUE; } /* * Container */ DBModelContainer::DBModelContainer(DataDesignerProject *project, const wxTreeItemId& parent) : DataDesignerContainer(project, parent, "models") { } DBObject *DBModelContainer::CreateObject() { return new DBModel(GetProject(), this); } void DBModelContainer::ShowList() { SetList(new DBModelListCtrl(GetProject()->GetSplitter(), this)); DataDesignerContainer::AddObjectsToListAndShow(); } /* * ObjectList */ DBModelListCtrl::DBModelListCtrl(wxWindow *parent, DataDesignerContainer *container) : DBObjectListCtrl(parent, container) { } DBModelListCtrl::~DBModelListCtrl() { } void DBModelListCtrl::SetObject(long item, DBObject *object) { DBModel *attribute = (DBModel *)object; }