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/clipbrd.h>
00024
00025 #include "wx/editor/execdlg.h"
00026
00027 const int CP_SEL = wxID_HIGHEST + 8801 ;
00028 const int CP_ALL = wxID_HIGHEST + 8802 ;
00029
00030 BEGIN_EVENT_TABLE(CopywxListBox, wxListBox)
00031 EVT_RIGHT_DOWN(CopywxListBox::OnMouseRightDown)
00032 EVT_MENU( CP_SEL,CopywxListBox::CopySel)
00033 EVT_MENU( CP_ALL,CopywxListBox::CopyAll)
00034 END_EVENT_TABLE()
00035
00036 CopywxListBox::CopywxListBox(wxWindow* parent,wxWindowID id,const wxPoint& pos,const wxSize& size,
00037 int n,const wxString choices[],long style)
00038 :wxListBox (parent,id,pos,size,n,choices,style)
00039 {
00040
00041 m_mousemenu = new wxMenu( _T("Copy") ,(long)0);
00042 m_mousemenu->Append(CP_SEL, _T("selected") );
00043 m_mousemenu->Append(CP_ALL, _T("all") );
00044 }
00045
00046 void CopywxListBox::CopySel(class wxCommandEvent &WXUNUSED(event))
00047 {
00048 if (wxTheClipboard->Open())
00049 {
00050 wxString data;
00051 data=data+GetStringSelection()+ _T("\n");
00052 wxTheClipboard->SetData( new wxTextDataObject(data));
00053 wxTheClipboard->Close();
00054 }
00055 }
00056
00057 void CopywxListBox::CopyAll(class wxCommandEvent &WXUNUSED(event))
00058 {
00059 if (wxTheClipboard->Open())
00060 {
00061 wxString data;
00062 int i;
00063 for (i = 0; i < GetCount(); i++)
00064 {
00065 data=data+GetString(i) + _T("\n");
00066 }
00067 wxTheClipboard->SetData( new wxTextDataObject(data));
00068 wxTheClipboard->Close();
00069 }
00070 }
00071
00072 void CopywxListBox::OnMouseRightDown(class wxMouseEvent &WXUNUSED(event))
00073 {
00074 PopupMenu(m_mousemenu,0,0);
00075 }
00076
00077
00078
00079
00080
00081
00082
00083 IMPLEMENT_DYNAMIC_CLASS( a2dCoordinateEntry, wxDialog )
00084
00085
00086
00087
00088
00089 BEGIN_EVENT_TABLE( a2dCoordinateEntry, wxDialog )
00090
00091 EVT_TEXT( IDentry_X, a2dCoordinateEntry::OnEntryXEnter )
00092 EVT_TEXT( IDentry_Y, a2dCoordinateEntry::OnEntryYEnter )
00093
00094 EVT_TEXT_ENTER( IDentry_X, a2dCoordinateEntry::OnEntryXEnter )
00095
00096 EVT_TEXT_ENTER( IDentry_Y, a2dCoordinateEntry::OnEntryYEnter )
00097
00098 EVT_TEXT_ENTER( IDentry_CalcCoord, a2dCoordinateEntry::OnEntryCalccoordEnter )
00099
00100 EVT_RADIOBOX( IDentry_CartPolar, a2dCoordinateEntry::OnEntryCartpolarSelected )
00101
00102 EVT_RADIOBOX( IDentry_AbsRel, a2dCoordinateEntry::OnEntryAbsrelSelected )
00103
00104 EVT_CHECKBOX( IDentry_Snap, a2dCoordinateEntry::OnEntrySnapClick )
00105
00106 EVT_BUTTON( IDentry_Hide, a2dCoordinateEntry::OnEntryHideClick )
00107
00108 EVT_BUTTON( IDentry_Apply, a2dCoordinateEntry::OnEntryApplyClick )
00109
00110 EVT_BUTTON( IDentry_Cancel, a2dCoordinateEntry::OnEntryCancelClick )
00111
00112 END_EVENT_TABLE()
00113
00114
00115
00116
00117
00118 a2dCoordinateEntry::a2dCoordinateEntry( )
00119 {
00120 }
00121
00122 a2dCoordinateEntry::a2dCoordinateEntry( wxWindow* parent, wxWindowID id, bool modal, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
00123 {
00124 m_modal = modal;
00125 Create(parent, id, caption, pos, size, style);
00126 }
00127
00128
00129
00130
00131
00132 bool a2dCoordinateEntry::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
00133 {
00134 m_x = NULL;
00135 m_y = NULL;
00136 m_calcCoord = NULL;
00137 m_cartPolar = NULL;
00138 m_absRel = NULL;
00139 m_snap = NULL;
00140 m_hide = NULL;
00141 m_apply = NULL;
00142 m_cancel = NULL;
00143
00144 SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS);
00145 wxDialog::Create( parent, id, caption, pos, size, style );
00146
00147 CreateControls( style );
00148 GetSizer()->Fit(this);
00149 GetSizer()->SetSizeHints(this);
00150 Centre();
00151 return TRUE;
00152 }
00153
00154
00155
00156
00157
00158 void a2dCoordinateEntry::CreateControls( long style )
00159 {
00160 a2dCoordinateEntry* itemDialog1 = this;
00161
00162 wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
00163 itemDialog1->SetSizer(itemBoxSizer2);
00164
00165 wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL);
00166 itemBoxSizer2->Add(itemBoxSizer3, 0, wxGROW|wxALL, 1);
00167
00168 wxStaticBox* itemStaticBoxSizer4Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Coordinates"));
00169 wxStaticBoxSizer* itemStaticBoxSizer4 = new wxStaticBoxSizer(itemStaticBoxSizer4Static, wxVERTICAL);
00170 itemBoxSizer3->Add(itemStaticBoxSizer4, 1, wxGROW|wxALL, 0);
00171
00172 wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxHORIZONTAL);
00173 itemStaticBoxSizer4->Add(itemBoxSizer5, 0, wxGROW|wxALL, 5);
00174
00175 m_xText = new wxStaticText( itemDialog1, wxID_STATIC, _("X"), wxDefaultPosition, wxDefaultSize, 0 );
00176 itemBoxSizer5->Add(m_xText, 0, wxALL, 5);
00177
00178 m_x = new wxTextCtrl( itemDialog1, IDentry_X, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
00179 itemBoxSizer5->Add(m_x, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);
00180
00181 m_yText = new wxStaticText( itemDialog1, wxID_STATIC, _("Y"), wxDefaultPosition, wxDefaultSize, 0 );
00182 itemBoxSizer5->Add(m_yText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
00183
00184 m_y = new wxTextCtrl( itemDialog1, IDentry_Y, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
00185 itemBoxSizer5->Add(m_y, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);
00186
00187 wxBoxSizer* itemBoxSizer10 = new wxBoxSizer(wxHORIZONTAL);
00188 itemStaticBoxSizer4->Add(itemBoxSizer10, 0, wxGROW|wxALL, 5);
00189
00190 wxStaticText* itemStaticText11 = new wxStaticText( itemDialog1, wxID_STATIC, _("Calc Coord"), wxDefaultPosition, wxDefaultSize, 0 );
00191 itemBoxSizer10->Add(itemStaticText11, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
00192
00193 m_calcCoord = new wxTextCtrl( itemDialog1, IDentry_CalcCoord, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
00194 itemBoxSizer10->Add(m_calcCoord, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);
00195
00196 wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxVERTICAL);
00197 itemBoxSizer3->Add(itemBoxSizer13, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
00198
00199 wxString m_cartPolarStrings[] = {
00200 _("&Cart"),
00201 _("&Polar")
00202 };
00203 m_cartPolar = new wxRadioBox( itemDialog1, IDentry_CartPolar, _("Cart-Polar"), wxDefaultPosition, wxDefaultSize, 2, m_cartPolarStrings, 1, wxRA_SPECIFY_ROWS );
00204 itemBoxSizer13->Add(m_cartPolar, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 1);
00205
00206 wxString m_absRelStrings[] = {
00207 _("&Abs"),
00208 _("&Rel")
00209 };
00210 m_absRel = new wxRadioBox( itemDialog1, IDentry_AbsRel, _("Abs-Rel"), wxDefaultPosition, wxDefaultSize, 2, m_absRelStrings, 1, wxRA_SPECIFY_ROWS );
00211 itemBoxSizer13->Add(m_absRel, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 1);
00212
00213 m_snap = new wxCheckBox( itemDialog1, IDentry_Snap, _("Use Snapping"), wxDefaultPosition, wxDefaultSize, 0 );
00214 m_snap->SetValue(FALSE);
00215 itemBoxSizer13->Add(m_snap, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 0);
00216
00217 wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxHORIZONTAL);
00218 itemBoxSizer2->Add(itemBoxSizer17, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 0);
00219
00220 if ( m_modal )
00221 {
00222 m_apply = new wxButton( itemDialog1, IDentry_Apply, _("Oke"), wxDefaultPosition, wxDefaultSize, 0 );
00223 }
00224 else
00225 {
00226 m_hide = new wxButton( itemDialog1, IDentry_Hide, _("Hide"), wxDefaultPosition, wxDefaultSize, 0 );
00227 itemBoxSizer17->Add(m_hide, 0, wxALIGN_CENTER_VERTICAL|wxALL, 0);
00228
00229 m_apply = new wxButton( itemDialog1, IDentry_Apply, _("Apply"), wxDefaultPosition, wxDefaultSize, 0 );
00230 }
00231 itemBoxSizer17->Add(m_apply, 0, wxALIGN_CENTER_VERTICAL|wxALL, 0);
00232
00233 m_cancel = new wxButton( itemDialog1, IDentry_Cancel, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
00234 itemBoxSizer17->Add(m_cancel, 0, wxALIGN_CENTER_VERTICAL|wxALL, 0);
00235
00236 }
00237
00238
00239
00240
00241
00242 bool a2dCoordinateEntry::ShowToolTips()
00243 {
00244 return TRUE;
00245 }
00246
00247
00248
00249
00250
00251 wxBitmap a2dCoordinateEntry::GetBitmapResource( const wxString& name )
00252 {
00253
00254 return wxNullBitmap;
00255 }
00256
00257
00258
00259
00260
00261 wxIcon a2dCoordinateEntry::GetIconResource( const wxString& name )
00262 {
00263
00264 return wxNullIcon;
00265 }
00266
00267
00268
00269
00270
00271 void a2dCoordinateEntry::OnEntryXEnter( wxCommandEvent& event )
00272 {
00273
00274 CalcCoordinate();
00275 }
00276
00277
00278
00279
00280
00281 void a2dCoordinateEntry::OnEntryYEnter( wxCommandEvent& event )
00282 {
00283 CalcCoordinate();
00284 }
00285
00286
00287
00288
00289
00290 void a2dCoordinateEntry::OnEntryCalccoordEnter( wxCommandEvent& event )
00291 {
00292 CalcCoordinate();
00293 }
00294
00295
00296
00297
00298
00299 void a2dCoordinateEntry::OnEntryCartpolarSelected( wxCommandEvent& event )
00300 {
00301 if ( m_cartPolar->GetSelection() == 0 )
00302 {
00303 m_xText->SetLabel( _T("X") );
00304 m_yText->SetLabel( _T("Y") );
00305 }
00306 else
00307 {
00308 m_xText->SetLabel( _T("Ang") );
00309 m_yText->SetLabel( _T("Radius") );
00310 }
00311 GetSizer()->Fit(this);
00312 CalcCoordinate();
00313 }
00314
00315
00316
00317
00318
00319 void a2dCoordinateEntry::OnEntryAbsrelSelected( wxCommandEvent& event )
00320 {
00321 CalcCoordinate();
00322 }
00323
00324
00325
00326
00327
00328 void a2dCoordinateEntry::OnEntrySnapClick( wxCommandEvent& event )
00329 {
00330 CalcCoordinate();
00331 }
00332
00333
00334
00335
00336
00337 void a2dCoordinateEntry::OnEntryHideClick( wxCommandEvent& event )
00338 {
00339 SetReturnCode(wxID_OK);
00340 Show( false );
00341 }
00342
00343
00344
00345
00346
00347 void a2dCoordinateEntry::OnEntryApplyClick( wxCommandEvent& event )
00348 {
00349 if ( m_modal )
00350 {
00351 CalcCoordinate();
00352 EndModal(wxID_OK);
00353 }
00354 else
00355 {
00356 CalcCoordinate();
00357 bool polar = m_cartPolar->GetSelection() == 1;
00358 bool relative = m_absRel->GetSelection() == 1;
00359
00360 a2dSmrtPtr<a2dCommand_SetCursor> command = new a2dCommand_SetCursor(
00361 a2dCommand_SetCursor::Args().
00362 x( m_xcalc ).
00363 y( m_ycalc ).
00364 relative( relative ).
00365 polar( polar ).
00366 snapped( m_snap->GetValue() ) );
00367
00368 a2dGetCmdh()->Submit( command );
00369 }
00370 }
00371
00372
00373
00374
00375
00376 void a2dCoordinateEntry::OnEntryCancelClick( wxCommandEvent& event )
00377 {
00378 Show( false );
00379 }
00380
00381 void a2dCoordinateEntry::CalcCoordinate()
00382 {
00383 m_xcalc = wxAtoi( m_x->GetValue() );
00384 m_ycalc = wxAtoi( m_y->GetValue() );
00385 bool polar = m_cartPolar->GetSelection() == 1;
00386 bool relative = m_absRel->GetSelection() == 1;
00387
00388
00389 double xold = a2dGetCmdh()->GetLastXEntry();
00390 double yold = a2dGetCmdh()->GetLastYEntry();
00391
00392
00393 if ( relative )
00394 {
00395 if ( polar )
00396 {
00397 double radius = m_ycalc;
00398 double ang = m_xcalc;
00399
00400 m_xcalc = xold + radius * cos( wxDegToRad(ang) );
00401 m_ycalc = yold + radius * sin( wxDegToRad(ang) );
00402 }
00403 else
00404 {
00405 m_xcalc += xold;
00406 m_ycalc += yold;
00407 }
00408 }
00409 else
00410 {
00411 if ( polar )
00412 {
00413 double radius = m_ycalc;
00414 double ang = m_xcalc;
00415
00416 m_xcalc = radius * cos( wxDegToRad(ang) );
00417 m_ycalc = radius * sin( wxDegToRad(ang) );
00418 }
00419 }
00420
00421 wxString calc;
00422 calc.Printf( wxT(" x = %lg, y = %lg"), m_xcalc, m_ycalc );
00423 m_calcCoord->SetValue( calc );
00424 }
00425
00426
00427
00428