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

#ifndef __DBCONSTRAINT_H
#define __DBCONSTRAINT_H

class DBSimpleAttributeContainer;
class DBSimpleAttributeListCtrl;
class DBAttribute;

#define DBO_CONSTRAINT_TYPE_PRIMARY_KEY	0
#define DBO_CONSTRAINT_TYPE_FOREIGN_KEY	1
#define DBO_CONSTRAINT_TYPE_UNIQUE	2
#define DBO_CONSTRAINT_TYPE_CHECK	3

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

	virtual void LoadXmlNode(wxXmlNode *node);
	virtual wxXmlNode *GetXmlNode();

	DBSimpleAttributeContainer	*GetAttributes() { return m_attrs; }
	void AddAttribute(const wxString &name);
	void AddAttribute(DBAttribute *attr);
	void DeleteAttribute(const wxString &name);
	
	int		m_type;		// primary/foreign/unique/check/...
	bool		m_deferrable;	// deferrable/not deferrable
	bool		m_immediate;	// initially immediate or deferred
	
	wxString	m_relation;	// relation name, iff type is foreign key
	
	DBSimpleAttributeContainer	*m_attrs;
	
	static wxString	m_type_val[];
};

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

protected:
	wxPanel			*m_page_attrs;
	
	DBSimpleAttributeListCtrl	*m_list_attrs;

private:
	wxComboBox		*c1;		// type
	wxCheckBox		*c2;		// deferrable
	wxCheckBox		*c3;		// immediate
	wxTextCtrl		*t4;		// relation
	
	static wxString		m_type_str[];	// values showed for combobox
	static int		m_types_count;
	
	DECLARE_EVENT_TABLE()
};

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

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

#endif // __DBCONSTRAINT_H


syntax highlighted by Code2HTML, v. 0.9.1