///////////////////////////////////////////////////////////////////////////// // Name: dbattribute.cc // Purpose: Database Objects // Author: Daniel Horak // Modified by: // RCS-ID: $Id: dbsimpleattr.cc,v 1.4 2004/01/01 13:56:19 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 "dbsimpleattr.h" #include "dbentity.h" #include "dbattribute.h" #include "project.h" DBSimpleAttribute::DBSimpleAttribute(DataDesignerProject *project, DataDesignerContainer *container) :DBObject(DBSimpleAttrType, "simpleattribute", project, container), m_attr(NULL) { } wxDialog *DBSimpleAttribute::Editor(bool edit) { return new DBSimpleAttributeEditor(this, edit); } void DBSimpleAttribute::LoadXmlNode(wxXmlNode *node) { if (node->GetName() == m_typestr) { m_name = node->GetPropVal("name", wxEmptyString); } else { wxLogMessage("wrong type '%s'", node->GetName().c_str()); } // must set pointer to the real attribute m_attr = (DBAttribute *)GetEntity()->GetAttributes()->GetObjectByName(m_name); if (m_attr && m_attr->GetType() == DBAttributeType) m_attr->AddSimpleAttribute(this); else wxLogMessage("DBSimpleAttribute::LoadXmlNode - cannot find real attribute for " + m_name); m_project->SetItemText(m_treeitemid, m_name); } wxXmlNode *DBSimpleAttribute::GetXmlNode() { wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, m_typestr); node->AddProperty("name", m_name); return node; } DBEntity *DBSimpleAttribute::GetEntity() { DBEntity *entity = NULL; wxTreeItemId treeid; treeid = GetContainer()->GetTreeItemId(); // list of this attrs treeid = GetProject()->GetParent(treeid); // parent treeid = GetProject()->GetParent(treeid); // list of foo for an entity treeid = GetProject()->GetParent(treeid); // entity entity = (DBEntity *)(((DataDesignerItemData *)(GetProject()->GetItemData(treeid)))->GetObject()); return entity; } /* * Editor */ DBSimpleAttributeEditor::DBSimpleAttributeEditor(DBObject *object, bool edit) : wxDialog(NULL, -1, _("Simple attribute"), wxDefaultPosition, wxSize(400,120)), m_object(object), m_edit(edit) { wxString **strings; int idx; m_panel_general = new wxPanel(this); m_panel_button = new wxPanel(this); wxLayoutConstraints *c = new wxLayoutConstraints; c->top.SameAs (this, wxTop); c->left.SameAs (this, wxLeft); c->right.SameAs (this, wxRight); c->bottom.SameAs(m_panel_button, wxTop); m_panel_general->SetConstraints(c); c = new wxLayoutConstraints; c->height.Absolute(40); c->left.SameAs (this, wxLeft); c->right.SameAs (this, wxRight); c->bottom.SameAs(this, wxBottom); m_panel_button->SetConstraints(c); idx = 0; m_entity = ((DBSimpleAttribute *)object)->GetEntity(); strings = m_entity->m_attrs->ListNames(); new wxStaticText(m_panel_general, -1, _("Attribute"), wxPoint(10,10), wxSize(100,-1), wxALIGN_RIGHT); c1 = new wxComboBox(m_panel_general, -1, wxEmptyString, wxPoint(120,10), wxSize(100,-1), 0, NULL, wxCB_SORT | wxCB_READONLY); while (strings[idx]) { if (m_object->GetContainer()->GetObjectByName(*strings[idx]) == NULL) c1->Append(*strings[idx]); idx++; } delete strings; m_button_ok = new wxButton(m_panel_button, wxID_OK, _("OK"), wxPoint(10,10), wxSize(60,-1)); m_button_cancel = new wxButton(m_panel_button, wxID_CANCEL, _("Cancel"), wxPoint(90,10), wxSize(60,-1)); SetAutoLayout(TRUE); Layout(); Center(); } DBSimpleAttributeEditor::~DBSimpleAttributeEditor() { } bool DBSimpleAttributeEditor::TransferDataFromWindow() { DBSimpleAttribute *object = (DBSimpleAttribute *)GetObject(); DBAttribute *attr_old, *attr_new; object->m_name = c1->GetValue(); attr_old = object->GetRealAttribute(); attr_new = (DBAttribute *)m_entity->m_attrs->GetObjectByName(object->m_name); if (attr_old != attr_new) { if (attr_old) { attr_old->DeleteSimpleAttribute(object); } attr_new->AddSimpleAttribute(object); object->SetRealAttribute(attr_new); } return TRUE; } bool DBSimpleAttributeEditor::TransferDataToWindow() { DBSimpleAttribute *object = (DBSimpleAttribute *)GetObject(); c1->SetValue(object->m_name); return TRUE; } /* * Container */ DBSimpleAttributeContainer::DBSimpleAttributeContainer(DataDesignerProject *project, const wxTreeItemId& parent) : DataDesignerContainer(project, parent, "simpleattributes") { } DBObject *DBSimpleAttributeContainer::CreateObject() { return new DBSimpleAttribute(GetProject(), this); } void DBSimpleAttributeContainer::ShowList() { SetList(new DBSimpleAttributeListCtrl(GetProject()->GetSplitter(), this)); DataDesignerContainer::AddObjectsToListAndShow(); } /* * ObjectList */ DBSimpleAttributeListCtrl::DBSimpleAttributeListCtrl(wxWindow *parent, DataDesignerContainer *container) : DBObjectListCtrl(parent, container) { } DBSimpleAttributeListCtrl::~DBSimpleAttributeListCtrl() { } void DBSimpleAttributeListCtrl::SetObject(long item, DBObject *object) { DBSimpleAttribute *attribute = (DBSimpleAttribute *)object; }