///////////////////////////////////////////////////////////////////////////// // Name: dbobject.h // Purpose: Database Objects // Author: Daniel Horak // Modified by: // RCS-ID: $Id: dbobject.h,v 1.5 2004/01/04 18:32:16 horakdan Exp $ // Copyright: (c) Daniel Horak // Licence: GPL ///////////////////////////////////////////////////////////////////////////// #ifndef __DBOBJECT_H #define __DBOBJECT_H #include #include #include "project.h" #include "view.h" // useful macros #define BOOL2STR(expr) ((expr) ? _("Yes") : _("No")) // id for misc buttons in DBObjectEditor and DBObjectList #define ID_BUTTON_ADD 101 #define ID_BUTTON_EDIT 102 #define ID_BUTTON_DELETE 103 #define ID_BUTTON_COPYNAME 104 #define ID_BUTTON_MOVEUP 105 #define ID_BUTTON_MOVEDOWN 106 class wxXmlNode; class wxXmlProperty; class wxShape; // Types of objects enum DBObjectType { DBProjectType, DBDomainType, DBEntityType, DBViewType, DBSequenceType, DBRelationType, DBProcedureType, DBTriggerType, DBIndexType, DBConstraintType, DBTypeType, DBAttributeType, DBRelationAttrType, DBIndexAttrType, DBSimpleAttrType, DBModelType, DBModelEntityType, DBModelRelationType, }; /* * -------------------------------------------------------------------------- * Generic Database Object */ class DBObject : public wxObject { public: DBObject(DBObjectType type, const wxString& typestr, DataDesignerProject *project, DataDesignerContainer *container); virtual ~DBObject(); DBObjectType GetType(void) { return m_type; } virtual wxDialog *Editor(bool edit) { return NULL; } // create a dialog with editable controls for defining object virtual wxTreeItemId AppendItem(); // append object into tree virtual wxTreeItemId InsertItem(const wxTreeItemId& prev); // append object into tree virtual void LoadXmlNode(wxXmlNode *node); // fill object from XML node virtual wxXmlNode *GetXmlNode(); // create a XML node from object // utility methods for bool and text values void LoadTextNode(wxXmlNode *node, const wxString& name, wxString& value); wxXmlNode *GetTextNode(const wxString& name, const wxString& value); void LoadBoolNode(wxXmlNode *node, const wxString& name, bool& value, bool defval = FALSE); wxXmlNode *GetBoolNode(const wxString& name, const bool& value); void LoadBoolProperty(wxXmlNode *node, const wxString& name, bool& value, bool defval = FALSE); wxXmlProperty *GetBoolProperty(const wxString& name, const bool& value); bool IsA(DBObjectType type) { return type == m_type; } DataDesignerProject *GetProject() { return m_project; } wxString& GetName() { return m_name; } DataDesignerContainer *GetContainer() { return m_container; } void SetTreeItemId(const wxTreeItemId& id) { m_treeitemid = id; } wxTreeItemId GetTreeItemId() { return m_treeitemid; } wxShape *GetShape() { return m_shape; } virtual void CreateShape(); // create corresponding shape (and set m_shape) void CreatePName(); // create physical name from logical void CreateNextName(); wxString m_name; // logical name wxString m_pname; // physical name wxString m_desc; // one line description wxString m_remark; // multi line remarks private: DBObjectType m_type; protected: wxString m_typestr; DataDesignerProject *m_project; DataDesignerContainer *m_container; wxTreeItemId m_treeitemid; bool m_appended; // is appended into tree? wxShape *m_shape; }; WX_DECLARE_LIST(DBObject, DBObjectList); /* * -------------------------------------------------------------------------- * Editor for Generic Database Object */ class DBObjectEditor : public wxDialog { public: DBObjectEditor(const wxString& title, const wxSize& size, DBObject *object, bool edit); DBObject *GetObject() { return m_object; } wxButton *AddButton(wxWindowID id, const wxString& label, const wxSize& size); virtual bool TransferDataFromWindow(); virtual bool TransferDataToWindow(); virtual bool Validate(); virtual void OnCopyName(wxCommandEvent& event); private: DBObject *m_object; int m_button_x; protected: wxPanel *m_page_general; // panel for user input wxPanel *m_page_remark; // panel for user input wxPanel *m_panel_button; wxNotebook *m_notebook; wxButton *m_button_ok; wxButton *m_button_cancel; wxButton *m_button_apply; wxButton *m_button_copyname; bool m_edit; // true = edit object, false = new object wxTextCtrl *it1; // logical name wxTextCtrl *it2; // description wxTextCtrl *it3; // remark wxTextCtrl *it4; // physical name private: DECLARE_EVENT_TABLE(); }; /* * -------------------------------------------------------------------------- * ListCtrl for DBObjects */ class DBObjectListCtrl : public wxPanel { public: DBObjectListCtrl(wxWindow *parent, DataDesignerContainer *container); virtual ~DBObjectListCtrl(); void SetContainer(DataDesignerContainer *container) { m_container = container; } DataDesignerContainer *GetContainer() { return m_container; } // wrappers for listctrl long InsertColumn(long index, const wxString& heading); long InsertItem(long index, const wxString& label); bool SetColumnWidth(int col, int width); bool SetColumnTitle(int col, const wxString& title); bool SetItemData(long item, long data); long SetItem(long item, long col, const wxString& label); virtual void AddObject(long item, DBObject *object); virtual void SetObject(long item, DBObject *object) { }; void SwapItems(long item1, long item2); void OnActivated(wxListEvent& event); void OnSelected(wxListEvent& event); void OnAdd(wxCommandEvent& event); void OnEdit(wxCommandEvent& event); void OnDelete(wxCommandEvent& event); void OnMoveUp(wxCommandEvent& event); void OnMoveDown(wxCommandEvent& event); void OnEditCommon(); protected: wxButton *m_button_add; wxButton *m_button_edit; wxButton *m_button_delete; wxButton *m_button_moveup; wxButton *m_button_movedown; wxListCtrl *m_list; long m_current; private: wxPanel *m_bpanel; DataDesignerContainer *m_container; DECLARE_EVENT_TABLE() }; #endif // __DBOBJECT_H