//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2016, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgCheck.h PostgreSQL Check
//
//////////////////////////////////////////////////////////////////////////

#ifndef PGCHECK_H
#define PGCHECK_H

// App headers
#include "pgTable.h"
#include "pgConstraints.h"



class pgCheckFactory : public pgSchemaObjFactory
{
public:
	pgCheckFactory();
	virtual dlgProperty *CreateDialog(frmMain *frame, pgObject *node, pgObject *parent);
	virtual pgObject *CreateObjects(pgCollection *obj, ctlTree *browser, const wxString &restr = wxEmptyString);

	int GetClosedIconId()
	{
		return closedId;
	}

protected:
	int closedId;
};
extern pgCheckFactory checkFactory;


class pgCheck : public pgSchemaObject
{
public:
	pgCheck(pgSchema *newSchema, const wxString &newName = wxT(""));
	~pgCheck();

	int GetIconId();

	wxString GetTranslatedMessage(int kindOfMessage) const;
	void ShowTreeDetail(ctlTree *browser, frmMain *form = 0, ctlListView *properties = 0, ctlSQLBox *sqlPane = 0);

	wxString GetObjectName() const
	{
		return objectName;
	}
	void iSetObjectName(const wxString &s)
	{
		objectName = s;
	}
	wxString GetObjectSchema() const
	{
		return objectSchema;
	}
	void iSetObjectSchema(const wxString &s)
	{
		objectSchema = s;
	}
	wxString GetObjectKind() const
	{
		return objectKind;
	}
	void iSetObjectKind(const wxString &s)
	{
		objectKind = s;
	}
	wxString GetDefinition() const
	{
		return definition;
	}
	void iSetDefinition(const wxString &s)
	{
		definition = s;
	}
	bool GetNoInherit() const
	{
		return noinherit;
	}
	void iSetNoInherit(const bool b)
	{
		noinherit = b;
	}
	bool GetValid() const
	{
		return valid;
	}
	void iSetValid(const bool b)
	{
		valid = b;
	}
	bool GetEnforced() const
	{
		return enfoced;
	}
	void iSetEnforced(const bool b)
	{
		enfoced = b;
	}

	bool DropObject(wxFrame *frame, ctlTree *browser, bool cascaded);
	wxString GetConstraint();
	wxString GetSql(ctlTree *browser);
	wxString GetHelpPage(bool forCreate) const
	{
		return wxT("pg/sql-altertable");
	}
	pgObject *Refresh(ctlTree *browser, const wxTreeItemId item);

	bool HasStats()
	{
		return false;
	}
	bool HasDepends()
	{
		return true;
	}
	bool HasReferences()
	{
		return true;
	}
	void Validate(frmMain *form);

private:
	wxString definition, objectKind, objectName, objectSchema;
	bool noinherit, valid,enfoced;
};

class pgCheckCollection : public pgSchemaObjCollection
{
public:
	pgCheckCollection(pgaFactory *factory, pgSchema *sch);
	wxString GetTranslatedMessage(int kindOfMessage) const;
};

class validateCheckFactory : public contextActionFactory
{
public:
	validateCheckFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar);
	wxWindow *StartDialog(frmMain *form, pgObject *obj);
	bool CheckEnable(pgObject *obj);
};

#endif
