MatOCAD Logo

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

MainFrm.cpp

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------
00002 //
00003 // Name:        MainFrm.cpp
00004 // Author:      Administrator
00005 // Created:     22/03/2005 15.08.31
00006 //
00007 //---------------------------------------------------------------------------
00008 
00009 #include "../include/MainFrm.h"
00010 
00011 
00012 //Do not add custom headers.
00013 //wx-dvcpp designer will remove them
00015 #include "../icons/MainFrm_XPM.xpm"
00016 #include "../icons/BtnUpdateTree_XPM.xpm"
00017 #include "../icons/BtnElimina_XPM.xpm"
00018 #include "../icons/BtnNewEti_XPM.xpm"
00019 #include "../icons/BtnModifica_XPM.xpm"
00020 #include "../icons/BtnNuovo3D_XPM.xpm"
00021 #include "../icons/BtnNuovo2D_XPM.xpm"
00022 #include "../icons/BtnAvanti_XPM.xpm"
00023 #include "../icons/BtnIndietro_XPM.xpm"
00024 #include "../icons/BtnChiudiFoglio_XPM.xpm"
00025 #include "../icons/BtnNuovoFoglio_XPM.xpm"
00027 
00028 
00029 //----------------------------------------------------------------------------
00030 // MainFrm
00031 //----------------------------------------------------------------------------
00032 //Add Custom Events only in the appropriate Block.
00033 // Code added in  other places will be removed by wx-dvcpp
00035 BEGIN_EVENT_TABLE(MainFrm,wxFrame)
00037 
00039 EVT_CLOSE(MainFrm::MainFrmClose)
00040 EVT_MENU(ID_BTNUPDATETREE,MainFrm::BtnUpdateTreeClick)
00041 EVT_MENU(ID_BTNELIMINA,MainFrm::BtnEliminaClick)
00042 EVT_MENU(ID_BTNNEWETI,MainFrm::BtnNewEtiClick)
00043 EVT_MENU(ID_BTNMODIFICA,MainFrm::BtnModificaClick)
00044 EVT_MENU(ID_BTNNUOVO3D,MainFrm::BtnNuovo3DClick)
00045 EVT_MENU(ID_BTNNUOVO2D,MainFrm::BtnNuovo2DClick)
00046 EVT_MENU(ID_BTNAVANTI,MainFrm::BtnAvantiClick)
00047 EVT_MENU(ID_BTNINDIETRO,MainFrm::BtnIndietroClick)
00048 EVT_MENU(ID_BTNCHIUDIFOGLIO,MainFrm::BtnChiudiFoglioClick)
00049 EVT_MENU(ID_BTNNUOVOFOGLIO,MainFrm::BtnNuovoFoglioClick1)
00050 EVT_MENU_RANGE(WINDOW_MENU_START, WINDOW_MENU_END, MainFrm::OnMenu)
00051 EVT_MENU(WINDOW_MENU_SHOW_ALL, MainFrm::OnShowAll)
00052 EVT_MENU(WINDOW_MENU_HIDE_ALL, MainFrm::OnShowAll)
00053 EVT_MENU_OPEN(MainFrm::OnMenuOpen)
00054 EVT_SIZE(MainFrm::OnSize)
00055 
00056 END_EVENT_TABLE()
00058 
00059 
00060 MainFrm::MainFrm( wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style )
00061         : wxFrame( parent, id, title, position, size, style),  m_ifm(NULL), count(0)
00062 {
00063     ident=1200;
00064     CreateGUIControls();
00065 
00066 
00067 
00068 }
00069 
00070 
00071 MainFrm::~MainFrm()
00072 {}
00073 
00074 
00075 void MainFrm::CreateGUIControls(void)
00076 {
00077     // create the interface management object
00078     m_ifm = new wxInterfaceManager(this);
00079 
00080     m_ifm->Initialize(true/*, IFM_NO_RESIZE_UPDATE*/);
00081     //m_ifm->SetInterfaceRect(wxRect(50,50,800,800));
00082 
00083     // specify the status bar pane to use for dispaly messages
00084     m_ifm->SetStatusMessagePane(0);
00085 
00086     // Add children to be managed
00087 
00088     // First we need to create the add child data object
00089     // We are using the default interface, so we use its child data object
00090     wxIFMDefaultChildData data;
00091 
00092     wxMenuBar *mb = new wxMenuBar;
00093     wxMenu *menu1 = new wxMenu;
00094     menu1->Append(WINDOW_MENU_SHOW_ALL, wxT("Show All Windows"));
00095     menu1->Append(WINDOW_MENU_HIDE_ALL, wxT("Hide All Windows"));
00096     mb->Append(menu1, wxT("View"));
00097     SetMenuBar(mb);
00098 
00099     StbMain = new wxStatusBar(this, ID_STBMAIN);
00100 
00101     int sizes[5];//vettore che contiene le dimensioni relative dei vari campi della status-bar
00102     sizes[0]=-1;
00103     sizes[1]=-2;
00104     sizes[2]=-2;
00105     sizes[3]=-1;
00106     sizes[4]=-1;
00107 
00108     StbMain->SetFieldsCount(5,sizes);
00109 
00110     TlbFogli = new wxToolBar(this, ID_TLBFOGLI, wxDefaultPosition, wxDefaultSize, wxTB_HORIZONTAL | wxTB_FLAT);
00111 
00112 
00113     wxBitmap BtnNuovoFoglio_BITMAP (BtnNuovoFoglio_XPM);
00114     wxBitmap BtnNuovoFoglio_DISABLE_BITMAP (wxNullBitmap);
00115     TlbFogli->AddTool(ID_BTNNUOVOFOGLIO, wxT(""), BtnNuovoFoglio_BITMAP, BtnNuovoFoglio_DISABLE_BITMAP, wxITEM_NORMAL, wxT("Nuovo Foglio"), wxT(""));
00116 
00117     wxBitmap BtnChiudiFoglio_BITMAP (BtnChiudiFoglio_XPM);
00118     wxBitmap BtnChiudiFoglio_DISABLE_BITMAP (wxNullBitmap);
00119     TlbFogli->AddTool(ID_BTNCHIUDIFOGLIO, wxT(""), BtnChiudiFoglio_BITMAP, BtnChiudiFoglio_DISABLE_BITMAP, wxITEM_NORMAL, wxT("Chiudi Foglio"), wxT(""));
00120 
00121     wxBitmap BtnIndietro_BITMAP (BtnIndietro_XPM);
00122     wxBitmap BtnIndietro_DISABLE_BITMAP (wxNullBitmap);
00123     TlbFogli->AddTool(ID_BTNINDIETRO, wxT(""), BtnIndietro_BITMAP, BtnIndietro_DISABLE_BITMAP, wxITEM_NORMAL, wxT("Foglio Precedente"), wxT(""));
00124 
00125     wxBitmap BtnAvanti_BITMAP (BtnAvanti_XPM);
00126     wxBitmap BtnAvanti_DISABLE_BITMAP (wxNullBitmap);
00127     TlbFogli->AddTool(ID_BTNAVANTI, wxT(""), BtnAvanti_BITMAP, BtnAvanti_DISABLE_BITMAP, wxITEM_NORMAL, wxT("Foglio Successivo"), wxT(""));
00128 
00129     TlbFogli->SetToolBitmapSize(wxSize(32,32));
00130     TlbFogli->Realize();
00131 
00132 
00133     TlbOggetti = new wxToolBar(this, ID_TLBOGGETTI, wxDefaultPosition, wxDefaultSize, wxTB_HORIZONTAL | wxTB_FLAT);
00134 
00135     wxBitmap BtnNuovo2D_BITMAP (BtnNuovo2D_XPM);
00136     wxBitmap BtnNuovo2D_DISABLE_BITMAP (wxNullBitmap);
00137     TlbOggetti->AddTool(ID_BTNNUOVO2D, wxT(""), BtnNuovo2D_BITMAP, BtnNuovo2D_DISABLE_BITMAP, wxITEM_NORMAL, wxT("Inserisci Grafico 2D"), wxT(""));
00138 
00139     wxBitmap BtnNuovo3D_BITMAP (BtnNuovo3D_XPM);
00140     wxBitmap BtnNuovo3D_DISABLE_BITMAP (wxNullBitmap);
00141     TlbOggetti->AddTool(ID_BTNNUOVO3D, wxT(""), BtnNuovo3D_BITMAP, BtnNuovo3D_DISABLE_BITMAP, wxITEM_NORMAL, wxT("Inserisci Grafico 3D"), wxT(""));
00142 
00143     wxBitmap BtnNewEti_BITMAP (BtnNewEti_XPM);
00144     wxBitmap BtnNewEti_DISABLE_BITMAP (wxNullBitmap);
00145     TlbOggetti->AddTool(ID_BTNNEWETI, wxT(""), BtnNewEti_BITMAP, BtnNewEti_DISABLE_BITMAP, wxITEM_NORMAL, wxT("inserisci nuova etichetta"), wxT(""));
00146 
00147     TlbOggetti->AddSeparator();
00148 
00149     wxBitmap BtnModifica_BITMAP (BtnModifica_XPM);
00150     wxBitmap BtnModifica_DISABLE_BITMAP (wxNullBitmap);
00151     TlbOggetti->AddTool(ID_BTNMODIFICA, wxT(""), BtnModifica_BITMAP, BtnModifica_DISABLE_BITMAP, wxITEM_NORMAL, wxT("Finestra Proprietà"), wxT(""));
00152 
00153     wxBitmap BtnElimina_BITMAP (BtnElimina_XPM);
00154     wxBitmap BtnElimina_DISABLE_BITMAP (wxNullBitmap);
00155     TlbOggetti->AddTool(ID_BTNELIMINA, wxT(""), BtnElimina_BITMAP, BtnElimina_DISABLE_BITMAP, wxITEM_NORMAL, wxT("Elimina Elemento Selezionato"), wxT(""));
00156 
00157     TlbOggetti->AddSeparator();
00158 
00159     wxBitmap BtnUpdateTree_BITMAP (BtnUpdateTree_XPM);
00160     wxBitmap BtnUpdateTree_DISABLE_BITMAP (wxNullBitmap);
00161     TlbOggetti->AddTool(ID_BTNUPDATETREE, wxT(""), BtnUpdateTree_BITMAP, BtnUpdateTree_DISABLE_BITMAP, wxITEM_NORMAL, wxT("Aggiornal'albero dei widget"), wxT(""));
00162 
00163     TlbOggetti->SetToolBitmapSize(wxSize(32,32));
00164     TlbOggetti->Realize();
00165 
00166 
00167 
00168 
00169     this->SetStatusBar(StbMain);
00170 
00171     data.m_name = wxT("Oggetti");
00172     data.m_type = IFM_CHILD_TOOLBAR;
00173     data.m_desiredSize.Set(40,40);
00174     data.m_minSize.Set(0,0);
00175     data.m_tabify = true; // make this child a tab of the previously added child
00176     data.m_orientation = IFM_ORIENTATION_TOP; // top of the frame
00177     m_windows.insert(wxWindowMap::value_type(count, TlbOggetti));
00178     GetMenuBar()->GetMenu(0)->AppendCheckItem(count, wxString::Format(wxT("Show Toolbar Oggetti")));
00179     //not nessesary any more: GetMenuBar()->Check(count, visible);
00180     TlbOggetti->SetSizeHints(0,0);
00181     data.m_child = m_windows[count++];
00182     data.m_hideable = true;
00183     m_ifm->AddChild(&data);
00184 
00185 
00186     data.m_name = wxT("Fogli");
00187     data.m_type = IFM_CHILD_TOOLBAR;
00188     data.m_desiredSize.Set(40,40);
00189     data.m_minSize.Set(0,0);
00190     data.m_orientation = IFM_ORIENTATION_TOP; // top of the frame
00191     m_windows.insert(wxWindowMap::value_type(count, TlbFogli));
00192     GetMenuBar()->GetMenu(0)->AppendCheckItem(count, wxString::Format(wxT("Show Toolbar Fogli")));
00193     //not nessesary any more: GetMenuBar()->Check(count, visible);
00194     TlbFogli->SetSizeHints(0,0);
00195     data.m_child = m_windows[count++];
00196     data.m_hideable = true;
00197     m_ifm->AddChild(&data);
00198 
00199     TabFogli = new NtbSheet(this, ID_TABFOGLI);
00200 
00201     TabFogli->SetSizeHints(0,0);
00202 
00203     m_ifm->SetContentWindow(TabFogli);
00204     this->SetTitle(wxT("MatOCAD"));
00205     this->Center();
00206     wxIcon MainFrm_ICON (MainFrm_XPM);
00207     this->SetIcon(MainFrm_XPM);
00208 
00209 
00210 
00211 
00212     // add some windows in a format most common to programming IDE's
00213     data.m_name = wxT("Object tree");
00214     data.m_type = IFM_CHILD_GENERIC;
00215     data.m_desiredSize.Set(150, 150);
00216     data.m_minSize.Set(60,20);
00217     data.m_tabify = false;
00218     data.m_orientation = IFM_ORIENTATION_LEFT; // bottom of the frame
00219     data.m_child = CreateTreeView();
00220     data.m_hideable = true;
00221     // prevent this window from being closed by the user
00222     // note that this call does not change any of the values of the data passed to it,
00223     // so we don't need to set everything after each call, and can use the same data
00224     // many times
00225     m_ifm->AddChild(&data);
00226     m_ifm->HideChild(m_windows[2]);
00227 
00228 
00229 
00230     m_ifm->Update();
00231 
00233     //settaggio della status bar
00234 
00235     //fine settaggio stb
00236 
00237 }
00238 
00239 /*
00240  * TabFogliPageChanged
00241  */
00242 void MainFrm::TabFogliPageChanged(wxNotebookEvent& event)
00243 {
00244     // insert your code here
00245 
00246 
00247     // insert your code here
00248     if(TabFogli->GetSelection()!=-1)
00249     {
00250 
00251         this->GetStatusBar()->SetStatusText(TabFogli->GetPageText(TabFogli->GetSelection()),1);
00252     }
00253     event.Skip();
00254 }
00255 
00256 void MainFrm::MainFrmClose(wxCloseEvent& event)
00257 {
00258 
00259     // shut down the interface management object
00260     m_ifm->Shutdown();
00261 
00262     // it is now safe to delete it
00263     delete m_ifm;
00264 
00265     event.Skip();
00266     Destroy();
00267 }
00268 
00269 
00270 
00271 
00272 /*
00273  * BtnNuovoFoglioClick
00274  */
00275 void MainFrm::BtnNuovoFoglioClick1(wxCommandEvent& event)
00276 {
00277 
00278 
00279     TabFogli->InsertPage();
00280 
00281     event.Skip();
00282 }
00283 
00284 /*
00285  * BtnModificaClick
00286  */
00287 void MainFrm::BtnModificaClick(wxCommandEvent& event)
00288 {
00289     // insert your code here
00290     wxCommandEvent c;
00291     PnlFoglio* foglio;
00292     PnlGraphFrame* graf2d;
00293     Graph3DFrame* graf3d;
00294     if(TabFogli->GetPageCount())
00295     {
00296         foglio=(PnlFoglio*)TabFogli->GetCurrentPage();
00297         if(*(foglio->gestionepannello->IdentSelezione)==2)
00298         {
00299             graf2d=(PnlGraphFrame*)(foglio->gestionepannello->Selezione);
00300             graf2d->Grafico->SettingsClick(c);
00301         }
00302 
00303         if(*(foglio->gestionepannello->IdentSelezione)==3)
00304         {
00305             graf3d=(Graph3DFrame*)(foglio->gestionepannello->Selezione);
00306             graf3d->Grafico->click_menu_popup_opz(c);
00307         }
00308     }
00309     else
00310     {
00311         wxMessageDialog messaggio(this,_T("Inserire almeno un foglio di lavoro"),_T("Matocad"),wxICON_HAND);
00312         messaggio.ShowModal();
00313 
00314     }
00315     event.Skip();
00316 }
00317 
00318 /*
00319  * BtnIndietroClick
00320  */
00321 void MainFrm::BtnIndietroClick(wxCommandEvent& event)
00322 {
00323     // insert your code here
00324     TabFogli->SetSelection(TabFogli->GetSelection()-1);
00325     event.Skip();
00326 
00327 }
00328 
00329 /*
00330  * BtnEliminaClick
00331  */
00332 void MainFrm::BtnEliminaClick(wxCommandEvent& event)
00333 {
00334     // insert your code here
00335     PnlFoglio* foglio;
00336 
00337     if(TabFogli->GetPageCount())
00338     {
00339         foglio=(PnlFoglio*)TabFogli->GetCurrentPage();
00340         if(*(foglio->gestionepannello->IdentSelezione)!=0)
00341             //Elimino fisicamente e dalla lista dei widget l'oggetto selezionato
00342             foglio->Elimina();
00343 
00344     }
00345     else
00346     {
00347         wxMessageDialog messaggio(this,_T("Inserire almeno un foglio di lavoro"),_T("Matocad"),wxICON_HAND);
00348         messaggio.ShowModal();
00349     }
00350     event.Skip();
00351 
00352 }
00353 
00354 /*
00355  * BtnAvantiClick
00356  */
00357 void MainFrm::BtnAvantiClick(wxCommandEvent& event)
00358 {
00359     // insert your code here
00360     TabFogli->SetSelection(TabFogli->GetSelection()+1);
00361     event.Skip();
00362 }
00363 
00364 /*
00365  * BtnNuovo2DClick
00366  */
00367 void MainFrm::BtnNuovo2DClick(wxCommandEvent& event)
00368 {
00369     // insert your code here
00370     wxCommandEvent c;
00371     PnlFoglio* foglio;
00372     if(TabFogli->GetPageCount())
00373     {
00374         foglio=(PnlFoglio*)TabFogli->GetCurrentPage();
00375         foglio->MnuAggiungiGrafico2DClick(c);
00376         event.Skip();
00377     }
00378     else
00379     {
00380         wxMessageDialog messaggio(this,_T("Inserire almeno un foglio di lavoro"),_T("Matocad"),wxICON_HAND);
00381         messaggio.ShowModal();
00382     }
00383 
00384 }
00385 
00386 /*
00387  * BtnChiudiFoglioClick
00388  */
00389 void MainFrm::BtnChiudiFoglioClick(wxCommandEvent& event)
00390 {
00391     // insert your code here
00392     TabFogli->DeletePage(TabFogli->GetSelection());
00393     event.Skip();
00394 }
00395 
00396 /*
00397  * BtnNuovo3DClick
00398  */
00399 void MainFrm::BtnNuovo3DClick(wxCommandEvent& event)
00400 {
00401     wxCommandEvent c;
00402     PnlFoglio* foglio;
00403     if(TabFogli->GetPageCount())
00404     {
00405         foglio=(PnlFoglio*)TabFogli->GetCurrentPage();
00406         foglio->MnuAggiungiGrafico3DClick(c);
00407         event.Skip();
00408     }
00409     else
00410     {
00411         wxMessageDialog messaggio(this,_T("Inserire almeno un foglio di lavoro"),_T("Matocad"),wxICON_HAND);
00412         messaggio.ShowModal();
00413     }
00414     event.Skip();
00415 }
00416 
00417 /*
00418  * BtnNewEtiClick
00419  */
00420 void MainFrm::BtnNewEtiClick(wxCommandEvent& event)
00421 {
00422     // insert your code here
00423     event.Skip();
00424     wxCommandEvent c;
00425     PnlFoglio* foglio;
00426     if(TabFogli->GetPageCount())
00427     {
00428         foglio=(PnlFoglio*)TabFogli->GetCurrentPage();
00429         foglio->MnuAggiungiEtichettaClick(c);
00430         event.Skip();
00431     }
00432     else
00433     {
00434         wxMessageDialog messaggio(this,_T("Inserire almeno un foglio di lavoro"),_T("Matocad"),wxICON_HAND);
00435         messaggio.ShowModal();
00436     }
00437     event.Skip();
00438 }
00439 
00440 /*
00441  * BtnUpdateTreeClick
00442  */
00443 void MainFrm::BtnUpdateTreeClick(wxCommandEvent& event)
00444 {
00445     // insert your code here
00446     if(!m_ifm->IsChildVisible(m_windows[2]))
00447         m_ifm->ShowChild(m_windows[2],true,true);
00448     WxPanel1->Fill();
00449 }
00450 
00451 void MainFrm::OnMenu(wxCommandEvent &event)
00452 {
00453     // hide or show the appropriate window
00454     m_ifm->ShowChild(m_windows[event.GetId()], event.IsChecked(), true);
00455 }
00456 
00457 void MainFrm::OnMenuOpen(wxMenuEvent &event)
00458 {
00459     wxMenu *menu = GetMenuBar()->GetMenu(0);
00460     for(int i = 0; i < count; i++)
00461         menu->Check(i, m_ifm->IsChildVisible(m_windows[i]));
00462 }
00463 
00464 wxWindow *MainFrm::CreateTreeView(bool visible)
00465 {
00466     WxPanel1 = new PnlObjTree(this, ID_WXPANEL1, TabFogli);
00467     m_windows.insert(wxWindowMap::value_type(count, WxPanel1));
00468     GetMenuBar()->GetMenu(0)->AppendCheckItem(count, wxString::Format(wxT("Show Tree View")));
00469     //not nessesary any more: GetMenuBar()->Check(count, visible);
00470     WxPanel1->SetSizeHints(0,0);
00471     return m_windows[count++];
00472 }
00473 
00474 void MainFrm::OnShowAll(wxCommandEvent &event)
00475 {
00476     bool show;
00477     if( event.GetId() == WINDOW_MENU_SHOW_ALL )
00478         show = true;
00479     else
00480         show = false;
00481 
00482     // hide or show all components, but don't update the interface imediately
00483     for( wxWindowMap::iterator i = m_windows.begin(), end = m_windows.end(); i != end; i++ )
00484     {
00485         m_ifm->ShowChild(i->second, show, false);
00486         //not nessesary any more: GetMenuBar()->Check(i->first, show);
00487     }
00488 
00489     // now update the interface, including floating windows
00490     m_ifm->Update(IFM_DEFAULT_RECT, true);
00491 }
00492 
00493 void MainFrm::OnSize(wxSizeEvent& event)
00494 {
00495     if(m_ifm!=NULL)
00496         m_ifm->Update();
00497     event.Skip();
00498 }

 

SourceForge Logo