• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/amule/wxWidgets-2.8.12/contrib/samples/ogl/studio/
1/////////////////////////////////////////////////////////////////////////////
2// Name:        contrib/samples/ogl/studio/dialogs.cpp
3// Purpose:     Implements Studio dialogs
4// Author:      Julian Smart
5// Modified by:
6// Created:     12/07/98
7// RCS-ID:      $Id: dialogs.cpp 37440 2006-02-10 11:59:52Z ABX $
8// Copyright:   (c) Julian Smart
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12// For compilers that support precompilation, includes "wx.h".
13#include "wx/wxprec.h"
14
15#ifdef __BORLANDC__
16#pragma hdrstop
17#endif
18
19#ifndef WX_PRECOMP
20#include "wx/wx.h"
21#endif
22
23#include "dialogs.h"
24#include "doc.h"
25#include "view.h"
26#include "studio.h"
27#include "studio_resources.h"
28
29#if wxUSE_WX_RESOURCES
30
31IMPLEMENT_CLASS(csLabelEditingDialog, wxDialog)
32
33BEGIN_EVENT_TABLE(csLabelEditingDialog, wxDialog)
34    EVT_BUTTON(wxID_OK, csLabelEditingDialog::OnOK)
35END_EVENT_TABLE()
36
37csLabelEditingDialog::csLabelEditingDialog(wxWindow* parent)
38{
39    wxLoadFromResource(this, parent, _T("shape_label_dialog"));
40
41    // Accelerators
42    wxAcceleratorEntry entries[1];
43    entries[0].Set(wxACCEL_CTRL, WXK_RETURN, wxID_OK);
44    wxAcceleratorTable accel(1, entries);
45    SetAcceleratorTable(accel);
46
47    Centre();
48
49    wxTextCtrl* textCtrl = (wxTextCtrl*) FindWindow(ID_LABELTEXT);
50    wxASSERT( (textCtrl != NULL) );
51
52//    textCtrl->SetAcceleratorTable(accel);
53
54    textCtrl->SetFocus();
55}
56
57void csLabelEditingDialog::OnOK(wxCommandEvent& event)
58{
59    wxTextCtrl* textCtrl = (wxTextCtrl*) FindWindow(ID_LABELTEXT);
60    wxASSERT( (textCtrl != NULL) );
61
62    SetShapeLabel(textCtrl->GetValue());
63
64    wxDialog::OnOK(event);
65}
66
67void csLabelEditingDialog::SetShapeLabel(const wxString& label)
68{
69    wxTextCtrl* textCtrl = (wxTextCtrl*) FindWindow(ID_LABELTEXT);
70    wxASSERT( (textCtrl != NULL) );
71
72    m_label = label;
73
74    textCtrl->SetValue(label);
75}
76
77IMPLEMENT_CLASS(csSettingsDialog, wxDialog)
78
79BEGIN_EVENT_TABLE(csSettingsDialog, wxDialog)
80    EVT_BUTTON(wxID_OK, csSettingsDialog::OnOK)
81END_EVENT_TABLE()
82
83#define PROPERTY_DIALOG_WIDTH   400
84#define PROPERTY_DIALOG_HEIGHT  400
85
86// For 400x400 settings dialog, size your panels to about 375x325 in dialog editor
87
88csSettingsDialog::csSettingsDialog(wxWindow* parent):
89    wxDialog(parent, wxID_ANY, _T("Settings"), wxPoint(0, 0), wxSize(PROPERTY_DIALOG_WIDTH, PROPERTY_DIALOG_HEIGHT))
90{
91    m_generalSettings = NULL;
92    m_diagramSettings = NULL;
93
94    m_notebook = new wxNotebook(this, ID_PROPERTY_NOTEBOOK,
95         wxPoint(2, 2), wxSize(PROPERTY_DIALOG_WIDTH - 4, PROPERTY_DIALOG_HEIGHT - 4));
96
97    m_generalSettings = new wxPanel;
98
99    #ifdef  __WXDEBUG__
100    bool success =
101    #endif
102                   wxLoadFromResource(m_generalSettings, m_notebook, _T("general_settings_dialog"));
103    wxASSERT_MSG( (success), _T("Could not load general settings panel."));
104    m_notebook->AddPage(m_generalSettings, _T("General"), true);
105
106    m_diagramSettings = new wxPanel;
107
108    #ifdef  __WXDEBUG__
109    success =
110    #endif
111              wxLoadFromResource(m_diagramSettings, m_notebook, _T("diagram_settings_dialog"));
112    wxASSERT_MSG( (success), _T("Could not load diagram settings panel."));
113    m_notebook->AddPage(m_diagramSettings, _T("Diagram"));
114
115    int largeButtonWidth = 70;
116    int largeButtonHeight = 22;
117
118    wxButton* okButton = new wxButton(this, wxID_OK, _T("OK"), wxPoint(0, 0), wxSize(largeButtonWidth, largeButtonHeight));
119    wxButton* cancelButton = new wxButton(this, wxID_CANCEL, _T("Cancel"), wxPoint(0, 0), wxSize(largeButtonWidth, largeButtonHeight));
120    wxButton* helpButton = new wxButton(this, wxID_HELP, _T("Help"), wxPoint(0, 0), wxSize(largeButtonWidth, largeButtonHeight));
121
122    // Constraints for the notebook
123    wxLayoutConstraints *c = new wxLayoutConstraints;
124    c->top.SameAs     (this, wxTop, 5);
125    c->left.SameAs    (this, wxLeft, 5);
126    c->right.SameAs   (this, wxRight, 5);
127    c->bottom.SameAs  (cancelButton, wxTop, 5);
128    m_notebook->SetConstraints(c);
129
130    // Constraints for the Help button
131    c = new wxLayoutConstraints;
132    c->width.AsIs();
133    c->height.AsIs();
134    c->right.SameAs    (this, wxRight, 5);
135    c->bottom.SameAs   (this, wxBottom, 5);
136    helpButton->SetConstraints(c);
137
138    // Constraints for the Cancel button
139    c = new wxLayoutConstraints;
140    c->width.AsIs();
141    c->height.AsIs();
142    c->right.SameAs    (helpButton, wxLeft, 5);
143    c->bottom.SameAs   (this, wxBottom, 5);
144    cancelButton->SetConstraints(c);
145
146    // Constraints for the OK button
147    c = new wxLayoutConstraints;
148    c->width.AsIs();
149    c->height.AsIs();
150    c->right.SameAs    (cancelButton, wxLeft, 5);
151    c->bottom.SameAs   (this, wxBottom, 5);
152    okButton->SetConstraints(c);
153
154    okButton->SetDefault();
155    okButton->SetFocus();
156
157    Layout();
158    Centre(wxBOTH);
159}
160
161void csSettingsDialog::OnOK(wxCommandEvent& event)
162{
163    wxDialog::OnOK(event);
164}
165
166bool csSettingsDialog::TransferDataToWindow()
167{
168    wxTextCtrl* gridSpacing = (wxTextCtrl*) m_diagramSettings->FindWindow(ID_GRID_SPACING);
169    wxASSERT_MSG( (gridSpacing != (wxTextCtrl*) NULL), _T("Could not find grid spacing control."));
170
171    wxChoice* gridStyle = (wxChoice*) m_diagramSettings->FindWindow(ID_GRID_STYLE);
172    wxASSERT_MSG( (gridStyle != (wxChoice*) NULL), _T("Could not find grid style control."));
173
174    gridStyle->SetSelection(wxGetApp().GetGridStyle());
175
176    wxString str;
177    str.Printf(_T("%d"), wxGetApp().GetGridSpacing());
178    gridSpacing->SetValue(str);
179
180    return true;
181}
182
183bool csSettingsDialog::TransferDataFromWindow()
184{
185    wxTextCtrl* gridSpacing = (wxTextCtrl*) m_diagramSettings->FindWindow(ID_GRID_SPACING);
186    wxASSERT_MSG( (gridSpacing != (wxTextCtrl*) NULL), _T("Could not find grid spacing control."));
187
188    wxChoice* gridStyle = (wxChoice*) m_diagramSettings->FindWindow(ID_GRID_STYLE);
189    wxASSERT_MSG( (gridStyle != (wxChoice*) NULL), _T("Could not find grid style control."));
190
191    wxGetApp().SetGridStyle(gridStyle->GetSelection());
192    wxString str = gridSpacing->GetValue();
193    long grid_spacing;
194    str.ToLong( &grid_spacing);
195    wxGetApp().SetGridSpacing(grid_spacing);
196
197    if (wxGetApp().GetGridStyle() == csGRID_STYLE_DOTTED)
198    {
199        wxMessageBox(_T("Dotted grid style not yet implemented."), _T("Studio"), wxICON_EXCLAMATION);
200        return false;
201    }
202
203    // Apply settings to all open diagram documents
204    wxObjectList::compatibility_iterator node = wxGetApp().GetDocManager()->GetDocuments().GetFirst();
205    while (node)
206    {
207        wxDocument* doc = (wxDocument*) node->GetData();
208        if (doc->IsKindOf(CLASSINFO(csDiagramDocument)))
209        {
210            csDiagramDocument* diagramDoc = (csDiagramDocument*) doc;
211            wxDiagram* diagram = (wxDiagram*) diagramDoc->GetDiagram();
212
213            diagram->SetGridSpacing((double) wxGetApp().GetGridSpacing());
214            switch (wxGetApp().GetGridStyle())
215            {
216                case csGRID_STYLE_NONE:
217                {
218                    diagram->SetSnapToGrid(false);
219                    break;
220                }
221                case csGRID_STYLE_INVISIBLE:
222                {
223                    diagram->SetSnapToGrid(true);
224                    break;
225                }
226                case csGRID_STYLE_DOTTED:
227                {
228                    // TODO (not implemented in OGL)
229                    break;
230                }
231            }
232        }
233        node = node->GetNext();
234    }
235
236    return true;
237}
238
239/*
240 * Shape properties dialog (tabbed)
241 */
242
243
244IMPLEMENT_CLASS(csShapePropertiesDialog, wxDialog)
245
246BEGIN_EVENT_TABLE(csShapePropertiesDialog, wxDialog)
247    EVT_BUTTON(wxID_OK, csShapePropertiesDialog::OnOK)
248END_EVENT_TABLE()
249
250#define SHAPE_PROPERTY_DIALOG_WIDTH   400
251#define SHAPE_PROPERTY_DIALOG_HEIGHT  400
252
253// For 400x400 settings dialog, size your panels to about 375x325 in dialog editor
254
255csShapePropertiesDialog::csShapePropertiesDialog(wxWindow* parent, const wxString& title,
256    wxPanel* attributeDialog, const wxString& attributeDialogName):
257    wxDialog(parent, wxID_ANY, title, wxPoint(0, 0), wxSize(SHAPE_PROPERTY_DIALOG_WIDTH, SHAPE_PROPERTY_DIALOG_HEIGHT))
258{
259    m_attributeDialog = attributeDialog;
260    m_alternativeAttributeDialog = NULL;
261    m_generalPropertiesDialog = NULL;
262
263    m_notebook = new wxNotebook(this, ID_SHAPE_PROPERTY_NOTEBOOK,
264         wxPoint(2, 2), wxSize(SHAPE_PROPERTY_DIALOG_WIDTH - 4, SHAPE_PROPERTY_DIALOG_HEIGHT - 4));
265
266    m_generalPropertiesDialog = new csGeneralShapePropertiesDialog;
267    #ifdef  __WXDEBUG__
268    bool success =
269    #endif
270                   wxLoadFromResource(m_generalPropertiesDialog, m_notebook, _T("general_shape_properties_dialog"));
271    wxASSERT_MSG( (success), _T("Could not load general properties panel."));
272    m_notebook->AddPage(m_generalPropertiesDialog, _T("General"));
273
274    if (!wxLoadFromResource(m_attributeDialog, m_notebook, attributeDialogName))
275    {
276        wxMessageBox(_T("Could not load the attribute dialog for this shape."), _T("Studio"), wxICON_EXCLAMATION);
277        delete m_attributeDialog;
278        m_attributeDialog = NULL;
279    }
280    else
281    {
282        m_notebook->AddPage(m_attributeDialog, _T("Attributes"));
283    }
284
285    // Try the alternative dialog (test code)
286    wxString str(attributeDialogName);
287    str += _T("1");
288    m_alternativeAttributeDialog = new wxPanel;
289    if (wxLoadFromResource(m_alternativeAttributeDialog, m_notebook, str))
290    {
291        m_notebook->AddPage(m_alternativeAttributeDialog, _T("Attributes (alternative)"));
292    }
293    else
294    {
295        delete m_alternativeAttributeDialog;
296        m_alternativeAttributeDialog = NULL;
297    }
298
299    int largeButtonWidth = 70;
300    int largeButtonHeight = 22;
301
302    wxButton* okButton = new wxButton(this, wxID_OK, _T("OK"), wxPoint(0, 0), wxSize(largeButtonWidth, largeButtonHeight));
303    wxButton* cancelButton = new wxButton(this, wxID_CANCEL, _T("Cancel"), wxPoint(0, 0), wxSize(largeButtonWidth, largeButtonHeight));
304    wxButton* helpButton = new wxButton(this, wxID_HELP, _T("Help"), wxPoint(0, 0), wxSize(largeButtonWidth, largeButtonHeight));
305
306    // Constraints for the notebook
307    wxLayoutConstraints *c = new wxLayoutConstraints;
308    c->top.SameAs     (this, wxTop, 5);
309    c->left.SameAs    (this, wxLeft, 5);
310    c->right.SameAs   (this, wxRight, 5);
311    c->bottom.SameAs  (helpButton, wxTop, 5);
312    m_notebook->SetConstraints(c);
313
314    // Constraints for the Help button
315    c = new wxLayoutConstraints;
316    c->width.AsIs();
317    c->height.AsIs();
318    c->right.SameAs    (this, wxRight, 5);
319    c->bottom.SameAs   (this, wxBottom, 5);
320    helpButton->SetConstraints(c);
321
322    // Constraints for the Cancel button
323    c = new wxLayoutConstraints;
324    c->width.AsIs();
325    c->height.AsIs();
326    c->right.SameAs    (helpButton, wxLeft, 5);
327    c->bottom.SameAs   (this, wxBottom, 5);
328    cancelButton->SetConstraints(c);
329
330    // Constraints for the OK button
331    c = new wxLayoutConstraints;
332    c->width.AsIs();
333    c->height.AsIs();
334    c->right.SameAs    (cancelButton, wxLeft, 5);
335    c->bottom.SameAs   (this, wxBottom, 5);
336    okButton->SetConstraints(c);
337
338    okButton->SetDefault();
339    okButton->SetFocus();
340
341    SetDefaults();
342
343    Layout();
344    Centre(wxBOTH);
345}
346
347void csShapePropertiesDialog::OnOK(wxCommandEvent& event)
348{
349    wxTextCtrl* textCtrl = (wxTextCtrl*) m_generalPropertiesDialog->FindWindow(ID_LABELTEXT);
350    wxASSERT( (textCtrl != NULL) );
351
352    m_generalPropertiesDialog->SetShapeLabel(textCtrl->GetValue());
353
354    wxDialog::OnOK(event);
355}
356
357// Set some suitable defaults in the attribute dialogs (in the first instance,
358// just set all wxChoices to the first element)
359void csShapePropertiesDialog::SetDefaults()
360{
361    if (!m_attributeDialog)
362        return;
363
364    wxWindowList::compatibility_iterator node = m_attributeDialog->GetChildren().GetFirst();
365    while (node)
366    {
367        wxWindow* child = (wxWindow*) node->GetData();
368        if (child->IsKindOf(CLASSINFO(wxChoice)))
369        {
370            wxChoice* choice = (wxChoice*) child;
371            choice->SetSelection(0);
372        }
373        node = node->GetNext();
374    }
375
376    if (!m_alternativeAttributeDialog)
377        return;
378
379    node = m_alternativeAttributeDialog->GetChildren().GetFirst();
380    while (node)
381    {
382        wxWindow* child = (wxWindow*) node->GetData();
383        if (child->IsKindOf(CLASSINFO(wxChoice)))
384        {
385            wxChoice* choice = (wxChoice*) child;
386            choice->SetSelection(0);
387        }
388        node = node->GetNext();
389    }
390}
391
392/*
393 * csGeneralShapePropertiesDialog
394 */
395
396IMPLEMENT_CLASS(csGeneralShapePropertiesDialog, wxPanel)
397
398BEGIN_EVENT_TABLE(csGeneralShapePropertiesDialog, wxPanel)
399END_EVENT_TABLE()
400
401csGeneralShapePropertiesDialog::csGeneralShapePropertiesDialog()
402{
403}
404
405void csGeneralShapePropertiesDialog::SetShapeLabel(const wxString& label)
406{
407    wxTextCtrl* textCtrl = (wxTextCtrl*) FindWindow(ID_LABELTEXT);
408    wxASSERT( (textCtrl != NULL) );
409
410    m_label = label;
411
412    textCtrl->SetValue(label);
413}
414
415#endif // wxUSE_WX_RESOURCES
416
417/*
418 * csThinRectangleDialog
419 */
420
421IMPLEMENT_CLASS(csThinRectangleDialog, wxPanel)
422
423BEGIN_EVENT_TABLE(csThinRectangleDialog, wxPanel)
424END_EVENT_TABLE()
425
426csThinRectangleDialog::csThinRectangleDialog()
427{
428}
429
430/*
431 * csWideRectangleDialog
432 */
433
434IMPLEMENT_CLASS(csWideRectangleDialog, wxPanel)
435
436BEGIN_EVENT_TABLE(csWideRectangleDialog, wxPanel)
437END_EVENT_TABLE()
438
439csWideRectangleDialog::csWideRectangleDialog()
440{
441}
442
443/*
444 * csTriangleDialog
445 */
446
447IMPLEMENT_CLASS(csTriangleDialog, wxPanel)
448
449BEGIN_EVENT_TABLE(csTriangleDialog, wxPanel)
450END_EVENT_TABLE()
451
452csTriangleDialog::csTriangleDialog()
453{
454}
455
456/*
457 * csSemiCircleDialog
458 */
459
460IMPLEMENT_CLASS(csSemiCircleDialog, wxPanel)
461
462BEGIN_EVENT_TABLE(csSemiCircleDialog, wxPanel)
463END_EVENT_TABLE()
464
465csSemiCircleDialog::csSemiCircleDialog()
466{
467}
468
469/*
470 * csCircleDialog
471 */
472
473IMPLEMENT_CLASS(csCircleDialog, wxPanel)
474
475BEGIN_EVENT_TABLE(csCircleDialog, wxPanel)
476END_EVENT_TABLE()
477
478csCircleDialog::csCircleDialog()
479{
480}
481
482/*
483 * csCircleShadowDialog
484 */
485
486IMPLEMENT_CLASS(csCircleShadowDialog, wxPanel)
487
488BEGIN_EVENT_TABLE(csCircleShadowDialog, wxPanel)
489END_EVENT_TABLE()
490
491csCircleShadowDialog::csCircleShadowDialog()
492{
493}
494
495/*
496 * csOctagonDialog
497 */
498
499IMPLEMENT_CLASS(csOctagonDialog, wxPanel)
500
501BEGIN_EVENT_TABLE(csOctagonDialog, wxPanel)
502END_EVENT_TABLE()
503
504csOctagonDialog::csOctagonDialog()
505{
506}
507
508/*
509 * csGroupDialog
510 */
511
512IMPLEMENT_CLASS(csGroupDialog, wxPanel)
513
514BEGIN_EVENT_TABLE(csGroupDialog, wxPanel)
515END_EVENT_TABLE()
516
517csGroupDialog::csGroupDialog()
518{
519}
520
521/*
522 * csTextBoxDialog
523 */
524
525IMPLEMENT_CLASS(csTextBoxDialog, wxPanel)
526
527BEGIN_EVENT_TABLE(csTextBoxDialog, wxPanel)
528END_EVENT_TABLE()
529
530csTextBoxDialog::csTextBoxDialog()
531{
532}
533