MatOCAD Logo

Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

PnlObjTree.cpp

Go to the documentation of this file.
00001 #include "../../include/ObjectTree/PnlObjTree.h"
00002 #include "../../icons/RootNode_XPM.xpm" //0
00003 #include "../../icons/LblNode_XPM.xpm"  //1
00004 #include "../../icons/G2DNode_XPM.xpm"  //2
00005 #include "../../icons/G3DNode_XPM.xpm"  //3
00006 #include "../../icons/SheetNode_XPM.xpm"  //4
00007 #include "../../icons/FxNode_XPM.xpm"  //5
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     //0
00038 
00039     wxBitmap RootNode_BITMAP (RootNode_XPM);
00040     ImlIcons->Add(RootNode_BITMAP);
00041 
00042     //1
00043 
00044     wxBitmap LblNode_BITMAP (LblNode_XPM);
00045     ImlIcons->Add(LblNode_BITMAP);
00046 
00047     //2
00048 
00049     wxBitmap G2DNode_BITMAP (G2DNode_XPM);
00050     ImlIcons->Add(G2DNode_BITMAP);
00051 
00052     //3
00053 
00054     wxBitmap G3DNode_BITMAP (G3DNode_XPM);
00055     ImlIcons->Add(G3DNode_BITMAP);
00056 
00057     //4
00058 
00059     wxBitmap SheetNode_BITMAP (SheetNode_XPM);
00060     ImlIcons->Add(SheetNode_BITMAP);
00061 
00062     //5
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                 //Variables to store the scroll coefficients
00201                 int xscroll, yscroll;
00202                 ((PnlFoglio*)obj->GetParent())->GetScrollPixelsPerUnit(&xscroll, &yscroll);//Get the scroll coefficients
00203                 ((PnlFoglio*)obj->GetParent())->Scroll(obj->GetPosition().x/xscroll,obj->GetPosition().y/yscroll);//Scrolls the Shett to the selected object
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                     //Simulo il click su uno specifico tab
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 

 

SourceForge Logo