///////////////////////////////////////////////////////////////////////////// // Name: schema.cc // Purpose: Data Designer Schema // Author: Daniel Horak // Modified by: // RCS-ID: $Id: schema.cc,v 1.4 2003/12/28 18:51:43 horakdan Exp $ // Copyright: (c) Daniel Horak // Licence: GPL ///////////////////////////////////////////////////////////////////////////// // ============================================================================ // declarations // ============================================================================ // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- // For compilers that support precompilation, includes "wx/wx.h". #include #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 #endif #include "config.h" #include "schema.h" #include "project.h" #include "objects/dbobject.h" #include "objects/dbmodel.h" #include "objects/dbrelation.h" #include "objects/dbmodelentity.h" #include "objects/dbmodelrelation.h" /* * DataDesignerSchema */ BEGIN_EVENT_TABLE(DataDesignerSchema, wxShapeCanvas) EVT_PAINT(DataDesignerSchema::OnPaint) END_EVENT_TABLE() DataDesignerSchema::DataDesignerSchema(wxWindow *parent, DataDesignerProject *project) : wxShapeCanvas(parent), m_scale(1.0), m_project(project) { SetScrollbars(20, 20, 200, 200); SetBackgroundColour(*wxWHITE); SetDiagram(new wxDiagram()); GetDiagram()->SetCanvas(this); } void DataDesignerSchema::AddObjects() { } void DataDesignerSchema::AddObject(DBObject *object) { wxShape *shape; if (object == NULL) { wxLogMessage("DataDesignerSchema::AddObject - object==NULL"); return; } if (object->GetShape() == NULL) object->CreateShape(); if ((shape = object->GetShape())) { shape->Show(TRUE); AddShape(shape); } } void DataDesignerSchema::OnDraw(wxDC& dc) { } void DataDesignerSchema::OnPaint(wxPaintEvent& event) { // wxLogMessage("DataDesignerSchema::OnPaint"); wxShapeCanvas::OnPaint(event); } void DataDesignerSchema::PrepareDC(wxDC& dc) { wxShapeCanvas::PrepareDC(dc); dc.SetUserScale(m_scale, m_scale); } /* * DataDesignerGlobalSchema */ DataDesignerGlobalSchema::DataDesignerGlobalSchema(wxWindow *parent, DataDesignerProject *project) : DataDesignerSchema(parent, project) { } void DataDesignerGlobalSchema::AddObjects() { // add entites m_project->m_top_entities->AddObjectsToSchema(); // add relations m_project->m_top_relations->AddObjectsToSchema(); } #if 0 void DataDesignerGlobalSchema::AddObject(DBObject *object) { DataDesignerSchema::AddObject(object); } #endif void DataDesignerGlobalSchema::OnDraw(wxDC& dc) { #ifdef ENABLE_DEBUG wxLogMessage("DataDesignerGlobalSchema::OnDraw"); #endif m_project->m_top_entities->OnDraw(dc); m_project->m_top_relations->OnDraw(dc); } /* * DataDesignerModelSchema */ DataDesignerModelSchema::DataDesignerModelSchema(wxWindow *parent, DataDesignerProject *project, DBModel *model) : DataDesignerSchema(parent, project), m_model(model) { } void DataDesignerModelSchema::AddObjects() { // add entites m_model->m_entities->AddObjectsToSchema(); m_model->m_relations->AddObjectsToSchema(); #if 0 // add relations where both sides are in this model DBRelation *rel = NULL; wxTreeItemId child; long cookie; wxShape *shape; child = m_project->GetFirstChild(m_project->m_top_relations->GetTreeItemId(), cookie); while (child.IsOk()) { rel = (DBRelation *)(((DataDesignerItemData *)m_project->GetItemData(child))->GetObject()); if (rel && rel->GetType() == DBRelationType) { if (m_model->m_entities->GetObjectByName(rel->m_parent) && m_model->m_entities->GetObjectByName(rel->m_child)) { if (rel->GetShape() == NULL) rel->CreateShape(); shape = rel->GetShape(); shape->Show(TRUE); AddShape(shape); } } else { wxLogMessage("DataDesignerModelSchema::AddObjects - object is not a relation"); } child = m_project->GetNextChild(m_project->m_top_relations->GetTreeItemId(), cookie); } #endif } #if 0 void DataDesignerModelSchema::AddObject(DBObject *object) { DataDesignerSchema::AddObject(object); } #endif void DataDesignerModelSchema::OnDraw(wxDC& dc) { #ifdef ENABLE_DEBUG wxLogMessage("DataDesignerModelSchema::OnDraw"); #endif m_model->m_entities->OnDraw(dc); m_model->m_relations->OnDraw(dc); #if 0 // add relations where both sides are in this model DBRelation *rel = NULL; wxTreeItemId child; long cookie; wxShape *shape; // draw also relations child = m_project->GetFirstChild(m_project->m_top_relations->GetTreeItemId(), cookie); while (child.IsOk()) { rel = (DBRelation *)(((DataDesignerItemData *)m_project->GetItemData(child))->GetObject()); if (rel && rel->GetType() == DBRelationType) { if (m_model->m_entities->GetObjectByName(rel->m_parent) && m_model->m_entities->GetObjectByName(rel->m_child)) { if (rel->GetShape() == NULL) rel->CreateShape(); shape = rel->GetShape(); shape->Draw(dc); } } else { wxLogMessage("DataDesignerModelSchema::AddObjects - object is not a relation"); } child = m_project->GetNextChild(m_project->m_top_relations->GetTreeItemId(), cookie); } #endif }