#include "stdafx.h" #include "MainFrame.h" #include "ConfigTreeCtrl.h" #include "ValueListCtrl.h" // Singleton MainFrame* MainFrame::m_pInstance = 0; // IDs for the controls and the menu commands BEGIN_EVENT_TABLE(MainFrame, wxFrame) EVT_MENU(FILE_NEW_PERSISTENT_HEAP, MainFrame::OnFileNewPersistentHeap) EVT_MENU(FILE_NEW_TRANSIENT_HEAP, MainFrame::OnFileNewTransientHeap) EVT_MENU(FILE_OPEN_PERSISTENT_HEAP, MainFrame::OnFileOpenPersistentHeap) EVT_MENU(FILE_OPEN_REGISTRY, MainFrame::OnFileOpenRegistry) EVT_MENU(FILE_EXPORT, MainFrame::OnFileExport) EVT_MENU(FILE_IMPORT, MainFrame::OnFileImport) EVT_MENU(QUIT, MainFrame::OnQuit) EVT_MENU(ABOUT, MainFrame::OnAbout) END_EVENT_TABLE() // frame constructor MainFrame::MainFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame((wxFrame *)0, -1, title, pos, size), m_pConfig(0) { m_pInstance = this; // Create a persistent heap based configuration ACE_Configuration_Heap* pHeapConfig = new ACE_Configuration_Heap; pHeapConfig->open(); m_pConfig = pHeapConfig; // set the frame icon SetIcon(wxICON(mondrian)); // Create Splitter m_pSplitter = new wxSplitterWindow(this, -1); wxSize sz( m_pSplitter->GetSize() ); sz.SetWidth(sz.GetWidth() / 2); // List Control m_pListCtrl = new ValueListCtrl(m_pSplitter, -1, wxDefaultPosition, sz); // Tree Control m_pTreeCtrl = new ConfigTreeCtrl(m_pSplitter, FRAME_TREE, wxDefaultPosition, sz, wxTR_EDIT_LABELS | wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT); m_pTreeCtrl->SetpListCtrl(m_pListCtrl); // Setup splitter m_pSplitter->SplitVertically(m_pTreeCtrl, m_pListCtrl); m_pSplitter->SetMinimumPaneSize(100); m_pSplitter->SetSashPosition(size.GetWidth() / 3); // create a menu bar wxMenu *menuFile = new wxMenu("", wxMENU_TEAROFF); menuFile->Append(FILE_NEW_PERSISTENT_HEAP, "New Persistent Heap", "Create a new persistent heap"); menuFile->Append(FILE_NEW_TRANSIENT_HEAP, "New Transient Heap", "Create a new transient heap"); menuFile->Append(FILE_OPEN_PERSISTENT_HEAP, "Open Persistent Heap", "Open Persistent Heap"); #if defined (ACE_WIN32) menuFile->Append(FILE_OPEN_REGISTRY, "Open Win32 Registry", "Open Win32 Registry"); #endif menuFile->AppendSeparator(); menuFile->Append(FILE_IMPORT, "Import from INI file", "Import from INI file"); menuFile->Append(FILE_EXPORT, "Export to INI file", "Export to INI file"); menuFile->AppendSeparator(); menuFile->Append(ABOUT, "&About...\tCtrl-A", "Show about dialog"); menuFile->AppendSeparator(); menuFile->Append(QUIT, "E&xit\tAlt-X", "Quit this program"); // now append the freshly created menu to the menu bar... wxMenuBar *menuBar = new wxMenuBar(); menuBar->Append(menuFile, "&File"); // ... and attach this menu bar to the frame SetMenuBar(menuBar); #if wxUSE_STATUSBAR CreateStatusBar(2); SetStatusText("Ready"); #endif // wxUSE_STATUSBAR } MainFrame::~MainFrame() { delete m_pConfig; m_pInstance = 0; } MainFrame* MainFrame::Instance() { assert(m_pInstance); return m_pInstance; } // event handlers void MainFrame::OnSize(wxSizeEvent& event) { wxLayoutAlgorithm layout; layout.LayoutFrame(this, m_pListCtrl); } void MainFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { // TRUE is to force the frame to close Close(TRUE); } void MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxString msg; msg.Printf( _T("Configuration Viewer v1.0\nWritten by Chris Hafey (chris@stentorsoft.com)\n")); wxMessageBox(msg, "About", wxOK | wxICON_INFORMATION, this); } void MainFrame::OnFileNewPersistentHeap(wxCommandEvent& event) { wxFileDialog Dlg(this, "Enter Filename:", "", "", "*.*", 0); if(Dlg.ShowModal() != wxID_OK) { return; } delete m_pConfig; ACE_Configuration_Heap* pHeapConfig = new ACE_Configuration_Heap; pHeapConfig->open(Dlg.GetFilename()); SetNewConfig(pHeapConfig); } void MainFrame::OnFileNewTransientHeap(wxCommandEvent& event) { delete m_pConfig; ACE_Configuration_Heap* pHeapConfig = new ACE_Configuration_Heap; pHeapConfig->open(); SetNewConfig(pHeapConfig); } void MainFrame::OnFileOpenPersistentHeap(wxCommandEvent& event) { wxFileDialog Dlg(this, "Choose a file", "", "", "*.*", wxOPEN); if(Dlg.ShowModal() != wxID_OK) { return; } delete m_pConfig; ACE_Configuration_Heap* pHeapConfig = new ACE_Configuration_Heap; pHeapConfig->open(Dlg.GetFilename()); SetNewConfig(pHeapConfig); } void MainFrame::OnFileOpenRegistry(wxCommandEvent& event) { #if defined (ACE_WIN32) wxTextEntryDialog Dlg(this, "Enter Root:"); if(Dlg.ShowModal() != wxID_OK) { return; } HKEY Root = ACE_Configuration_Win32Registry::resolve_key(HKEY_LOCAL_MACHINE, Dlg.GetValue(), 0); ACE_Configuration_Win32Registry* pWin32Reg = new ACE_Configuration_Win32Registry(Root);; delete m_pConfig; SetNewConfig(pWin32Reg); #endif } void MainFrame::OnFileExport(wxCommandEvent& event) { wxFileDialog Dlg(this, "Enter Filename:", "", "", "*.*",0); if(Dlg.ShowModal() != wxID_OK) { return; } m_pConfig->export_config(Dlg.GetFilename()); } void MainFrame::OnFileImport(wxCommandEvent& event) { wxFileDialog Dlg(this, "Choose a file", "", "", "*.*", wxOPEN); if(Dlg.ShowModal() != wxID_OK) { return; } m_pConfig->import_config(Dlg.GetFilename()); SetNewConfig(m_pConfig); } void MainFrame::SetNewConfig(ACE_Configuration* pConfig) { m_pConfig = pConfig; m_pListCtrl->ChangeConfig(pConfig); m_pTreeCtrl->ChangeConfig(pConfig); }