/////////////////////////////////////////////////////////////////////////////
// Name: dbtrigger.cc
// Purpose: Database Objects
// Author: Daniel Horak
// Modified by:
// RCS-ID: $Id: dbtrigger.cc,v 1.2 2004/01/01 13:56:19 horakdan Exp $
// Copyright: (c) Daniel Horak
// Licence: GPL
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>
#ifdef __BORLANDC__
#pragma hdrstop
#endif
// for all others, include the necessary headers (this file is usually all you
// need because it includes almost all "standard" wxWindows headers
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
#include "config.h"
#include "xml.h"
#include "dbobject.h"
#include "dbtrigger.h"
DBTrigger::DBTrigger(DataDesignerProject *project, DataDesignerContainer *container)
:DBObject(DBTriggerType, "trigger", project, container),
m_event_ins(FALSE), m_event_upd(FALSE), m_event_del(FALSE),
m_time(DBO_TRIGGER_TIME_AFTER), m_type(DBO_TRIGGER_TYPE_ROW)
{
}
wxDialog *DBTrigger::Editor(bool edit)
{
return new DBTriggerEditor(this, edit);
}
void DBTrigger::LoadXmlNode(wxXmlNode *node)
{
if (node->GetName() == m_typestr) {
DBObject::LoadXmlNode(node);
wxXmlNode *child = node->GetChildren();
wxString name;
while (child) {
name = child->GetName();
if (name == "procedure") {
LoadTextNode(child, "procedure", m_procedure);
} else if (name == "event") {
wxString event;
LoadTextNode(child, "event", event);
if (event == "insert")
m_event_ins = TRUE;
else if (event == "update")
m_event_upd = TRUE;
else if (event == "delete")
m_event_del = TRUE;
else
wxLogMessage("Unknown trigger event specification '%s'", event.c_str());
} else if (name == "time") {
wxString time;
LoadTextNode(child, "time", time);
if (time == "after")
m_time = DBO_TRIGGER_TIME_AFTER;
else if (time == "before")
m_time = DBO_TRIGGER_TIME_BEFORE;
else
wxLogMessage("Unknown trigger time specification '%s'", time.c_str());
} else if (name == "type") {
wxString type;
LoadTextNode(child, "type", type);
if (type == "row")
m_type = DBO_TRIGGER_TYPE_ROW;
else if (type == "statement")
m_type = DBO_TRIGGER_TYPE_STMT;
else
wxLogMessage("Unknown trigger type specification '%s'", type.c_str());
}
child = child->GetNext();
}
} else {
wxLogMessage("wrong type '%s'", node->GetName().c_str());
}
}
wxXmlNode *DBTrigger::GetXmlNode()
{
wxXmlNode *node = DBObject::GetXmlNode();
if (m_time == DBO_TRIGGER_TIME_AFTER)
node->AddChild(GetTextNode("time", "after"));
else if (m_time == DBO_TRIGGER_TIME_BEFORE)
node->AddChild(GetTextNode("time", "before"));
if (m_type == DBO_TRIGGER_TYPE_ROW)
node->AddChild(GetTextNode("type", "row"));
else if (m_type == DBO_TRIGGER_TYPE_STMT)
node->AddChild(GetTextNode("type", "statement"));
if (m_event_ins)
node->AddChild(GetTextNode("event", "insert"));
if (m_event_upd)
node->AddChild(GetTextNode("event", "update"));
if (m_event_del)
node->AddChild(GetTextNode("event", "delete"));
node->AddChild(GetTextNode("procedure", m_procedure));
return node;
}
/*
* Editor
*/
wxString DBTriggerEditor::m_time_str[] = { _("After"), _("Before") };
wxString DBTriggerEditor::m_type_str[] = { _("Row"), _("Statement") };
DBTriggerEditor::DBTriggerEditor(DBObject *object, bool edit)
: DBObjectEditor(_("Trigger"), wxSize(500,300), object, edit)
{
wxString **strings;
int idx;
r1 = new wxRadioBox(m_page_general, -1, _("Time"), wxPoint(50,60), wxSize(100,-1), 2, m_time_str, 1, wxRA_HORIZONTAL);
new wxStaticBox(m_page_general, -1, _("On Action"), wxPoint(190,60), wxSize(120,90));
c21 = new wxCheckBox(m_page_general, -1, _("Insert"), wxPoint(200,70), wxSize(100,-1));
c22 = new wxCheckBox(m_page_general, -1, _("Update"), wxPoint(200,95), wxSize(100,-1));
c23 = new wxCheckBox(m_page_general, -1, _("Delete"), wxPoint(200,120), wxSize(100,-1));
r3 = new wxRadioBox(m_page_general, -1, _("Type"), wxPoint(350,60), wxSize(100,-1), 2, m_type_str, 1, wxRA_HORIZONTAL);
idx = 0;
strings = GetObject()->GetProject()->m_top_procedures->ListNames();
new wxStaticText(m_page_general, -1, _("Procedure"), wxPoint(10,170), wxSize(80,-1), wxALIGN_RIGHT);
c4 = new wxComboBox(m_page_general, -1, wxEmptyString, wxPoint(100,170), wxSize(150,-1), 0, NULL, wxCB_READONLY | wxCB_SORT);
while (strings[idx]) {
c4->Append(*strings[idx]);
idx++;
}
delete [] strings;
}
DBTriggerEditor::~DBTriggerEditor()
{
}
bool DBTriggerEditor::TransferDataFromWindow()
{
DBTrigger *object = (DBTrigger *)GetObject();
DBObjectEditor::TransferDataFromWindow();
object->m_time = r1->GetSelection();
object->m_event_ins = c21->GetValue();
object->m_event_upd = c22->GetValue();
object->m_event_del = c23->GetValue();
object->m_type = r3->GetSelection();
object->m_procedure = c4->GetValue();
return TRUE;
}
bool DBTriggerEditor::TransferDataToWindow()
{
DBTrigger *object = (DBTrigger *)GetObject();
DBObjectEditor::TransferDataToWindow();
r1->SetSelection(object->m_time);
c21->SetValue(object->m_event_ins);
c22->SetValue(object->m_event_upd);
c23->SetValue(object->m_event_del);
r3->SetSelection(object->m_type);
c4->SetValue(object->m_procedure);
return TRUE;
}
/*
* Container
*/
DBTriggerContainer::DBTriggerContainer(DataDesignerProject *project, const wxTreeItemId& parent)
: DataDesignerContainer(project, parent, "triggers")
{
}
DBObject *DBTriggerContainer::CreateObject()
{
return new DBTrigger(GetProject(), this);
}
void DBTriggerContainer::ShowList()
{
SetList(new DBTriggerListCtrl(GetProject()->GetSplitter(), this));
DataDesignerContainer::AddObjectsToListAndShow();
}
/*
* ObjectList
*/
DBTriggerListCtrl::DBTriggerListCtrl(wxWindow *parent, DataDesignerContainer *container)
: DBObjectListCtrl(parent, container)
{
InsertColumn(1, _("Event"));
InsertColumn(2, _("Procedure"));
}
DBTriggerListCtrl::~DBTriggerListCtrl()
{
}
void DBTriggerListCtrl::SetObject(long item, DBObject *object)
{
DBTrigger *trigger = (DBTrigger *)object;
// SetItem(item, 1, trigger->m_event);
SetItem(item, 1, "n/a");
SetItem(item, 2, trigger->m_procedure);
}
syntax highlighted by Code2HTML, v. 0.9.1