00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "a2dprec.h"
00012
00013 #ifdef __BORLANDC__
00014 #pragma hdrstop
00015 #endif
00016
00017 #ifndef WX_PRECOMP
00018 #include "wx/wx.h"
00019 #endif
00020
00021
00022 #include "wx/editor/strucdlg.h"
00023 #include "wx/canvas/canmod.h"
00024
00025 #define STRUCT_HSIZE 220
00026 #define STRUCT_VSIZE 400
00027
00028 const int GROUP_BUTTON_OK = wxID_HIGHEST + 5401 ;
00029 const int GROUP_BUTTON_CANCEL = wxID_HIGHEST + 5402 ;
00030 const int GROUP_BUTTON_SHOW = wxID_HIGHEST + 5403 ;
00031 const int GROUP_UPDATE_DIALOG = wxID_HIGHEST + 5404 ;
00032 const int GROUP_BUTTON_APPLY = wxID_HIGHEST + 5405 ;
00033 const int GROUP_DCLICK = wxID_HIGHEST + 5406 ;
00034
00035
00036 BEGIN_EVENT_TABLE(a2dCanvasObjectsDialog, wxDialog)
00037 EVT_BUTTON (GROUP_BUTTON_OK, a2dCanvasObjectsDialog::CmOk)
00038 EVT_BUTTON (GROUP_BUTTON_CANCEL , a2dCanvasObjectsDialog::CmCancel)
00039 EVT_BUTTON (GROUP_BUTTON_APPLY , a2dCanvasObjectsDialog::CmApply)
00040 EVT_CLOSE (a2dCanvasObjectsDialog::OnCloseWindow)
00041 EVT_CHANGED_DOCUMENT( a2dCanvasObjectsDialog::OnChangedDocument )
00042 EVT_LISTBOX_DCLICK( GROUP_DCLICK, a2dCanvasObjectsDialog::CmApply )
00043 EVT_DO( a2dCanvasObjectsDialog::OnDoEvent )
00044 EVT_COM_EVENT( a2dCanvasObjectsDialog::OnComEvent )
00045 END_EVENT_TABLE()
00046
00047
00048 a2dCanvasObjectsDialog::a2dCanvasObjectsDialog(wxWindow* parent, a2dCanvasDocument* document, bool modal, bool structOnly, long style)
00049 {
00050 a2dDocviewGlobals->GetEventDistributer()->Register( this );
00051
00052 m_parent = parent;
00053 m_document = document;
00054 m_modal = modal;
00055
00056 Create( parent, GROUP_UPDATE_DIALOG, _T("view groups"), wxPoint(0,0), wxSize(STRUCT_HSIZE,STRUCT_VSIZE), style, _T("Group dialog") );
00057
00058 m_structurelist = NULL;
00059
00060 Init( document );
00061
00062 Centre(wxBOTH);
00063
00064
00065 if (m_structurelist->size())
00066 m_listbox->SetSelection(0,true);
00067 m_object = NULL;
00068 }
00069
00070 a2dCanvasObjectsDialog::a2dCanvasObjectsDialog(wxWindow* parent, a2dCanvasObjectList* total, bool modal, long style)
00071 {
00072 a2dDocviewGlobals->GetEventDistributer()->Register( this );
00073
00074 m_parent = parent;
00075 m_document = NULL;
00076 m_modal = modal;
00077
00078 Create( parent, GROUP_UPDATE_DIALOG, _T("view groups"), wxPoint(0,0), wxSize(STRUCT_HSIZE,STRUCT_VSIZE), style, _T("Group dialog") );
00079
00080 m_structurelist = NULL;
00081
00082 Init( total );
00083
00084 Centre(wxBOTH);
00085
00086
00087 if (m_structurelist->size())
00088 m_listbox->SetSelection(0,true);
00089 m_object = NULL;
00090 }
00091
00092 bool a2dCanvasObjectsDialog::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style, const wxString& name )
00093 {
00094 m_parent = parent;
00095
00096 wxDialog::Create( parent, id, caption, pos, size, style, name );
00097
00098 m_panel = new wxPanel(this,-1,wxDefaultPosition,wxDefaultSize,0,_T("panel"));
00099 m_gb = new wxStaticBox( m_panel,-1,_T("Objects"),wxDefaultPosition,wxDefaultSize,0,_T("objectbox"));
00100 m_mess1 = new wxStaticText( m_panel,-1,_T("nop"));
00101 m_mess2 = new wxStaticText( m_panel,-1,_T("Select an Object in the list above"));
00102 m_listbox = new wxListBox( m_panel,-1,wxDefaultPosition,wxDefaultSize,0,NULL,wxLB_NEEDED_SB | wxLB_SINGLE);
00103
00104 if ( m_modal )
00105 {
00106 m_button1 = new wxButton( m_panel,GROUP_BUTTON_OK, _("Ok"),wxDefaultPosition,wxSize(55,20));
00107 m_button2 = new wxButton( m_panel,GROUP_BUTTON_CANCEL, _("Cancel"),wxDefaultPosition,wxSize(55,20));
00108 }
00109 else
00110 {
00111 m_button1 = new wxButton( m_panel,GROUP_BUTTON_OK, _("Hide"),wxDefaultPosition,wxSize(55,20));
00112 m_button2 = new wxButton( m_panel,GROUP_BUTTON_APPLY, _("Apply"),wxDefaultPosition,wxSize(55,20));
00113 }
00114
00115
00116 wxLayoutConstraints *c1 = new wxLayoutConstraints;
00117 c1->left.SameAs (this, wxLeft,1);
00118 c1->top.SameAs (this, wxTop,1);
00119 c1->right.SameAs (this, wxRight, 1);
00120 c1->bottom.SameAs (this, wxBottom, 1);
00121 m_panel->SetConstraints(c1);
00122
00123
00124 wxLayoutConstraints *c3 = new wxLayoutConstraints;
00125 c3->left.SameAs (m_panel, wxLeft,2);
00126 c3->top.SameAs (m_panel, wxTop,2);
00127 c3->right.LeftOf (m_button2,5);
00128 c3->bottom.SameAs (m_mess2, wxTop,2);
00129 m_gb->SetConstraints(c3);
00130
00131
00132 wxLayoutConstraints *c2 = new wxLayoutConstraints;
00133 c2->left.SameAs (m_gb, wxLeft,10);
00134 c2->top.SameAs (m_gb, wxTop,15);
00135 c2->height.AsIs();
00136 c2->width.AsIs();
00137 m_mess1->SetConstraints(c2);
00138
00139
00140 wxLayoutConstraints *c9 = new wxLayoutConstraints;
00141 c9->left.SameAs (m_gb, wxLeft,12);
00142 c9->top.SameAs (m_mess1, wxBottom,2);
00143 c9->right.SameAs (m_gb, wxRight,12);
00144 c9->bottom.SameAs (m_gb, wxBottom,12);
00145 m_listbox->SetConstraints(c9);
00146
00147
00148 wxLayoutConstraints *c4 = new wxLayoutConstraints;
00149 c4->left.RightOf (m_gb, 5);
00150 c4->top.SameAs (m_gb, wxTop,5);
00151 c4->height.AsIs();
00152 c4->width.AsIs();
00153 m_button1->SetConstraints(c4);
00154
00155
00156
00157
00158 wxLayoutConstraints *c5 = new wxLayoutConstraints;
00159 c5->right.SameAs (m_panel,wxRight, 5);
00160 c5->top.SameAs (m_button1, wxBottom,5);
00161 c5->height.AsIs();
00162 c5->width.AsIs();
00163 m_button2->SetConstraints(c5);
00164
00165
00166
00167 wxLayoutConstraints *c8 = new wxLayoutConstraints;
00168 c8->left.SameAs (m_panel, wxLeft);
00169 c8->bottom.SameAs (m_panel, wxBottom,5);
00170 c8->height.AsIs();
00171 c8->width.AsIs();
00172 m_mess2->SetConstraints(c8);
00173
00174 Centre(wxBOTH);
00175
00176 m_object = NULL;
00177
00178 SetAutoLayout(true);
00179 Layout();
00180
00181 return true;
00182 }
00183
00184 a2dCanvasObjectsDialog::~a2dCanvasObjectsDialog()
00185 {
00186 a2dDocviewGlobals->GetEventDistributer()->Unregister( this );
00187 }
00188
00189 void a2dCanvasObjectsDialog::Init( a2dCanvasObjectList* objects )
00190 {
00191 m_listbox->Clear();
00192 delete m_structurelist;
00193 m_structurelist = objects->Clone( a2dObject::clone_flat );
00194 forEachIn( a2dCanvasObjectList, m_structurelist )
00195 {
00196 a2dCanvasObject *obj = *iter;
00197 if (obj == m_document->GetRootObject() )
00198 {
00199 m_listbox->Append(obj->GetName()+ wxT("=>top"));
00200 }
00201 else
00202 m_listbox->Append(obj->GetName());
00203 }
00204
00205 wxString mess = wxT("");
00206 mess.Printf(_("Number of structures: %i"), m_structurelist->size()-1);
00207 m_mess1->SetLabel(mess);
00208
00209
00210 if (m_structurelist->size())
00211 m_listbox->SetSelection(0,true);
00212 m_object = NULL;
00213 }
00214
00215 void a2dCanvasObjectsDialog::Init( a2dCanvasDocument* document )
00216 {
00217 a2dWalker_CollectCanvasObjects collector;
00218 collector.Start( document->GetRootObject() );
00219
00220 a2dCanvasObjectList::iterator iter = collector.m_found.begin();
00221 while( iter != collector.m_found.end() )
00222 {
00223 a2dCanvasObjectList::value_type obj = *iter;
00224 if ( obj->GetChildObjectList() == wxNullCanvasObjectList )
00225 iter = collector.m_found.erase( iter );
00226 else
00227 iter++;
00228 }
00229
00230 m_listbox->Clear();
00231 delete m_structurelist;
00232
00233 m_structurelist = collector.m_found.Clone( a2dObject::clone_flat );
00234 forEachIn( a2dCanvasObjectList, m_structurelist )
00235 {
00236 a2dCanvasObject *obj = *iter;
00237 if (obj == m_document->GetRootObject() )
00238 {
00239 m_listbox->Append(obj->GetName()+ wxT("=>top"));
00240 }
00241 else
00242 m_listbox->Append(obj->GetName());
00243 }
00244
00245 wxString mess = wxT("");
00246 mess.Printf(_("Number of structures: %i"), m_structurelist->size()-1);
00247 m_mess1->SetLabel(mess);
00248
00249
00250 if (m_structurelist->size())
00251 m_listbox->SetSelection(0,true);
00252 m_object = NULL;
00253 }
00254
00255 void a2dCanvasObjectsDialog::CmOk( wxCommandEvent& )
00256 {
00257 if ( IsModal() )
00258 {
00259 wxString buf;
00260 buf=m_listbox->GetStringSelection();
00261 forEachIn( a2dCanvasObjectList, m_structurelist )
00262 {
00263 a2dCanvasObject *obj = *iter;
00264 wxString name = obj->GetName();
00265 if ( !name.Cmp( buf ) )
00266 {
00267 m_object = obj;
00268 break;
00269 }
00270 else if ( name + wxT("=>top") == buf)
00271 {
00272 m_object = obj;
00273 break;
00274 }
00275 }
00276 EndModal(wxID_OK);
00277 }
00278 else
00279 {
00280 SetReturnCode(wxID_OK);
00281 Show(false);
00282 }
00283 }
00284
00285 void a2dCanvasObjectsDialog::CmApply( wxCommandEvent& )
00286 {
00287 wxString buf;
00288 buf=m_listbox->GetStringSelection();
00289 forEachIn( a2dCanvasObjectList, m_structurelist )
00290 {
00291 a2dCanvasObject *obj = *iter;
00292 wxString name = obj->GetName();
00293 if ( !name.Cmp( buf ) )
00294 {
00295 m_object = obj;
00296 break;
00297 }
00298 else if ( name + wxT("=>top") == buf)
00299 {
00300 m_object = obj;
00301 break;
00302 }
00303 }
00304 a2dCommand_SetShowObject* command = new a2dCommand_SetShowObject( a2dCommand_SetShowObject::Args().canvasobject( m_object ) );
00305 a2dGetCmdh()->Submit( command, false );
00306 a2dGetCmdh()->Submit( new a2dCommand_Zoom( a2dCommand_Zoom::ZoomOut ) );
00307 }
00308
00309 a2dCanvasObject* a2dCanvasObjectsDialog::GetCanvasObject()
00310 {
00311 return m_object;
00312 }
00313
00314 void a2dCanvasObjectsDialog::CmCancel( wxCommandEvent& )
00315 {
00316 if ( IsModal() )
00317 EndModal(wxID_OK);
00318 else
00319 {
00320 SetReturnCode(wxID_OK);
00321 Show(false);
00322 }
00323 }
00324
00325 void a2dCanvasObjectsDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event) )
00326 {
00327 if ( IsModal() )
00328 EndModal(wxID_OK);
00329 else
00330 {
00331 SetReturnCode(wxID_OK);
00332 Show(false);
00333 }
00334 }
00335
00336 void a2dCanvasObjectsDialog::OnChangedDocument( a2dCommandEvent& event )
00337 {
00338 if ( !m_document )
00339 return;
00340
00341 a2dCanvasDocument* doc = (a2dCanvasDocument*) event.GetDocument();
00342 if ( !IsModal() && doc )
00343 {
00344 m_document = doc;
00345 Init( doc );
00346 }
00347 }
00348
00349 void a2dCanvasObjectsDialog::OnComEvent( a2dComEvent& event )
00350 {
00351 if ( !m_document )
00352 return;
00353
00354 if ( event.GetEventComId() == &a2dCanvasView::sm_changedShowObject )
00355 {
00356 a2dCanvasObject* newtop = wxStaticCast( event.GetProperty()->GetRefObject(), a2dCanvasObject );
00357 }
00358 else
00359 event.Skip();
00360 }
00361
00362 void a2dCanvasObjectsDialog::OnDoEvent( a2dCommandProcessorEvent& event )
00363 {
00364 if ( !m_document )
00365 return;
00366
00367 if ( event.GetCommand()->GetCommandId() == &a2dCommand_SetShowObject::Id )
00368 {
00369 Init( m_document );
00370 }
00371 else if ( event.GetCommand()->GetCommandId() == &a2dCommand_NewGroup::Id )
00372 {
00373 Init( m_document );
00374 }
00375 else
00376 event.Skip();
00377 }
00378
00379
00380 const int BRUSH_BUTTON_OK = wxID_HIGHEST + 5801 ;
00381 const int BRUSH_BUTTON_CANCEL = wxID_HIGHEST + 5802 ;
00382
00383 BEGIN_EVENT_TABLE(CanvasFillDialog, wxDialog)
00384 EVT_BUTTON (BRUSH_BUTTON_OK, CanvasFillDialog::CmOk)
00385 EVT_BUTTON (BRUSH_BUTTON_CANCEL , CanvasFillDialog::CmCancel)
00386 EVT_CLOSE (CanvasFillDialog::OnCloseWindow)
00387 END_EVENT_TABLE()
00388
00389 CanvasFillDialog::CanvasFillDialog(wxFrame* parent):
00390 wxDialog(parent,-1,_T("choose style"),wxDefaultPosition,wxDefaultSize,(wxCAPTION),_T("style dialog"))
00391 {
00392 m_parent = parent;
00393
00394 wxString choices[] =
00395 {
00396 _T("Transparent (no fill)"),
00397 _T("Solid"),
00398 _T("Backward diagonal hatch"),
00399 _T("Cross-diagonal hatch"),
00400 _T("Forward diagonal hatch"),
00401 _T("Cross hatch"),
00402 _T("Horizontal hatch"),
00403 _T("Vertical hatch"),
00404 _T("wxSTIPPLE"),
00405 _T("wxSTIPPLE_MASK_OPAQUE"),
00406 _T("wxSTIPPLE_MASK_OPAQUE_TRANSPARENT"),
00407 _T("wxGRADIENT_FILL_XY_LINEAR"),
00408 _T("wxGRADIENT_FILL_XY_RADIAL"),
00409 _T("wxGRADIENT_FILL_XY_DROP")
00410 };
00411
00412 m_choice = new wxChoice( this,-1,wxDefaultPosition,wxDefaultSize, 14, choices);
00413 m_choice->SetSelection(1);
00414 m_button1 = new wxButton( this,BRUSH_BUTTON_OK, _T("Ok"),wxDefaultPosition,wxSize(55,20));
00415 m_button2 = new wxButton( this,BRUSH_BUTTON_CANCEL, _T("Cancel"),wxDefaultPosition,wxSize(55,20));
00416
00417 wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL );
00418 sizer->Add( m_choice, 1, wxEXPAND | wxALL, 1 );
00419
00420 wxBoxSizer *sizerb = new wxBoxSizer( wxHORIZONTAL );
00421 sizerb->Add( m_button1, 0, wxALL, 1 );
00422 sizerb->Add( m_button2, 0, wxALL, 1 );
00423
00424 sizer->Add( sizerb,0,wxALIGN_CENTER);
00425
00426 SetAutoLayout(true);
00427
00428 sizer->SetSizeHints(this);
00429 sizer->Fit(this);
00430
00431 SetSizer( sizer );
00432
00433 Layout();
00434
00435 }
00436
00437 void CanvasFillDialog::CmCancel( wxCommandEvent& )
00438 {
00439 EndModal(wxID_CANCEL);
00440 }
00441
00442 void CanvasFillDialog::CmOk( wxCommandEvent& )
00443 {
00444 switch(m_choice->GetSelection())
00445 {
00446 case 0: m_style=a2dFILL_TRANSPARENT;
00447 break;
00448 case 1: m_style=a2dFILL_SOLID;
00449 break;
00450 case 2: m_style=a2dFILL_BDIAGONAL_HATCH;
00451 break;
00452 case 3: m_style=a2dFILL_CROSSDIAG_HATCH;
00453 break;
00454 case 4: m_style=a2dFILL_FDIAGONAL_HATCH;
00455 break;
00456 case 5: m_style=a2dFILL_CROSS_HATCH;
00457 break;
00458 case 6: m_style=a2dFILL_HORIZONTAL_HATCH;
00459 break;
00460 case 7: m_style=a2dFILL_VERTICAL_HATCH;
00461 break;
00462 case 8: m_style=a2dFILL_STIPPLE;
00463 break;
00464 case 9: m_style=a2dFILL_STIPPLE_MASK_OPAQUE;
00465 break;
00466 case 10: m_style=a2dFILL_STIPPLE_MASK_OPAQUE_TRANSPARENT;
00467 break;
00468 case 11: m_style=a2dFILL_GRADIENT_FILL_XY_LINEAR;
00469 break;
00470 case 12: m_style=a2dFILL_GRADIENT_FILL_XY_RADIAL;
00471 break;
00472 case 13: m_style=a2dFILL_GRADIENT_FILL_XY_DROP;
00473 break;
00474 default: m_style=a2dFILL_SOLID;
00475 }
00476 EndModal(wxID_OK);
00477 }
00478
00479 void CanvasFillDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event) )
00480 {
00481 EndModal(wxID_CANCEL);
00482 }
00483
00484 const int PEN_BUTTON_OK = wxID_HIGHEST + 5901 ;
00485 const int PEN_BUTTON_CANCEL = wxID_HIGHEST + 5902 ;
00486
00487 BEGIN_EVENT_TABLE(PenDialog, wxDialog)
00488 EVT_BUTTON (PEN_BUTTON_OK, PenDialog::CmOk)
00489 EVT_BUTTON (PEN_BUTTON_CANCEL , PenDialog::CmCancel)
00490 EVT_CLOSE (PenDialog::OnCloseWindow)
00491 END_EVENT_TABLE()
00492
00493 PenDialog::PenDialog(wxFrame* parent):
00494 wxDialog(parent,-1,_T("choose style"),wxDefaultPosition,wxDefaultSize,( wxDEFAULT_DIALOG_STYLE),_T("style dialog"))
00495 {
00496 m_parent = parent;
00497
00498 wxString choices[] =
00499 {
00500 _T("Solid style."),
00501 _T("No pen is used."),
00502 _T("Dotted style."),
00503 _T("Long dashed style."),
00504 _T("Short dashed style."),
00505 _T("Dot and dash style."),
00506 _T("Use the stipple bitmap."),
00507 _T("Backward diagonal hatch."),
00508 _T("Cross-diagonal hatch."),
00509 _T("Forward diagonal hatch."),
00510 _T("Cross hatch."),
00511 _T("Horizontal hatch."),
00512 _T("Vertical hatch.")
00513 };
00514
00515 m_choice = new wxChoice( this,-1,wxDefaultPosition,wxDefaultSize, 13, choices);
00516 m_choice->SetSelection(1);
00517 m_button1 = new wxButton( this,PEN_BUTTON_OK, _T("Ok"),wxDefaultPosition,wxSize(55,20));
00518 m_button2 = new wxButton( this,PEN_BUTTON_CANCEL, _T("Cancel"),wxDefaultPosition,wxSize(55,20));
00519
00520 wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL );
00521 sizer->Add( m_choice, 1, wxEXPAND | wxALL, 1 );
00522
00523 wxBoxSizer *sizerb = new wxBoxSizer( wxHORIZONTAL );
00524 sizerb->Add( m_button1, 0, wxALL, 1 );
00525 sizerb->Add( m_button2, 0, wxALL, 1 );
00526
00527 sizer->Add( sizerb,0,wxALIGN_CENTER);
00528
00529 SetAutoLayout(true);
00530
00531 sizer->SetSizeHints(this);
00532 sizer->Fit(this);
00533
00534 SetSizer( sizer );
00535
00536
00537 }
00538
00539 void PenDialog::CmCancel( wxCommandEvent& )
00540 {
00541 EndModal(wxID_CANCEL);
00542 }
00543
00544 void PenDialog::CmOk( wxCommandEvent& )
00545 {
00546 switch(m_choice->GetSelection())
00547 {
00548 case 0: m_style=a2dSTROKE_SOLID;
00549 break;
00550 case 1: m_style=a2dSTROKE_TRANSPARENT;
00551 break;
00552 case 2: m_style=a2dSTROKE_DOT;
00553 break;
00554 case 3: m_style=a2dSTROKE_LONG_DASH;
00555 break;
00556 case 4: m_style=a2dSTROKE_SHORT_DASH;
00557 break;
00558 case 5: m_style=a2dSTROKE_DOT_DASH;
00559 break;
00560 case 6: m_style=a2dSTROKE_BDIAGONAL_HATCH;
00561 break;
00562 case 7: m_style=a2dSTROKE_CROSSDIAG_HATCH;
00563 break;
00564 case 8: m_style=a2dSTROKE_FDIAGONAL_HATCH;
00565 break;
00566 case 9: m_style=a2dSTROKE_CROSS_HATCH;
00567 break;
00568 case 10: m_style=a2dSTROKE_HORIZONTAL_HATCH;
00569 break;
00570 case 11: m_style=a2dSTROKE_VERTICAL_HATCH;
00571 break;
00572 default: m_style=a2dSTROKE_SOLID;
00573 }
00574 EndModal(wxID_OK);
00575 }
00576
00577 void PenDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event) )
00578 {
00579 EndModal(wxID_CANCEL);
00580 }
00581
00582
00583 const int LOGICALFUNCTION_BUTTON_OK = wxID_HIGHEST + 5801 ;
00584 const int LOGICALFUNCTION_BUTTON_CANCEL = wxID_HIGHEST + 5802 ;
00585
00586 BEGIN_EVENT_TABLE(LogicalFunction, wxDialog)
00587 EVT_BUTTON (LOGICALFUNCTION_BUTTON_OK, LogicalFunction::CmOk)
00588 EVT_BUTTON (LOGICALFUNCTION_BUTTON_CANCEL , LogicalFunction::CmCancel)
00589 EVT_CLOSE (LogicalFunction::OnCloseWindow)
00590 END_EVENT_TABLE()
00591
00592 LogicalFunction::LogicalFunction(wxFrame* parent):
00593 wxDialog(parent,-1,_T("choose style"),wxDefaultPosition,wxDefaultSize,(wxDEFAULT_DIALOG_STYLE),_T("style dialog"))
00594 {
00595 m_parent = parent;
00596
00597 wxString choices[] =
00598 {
00599 _T("wxCLEAR"),
00600 _T("wxXOR"),
00601 _T("wxINVERT"),
00602 _T("wxOR_REVERSE"),
00603 _T("wxAND_REVERSE"),
00604 _T("wxCOPY"),
00605 _T("wxAND"),
00606 _T("wxAND_INVERT"),
00607 _T("wxNO_OP"),
00608 _T("wxNOR"),
00609 _T("wxEQUIV"),
00610 _T("wxSRC_INVERT"),
00611 _T("wxOR_INVERT"),
00612 _T("wxNAND"),
00613 _T("wxOR"),
00614 _T("wxSET")
00615 };
00616
00617 m_choice = new wxChoice( this,-1,wxDefaultPosition,wxDefaultSize, 16, choices);
00618 m_choice->SetSelection(1);
00619 m_button1 = new wxButton( this,LOGICALFUNCTION_BUTTON_OK, _T("Ok"),wxDefaultPosition,wxSize(55,20));
00620 m_button2 = new wxButton( this,LOGICALFUNCTION_BUTTON_CANCEL, _T("Cancel"),wxDefaultPosition,wxSize(55,20));
00621
00622 wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL );
00623 sizer->Add( m_choice, 1, wxEXPAND | wxALL, 1 );
00624
00625 wxBoxSizer *sizerb = new wxBoxSizer( wxHORIZONTAL );
00626 sizerb->Add( m_button1, 0, wxALL, 1 );
00627 sizerb->Add( m_button2, 0, wxALL, 1 );
00628
00629 sizer->Add( sizerb,0,wxALIGN_CENTER);
00630
00631 SetAutoLayout(true);
00632
00633 sizer->SetSizeHints(this);
00634 sizer->Fit(this);
00635
00636 SetSizer( sizer );
00637
00638
00639 }
00640
00641 void LogicalFunction::CmCancel( wxCommandEvent& )
00642 {
00643 EndModal(wxID_CANCEL);
00644 }
00645
00646 void LogicalFunction::CmOk( wxCommandEvent& )
00647 {
00648 m_function=m_choice->GetSelection();
00649 switch(m_choice->GetSelection())
00650 {
00651 case 0: m_function=wxCLEAR;
00652 break;
00653 case 1: m_function=wxXOR;
00654 break;
00655 case 2: m_function=wxINVERT;
00656 break;
00657 case 3: m_function=wxOR_REVERSE;
00658 break;
00659 case 4: m_function=wxAND_REVERSE;
00660 break;
00661 case 5: m_function=wxCOPY;
00662 break;
00663 case 6: m_function=wxAND;
00664 break;
00665 case 7: m_function=wxAND_INVERT;
00666 break;
00667 case 8: m_function=wxNO_OP;
00668 break;
00669 case 9: m_function=wxNOR;
00670 break;
00671 case 10: m_function=wxEQUIV;
00672 break;
00673 case 11: m_function=wxSRC_INVERT;
00674 break;
00675 case 12: m_function=wxOR_INVERT;
00676 break;
00677 case 13: m_function=wxNAND;
00678 break;
00679 case 14: m_function=wxOR;
00680 break;
00681 case 15: m_function=wxSET;
00682 break;
00683 default: m_function=wxCOPY;
00684 }
00685 EndModal(wxID_OK);
00686 }
00687
00688 void LogicalFunction::OnCloseWindow(wxCloseEvent& WXUNUSED(event) )
00689 {
00690 EndModal(wxID_CANCEL);
00691 }
00692
00693
00694
00695 #define PAT_COLLUMNS 6
00696 #define PAT_ROWS 6
00697 #define PAT_ROWS_VIS 6
00698
00699 #define PD_PANEL1_X 0
00700 #define PD_PANEL1_Y 0
00701 #define PD_PANEL1_W (PAT_COLLUMNS*40 + 20)
00702 #define PD_PANEL1_H (PAT_ROWS_VIS*40 )
00703
00704 #define PD_BUTTON_W 32
00705 #define PD_BUTTON_H 32
00706
00707 BEGIN_EVENT_TABLE(PatternDialog, wxDialog)
00708 EVT_CUSTOM_RANGE(wxEVT_COMMAND_BUTTON_CLICKED, 800, 800+NR_PATTERNS, PatternDialog::Cm_P_BitB)
00709
00710 EVT_CLOSE (PatternDialog::OnCloseWindow)
00711 EVT_ACTIVATE (PatternDialog::OnActivate)
00712
00713 END_EVENT_TABLE()
00714
00715
00716
00717
00718 PatternDialog::PatternDialog(wxWindow* parent,FillPatterns* fills,const wxString& title,long style,const wxString& name):
00719 wxDialog(parent,-1,title,wxPoint(0,0),wxSize(PD_PANEL1_W,PD_PANEL1_H),style,name)
00720 {
00721 m_parent = parent;
00722
00723 m_choosen=0;
00724
00725 m_panel1 = new wxPanel(this,-1,wxPoint(PD_PANEL1_X,PD_PANEL1_Y),wxSize(PD_PANEL1_W,PD_PANEL1_H));
00726 m_scroll = new wxScrolledWindow(m_panel1,-1,wxPoint(PD_PANEL1_X,PD_PANEL1_Y),wxSize(PD_PANEL1_W,PD_PANEL1_H), wxVSCROLL,_T("scrolledWindow"));
00727 m_scroll->SetScrollbars( 40, 40,6,12 );
00728
00729
00730 for (int i = 0; i < NR_PATTERNS; i++)
00731 {
00732 wxMemoryDC dcmemtemp2;
00733 wxColour white(_T("WHITE"));
00734 wxColour black(_T("BLACK"));
00735
00736 wxBitmap* help = new wxBitmap(32,32,-1);
00737
00738 dcmemtemp2.SelectObject(*help);
00739 wxBrush brushbitm(*fills->GetPattern(i));
00740 dcmemtemp2.SetBrush(brushbitm);
00741
00742
00743
00744 dcmemtemp2.SetTextForeground(white);
00745 dcmemtemp2.SetTextBackground(black);
00746 dcmemtemp2.DrawRectangle(0,0,32,32);
00747 dcmemtemp2.SelectObject(wxNullBitmap);
00748 m_patternbut[i] = new wxBitmapButton(m_scroll,800+i,*help,
00749 wxPoint(((i%PAT_COLLUMNS)*40),((i / PAT_ROWS) *40)));
00750 delete help;
00751 }
00752 Fit();
00753 Center(wxBOTH);
00754 }
00755
00756
00757 PatternDialog::~PatternDialog()
00758 {
00759 }
00760
00761 wxColour* PatternDialog::ltowxc(long colour)
00762 {
00763 unsigned char red,green,blue;
00764
00765 blue = colour / 65536;
00766 green = (colour % 65536) / 256;
00767 red = colour % 256;
00768
00769 return new wxColour(red,green,blue);
00770 }
00771
00772 void PatternDialog::Cm_P_BitB( wxEvent& event)
00773 {
00774 m_choosen=event.GetId()-800;
00775 EndModal(m_choosen);
00776 }
00777
00778 void PatternDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event) )
00779 {
00780 }
00781
00782 void PatternDialog::OnActivate( wxActivateEvent& WXUNUSED(event) )
00783 {
00784
00785 }
00786
00787 FillPatterns::FillPatterns()
00788 {
00789 wxString file;
00790 for (int i = 0; i < NR_PATTERNS; i++)
00791 {
00792 file.Printf(wxT("pat%-2.2d.bmp"),i+1);
00793
00794
00795 file = a2dGlobals->GetIconPathList().FindValidPath(file);
00796
00797 wxImage image;
00798
00799 if ( ! image.LoadFile(file,wxBITMAP_TYPE_BMP) )
00800 a2dDocviewGlobals->ReportErrorF( a2dError_FileCouldNotOpen, _("CVG : invalid bitmap %s"), file.c_str());
00801
00802 m_fillbitmaps[i] = new wxBitmap( image );
00803
00804
00805
00806 wxColour white(wxT("WHITE"));
00807 wxColour black(wxT("BLACK"));
00808
00809 wxMask* monochrome_mask = new wxMask(*m_fillbitmaps[i],black);
00810 m_fillbitmaps[i]->SetMask(monochrome_mask);
00811 }
00812
00813 }
00814
00815 FillPatterns::~FillPatterns()
00816 {
00817 for (int i = 0; i < NR_PATTERNS; i++)
00818 delete m_fillbitmaps[i];
00819 }
00820
00821 wxBitmap* FillPatterns::GetPattern(short patternnr)
00822 {
00823 return m_fillbitmaps[patternnr];
00824 }
00825
00826