X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dbeac4bd72c8604616919c89f0450899b182313a..306dfc2b3d49ca45445bdfb2164fe1eea45ab321:/utils/ogl/samples/studio/dialogs.cpp diff --git a/utils/ogl/samples/studio/dialogs.cpp b/utils/ogl/samples/studio/dialogs.cpp new file mode 100644 index 0000000000..9fef6d120f --- /dev/null +++ b/utils/ogl/samples/studio/dialogs.cpp @@ -0,0 +1,525 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: dialogs.cpp +// Purpose: Implements Studio dialogs +// Author: Julian Smart +// Modified by: +// Created: 12/07/98 +// RCS-ID: $Id$ +// Copyright: (c) Julian Smart +// Licence: +///////////////////////////////////////////////////////////////////////////// + +#ifdef __GNUG__ +// #pragma implementation +#endif + +// For compilers that support precompilation, includes "wx.h". +#include + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#ifndef WX_PRECOMP +#include +#endif + +#include +#include "dialogs.h" +#include "doc.h" +#include "view.h" +#include "studio.h" +#include "studio_resources.h" + +IMPLEMENT_CLASS(csLabelEditingDialog, wxDialog) + +BEGIN_EVENT_TABLE(csLabelEditingDialog, wxDialog) + EVT_BUTTON(wxID_OK, csLabelEditingDialog::OnOK) +END_EVENT_TABLE() + +csLabelEditingDialog::csLabelEditingDialog(wxWindow* parent) +{ + LoadFromResource(parent, "shape_label_dialog"); + + // Accelerators + wxAcceleratorEntry entries[1]; + entries[0].Set(wxACCEL_CTRL, WXK_RETURN, wxID_OK); + wxAcceleratorTable accel(1, entries); + SetAcceleratorTable(accel); + + Centre(); + + wxTextCtrl* textCtrl = (wxTextCtrl*) FindWindow(ID_LABELTEXT); + wxASSERT( (textCtrl != NULL) ); + +// textCtrl->SetAcceleratorTable(accel); + + textCtrl->SetFocus(); +} + +void csLabelEditingDialog::OnOK(wxCommandEvent& event) +{ + wxTextCtrl* textCtrl = (wxTextCtrl*) FindWindow(ID_LABELTEXT); + wxASSERT( (textCtrl != NULL) ); + + SetShapeLabel(textCtrl->GetValue()); + + wxDialog::OnOK(event); +} + +void csLabelEditingDialog::SetShapeLabel(const wxString& label) +{ + wxTextCtrl* textCtrl = (wxTextCtrl*) FindWindow(ID_LABELTEXT); + wxASSERT( (textCtrl != NULL) ); + + m_label = label; + + textCtrl->SetValue(label); +} + +IMPLEMENT_CLASS(csSettingsDialog, wxDialog) + +BEGIN_EVENT_TABLE(csSettingsDialog, wxDialog) + EVT_BUTTON(wxID_OK, csSettingsDialog::OnOK) +END_EVENT_TABLE() + +#define PROPERTY_DIALOG_WIDTH 400 +#define PROPERTY_DIALOG_HEIGHT 400 + +// For 400x400 settings dialog, size your panels to about 375x325 in dialog editor + +csSettingsDialog::csSettingsDialog(wxWindow* parent): + wxDialog(parent, -1, "Settings", wxPoint(0, 0), wxSize(PROPERTY_DIALOG_WIDTH, PROPERTY_DIALOG_HEIGHT)) +{ + m_generalSettings = NULL; + m_diagramSettings = NULL; + + m_notebook = new wxNotebook(this, ID_PROPERTY_NOTEBOOK, + wxPoint(2, 2), wxSize(PROPERTY_DIALOG_WIDTH - 4, PROPERTY_DIALOG_HEIGHT - 4)); + + m_generalSettings = new wxPanel; + + bool success = m_generalSettings->LoadFromResource(m_notebook, "general_settings_dialog"); + wxASSERT_MSG( (success), "Could not load general settings panel."); + m_notebook->AddPage(m_generalSettings, "General", TRUE); + + m_diagramSettings = new wxPanel; + + success = m_diagramSettings->LoadFromResource(m_notebook, "diagram_settings_dialog"); + wxASSERT_MSG( (success), "Could not load diagram settings panel."); + m_notebook->AddPage(m_diagramSettings, "Diagram"); + + int largeButtonWidth = 70; + int largeButtonHeight = 22; + + wxButton* okButton = new wxButton(this, wxID_OK, "OK", wxPoint(0, 0), wxSize(largeButtonWidth, largeButtonHeight)); + wxButton* cancelButton = new wxButton(this, wxID_CANCEL, "Cancel", wxPoint(0, 0), wxSize(largeButtonWidth, largeButtonHeight)); + wxButton* helpButton = new wxButton(this, wxID_HELP, "Help", wxPoint(0, 0), wxSize(largeButtonWidth, largeButtonHeight)); + + // Constraints for the notebook + wxLayoutConstraints *c = new wxLayoutConstraints; + c->top.SameAs (this, wxTop, 5); + c->left.SameAs (this, wxLeft, 5); + c->right.SameAs (this, wxRight, 5); + c->bottom.SameAs (cancelButton, wxTop, 5); + m_notebook->SetConstraints(c); + + // Constraints for the Help button + c = new wxLayoutConstraints; + c->width.AsIs(); + c->height.AsIs(); + c->right.SameAs (this, wxRight, 5); + c->bottom.SameAs (this, wxBottom, 5); + helpButton->SetConstraints(c); + + // Constraints for the Cancel button + c = new wxLayoutConstraints; + c->width.AsIs(); + c->height.AsIs(); + c->right.SameAs (helpButton, wxLeft, 5); + c->bottom.SameAs (this, wxBottom, 5); + cancelButton->SetConstraints(c); + + // Constraints for the OK button + c = new wxLayoutConstraints; + c->width.AsIs(); + c->height.AsIs(); + c->right.SameAs (cancelButton, wxLeft, 5); + c->bottom.SameAs (this, wxBottom, 5); + okButton->SetConstraints(c); + + okButton->SetDefault(); + okButton->SetFocus(); + + Layout(); + Centre(wxBOTH); +} + +void csSettingsDialog::OnOK(wxCommandEvent& event) +{ + wxDialog::OnOK(event); +} + +bool csSettingsDialog::TransferDataToWindow() +{ + wxTextCtrl* gridSpacing = (wxTextCtrl*) m_diagramSettings->FindWindow(ID_GRID_SPACING); + wxASSERT_MSG( (gridSpacing != (wxTextCtrl*) NULL), "Could not find grid spacing control."); + + wxChoice* gridStyle = (wxChoice*) m_diagramSettings->FindWindow(ID_GRID_STYLE); + wxASSERT_MSG( (gridStyle != (wxChoice*) NULL), "Could not find grid style control."); + + gridStyle->SetSelection(wxGetApp().GetGridStyle()); + + wxString str; + str.Printf("%d", wxGetApp().GetGridSpacing()); + gridSpacing->SetValue(str); + + return TRUE; +} + +bool csSettingsDialog::TransferDataFromWindow() +{ + wxTextCtrl* gridSpacing = (wxTextCtrl*) m_diagramSettings->FindWindow(ID_GRID_SPACING); + wxASSERT_MSG( (gridSpacing != (wxTextCtrl*) NULL), "Could not find grid spacing control."); + + wxChoice* gridStyle = (wxChoice*) m_diagramSettings->FindWindow(ID_GRID_STYLE); + wxASSERT_MSG( (gridStyle != (wxChoice*) NULL), "Could not find grid style control."); + + wxGetApp().SetGridStyle(gridStyle->GetSelection()); + wxGetApp().SetGridSpacing(atoi(gridSpacing->GetValue())); + + if (wxGetApp().GetGridStyle() == csGRID_STYLE_DOTTED) + { + wxMessageBox("Dotted grid style not yet implemented.", "Studio", wxICON_EXCLAMATION); + return FALSE; + } + + // Apply settings to all open diagram documents + wxNode* node = wxGetApp().GetDocManager()->GetDocuments().First(); + while (node) + { + wxDocument* doc = (wxDocument*) node->Data(); + if (doc->IsKindOf(CLASSINFO(csDiagramDocument))) + { + csDiagramDocument* diagramDoc = (csDiagramDocument*) doc; + wxDiagram* diagram = (wxDiagram*) diagramDoc->GetDiagram(); + + diagram->SetGridSpacing((double) wxGetApp().GetGridSpacing()); + switch (wxGetApp().GetGridStyle()) + { + case csGRID_STYLE_NONE: + { + diagram->SetSnapToGrid(FALSE); + break; + } + case csGRID_STYLE_INVISIBLE: + { + diagram->SetSnapToGrid(TRUE); + break; + } + case csGRID_STYLE_DOTTED: + { + // TODO (not implemented in OGL) + break; + } + } + } + node = node->Next(); + } + + return TRUE; +} + +/* + * Shape properties dialog (tabbed) + */ + + +IMPLEMENT_CLASS(csShapePropertiesDialog, wxDialog) + +BEGIN_EVENT_TABLE(csShapePropertiesDialog, wxDialog) + EVT_BUTTON(wxID_OK, csShapePropertiesDialog::OnOK) +END_EVENT_TABLE() + +#define SHAPE_PROPERTY_DIALOG_WIDTH 400 +#define SHAPE_PROPERTY_DIALOG_HEIGHT 400 + +// For 400x400 settings dialog, size your panels to about 375x325 in dialog editor + +csShapePropertiesDialog::csShapePropertiesDialog(wxWindow* parent, const wxString& title, + wxPanel* attributeDialog, const wxString& attributeDialogName): + wxDialog(parent, -1, title, wxPoint(0, 0), wxSize(SHAPE_PROPERTY_DIALOG_WIDTH, SHAPE_PROPERTY_DIALOG_HEIGHT)) +{ + m_attributeDialog = attributeDialog; + m_alternativeAttributeDialog = NULL; + m_generalPropertiesDialog = NULL; + + m_notebook = new wxNotebook(this, ID_SHAPE_PROPERTY_NOTEBOOK, + wxPoint(2, 2), wxSize(SHAPE_PROPERTY_DIALOG_WIDTH - 4, SHAPE_PROPERTY_DIALOG_HEIGHT - 4)); + + m_generalPropertiesDialog = new csGeneralShapePropertiesDialog; + bool success = m_generalPropertiesDialog->LoadFromResource(m_notebook, "general_shape_properties_dialog"); + wxASSERT_MSG( (success), "Could not load general properties panel."); + m_notebook->AddPage(m_generalPropertiesDialog, "General"); + + success = m_attributeDialog->LoadFromResource(m_notebook, attributeDialogName); + if (!success) + { + wxMessageBox("Could not load the attribute dialog for this shape.", "Studio", wxICON_EXCLAMATION); + delete m_attributeDialog; + m_attributeDialog = NULL; + } + else + { + m_notebook->AddPage(m_attributeDialog, "Attributes"); + } + + // Try the alternative dialog (test code) + wxString str(attributeDialogName); + str += "1"; + m_alternativeAttributeDialog = new wxPanel; + success = m_alternativeAttributeDialog->LoadFromResource(m_notebook, str); + if (success) + { + m_notebook->AddPage(m_alternativeAttributeDialog, "Attributes (alternative)"); + } + else + { + delete m_alternativeAttributeDialog; + m_alternativeAttributeDialog = NULL; + } + + int largeButtonWidth = 70; + int largeButtonHeight = 22; + + wxButton* okButton = new wxButton(this, wxID_OK, "OK", wxPoint(0, 0), wxSize(largeButtonWidth, largeButtonHeight)); + wxButton* cancelButton = new wxButton(this, wxID_CANCEL, "Cancel", wxPoint(0, 0), wxSize(largeButtonWidth, largeButtonHeight)); + wxButton* helpButton = new wxButton(this, wxID_HELP, "Help", wxPoint(0, 0), wxSize(largeButtonWidth, largeButtonHeight)); + + // Constraints for the notebook + wxLayoutConstraints *c = new wxLayoutConstraints; + c->top.SameAs (this, wxTop, 5); + c->left.SameAs (this, wxLeft, 5); + c->right.SameAs (this, wxRight, 5); + c->bottom.SameAs (helpButton, wxTop, 5); + m_notebook->SetConstraints(c); + + // Constraints for the Help button + c = new wxLayoutConstraints; + c->width.AsIs(); + c->height.AsIs(); + c->right.SameAs (this, wxRight, 5); + c->bottom.SameAs (this, wxBottom, 5); + helpButton->SetConstraints(c); + + // Constraints for the Cancel button + c = new wxLayoutConstraints; + c->width.AsIs(); + c->height.AsIs(); + c->right.SameAs (helpButton, wxLeft, 5); + c->bottom.SameAs (this, wxBottom, 5); + cancelButton->SetConstraints(c); + + // Constraints for the OK button + c = new wxLayoutConstraints; + c->width.AsIs(); + c->height.AsIs(); + c->right.SameAs (cancelButton, wxLeft, 5); + c->bottom.SameAs (this, wxBottom, 5); + okButton->SetConstraints(c); + + okButton->SetDefault(); + okButton->SetFocus(); + + SetDefaults(); + + Layout(); + Centre(wxBOTH); +} + +void csShapePropertiesDialog::OnOK(wxCommandEvent& event) +{ + wxTextCtrl* textCtrl = (wxTextCtrl*) m_generalPropertiesDialog->FindWindow(ID_LABELTEXT); + wxASSERT( (textCtrl != NULL) ); + + m_generalPropertiesDialog->SetShapeLabel(textCtrl->GetValue()); + + wxDialog::OnOK(event); +} + +// Set some suitable defaults in the attribute dialogs (in the first instance, +// just set all wxChoices to the first element) +void csShapePropertiesDialog::SetDefaults() +{ + if (!m_attributeDialog) + return; + + wxNode* node = m_attributeDialog->GetChildren().First(); + while (node) + { + wxWindow* child = (wxWindow*) node->Data(); + if (child->IsKindOf(CLASSINFO(wxChoice))) + { + wxChoice* choice = (wxChoice*) child; + choice->SetSelection(0); + } + node = node->Next(); + } + + if (!m_alternativeAttributeDialog) + return; + + node = m_alternativeAttributeDialog->GetChildren().First(); + while (node) + { + wxWindow* child = (wxWindow*) node->Data(); + if (child->IsKindOf(CLASSINFO(wxChoice))) + { + wxChoice* choice = (wxChoice*) child; + choice->SetSelection(0); + } + node = node->Next(); + } +} + +/* + * csGeneralShapePropertiesDialog + */ + +IMPLEMENT_CLASS(csGeneralShapePropertiesDialog, wxPanel) + +BEGIN_EVENT_TABLE(csGeneralShapePropertiesDialog, wxPanel) +END_EVENT_TABLE() + +csGeneralShapePropertiesDialog::csGeneralShapePropertiesDialog() +{ +} + +void csGeneralShapePropertiesDialog::SetShapeLabel(const wxString& label) +{ + wxTextCtrl* textCtrl = (wxTextCtrl*) FindWindow(ID_LABELTEXT); + wxASSERT( (textCtrl != NULL) ); + + m_label = label; + + textCtrl->SetValue(label); +} + +/* + * csThinRectangleDialog + */ + +IMPLEMENT_CLASS(csThinRectangleDialog, wxPanel) + +BEGIN_EVENT_TABLE(csThinRectangleDialog, wxPanel) +END_EVENT_TABLE() + +csThinRectangleDialog::csThinRectangleDialog() +{ +} + +/* + * csWideRectangleDialog + */ + +IMPLEMENT_CLASS(csWideRectangleDialog, wxPanel) + +BEGIN_EVENT_TABLE(csWideRectangleDialog, wxPanel) +END_EVENT_TABLE() + +csWideRectangleDialog::csWideRectangleDialog() +{ +} + +/* + * csTriangleDialog + */ + +IMPLEMENT_CLASS(csTriangleDialog, wxPanel) + +BEGIN_EVENT_TABLE(csTriangleDialog, wxPanel) +END_EVENT_TABLE() + +csTriangleDialog::csTriangleDialog() +{ +} + +/* + * csSemiCircleDialog + */ + +IMPLEMENT_CLASS(csSemiCircleDialog, wxPanel) + +BEGIN_EVENT_TABLE(csSemiCircleDialog, wxPanel) +END_EVENT_TABLE() + +csSemiCircleDialog::csSemiCircleDialog() +{ +} + +/* + * csCircleDialog + */ + +IMPLEMENT_CLASS(csCircleDialog, wxPanel) + +BEGIN_EVENT_TABLE(csCircleDialog, wxPanel) +END_EVENT_TABLE() + +csCircleDialog::csCircleDialog() +{ +} + +/* + * csCircleShadowDialog + */ + +IMPLEMENT_CLASS(csCircleShadowDialog, wxPanel) + +BEGIN_EVENT_TABLE(csCircleShadowDialog, wxPanel) +END_EVENT_TABLE() + +csCircleShadowDialog::csCircleShadowDialog() +{ +} + +/* + * csOctagonDialog + */ + +IMPLEMENT_CLASS(csOctagonDialog, wxPanel) + +BEGIN_EVENT_TABLE(csOctagonDialog, wxPanel) +END_EVENT_TABLE() + +csOctagonDialog::csOctagonDialog() +{ +} + +/* + * csGroupDialog + */ + +IMPLEMENT_CLASS(csGroupDialog, wxPanel) + +BEGIN_EVENT_TABLE(csGroupDialog, wxPanel) +END_EVENT_TABLE() + +csGroupDialog::csGroupDialog() +{ +} + +/* + * csTextBoxDialog + */ + +IMPLEMENT_CLASS(csTextBoxDialog, wxPanel) + +BEGIN_EVENT_TABLE(csTextBoxDialog, wxPanel) +END_EVENT_TABLE() + +csTextBoxDialog::csTextBoxDialog() +{ +} + +