/////////////////////////////////////////////////////////////////////////////
// Name:        dbentity.h
// Purpose:     Database Objects
// Author:      Daniel Horak
// Modified by:
// RCS-ID:      $Id: dbentity.h,v 1.5 2004/01/01 13:56:19 horakdan Exp $
// Copyright:   (c) Daniel Horak
// Licence:     GPL
/////////////////////////////////////////////////////////////////////////////

#ifndef __DBENTITY_H
#define __DBENTITY_H

class DBAttribute;
class DBAttributeContainer;
class DBAttributeListCtrl;
class DBIndexContainer;
class DBIndexListCtrl;
class DBTriggerContainer;
class DBTriggerListCtrl;
class DBConstraint;
class DBConstraintContainer;
class DBConstraintListCtrl;
class DBModelEntity;
class DBRelation;

class DBEntity : public DBObject
{
public:
	DBEntity(DataDesignerProject *project, DataDesignerContainer *container);
	virtual ~DBEntity();
	
	virtual wxTreeItemId AppendItem();
	
	virtual wxDialog *Editor(bool edit);

	virtual void LoadXmlNode(wxXmlNode *node);
	virtual wxXmlNode *GetXmlNode();
	
	virtual void CreateShape();
	
	DBAttributeContainer *GetAttributes() { return m_attrs; }
	int GetAttributeCount();
	DBAttribute *GetAttributeByName(const wxString& name);
	DBAttribute *AddAttribute(DBAttribute *attr);
	void AddAttributeToPrimaryKey(DBAttribute *attr);
	void DeleteAttributeFromPrimaryKey(DBAttribute *attr);
	DBConstraint *GetPrimaryKeyConstraint();
	void AddForeignKeyConstraint(DBRelation *relation, bool identifying);
	void AddParentsPrimaryKey(DBRelation *relation);
	
	void AddModelEntity(DBModelEntity *ent);
	void DeleteModelEntity(DBModelEntity *ent);

	DBAttributeContainer	*m_attrs;
	DBIndexContainer	*m_indexes;
	DBTriggerContainer	*m_triggers;
	DBConstraintContainer	*m_constraints;
	
	bool		m_placed;		// was manually placed in schema
	wxCoord		m_xpos;
	wxCoord		m_ypos;
	
	DBObjectList	m_modelentities;
};

class DBEntityEditor : public DBObjectEditor
{
public:
	DBEntityEditor(DBObject *object, bool edit);
	virtual ~DBEntityEditor();
	virtual bool TransferDataFromWindow();
	virtual bool TransferDataToWindow();
	
	void OnApply(wxCommandEvent& event);

protected:
	wxPanel		*m_page_attributes;
	wxPanel		*m_page_constraints;
	wxPanel		*m_page_indexes;
	wxPanel		*m_page_triggers;
	
	DBAttributeListCtrl	*m_list_attrs;
	DBConstraintListCtrl	*m_list_constraints;
	DBIndexListCtrl		*m_list_indexes;
	DBTriggerListCtrl	*m_list_triggers;

private:
	DECLARE_EVENT_TABLE()
};

class DBEntityContainer : public DataDesignerContainer
{
public:
	DBEntityContainer(DataDesignerProject *project, const wxTreeItemId& id);
	
	virtual ~DBEntityContainer() { }
	
	virtual DBObject *CreateObject();
	virtual void	ShowList();
};

class DBEntityListCtrl : public DBObjectListCtrl
{
public:
	DBEntityListCtrl(wxWindow *parent, DataDesignerContainer *container);
	
	virtual ~DBEntityListCtrl();
	
	virtual void SetObject(long item, DBObject *object);
};

class DBEntityShape : public wxRectangleShape
{
public:
	DBEntityShape(DBEntity *entity);
	DBEntityShape(DBModelEntity *sentity);
	
	void Create(DBEntity *entity);
	
	void OnDraw(wxDC& dc);

	virtual void OnEndDragLeft(double x, double y, int keys = 0, int attachment = 0);
	virtual void OnLeftDoubleClick(double x, double y, int keys = 0, int attachment = 0);
	virtual void OnLeftClick(double x, double y, int keys = 0, int attachment = 0);

	virtual void OnBeginDragRight(double x, double y, int keys = 0, int attachment = 0);
	virtual void OnDragRight(bool draw, double x, double y, int keys = 0, int attachment = 0);
	virtual void OnEndDragRight(double x, double y, int keys = 0, int attachment = 0);

protected:
	int		m_attrcount;
	DBModelEntity	*m_mentity;
};

#endif // __DBENTITY_H


syntax highlighted by Code2HTML, v. 0.9.1