00001 #include "../../include/ObjectTree/PnlObjTree.h"
00002 #include "../../icons/RootNode_XPM.xpm"
00003 #include "../../icons/LblNode_XPM.xpm"
00004 #include "../../icons/G2DNode_XPM.xpm"
00005 #include "../../icons/G3DNode_XPM.xpm"
00006 #include "../../icons/SheetNode_XPM.xpm"
00007 #include "../../icons/FxNode_XPM.xpm"
00008
00009 IMPLEMENT_CLASS(PnlObjTree,wxPanel)
00010
00011 BEGIN_EVENT_TABLE(PnlObjTree,wxPanel)
00012 EVT_SIZE(PnlObjTree::OnSize)
00013 EVT_TREE_SEL_CHANGED(1000, PnlObjTree::OnSelectionChanged)
00014 EVT_TREE_ITEM_MENU(1000, PnlObjTree::OnItemMenu)
00015 EVT_TREE_KEY_DOWN(1000, PnlObjTree::OnKeyDown)
00016 END_EVENT_TABLE()
00017
00018 PnlObjTree::PnlObjTree(wxWindow* parent,
00019 wxWindowID id ,
00020 NtbSheet* _source,
00021 const wxPoint& pos ,
00022 const wxSize& size ,
00023 long style ,
00024 const wxString& name): wxPanel(parent,
00025 id,
00026 pos,
00027 size,
00028 style,
00029 name)
00030 {
00031 source=_source;
00032
00033 ObjTree= new wxTreeCtrl(this,1000,wxDefaultPosition,this->GetSize());
00034
00035 ImlIcons= new wxImageList(16,16);
00036
00037
00038
00039 wxBitmap RootNode_BITMAP (RootNode_XPM);
00040 ImlIcons->Add(RootNode_BITMAP);
00041
00042
00043
00044 wxBitmap LblNode_BITMAP (LblNode_XPM);
00045 ImlIcons->Add(LblNode_BITMAP);
00046
00047
00048
00049 wxBitmap G2DNode_BITMAP (G2DNode_XPM);
00050 ImlIcons->Add(G2DNode_BITMAP);
00051
00052
00053
00054 wxBitmap G3DNode_BITMAP (G3DNode_XPM);
00055 ImlIcons->Add(G3DNode_BITMAP);
00056
00057
00058
00059 wxBitmap SheetNode_BITMAP (SheetNode_XPM);
00060 ImlIcons->Add(SheetNode_BITMAP);
00061
00062
00063
00064 wxBitmap FxNode_BITMAP (FxNode_XPM);
00065 ImlIcons->Add(FxNode_BITMAP);
00066
00067
00068 ObjTree->SetImageList(ImlIcons);
00069
00070
00071
00072
00073
00074
00075 }
00076
00077
00078 void PnlObjTree::OnSize(wxSizeEvent& event)
00079 {
00080 ObjTree->SetSize(GetSize());
00081
00082 event.Skip();
00083 }
00084
00085
00086 void PnlObjTree::Fill()
00087 {
00088 ItdTreeNode* data;
00089
00090 wxTreeItemId NodeRoot;
00091 ObjTree->DeleteAllItems();
00092 NodeRoot=ObjTree->AddRoot(_T("Root"),0);
00093
00094
00095
00096 if(source->GetPageCount()>0)
00097 {
00098 for(int i=0;i<(int)(source->GetPageCount());i++)
00099 {
00100
00101 PnlFoglio* Sheet=(PnlFoglio*)source->GetPage(i);
00102
00103 data= new ItdTreeNode(Sheet,4,i);
00104
00105 wxTreeItemId NodeSheet=ObjTree->AppendItem(NodeRoot,source->GetPageText(i),4,-1,data);
00106
00107
00108
00109 for(int j=1;j<Sheet->gestionepannello->objects->numeroelementi+1; j++)
00110 {
00111 TBasePanel* Object=(TBasePanel*)Sheet->gestionepannello->objects->ExtractObject(j);
00112
00113
00114
00115
00116
00117
00118 switch(Object->codice)
00119 {
00120 case 1:
00121 {
00122 wxString id;
00123 id.Printf(_T("Etichetta:%d"), Object->GetId());
00124 data= new ItdTreeNode(Object,1,i);
00125 wxTreeItemId NodeObject=ObjTree->AppendItem(NodeSheet,id,1,-1,data);
00126 break;
00127 }
00128 case 2:
00129 {
00130 wxString id;
00131 id.Printf(_T("Grafico2D:%d"), Object->GetId());
00132 data= new ItdTreeNode(Object,2,i);
00133 wxTreeItemId NodeObject=ObjTree->AppendItem(NodeSheet,id,2,-1,data);
00134 FillFunction((PnlGraphFrame*)Object,NodeObject);
00135 break;
00136 }
00137 case 3:
00138 {
00139 wxString id;
00140 id.Printf(_T("Grafico3D:%d"), Object->GetId());
00141 data= new ItdTreeNode(Object,3,i);
00142 wxTreeItemId NodeObject=ObjTree->AppendItem(NodeSheet,id,3,-1,data);
00143 FillFunction((Graph3DFrame*)Object,NodeObject);
00144 break;
00145 }
00146
00147
00148 }
00149
00150 }
00151 }
00152 }
00153 ObjTree->Expand(NodeRoot);
00154 }
00155
00156
00157 void PnlObjTree::FillFunction(PnlGraphFrame* Object,wxTreeItemId NodeObject)
00158 {
00159 TLista* listafunzioni=&Object->Grafico->options.functions;
00160
00161 for(int i=1; i<=listafunzioni->nelements; i++)
00162 {
00163 wxTreeItemId NodeFunction=ObjTree->AppendItem(NodeObject,wxString(listafunzioni->ExtractFunction(i),wxConvUTF8),5);
00164 if(listafunzioni->ExtractDrawFlag(i))
00165 ObjTree->SetItemBold(NodeFunction);
00166 }
00167
00168 }
00169
00170 void PnlObjTree::FillFunction(Graph3DFrame* Object,wxTreeItemId NodeObject)
00171 {
00172 TLista3D* listafunzioni=&Object->Grafico->opzioni;
00173
00174 for(int i=1; i<=listafunzioni->numeroelementi; i++)
00175 {
00176
00177 wxTreeItemId NodeFunction=ObjTree->AppendItem(NodeObject,wxString(listafunzioni->EstraiFunzione(i),wxConvUTF8),5);
00178 if(listafunzioni->EstraiFlagDisegno(i))
00179 ObjTree->SetItemBold(NodeFunction);
00180 }
00181
00182 }
00183
00184 void PnlObjTree::OnSelectionChanged(wxTreeEvent& event)
00185 {
00186
00187
00188
00189 ItdTreeNode* data=(ItdTreeNode*)ObjTree->GetItemData(event.GetItem());
00190 if(data!=NULL)
00191 {
00192 wxWindow* obj=data->GetObj();
00193 if(obj!=NULL)
00194 {
00195 source->SetSelection(data->GetPageN());
00196 if((data->GetType()==1)||(data->GetType()==2)||(data->GetType()==3))
00197 {
00198 ((TBasePanel*)obj)->ImpostaSelezione();
00199
00200
00201 int xscroll, yscroll;
00202 ((PnlFoglio*)obj->GetParent())->GetScrollPixelsPerUnit(&xscroll, &yscroll);
00203 ((PnlFoglio*)obj->GetParent())->Scroll(obj->GetPosition().x/xscroll,obj->GetPosition().y/yscroll);
00204 }
00205 else
00206 ObjTree->Expand(event.GetItem());
00207 }
00208 }
00209
00210 }
00211
00212 void PnlObjTree::OnItemMenu(wxTreeEvent& event)
00213 {
00214
00215
00216
00217 ItdTreeNode* data=(ItdTreeNode*)ObjTree->GetItemData(event.GetItem());
00218 if(data!=NULL)
00219 {
00220 wxWindow* obj=data->GetObj();
00221 if(obj!=NULL)
00222 {
00223 switch(data->GetType())
00224 {
00225 case 1:
00226 ((TBasePanel*)obj)->PopupMenu(((TBasePanel*)obj)->GetPopUp());
00227 break;
00228 case 2:
00229 if(wxGetKeyState(WXK_SHIFT))
00230 ((PnlGraphFrame*)obj)->Grafico->PopupMenu(((PnlGraphFrame*)obj)->Grafico->GetPopUp());
00231 else
00232 ((TBasePanel*)obj)->PopupMenu(((TBasePanel*)obj)->GetPopUp());
00233 break;
00234 case 3:
00235 {
00236 if(wxGetKeyState(WXK_SHIFT))
00237 ((Graph3DFrame*)obj)->Grafico->PopupMenu(((Graph3DFrame*)obj)->Grafico->GetPopUp());
00238 else
00239 ((TBasePanel*)obj)->PopupMenu(((TBasePanel*)obj)->GetPopUp());
00240 break;
00241 }
00242 case 4:
00243 {
00244
00245 source->click_position=data->GetPageN();
00246 if(wxGetKeyState(WXK_SHIFT))
00247 ((PnlFoglio*)obj)->PopupMenu(((PnlFoglio*)obj)->GetPopUp());
00248 else
00249 source->PopupMenu(source->GetPopUp());
00250 break;
00251 }
00252
00253 }
00254
00255
00256 }
00257 }
00258
00259 event.Skip();
00260
00261 }
00262
00263 void PnlObjTree::OnKeyDown(wxTreeEvent& event)
00264 {
00265 switch(event.GetKeyCode())
00266 {
00267 case WXK_F5:
00268 Fill();
00269 break;
00270 case WXK_DELETE:
00271 {
00272 ItdTreeNode* data=(ItdTreeNode*)ObjTree->GetItemData(ObjTree->GetSelection());
00273 if(data!=NULL)
00274 {
00275 wxWindow* obj=data->GetObj();
00276 if(obj!=NULL)
00277 {
00278 switch(data->GetType())
00279 {
00280 case 1:
00281 case 2:
00282 case 3:
00283 {
00284 ((TBasePanel*)obj)->Elimina();
00285 break;
00286 }
00287 case 4:
00288 {
00289
00290 source->DeletePage(data->GetPageN());
00291 break;
00292 }
00293
00294 }
00295
00296
00297 }
00298 }
00299 }
00300
00301
00302
00303 }
00304 event.Skip();
00305 }
00306
00307
00308
00309