00001
00002 #include "../../include/PnlFoglio/PnlFoglio.h"
00003
00004 IMPLEMENT_CLASS(PnlFoglio, wxResizeableControlCanvas)
00006 BEGIN_EVENT_TABLE(PnlFoglio, wxResizeableControlCanvas)
00008 EVT_RIGHT_DOWN(PnlFoglio::OnRightDown)
00009 EVT_LEFT_DOWN(PnlFoglio::OnLeftDown)
00010 EVT_MENU(1050,PnlFoglio::MnuAggiungiGrafico2DClick)
00011 EVT_MENU(1051,PnlFoglio::MnuAggiungiGrafico3DClick)
00012 EVT_MENU(1052,PnlFoglio::MnuAggiungiEtichettaClick)
00013 EVT_MOTION(PnlFoglio::PnlMove)
00014 EVT_PAINT(PnlFoglio::PnlFoglioPaint)
00015 EVT_KEY_DOWN(PnlFoglio::OnChar)
00016 EVT_GRAPH_INFO(PnlFoglio::OnGraphInfo)
00017 END_EVENT_TABLE()
00019
00020
00021
00022 PnlFoglio::PnlFoglio(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) : wxResizeableControlCanvas(parent,id,pos,size,style,name)
00023 {
00024
00025 FunctionGrid* griglia;
00026 SetFocusIgnoringChildren();
00027 ident=1200;
00028 SetScrollbars(8,8,1000,1000);
00029 posizionescroll.x=0;
00030 posizionescroll.y=0;
00031 DISEGNA=true;
00032 SetBackgroundColour(wxColour(*wxWHITE));
00033 foglio=new wxClientDC(this);
00034 PopFoglio = new wxMenu((_T("")) );
00035 PopFoglio->Append(1050,_T("Aggiungi Grafico 2D"),_T("Aggiunge un grafico 2D"), wxITEM_NORMAL);
00036 PopFoglio->Append(1051,_T("Aggiungi Grafico 3D"),_T("Aggiunge un grafico 3D"), wxITEM_NORMAL);
00037 PopFoglio->Append(1052,_T("Aggiungi Etichetta"),_T("Aggiunge un'etichetta"), wxITEM_NORMAL);
00038
00039
00040 gestionepannello=(gestione*)malloc(sizeof(gestione));
00041 gestionepannello->IdentSelezione=(int*)malloc(sizeof(int));
00042 gestionepannello->objects=new TListaW();
00043 gestionepannello->Selezione=0;
00044 *(gestionepannello->IdentSelezione)=0;
00045
00046
00047
00048
00049
00050 }
00051
00052
00053 PnlFoglio::~PnlFoglio()
00054 {
00055 foglio->~wxClientDC();
00056 delete(gestionepannello->objects);
00057 free(gestionepannello->IdentSelezione);
00058 free(gestionepannello);
00059
00060 }
00061
00062
00063 void PnlFoglio::Elimina()
00064 {
00065
00066 gestionepannello->objects->RimuoviNodo(gestionepannello->objects->TrovaPosizione(gestionepannello->Selezione->GetId()));
00067
00068 ((TBasePanel*)(gestionepannello->Selezione))->~TBasePanel();
00069
00070
00071 }
00072
00073
00074 void PnlFoglio::PnlMove(wxMouseEvent& event)
00075 { wxPoint posizione_click;
00076
00077 wxString string;
00078
00079 posizione_click=event.GetPosition();
00080 ((wxFrame*)GetParent()->GetParent())->GetStatusBar()->SetStatusText(_T("Foglio"),2);
00081 string.Printf(_T("%d"),posizione_click.x);
00082 ((wxFrame*)GetParent()->GetParent())->GetStatusBar()->SetStatusText(string,3);
00083 string.Printf(_T("%d"),posizione_click.y);
00084 ((wxFrame*)GetParent()->GetParent())->GetStatusBar()->SetStatusText(string,4);
00085
00086
00087
00088 }
00089
00090
00091 void PnlFoglio::PnlFoglioPaint(wxPaintEvent& event)
00092 {
00093 if(DISEGNA==true)
00094 DisegnaCrocetta();
00095 else
00096 DISEGNA=true;
00097 event.Skip();
00098 }
00099
00100
00101
00102
00103 void PnlFoglio::OnRightDown(wxMouseEvent& event)
00104 {
00105 posizionereale=event.GetPosition();
00106 PopupMenu(PopFoglio);
00107 SetFocusIgnoringChildren();
00108
00109 event.Skip();
00110
00111 }
00112
00113
00114 void PnlFoglio::OnLeftDown(wxMouseEvent& event)
00115 { RimuoviSelezione();
00116 CancellaCrocetta();
00117 posizionereale=event.GetPosition();
00118 CalcUnscrolledPosition(posizionereale.x,posizionereale.y,&posizionevirtuale.x,&posizionevirtuale.y);
00119 DisegnaCrocetta();
00120 SetFocusIgnoringChildren();
00121 event.Skip();
00122 }
00123
00124
00125 void PnlFoglio::RimuoviSelezione()
00126 {
00127
00128 if(*(gestionepannello->IdentSelezione)!=0)
00129 {
00130 gestionepannello->Selezione->Show(0);
00131 gestionepannello->Selezione->SetWindowStyle(wxNO_3D|wxNO_BORDER);
00132 gestionepannello->Selezione->Show(1);
00133 gestionepannello->Selezione=0;
00134 *(gestionepannello->IdentSelezione)=0;
00135 }
00136 }
00137
00138
00139
00140 void PnlFoglio::MnuAggiungiGrafico2DClick(wxCommandEvent& event)
00141 {
00142 DISEGNA=false;
00143 CancellaCrocetta();
00144 wxWindow* buffer=new PnlGraphFrame((wxWindow*)this,ident,posizionereale,wxSize(300,300) ,wxNO_3D|wxSIMPLE_BORDER,_T("Grafico 2D"),gestionepannello );
00145 buffer->SetBackgroundColour(wxColour(0xff,0xff,0xff));
00146 gestionepannello->objects->NuovoNodo(buffer,ident);
00147 ident++;
00148 event.Skip();
00149 }
00150
00151 void PnlFoglio::MnuAggiungiGrafico3DClick(wxCommandEvent& event)
00152 {
00153 DISEGNA=false;
00154 CancellaCrocetta();
00155 wxWindow* buffer=new Graph3DFrame((wxWindow*)this,ident,posizionereale, wxSize(300,300) ,wxNO_3D|wxSIMPLE_BORDER,_T("Grafico 3D"),gestionepannello);
00156 gestionepannello->objects->NuovoNodo(buffer,ident);
00157 ident++;
00158 event.Skip();
00159 }
00160
00161 void PnlFoglio::MnuAggiungiEtichettaClick(wxCommandEvent& event)
00162 {
00163 DISEGNA=false;
00164 CancellaCrocetta();
00165 wxWindow* buffer=new PnlFunzione(this,wxSize(100,40),ident,posizionereale ,wxNO_3D|wxSIMPLE_BORDER,_T("Etichetta"),gestionepannello );
00166 gestionepannello->objects->NuovoNodo(buffer,ident);
00167 buffer->SetFocus();
00168 ident++;
00169 event.Skip();
00170 }
00171
00172 void PnlFoglio::OnGraphInfo(GraphInfoEvent& event)
00173 {
00174 ((wxFrame*)GetParent()->GetParent())->GetStatusBar()->SetStatusText(wxString(event.strobject,wxConvUTF8),2);
00175 ((wxFrame*)GetParent()->GetParent())->GetStatusBar()->SetStatusText(wxString(event.strposx,wxConvUTF8),3);
00176 ((wxFrame*)GetParent()->GetParent())->GetStatusBar()->SetStatusText(wxString(event.strposy,wxConvUTF8),4);
00177
00178
00179 }
00180
00181
00182
00183 void PnlFoglio::OnChar(wxKeyEvent& event)
00184 { wxSize dimensioni;
00185 wxWindow* pannello;
00186 bool POSIZIONEFUORI;
00187 dimensioni=GetSize();
00188 GetViewStart(&(posizionescroll.x),&(posizionescroll.y));
00189
00190
00191
00192
00193 if(*(gestionepannello->IdentSelezione)!=0)
00194 {
00195
00196 if((posizionereale.x>=(gestionepannello->Selezione)->GetPosition().x)&&(posizionereale.x<=((gestionepannello->Selezione)->GetPosition().x+(gestionepannello->Selezione)->GetSize().x))&&
00197 (posizionereale.y>=(gestionepannello->Selezione)->GetPosition().y)&&(posizionereale.y<=((gestionepannello->Selezione)->GetPosition().y+(gestionepannello->Selezione)->GetSize().y)))
00198 POSIZIONEFUORI=false;
00199 else
00200 { POSIZIONEFUORI=true;
00201 CancellaCrocetta();
00202 }
00203
00204 switch(event.GetKeyCode()) {
00205 case WXK_RIGHT:
00206 { posizionereale.x=(gestionepannello->Selezione)->GetPosition().x+(gestionepannello->Selezione)->GetSize().x;
00207 if(POSIZIONEFUORI)
00208
00209 posizionereale.y=(gestionepannello->Selezione)->GetPosition().y;
00210 break;
00211 }
00212 case WXK_LEFT:
00213 { posizionereale.x=gestionepannello->Selezione->GetPosition().x;
00214 if(POSIZIONEFUORI)
00215 posizionereale.y=(gestionepannello->Selezione)->GetPosition().y;
00216 break;
00217 }
00218 case WXK_UP:
00219 { posizionereale.y=gestionepannello->Selezione->GetPosition().y;
00220 if(POSIZIONEFUORI)
00221 posizionereale.x=(gestionepannello->Selezione)->GetPosition().x;
00222 break;
00223 }
00224 case WXK_DOWN:
00225 { posizionereale.y=gestionepannello->Selezione->GetPosition().y+gestionepannello->Selezione->GetSize().y;
00226 if(POSIZIONEFUORI)
00227 posizionereale.x=(gestionepannello->Selezione)->GetPosition().x;
00228 break;
00229 }
00230 }
00231 CalcUnscrolledPosition(posizionereale.x,posizionereale.y,&posizionevirtuale.x,&posizionevirtuale.y);
00232 RimuoviSelezione();
00233 }
00234
00235 switch(event.GetKeyCode()) {
00236
00237 case WXK_LEFT:
00238 if(posizionevirtuale.x>8)
00239 { CancellaCrocetta();
00240 posizionevirtuale.x=posizionevirtuale.x-8;
00241 if(posizionereale.x-8<=0)
00242 { posizionescroll.x--;
00243 Scroll(posizionescroll.x,posizionescroll.y);
00244 }
00245
00246
00247 CalcScrolledPosition(posizionevirtuale.x,posizionevirtuale.y,&posizionereale.x,&posizionereale.y);
00248
00249 if(gestionepannello->objects->ControllaPosizione(posizionereale,&pannello)!=true)
00250 { DISEGNA=false;
00251 ((TBasePanel*)pannello)->ImpostaSelezione();
00252 }else
00253 DisegnaCrocetta();
00254 }
00255 break;
00256
00257
00258 case WXK_RIGHT:
00259 if(posizionevirtuale.x<GetVirtualSize().GetWidth()-16)
00260 { CancellaCrocetta();
00261 posizionevirtuale.x=posizionevirtuale.x+8;
00262 if(dimensioni.x<posizionereale.x+16)
00263 {posizionescroll.x++;
00264 Scroll(posizionescroll.x,posizionescroll.y);
00265 }
00266 CalcScrolledPosition(posizionevirtuale.x,posizionevirtuale.y,&posizionereale.x,&posizionereale.y);
00267
00268 if(gestionepannello->objects->ControllaPosizione(posizionereale,&pannello)!=true)
00269 { DISEGNA=false;
00270 ((TBasePanel*)pannello)->ImpostaSelezione();
00271 }else
00272 DisegnaCrocetta();
00273
00274 }
00275 break;
00276
00277 case WXK_UP:
00278 if(posizionevirtuale.y>16)
00279 { CancellaCrocetta();
00280
00281 posizionevirtuale.y=posizionevirtuale.y-8;
00282 if(posizionereale.y-8<=0)
00283 { posizionescroll.y--;
00284 Scroll(posizionescroll.x,posizionescroll.y);
00285 }
00286 CalcScrolledPosition(posizionevirtuale.x,posizionevirtuale.y,&posizionereale.x,&posizionereale.y);
00287
00288 if(gestionepannello->objects->ControllaPosizione(posizionereale,&pannello)!=true)
00289 { DISEGNA=false;
00290 ((TBasePanel*)pannello)->ImpostaSelezione();
00291 }else
00292 DisegnaCrocetta();
00293
00294 }
00295 break;
00296
00297 case WXK_DOWN:
00298 if(posizionevirtuale.y<GetVirtualSize().GetHeight()-16)
00299 { CancellaCrocetta();
00300
00301 posizionevirtuale.y=posizionevirtuale.y+8;
00302 if(dimensioni.y<posizionereale.y+16)
00303 {posizionescroll.y++;
00304 Scroll(posizionescroll.x,posizionescroll.y);
00305 }
00306 CalcScrolledPosition(posizionevirtuale.x,posizionevirtuale.y,&posizionereale.x,&posizionereale.y);
00307
00308 if(gestionepannello->objects->ControllaPosizione(posizionereale,&pannello)!=true)
00309 { DISEGNA=false;
00310 ((TBasePanel*)pannello)->ImpostaSelezione();
00311 }else
00312 DisegnaCrocetta();
00313
00314 }
00315 break;
00316
00317
00318 case WXK_RETURN:
00319 CancellaCrocetta();
00320 posizionevirtuale.x=8;
00321 posizionevirtuale.y=posizionevirtuale.y+16;
00322 if(dimensioni.y<posizionereale.y+16)
00323 posizionescroll.y+=2;
00324
00325 Scroll(0,posizionescroll.y);
00326 CalcScrolledPosition(posizionevirtuale.x,posizionevirtuale.y,&posizionereale.x,&posizionereale.y);
00327
00328 if(gestionepannello->objects->ControllaPosizione(posizionereale,&pannello)!=true)
00329 { DISEGNA=false;
00330 ((TBasePanel*)pannello)->ImpostaSelezione();
00331 }else
00332 DisegnaCrocetta();
00333 break;
00334
00335
00336 case WXK_BACK:
00337 if(posizionevirtuale.y-16>0)
00338 { CancellaCrocetta();
00339 posizionevirtuale.x=8;
00340 posizionevirtuale.y=posizionevirtuale.y-16;
00341 if(posizionereale.y-16<0)
00342 posizionescroll.y-=2;
00343 Scroll(0,posizionescroll.y);
00344 CalcScrolledPosition(posizionevirtuale.x,posizionevirtuale.y,&posizionereale.x,&posizionereale.y);
00345 }
00346 if(gestionepannello->objects->ControllaPosizione(posizionereale,&pannello)!=true)
00347 { DISEGNA=false;
00348 ((TBasePanel*)pannello)->ImpostaSelezione();
00349 }else
00350 DisegnaCrocetta();
00351 break;
00352
00353
00354 case 312:
00355 posizionescroll.y-=dimensioni.y/8;
00356 if(posizionescroll.y<=0)
00357 posizionescroll.y=1;
00358
00359 Scroll(posizionescroll.x,posizionescroll.y);
00360 DisegnaCrocetta();
00361 break;
00362
00363 case 313:
00364 posizionescroll.y+=dimensioni.y/8;
00365 if(posizionescroll.y>=GetVirtualSize().GetHeight()/8)
00366 posizionescroll.y=GetVirtualSize().GetHeight()/8;
00367
00368 Scroll(posizionescroll.x,posizionescroll.y);
00369 DisegnaCrocetta();
00370 break;
00371
00372 case 314:
00373 posizionescroll.y=GetVirtualSize().GetHeight()/8 ;
00374 Scroll(posizionescroll.x,posizionescroll.y);
00375 DisegnaCrocetta();
00376 break;
00377
00378 case 315:
00379 posizionescroll.y=1;
00380 Scroll(posizionescroll.x,posizionescroll.y);
00381 DisegnaCrocetta();
00382 break;
00383
00384
00385 default:
00386 wxWindow* buffer=new PnlFunzione((wxWindow*)this,wxSize(100,40),ident,posizionereale ,wxNO_3D|wxSIMPLE_BORDER,_T("Etichetta"),gestionepannello,event.GetKeyCode() );
00387 gestionepannello->objects->NuovoNodo(buffer,ident);
00388 ident++;
00389 }
00390 }
00391
00392
00393 void PnlFoglio::DisegnaCrocetta()
00394 {
00395 CalcScrolledPosition(posizionevirtuale.x,posizionevirtuale.y,&posizionereale.x,&posizionereale.y);
00396
00397
00398 if((posizionereale.x>0)&&(posizionereale.x<GetSize().x)&&(posizionereale.y>0)&&(posizionereale.y<GetSize().y))
00399 {
00400 penna.SetColour(255,0,0);
00401 foglio->SetPen(penna);
00402 foglio->BeginDrawing();
00403
00404 foglio->DrawLine(posizionereale.x-5,posizionereale.y,posizionereale.x+5,posizionereale.y);
00405 foglio->DrawLine(posizionereale.x,posizionereale.y-5,posizionereale.x,posizionereale.y+5);
00406 foglio->EndDrawing();
00407 }
00408
00409 }
00410
00411 void PnlFoglio::CancellaCrocetta()
00412 {
00413
00414 if((posizionereale.x>0)&&(posizionereale.x<GetSize().x)&&(posizionereale.y>0)&&(posizionereale.y<GetSize().y))
00415 {
00416 penna.SetColour(255,255,255);
00417 foglio->SetPen(penna);
00418 foglio->BeginDrawing();
00419
00420 foglio->DrawLine(posizionereale.x-5,posizionereale.y,posizionereale.x+5,posizionereale.y);
00421 foglio->DrawLine(posizionereale.x,posizionereale.y-5,posizionereale.x,posizionereale.y+5);
00422 foglio->EndDrawing();
00423 }
00424
00425 }
00426
00427 wxMenu* PnlFoglio::GetPopUp()
00428 { return PopFoglio;
00429 }
00430
00431 void PnlFoglio::SetTreeItemId(wxTreeItemId Id)
00432 {
00433 TreeId=Id;
00434 }
00435
00436 wxTreeItemId PnlFoglio::GetTreeItemId()
00437 {
00438 return TreeId;
00439 }