///////////////////////////////////////////////////////////////////////////// // Name: dbindex.cc // Purpose: Database Objects // Author: Daniel Horak // Modified by: // RCS-ID: $Id: dbindex.cc,v 1.3 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 "config.h" #include "xml.h" #include "dbobject.h" #include "dbindex.h" #include "dbsimpleattr.h" DBIndex::DBIndex(DataDesignerProject *project, DataDesignerContainer *container) :DBObject(DBIndexType, "index", project, container), m_unique(TRUE), m_attrs(NULL) { } DBIndex::~DBIndex() { if (m_attrs) { m_project->DeleteChildren(m_attrs->GetTreeItemId()); delete m_attrs; } } wxDialog *DBIndex::Editor(bool edit) { return new DBIndexEditor(this, edit); } void DBIndex::LoadXmlNode(wxXmlNode *node) { wxXmlNode *child; if (node->GetName() == m_typestr) { DBObject::LoadXmlNode(node); LoadBoolProperty(node, "unique", m_unique); child = node->GetChildren(); while (child) { if (child->GetName() == "unique") { LoadBoolNode(child, "unique", m_unique); } else if (child->GetName() == "simpleattributes") { m_attrs->LoadXmlNode(child); } child = child->GetNext(); } } else { wxLogMessage("wrong type '%s'", node->GetName().c_str()); } } wxTreeItemId DBIndex::AppendItem() { if (! m_appended) { m_treeitemid = m_project->AppendItem(m_container->GetTreeItemId(), m_name, -1, -1, new DataDesignerItemData(this)); m_attrs = new DBSimpleAttributeContainer(m_project, m_project->AppendItem(m_treeitemid, _("Index's Attributes"))); m_appended = TRUE; } return m_treeitemid; } wxXmlNode *DBIndex::GetXmlNode() { wxXmlNode *node = DBObject::GetXmlNode(); node->AddChild(GetBoolNode("unique", m_unique)); node->AddChild(m_attrs->GetXmlNode()); return node; } /* * Editor */ BEGIN_EVENT_TABLE(DBIndexEditor, DBObjectEditor) EVT_BUTTON(wxID_APPLY, DBIndexEditor::OnApply) END_EVENT_TABLE() DBIndexEditor::DBIndexEditor(DBObject *object, bool edit) : DBObjectEditor(_("Index"), wxSize(500,200), object, edit) { m_page_attrs = new wxPanel(m_notebook); m_list_attrs = new DBSimpleAttributeListCtrl(m_page_attrs,((DBIndex *)GetObject())->m_attrs); if (m_edit) { ((DBIndex *)GetObject())->m_attrs->SetList(m_list_attrs); ((DBIndex *)GetObject())->m_attrs->AddObjectsToList(); } wxLayoutConstraints *c = new wxLayoutConstraints; c->top.SameAs (m_page_attrs, wxTop); c->left.SameAs (m_page_attrs, wxLeft); c->right.SameAs (m_page_attrs, wxRight); c->bottom.SameAs(m_page_attrs, wxBottom); m_list_attrs->SetConstraints(c); m_page_attrs->SetAutoLayout(TRUE); m_notebook->InsertPage(m_notebook->GetPageCount() - 1, m_page_attrs, _("Attributes")); c1 = new wxCheckBox(m_page_general, -1, _("Unique"), wxPoint(10,85), wxSize(100,-1)); m_button_apply = AddButton(wxID_APPLY, _("Apply"), wxSize(60,-1)); if (m_edit) { m_button_ok->SetDefault(); } else { m_button_apply->SetDefault(); m_page_attrs->Disable(); } } DBIndexEditor::~DBIndexEditor() { } bool DBIndexEditor::TransferDataFromWindow() { DBIndex *object = (DBIndex *)GetObject(); DBObjectEditor::TransferDataFromWindow(); object->m_unique = c1->GetValue(); return TRUE; } bool DBIndexEditor::TransferDataToWindow() { DBIndex *object = (DBIndex *)GetObject(); DBObjectEditor::TransferDataToWindow(); c1->SetValue(object->m_unique); return TRUE; } void DBIndexEditor::OnApply(wxCommandEvent& event) { DBIndex *object = (DBIndex *)GetObject(); if (Validate() == FALSE) return; TransferDataFromWindow(); object->AppendItem(); m_list_attrs->SetContainer(object->m_attrs); m_page_attrs->Enable(); m_button_apply->Disable(); m_button_ok->SetDefault(); m_edit = TRUE; } /* * Container */ DBIndexContainer::DBIndexContainer(DataDesignerProject *project, const wxTreeItemId& parent) : DataDesignerContainer(project, parent, "indexes") { } DBObject *DBIndexContainer::CreateObject() { return new DBIndex(GetProject(), this); } void DBIndexContainer::ShowList() { SetList(new DBIndexListCtrl(GetProject()->GetSplitter(), this)); DataDesignerContainer::AddObjectsToListAndShow(); } /* * ObjectList */ DBIndexListCtrl::DBIndexListCtrl(wxWindow *parent, DataDesignerContainer *container) : DBObjectListCtrl(parent, container) { } DBIndexListCtrl::~DBIndexListCtrl() { } void DBIndexListCtrl::SetObject(long item, DBObject *object) { DBIndex *index = (DBIndex *)object; }