/////////////////////////////////////////////////////////////////////////////
// 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 <wx/list.h>
#include <wx/listctrl.h>
#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
syntax highlighted by Code2HTML, v. 0.9.1