summaryrefslogtreecommitdiff
path: root/ACE/examples/ConfigViewer/ConfigTreeCtrl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/ConfigViewer/ConfigTreeCtrl.cpp')
-rw-r--r--ACE/examples/ConfigViewer/ConfigTreeCtrl.cpp229
1 files changed, 229 insertions, 0 deletions
diff --git a/ACE/examples/ConfigViewer/ConfigTreeCtrl.cpp b/ACE/examples/ConfigViewer/ConfigTreeCtrl.cpp
new file mode 100644
index 00000000000..60234c92537
--- /dev/null
+++ b/ACE/examples/ConfigViewer/ConfigTreeCtrl.cpp
@@ -0,0 +1,229 @@
+// $Id$
+#include "stdafx.h"
+#include "ConfigTreeCtrl.h"
+#include "MainFrame.h"
+#include "ValueDlg.h"
+#include "ValueListCtrl.h"
+
+enum {CFGNEWKEY=100, CFGNEWSTRING, CFGNEWUINT, CFGNEWBINARY, CFGNEWSUBMENU, CFGFIND, CFGDELETE, CFGRENAME, CFGCOPYKEYNAME};
+
+
+BEGIN_EVENT_TABLE(ConfigTreeCtrl, wxTreeCtrl)
+ EVT_RIGHT_DOWN(ConfigTreeCtrl::OnRightDown)
+ EVT_RIGHT_UP(ConfigTreeCtrl::OnRightUp)
+ EVT_MENU(CFGNEWKEY, ConfigTreeCtrl::OnNewKey)
+ EVT_MENU(CFGNEWSTRING, ConfigTreeCtrl::OnNewString)
+ EVT_MENU(CFGNEWUINT, ConfigTreeCtrl::OnNewUINT)
+ EVT_MENU(CFGNEWBINARY, ConfigTreeCtrl::OnNewBinary)
+ EVT_MENU(CFGFIND, ConfigTreeCtrl::OnFind)
+ EVT_MENU(CFGDELETE, ConfigTreeCtrl::OnDelete)
+ EVT_TREE_SEL_CHANGED(FRAME_TREE, ConfigTreeCtrl::OnSelChanged)
+END_EVENT_TABLE()
+
+
+ConfigTreeCtrl::ConfigTreeCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name)
+: wxTreeCtrl(parent, id, pos, size, style, validator, name)
+{
+ // Load the tree
+ LoadTree();
+}
+
+ConfigTreeCtrl::~ConfigTreeCtrl()
+{
+}
+
+void ConfigTreeCtrl::LoadTree()
+{
+ m_pConfig = MainFrame::Instance()->GetpConfig();
+ const ACE_Configuration_Section_Key& Key = m_pConfig->root_section();
+ wxTreeItemId Root = AppendItem(GetRootItem(), "Root");
+ LoadSection(Root, Key);
+}
+
+void ConfigTreeCtrl::LoadSection(wxTreeItemId& ParentItem, const ACE_Configuration_Section_Key& Key)
+{
+ ACE_TString Name;
+ int Index = 0;
+ while(!m_pConfig->enumerate_sections(Key, Index, Name))
+ {
+ wxTreeItemId Item = AppendItem(ParentItem, Name.fast_rep());
+ ACE_Configuration_Section_Key Child;
+ m_pConfig->open_section(Key, Name.fast_rep(), 0, Child);
+ LoadSection( Item, Child);
+ ++Index;
+ }
+}
+
+void ConfigTreeCtrl::OnRightDown(wxMouseEvent& event)
+{
+ //EndEditLabel(TRUE);
+ int Flags = wxTREE_HITTEST_ONITEMLABEL | wxTREE_HITTEST_ONITEMICON;
+ long ItemID = HitTest(wxPoint(event.m_x, event.m_y), Flags);
+ SelectItem(ItemID);
+}
+
+void ConfigTreeCtrl::OnRightUp(wxMouseEvent& event)
+{
+ wxTreeItemId ItemID = GetSelection();
+
+ wxMenu* pMenu = new wxMenu;
+ wxMenu* pNewMenu = new wxMenu;
+ pNewMenu->Append(CFGNEWKEY, "Key");
+ pNewMenu->AppendSeparator();
+ pNewMenu->Append(CFGNEWSTRING, "String");
+ pNewMenu->Append(CFGNEWUINT, "Unsigned Int");
+ //pNewMenu->Append(CFGNEWBINARY, "Binary");
+ pMenu->Append(CFGNEWSUBMENU, "New", pNewMenu);
+ pMenu->Append(CFGFIND, "Find");
+ pMenu->AppendSeparator();
+ pMenu->Append(CFGDELETE, "Delete");
+ //pMenu->Append(CFGRENAME, "Rename"); // not supported
+ //pMenu->AppendSeparator();
+ //pMenu->Append(CFGCOPYKEYNAME, "Copy Key Name"); // not supported
+ PopupMenu(pMenu, event.m_x, event.m_y);
+ delete pMenu;
+}
+
+void ConfigTreeCtrl::ResolveKey(wxTreeItemId Item, ACE_Configuration_Section_Key& Key)
+{
+ wxTreeItemId OriginalItem = Item;
+ ACE_TString Path("");
+ ACE_TString Temp;
+ while(Item != GetRootItem())
+ {
+ wxString Text = GetItemText(Item);
+ Temp = Path;
+ Path = Text.c_str();
+ if(Temp.length())
+ {
+ Path += "\\";
+ Path += Temp;
+ }
+ Item = GetParent(Item);
+ }
+ if(Path.length())
+ {
+ m_pConfig->expand_path(m_pConfig->root_section(), Path, Key, 0);
+ }
+ else
+ {
+ Key = m_pConfig->root_section();
+ }
+}
+
+
+void ConfigTreeCtrl::OnNewKey(wxCommandEvent& event)
+{
+ wxTextEntryDialog Dlg(this, "Test", "Key Name");
+ if(Dlg.ShowModal() != wxID_OK)
+ {
+ return;
+ }
+
+ wxString Value = Dlg.GetValue();
+
+ // Get the key for this node
+ wxTreeItemId ItemID = GetSelection();
+ ACE_Configuration_Section_Key Key, NewKey;
+ ResolveKey(ItemID, Key);
+ m_pConfig->open_section(Key, Value, 1, NewKey);
+ wxTreeItemId NewItemID = AppendItem(ItemID, Value);
+ EnsureVisible(NewItemID);
+}
+
+void ConfigTreeCtrl::OnNewString(wxCommandEvent& event)
+{
+ ValueDlg Dlg(this, true);
+ if(Dlg.ShowModal() != wxID_OK)
+ {
+ return;
+ }
+
+ ACE_TString Value = Dlg.GetStringValue();
+ ACE_TString Name = Dlg.GetName();
+
+ // Get the key for this node
+ wxTreeItemId ItemID = GetSelection();
+ ACE_Configuration_Section_Key Key;
+ ResolveKey(ItemID, Key);
+ m_pConfig->set_string_value(Key, Name.fast_rep(), Value);
+ m_pListCtrl->DisplaySection(Key);
+}
+
+void ConfigTreeCtrl::OnNewUINT(wxCommandEvent& event)
+{
+ ValueDlg Dlg(this, false);
+ if(Dlg.ShowModal() != wxID_OK)
+ {
+ return;
+ }
+
+ u_int Value = Dlg.GetUINTValue();
+ ACE_TString Name = Dlg.GetName();
+
+ // Get the key for this node
+ wxTreeItemId ItemID = GetSelection();
+ ACE_Configuration_Section_Key Key;
+ ResolveKey(ItemID, Key);
+ m_pConfig->set_integer_value(Key, Name.fast_rep(), Value);
+ m_pListCtrl->DisplaySection(Key);
+}
+
+void ConfigTreeCtrl::OnNewBinary(wxCommandEvent& event)
+{
+ assert(0);
+ /*
+ ValueDlg Dlg(this, true);
+ if(Dlg.ShowModal() != wxID_OK)
+ {
+ return;
+ }
+
+ ACE_TString Value = Dlg.GetStringValue();
+ ACE_TString Name = Dlg.GetName();
+
+ // Get the key for this node
+ wxTreeItemId ItemID = GetSelection();
+ ACE_Configuration_Section_Key Key;
+ ResolveKey(ItemID, Key);
+ m_pConfig->set_string_value(Key, Name.fast_rep(), Value);
+ m_pListCtrl->DisplaySection(Key);
+ */
+}
+
+void ConfigTreeCtrl::OnSelChanged(wxTreeEvent& event)
+{
+ wxTreeItemId ItemID = GetSelection();
+ ACE_Configuration_Section_Key Key;
+ ResolveKey(ItemID, Key);
+ m_pListCtrl->DisplaySection(Key);
+}
+
+void ConfigTreeCtrl::OnFind(wxCommandEvent& event)
+{
+}
+
+void ConfigTreeCtrl::OnDelete(wxCommandEvent& event)
+{
+ wxTreeItemId ItemID = GetSelection();
+ wxTreeItemId Parent = GetParent(ItemID);
+ ACE_Configuration_Section_Key Key;
+ ResolveKey(Parent, Key);
+ wxMessageDialog Dlg(this, "Are you sure you want to delete this section?", "Confirm Section Delete", wxYES_NO | wxICON_EXCLAMATION );
+ if(Dlg.ShowModal() != wxID_YES)
+ {
+ return;
+ }
+ wxString Text = GetItemText(ItemID);
+ m_pConfig->remove_section(Key, Text, 1);
+ // Reload parent
+ Delete(ItemID);
+}
+
+void ConfigTreeCtrl::ChangeConfig(ACE_Configuration* pConfig)
+{
+ m_pConfig = pConfig;
+ DeleteAllItems();
+ LoadTree();
+}
+