00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "a2dprec.h"
00014
00015 #ifdef __BORLANDC__
00016 #pragma hdrstop
00017 #endif
00018
00019 #ifndef WX_PRECOMP
00020 #include "wx/wx.h"
00021 #endif
00022
00023 #include <wx/platform.h>
00024 #include <wx/clipbrd.h>
00025 #include <algorithm>
00026
00027 #include "wx/editor/groupdlg.h"
00028
00029 #define GROUPDLG_HSIZE 400
00030 #define GROUPDLG_VSIZE 400
00031
00032 const int GROUP_BUTTON_OK = wxNewId();
00033 const int GROUP_BUTTON_CANCEL = wxNewId();
00034 const int GROUP_BUTTON_ADD_A = wxNewId();
00035 const int GROUP_BUTTON_REMOVE_A = wxNewId();
00036 const int GROUP_BUTTON_CLR_A = wxNewId();
00037 const int GROUP_BUTTON_ADD_B = wxNewId();
00038 const int GROUP_BUTTON_REMOVE_B = wxNewId();
00039 const int GROUP_BUTTON_CLR_B = wxNewId();
00040 const int GROUP_BUTTON_ADD_D = wxNewId();
00041 const int GROUP_BUTTON_REMOVE_D = wxNewId();
00042
00043 const int ID_LISTBOX = wxNewId();
00044 const int ID_CHECKBOX1 = wxNewId();
00045 const int ID_CHECKBOX2 = wxNewId();
00046 const int ID_CHECKBOX3 = wxNewId();
00047 const int ID_TEXTCTRL = wxNewId();
00048
00049 BEGIN_EVENT_TABLE(a2dGroupDlg, wxDialog)
00050 EVT_BUTTON (GROUP_BUTTON_OK, a2dGroupDlg::CmOk)
00051 EVT_BUTTON (GROUP_BUTTON_CANCEL, a2dGroupDlg::CmCancel)
00052 EVT_BUTTON (GROUP_BUTTON_ADD_A, a2dGroupDlg::CmAdd_A)
00053 EVT_BUTTON (GROUP_BUTTON_REMOVE_A, a2dGroupDlg::CmRemove_A)
00054 EVT_BUTTON (GROUP_BUTTON_CLR_A, a2dGroupDlg::CmClear_A)
00055 EVT_BUTTON (GROUP_BUTTON_ADD_B, a2dGroupDlg::CmAdd_B)
00056 EVT_BUTTON (GROUP_BUTTON_REMOVE_B, a2dGroupDlg::CmRemove_B)
00057 EVT_BUTTON (GROUP_BUTTON_CLR_B, a2dGroupDlg::CmClear_B)
00058 EVT_BUTTON (GROUP_BUTTON_ADD_D, a2dGroupDlg::CmAdd_D)
00059 EVT_BUTTON (GROUP_BUTTON_REMOVE_D, a2dGroupDlg::CmRemove_D)
00060 EVT_CLOSE( a2dGroupDlg::OnCloseWindow )
00061 END_EVENT_TABLE()
00062
00063 a2dGroupDlg::a2dGroupDlg( wxFrame* parent, const wxString& title,long style, const wxString& name):
00064 wxDialog(parent,-1,title,wxDefaultPosition,wxSize(GROUPDLG_HSIZE,GROUPDLG_VSIZE),style,name)
00065 {
00066 a2dDocviewGlobals->GetEventDistributer()->Register( this );
00067
00068 wxSizer *item0 = new wxBoxSizer( wxVERTICAL );
00069
00070 wxSizer *item1 = new wxBoxSizer( wxHORIZONTAL );
00071
00072 wxStaticBox *item3 = new wxStaticBox( this, -1, _("layers") );
00073 wxSizer *item2 = new wxStaticBoxSizer( item3, wxVERTICAL );
00074
00075 m_listbox_main = new wxListCtrl( this, ID_LISTBOX, wxDefaultPosition, wxSize(40,-1), wxLC_REPORT | wxLC_NO_HEADER );
00076 item2->Add( m_listbox_main, 1, wxEXPAND|wxALL );
00077 m_listbox_main->InsertColumn(0,_T("Layers"));
00078
00079 item1->Add( item2, 1, wxGROW|wxALL, 0 );
00080
00081 wxSizer *item5 = new wxBoxSizer( wxVERTICAL );
00082
00083 wxStaticBox *item7 = new wxStaticBox( this, -1, _("group A") );
00084 wxSizer *item6 = new wxStaticBoxSizer( item7, wxHORIZONTAL );
00085
00086 wxSizer *item8 = new wxBoxSizer( wxVERTICAL );
00087
00088 wxButton *item9 = new wxButton( this, GROUP_BUTTON_ADD_A, _("add >>"), wxDefaultPosition, wxDefaultSize, 0 );
00089 item8->Add( item9, 0, wxALIGN_CENTRE|wxALL, 2 );
00090
00091 wxButton *item10 = new wxButton( this, GROUP_BUTTON_REMOVE_A, _("<< remove"), wxDefaultPosition, wxDefaultSize, 0 );
00092 item8->Add( item10, 0, wxALIGN_CENTRE|wxALL, 2 );
00093
00094 wxButton *item11 = new wxButton( this, GROUP_BUTTON_CLR_A, _("clear"), wxDefaultPosition, wxDefaultSize, 0 );
00095 item8->Add( item11, 0, wxALIGN_CENTRE|wxALL, 2 );
00096
00097 m_onlyselect_A = new wxCheckBox( this, ID_CHECKBOX1, _("selected"), wxDefaultPosition, wxDefaultSize, 0 );
00098 item8->Add( m_onlyselect_A, 0, wxALIGN_CENTRE|wxALL, 2 );
00099
00100 item6->Add( item8, 0, wxALIGN_CENTRE|wxALL, 0 );
00101
00102 m_listbox_a = new wxListCtrl( this, ID_LISTBOX, wxDefaultPosition, wxSize(40,100), wxLC_REPORT | wxLC_NO_HEADER );
00103 item6->Add( m_listbox_a, 1, wxEXPAND|wxALL );
00104 m_listbox_a->InsertColumn(0,_T("Group A"));
00105
00106 item5->Add( item6, 1, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 0 );
00107
00108 wxStaticBox *item15 = new wxStaticBox( this, -1, _("group B") );
00109 wxSizer *item14 = new wxStaticBoxSizer( item15, wxHORIZONTAL );
00110
00111 wxSizer *item16 = new wxBoxSizer( wxVERTICAL );
00112
00113 wxButton *item17 = new wxButton( this, GROUP_BUTTON_ADD_B, _("add >>"), wxDefaultPosition, wxDefaultSize, 0 );
00114 item16->Add( item17, 0, wxALIGN_CENTRE|wxALL, 2 );
00115
00116 wxButton *item18 = new wxButton( this, GROUP_BUTTON_REMOVE_B, _("<< remove"), wxDefaultPosition, wxDefaultSize, 0 );
00117 item16->Add( item18, 0, wxALIGN_CENTRE|wxALL, 2 );
00118
00119 wxButton *item19 = new wxButton( this, GROUP_BUTTON_CLR_B, _("clear"), wxDefaultPosition, wxDefaultSize, 0 );
00120 item16->Add( item19, 0, wxALIGN_CENTRE|wxALL, 2 );
00121
00122 m_onlyselect_B = new wxCheckBox( this, ID_CHECKBOX1, _("selected"), wxDefaultPosition, wxDefaultSize, 0 );
00123 item16->Add( m_onlyselect_B, 0, wxALIGN_CENTRE|wxALL, 2 );
00124
00125 item14->Add( item16, 0, wxALIGN_CENTRE|wxALL, 0 );
00126
00127 m_listbox_b = new wxListCtrl( this, ID_LISTBOX, wxDefaultPosition, wxSize(40,100), wxLC_REPORT | wxLC_NO_HEADER );
00128 item14->Add( m_listbox_b, 1, wxGROW|wxALIGN_CENTER_HORIZONTAL|wxALL );
00129 m_listbox_b->InsertColumn(0,_T("Group B"));
00130
00131 item5->Add( item14, 1, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 0 );
00132
00133 wxStaticBox *item23 = new wxStaticBox( this, -1, _("Destination") );
00134 wxSizer *item22 = new wxStaticBoxSizer( item23, wxHORIZONTAL );
00135
00136 wxSizer *item24 = new wxBoxSizer( wxVERTICAL );
00137
00138 wxButton *item25 = new wxButton( this, GROUP_BUTTON_ADD_D, _("Set Target >>"), wxDefaultPosition, wxDefaultSize, 0 );
00139 item24->Add( item25, 0, wxALIGN_CENTRE|wxALL, 2 );
00140
00141 m_clearTarget = new wxCheckBox( this, ID_CHECKBOX3, _("Clear"), wxDefaultPosition, wxDefaultSize, 0 );
00142 item24->Add( m_clearTarget, 0, wxALIGN_CENTRE|wxALL, 2 );
00143
00144 item22->Add( item24, 0, wxALIGN_CENTRE|wxALL, 0 );
00145
00146 m_destination = new wxTextCtrl( this, ID_TEXTCTRL,wxEmptyString, wxDefaultPosition, wxSize(40,-1), 0 );
00147 item22->Add( m_destination, 1, wxALIGN_CENTRE|wxALL, 0 );
00148
00149 item5->Add( item22, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 0 );
00150
00151 item1->Add( item5, 1, wxGROW|wxALIGN_CENTER_HORIZONTAL|wxALL, 0 );
00152
00153 item0->Add( item1, 1, wxGROW|wxALIGN_CENTER_VERTICAL, 0 );
00154
00155 wxSizer *item28 = new wxBoxSizer( wxHORIZONTAL );
00156
00157 wxButton *item29 = new wxButton( this, GROUP_BUTTON_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
00158 item28->Add( item29, 0, wxALIGN_CENTRE, 0 );
00159
00160 wxButton *item30 = new wxButton( this, GROUP_BUTTON_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
00161 item28->Add( item30, 0, wxALIGN_CENTRE, 0 );
00162
00163 item0->Add( item28, 0, wxALIGN_CENTRE, 0 );
00164
00165 Init();
00166
00167 m_listbox_main->SetColumnWidth( 0, wxLIST_AUTOSIZE );
00168 m_listbox_a->SetColumnWidth( 0, wxLIST_AUTOSIZE );
00169 m_listbox_b->SetColumnWidth( 0, wxLIST_AUTOSIZE );
00170 m_listbox_main->SetColumnWidth( 0, 200 );
00171 m_listbox_a->SetColumnWidth( 0, 200 );
00172 m_listbox_b->SetColumnWidth( 0, 200 );
00173
00174 SetAutoLayout( true );
00175 SetSizer( item0 );
00176 item0->SetSizeHints( this );
00177 item0->Fit( this );
00178 }
00179
00180 a2dGroupDlg::~a2dGroupDlg()
00181 {
00182 a2dDocviewGlobals->GetEventDistributer()->Unregister( this );
00183 }
00184
00185 void a2dGroupDlg::Init()
00186 {
00187 a2dCanvasDocument* doc = (a2dCanvasDocument*) a2dGetCmdh()->GetCurrentDocument();
00188 if ( !doc )
00189 return;
00190
00191 m_layersetup = doc->GetLayerSetup();
00192
00193 a2dLayerGroup& groupa = a2dGetCmdh()->GetGroupA();
00194 a2dLayerGroup& groupb = a2dGetCmdh()->GetGroupB();
00195 int target = a2dGetCmdh()->GetTarget();
00196
00197
00198 wxString layerLine;
00199 wxString available;
00200
00201 for (int i = 0; i < wxMAXLAYER; i++)
00202 {
00203 a2dLayerInfo* lobj = m_layersetup->GetLayerIndex()[i];
00204
00205 layerLine.Printf( _T("%04d %s"), i, lobj->GetName().c_str() );
00206 m_listbox_main->InsertItem( i, layerLine );
00207 if ( lobj->GetAvailable() )
00208 m_listbox_main->SetItemTextColour( i, *wxRED );
00209
00210 wxListItem itemCol;
00211 itemCol.SetText( layerLine );
00212 itemCol.SetImage(-1);
00213 itemCol.SetData( i );
00214
00215
00216 a2dLayerGroup::iterator iter = wxSTD find( groupa.begin(), groupa.end(), i);
00217 if ( iter != groupa.end() )
00218 m_listbox_a->InsertItem( itemCol );
00219 iter = wxSTD find( groupb.begin(), groupb.end(), i);
00220 if ( iter != groupb.end() )
00221 m_listbox_b->InsertItem( itemCol );
00222
00223 if ( target == i)
00224 {
00225 m_destination->SetValue(layerLine);
00226 m_target = i;
00227 }
00228 }
00229 m_onlyselect_A->SetValue( a2dGetCmdh()->GetSelectedOnlyA() );
00230 m_onlyselect_B->SetValue( a2dGetCmdh()->GetSelectedOnlyB() );
00231 m_clearTarget->SetValue( a2dGetCmdh()->GetClearTarget() );
00232 }
00233
00234 void a2dGroupDlg::OnCloseWindow(wxCloseEvent& WXUNUSED(event) )
00235 {
00236 EndModal(0);
00237 }
00238
00239
00240 void a2dGroupDlg::CmAdd_A(wxCommandEvent&)
00241 {
00242 wxString buf;
00243 int selcount;
00244
00245 selcount = m_listbox_main->GetSelectedItemCount();
00246
00247 if (selcount == 0) return;
00248
00249 long item = -1;
00250 for ( ;; )
00251 {
00252 item = m_listbox_main->GetNextItem(item,
00253 wxLIST_NEXT_ALL,
00254 wxLIST_STATE_SELECTED);
00255 if ( item == -1 )
00256 break;
00257
00258 buf = m_listbox_main->GetItemText( item );
00259 if ( m_listbox_a->FindItem( -1, buf ) == -1 )
00260 {
00261 wxListItem itemCol;
00262 itemCol.SetText( buf );
00263 itemCol.SetImage(-1);
00264 itemCol.SetData( item );
00265 m_listbox_a->InsertItem(itemCol);
00266 }
00267 }
00268 m_listbox_a->SetColumnWidth( 0, wxLIST_AUTOSIZE );
00269 m_listbox_a->SetColumnWidth( 0, 200 );
00270 }
00271
00272
00273 void a2dGroupDlg::CmAdd_B(wxCommandEvent&)
00274 {
00275 wxString buf;
00276 int selcount;
00277
00278 selcount = m_listbox_main->GetSelectedItemCount();
00279
00280 if (selcount == 0) return;
00281
00282 long item = -1;
00283 for ( ;; )
00284 {
00285 item = m_listbox_main->GetNextItem(item,
00286 wxLIST_NEXT_ALL,
00287 wxLIST_STATE_SELECTED);
00288 if ( item == -1 )
00289 break;
00290
00291 buf = m_listbox_main->GetItemText( item );
00292 if ( m_listbox_b->FindItem( -1, buf ) == -1 )
00293 {
00294 wxListItem itemCol;
00295 itemCol.SetText( buf );
00296 itemCol.SetImage(-1);
00297 itemCol.SetData( item );
00298 m_listbox_b->InsertItem(itemCol);
00299 }
00300 }
00301 m_listbox_b->SetColumnWidth( 0, wxLIST_AUTOSIZE );
00302 m_listbox_b->SetColumnWidth( 0, 200 );
00303 }
00304
00305
00306 void a2dGroupDlg::CmAdd_D(wxCommandEvent&)
00307 {
00308 wxString buf;
00309
00310 long item = m_listbox_main->GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
00311 if ( item == -1 )
00312 return;
00313
00314 buf = m_listbox_main->GetItemText(item);
00315
00316 a2dCanvasDocument* doc = (a2dCanvasDocument*) a2dGetCmdh()->GetCurrentDocument();
00317 if ( !doc )
00318 return;
00319 a2dSmrtPtr<a2dLayers> m_layersetup = doc->GetLayerSetup();
00320
00321 m_destination->SetValue(buf);
00322 m_target = item;
00323 m_listbox_main->SetItemState(item,0,wxLIST_STATE_SELECTED);
00324 }
00325
00326 void a2dGroupDlg::CmRemove_A(wxCommandEvent&)
00327 {
00328 long item = -1;
00329 for ( ;; )
00330 {
00331 item = m_listbox_a->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
00332 if ( item == -1 )
00333 break;
00334
00335 m_listbox_a->DeleteItem( item );
00336 }
00337 }
00338
00339 void a2dGroupDlg::CmRemove_B(wxCommandEvent&)
00340 {
00341 long item = -1;
00342 for ( ;; )
00343 {
00344 item = m_listbox_b->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
00345 if ( item == -1 )
00346 break;
00347
00348 m_listbox_b->DeleteItem( item );
00349 }
00350 }
00351
00352 void a2dGroupDlg::CmRemove_D(wxCommandEvent&)
00353 {
00354 m_destination->SetValue(wxEmptyString);
00355 }
00356
00357 void a2dGroupDlg::CmClear_A(wxCommandEvent&)
00358 {
00359 m_listbox_a->DeleteAllItems();
00360 }
00361
00362 void a2dGroupDlg::CmClear_B(wxCommandEvent&)
00363 {
00364 m_listbox_b->DeleteAllItems();
00365 }
00366
00367
00368 void a2dGroupDlg::CmOk(wxCommandEvent&)
00369 {
00370 a2dCanvasDocument* doc = (a2dCanvasDocument*) a2dGetCmdh()->GetCurrentDocument();
00371 if ( !doc )
00372 return;
00373
00374 m_layersetup = doc->GetLayerSetup();
00375
00376 a2dLayerGroup groupa;
00377 long item = -1;
00378 for ( ;; )
00379 {
00380 item = m_listbox_a->GetNextItem(item);
00381 if ( item == -1 )
00382 break;
00383 groupa.push_back( m_listbox_a->GetItemData( item ) );
00384 }
00385
00386 a2dLayerGroup groupb;
00387 item = -1;
00388 for ( ;; )
00389 {
00390 item = m_listbox_b->GetNextItem(item);
00391 if ( item == -1 )
00392 break;
00393 groupb.push_back( m_listbox_b->GetItemData( item ) );
00394 }
00395
00396 a2dGetCmdh()->SetGroupA( groupa );
00397 a2dGetCmdh()->SetGroupB( groupb );
00398 a2dGetCmdh()->SetSelectedOnlyA( m_onlyselect_A->GetValue() );
00399 a2dGetCmdh()->SetSelectedOnlyB( m_onlyselect_B->GetValue() );
00400 a2dGetCmdh()->SetClearTarget( m_clearTarget->GetValue() );
00401 a2dGetCmdh()->SetTarget( m_target );
00402
00403 EndModal(0);
00404 }
00405
00406 void a2dGroupDlg::CmCancel(wxCommandEvent&)
00407 {
00408 EndModal(1);
00409 }