]> git.saurik.com Git - wxWidgets.git/commitdiff
1. corrected bug in MDI sample (which resulted in missing horz scrollbar)
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 24 Feb 2000 23:40:42 +0000 (23:40 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 24 Feb 2000 23:40:42 +0000 (23:40 +0000)
2. wxRegKey::Rename() added, regtest sample shows copying/moving/renaming keys
   and values now
3. using wxLog() insread of WriteText() contorsions in the listctrl sample,
   show client data from events in the log messages

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6270 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/listctrl/listtest.cpp
samples/listctrl/listtest.h
samples/mdi/mdi.cpp
samples/regtest/registry.ico
samples/regtest/regtest.cpp
samples/text/text.cpp

index 6f93325f14efaedac8d840340041a4cb87e4e8fa..c90a74ae76654296bde2baaa3d883b942cbff51a 100644 (file)
 #endif
 
 #ifndef __WXMSW__
 #endif
 
 #ifndef __WXMSW__
-#include "mondrian.xpm"
+    #include "mondrian.xpm"
+
+    #include "bitmaps/toolbrai.xpm"
+    #include "bitmaps/toolchar.xpm"
+    #include "bitmaps/tooldata.xpm"
+    #include "bitmaps/toolnote.xpm"
+    #include "bitmaps/tooltodo.xpm"
+    #include "bitmaps/toolchec.xpm"
+    #include "bitmaps/toolgame.xpm"
+    #include "bitmaps/tooltime.xpm"
+    #include "bitmaps/toolword.xpm"
+    #include "bitmaps/small1.xpm"
 #endif
 
 #include "wx/listctrl.h"
 #endif
 
 #include "wx/listctrl.h"
@@ -83,131 +94,7 @@ int wxCALLBACK MyCompareFunction(long item1, long item2, long sortData)
 bool MyApp::OnInit()
 {
   // Create the main frame window
 bool MyApp::OnInit()
 {
   // Create the main frame window
-  MyFrame *frame = new MyFrame((wxFrame *) NULL, "wxListCtrl Test", 50, 50, 450, 340);
-
-  // Give it an icon
-  frame->SetIcon( wxICON(mondrian) );
-
-  // Make an image list containing large icons
-  m_imageListNormal = new wxImageList(32, 32, TRUE);
-  m_imageListSmall = new wxImageList(16, 16, TRUE);
-
-#ifdef __WXMSW__
-  m_imageListNormal->Add( wxIcon("icon1", wxBITMAP_TYPE_ICO_RESOURCE) );
-  m_imageListNormal->Add( wxIcon("icon2", wxBITMAP_TYPE_ICO_RESOURCE) );
-  m_imageListNormal->Add( wxIcon("icon3", wxBITMAP_TYPE_ICO_RESOURCE) );
-  m_imageListNormal->Add( wxIcon("icon4", wxBITMAP_TYPE_ICO_RESOURCE) );
-  m_imageListNormal->Add( wxIcon("icon5", wxBITMAP_TYPE_ICO_RESOURCE) );
-  m_imageListNormal->Add( wxIcon("icon6", wxBITMAP_TYPE_ICO_RESOURCE) );
-  m_imageListNormal->Add( wxIcon("icon7", wxBITMAP_TYPE_ICO_RESOURCE) );
-  m_imageListNormal->Add( wxIcon("icon8", wxBITMAP_TYPE_ICO_RESOURCE) );
-  m_imageListNormal->Add( wxIcon("icon9", wxBITMAP_TYPE_ICO_RESOURCE) );
-
-  m_imageListSmall->Add( wxIcon("iconsmall", wxBITMAP_TYPE_ICO_RESOURCE) );
-
-#else
-
-  #include "bitmaps/toolbrai.xpm"
-  m_imageListNormal->Add( wxIcon( toolbrai_xpm ) );
-  #include "bitmaps/toolchar.xpm"
-  m_imageListNormal->Add( wxIcon( toolchar_xpm ) );
-  #include "bitmaps/tooldata.xpm"
-  m_imageListNormal->Add( wxIcon( tooldata_xpm ) );
-  #include "bitmaps/toolnote.xpm"
-  m_imageListNormal->Add( wxIcon( toolnote_xpm ) );
-  #include "bitmaps/tooltodo.xpm"
-  m_imageListNormal->Add( wxIcon( tooltodo_xpm ) );
-  #include "bitmaps/toolchec.xpm"
-  m_imageListNormal->Add( wxIcon( toolchec_xpm ) );
-  #include "bitmaps/toolgame.xpm"
-  m_imageListNormal->Add( wxIcon( toolgame_xpm ) );
-  #include "bitmaps/tooltime.xpm"
-  m_imageListNormal->Add( wxIcon( tooltime_xpm ) );
-  #include "bitmaps/toolword.xpm"
-  m_imageListNormal->Add( wxIcon( toolword_xpm ) );
-
-  #include "bitmaps/small1.xpm"
-  m_imageListSmall->Add( wxIcon( small1_xpm) );
-
-#endif
-
-  // Make a menubar
-  wxMenu *menuFile = new wxMenu;
-  menuFile->Append(LIST_ABOUT, "&About");
-  menuFile->AppendSeparator();
-#if 0 // what is this for? (VZ)
-  menuFile->Append(BUSY_ON,         "&Busy cursor on");
-  menuFile->Append(BUSY_OFF,         "&Busy cursor off");
-  menuFile->AppendSeparator();
-#endif
-  menuFile->Append(LIST_QUIT, "E&xit\tAlt-X");
-
-  wxMenu *menuView = new wxMenu;
-  menuView->Append(LIST_LIST_VIEW,         "&List view\tF1");
-  menuView->Append(LIST_REPORT_VIEW,         "&Report view\tF2");
-  menuView->Append(LIST_ICON_VIEW,         "&Icon view\tF3");
-  menuView->Append(LIST_ICON_TEXT_VIEW,     "Icon view with &text\tF4");
-  menuView->Append(LIST_SMALL_ICON_VIEW,     "&Small icon view\tF5");
-  menuView->Append(LIST_SMALL_ICON_TEXT_VIEW,     "Small icon &view with text\tF6");
-
-  wxMenu *menuList = new wxMenu;
-  menuList->Append(LIST_DESELECT_ALL, "&Deselect All\tCtrl-D");
-  menuList->Append(LIST_SELECT_ALL, "S&elect All\tCtrl-A");
-  menuList->AppendSeparator();
-  menuList->Append(LIST_SORT, "&Sort\tCtrl-S");
-  menuList->AppendSeparator();
-  menuList->Append(LIST_DELETE_ALL, "Delete &all items");
-  menuList->AppendSeparator();
-  menuList->Append(LIST_TOGGLE_MULTI_SEL, "&Multiple selection\tCtrl-M",
-                   "Toggle multiple selection", TRUE);
-
-  wxMenu *menuCol = new wxMenu;
-  menuCol->Append(LIST_SET_FG_COL, "&Foreground colour...");
-  menuCol->Append(LIST_SET_BG_COL, "&Background colour...");
-
-  wxMenuBar *menubar = new wxMenuBar;
-  menubar->Append(menuFile, "&File");
-  menubar->Append(menuView, "&View");
-  menubar->Append(menuList, "&List");
-  menubar->Append(menuCol, "&Colour");
-  frame->SetMenuBar(menubar);
-
-  frame->m_listCtrl = new MyListCtrl(frame, LIST_CTRL,
-                                     wxPoint(0, 0), wxSize(400, 200),
-                                     wxLC_LIST |
-                                     wxSUNKEN_BORDER |
-                                     wxLC_EDIT_LABELS |
-  // wxLC_USER_TEXT requires app to supply all text on demand
-                                     // wxLC_USER_TEXT |
-                                     wxLC_SINGLE_SEL
-                                     );
-
-  frame->m_logWindow = new wxTextCtrl(frame, -1, "", wxPoint(0, 0), wxSize(400, 200), wxTE_MULTILINE|wxSUNKEN_BORDER);
-
-  wxLayoutConstraints *c = new wxLayoutConstraints;
-  c->top.SameAs            (frame, wxTop);
-  c->left.SameAs        (frame, wxLeft);
-  c->right.SameAs        (frame, wxRight);
-  c->height.PercentOf    (frame, wxHeight, 66);
-  frame->m_listCtrl->SetConstraints(c);
-
-  c = new wxLayoutConstraints;
-  c->top.Below            (frame->m_listCtrl);
-  c->left.SameAs        (frame, wxLeft);
-  c->right.SameAs        (frame, wxRight);
-  c->bottom.SameAs        (frame, wxBottom);
-  frame->m_logWindow->SetConstraints(c);
-  frame->SetAutoLayout(TRUE);
-
-  wxString buf;
-  for ( int i=0; i < 30; i++)
-  {
-      wxChar buf[20];
-      wxSprintf(buf, _T("Item %d"), i);
-      frame->m_listCtrl->InsertItem(i, buf);
-  }
-
-  frame->CreateStatusBar(3);
+  MyFrame *frame = new MyFrame("wxListCtrl Test", 50, 50, 450, 340);
 
   // Show the frame
   frame->Show(TRUE);
 
   // Show the frame
   frame->Show(TRUE);
@@ -218,22 +105,139 @@ bool MyApp::OnInit()
 }
 
 // My frame constructor
 }
 
 // My frame constructor
-MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
-       : wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
+MyFrame::MyFrame(const wxChar *title, int x, int y, int w, int h)
+       : wxFrame((wxFrame *)NULL, -1, title, wxPoint(x, y), wxSize(w, h))
 {
     m_listCtrl = (MyListCtrl *) NULL;
     m_logWindow = (wxTextCtrl *) NULL;
 {
     m_listCtrl = (MyListCtrl *) NULL;
     m_logWindow = (wxTextCtrl *) NULL;
+
+    // Give it an icon
+    SetIcon( wxICON(mondrian) );
+
+    // Make an image list containing large icons
+    m_imageListNormal = new wxImageList(32, 32, TRUE);
+    m_imageListSmall = new wxImageList(16, 16, TRUE);
+
+#ifdef __WXMSW__
+    m_imageListNormal->Add( wxIcon("icon1", wxBITMAP_TYPE_ICO_RESOURCE) );
+    m_imageListNormal->Add( wxIcon("icon2", wxBITMAP_TYPE_ICO_RESOURCE) );
+    m_imageListNormal->Add( wxIcon("icon3", wxBITMAP_TYPE_ICO_RESOURCE) );
+    m_imageListNormal->Add( wxIcon("icon4", wxBITMAP_TYPE_ICO_RESOURCE) );
+    m_imageListNormal->Add( wxIcon("icon5", wxBITMAP_TYPE_ICO_RESOURCE) );
+    m_imageListNormal->Add( wxIcon("icon6", wxBITMAP_TYPE_ICO_RESOURCE) );
+    m_imageListNormal->Add( wxIcon("icon7", wxBITMAP_TYPE_ICO_RESOURCE) );
+    m_imageListNormal->Add( wxIcon("icon8", wxBITMAP_TYPE_ICO_RESOURCE) );
+    m_imageListNormal->Add( wxIcon("icon9", wxBITMAP_TYPE_ICO_RESOURCE) );
+
+    m_imageListSmall->Add( wxIcon("iconsmall", wxBITMAP_TYPE_ICO_RESOURCE) );
+
+#else
+    m_imageListNormal->Add( wxIcon( toolbrai_xpm ) );
+    m_imageListNormal->Add( wxIcon( toolchar_xpm ) );
+    m_imageListNormal->Add( wxIcon( tooldata_xpm ) );
+    m_imageListNormal->Add( wxIcon( toolnote_xpm ) );
+    m_imageListNormal->Add( wxIcon( tooltodo_xpm ) );
+    m_imageListNormal->Add( wxIcon( toolchec_xpm ) );
+    m_imageListNormal->Add( wxIcon( toolgame_xpm ) );
+    m_imageListNormal->Add( wxIcon( tooltime_xpm ) );
+    m_imageListNormal->Add( wxIcon( toolword_xpm ) );
+
+    m_imageListSmall->Add( wxIcon( small1_xpm) );
+#endif
+
+    // Make a menubar
+    wxMenu *menuFile = new wxMenu;
+    menuFile->Append(LIST_ABOUT, "&About");
+    menuFile->AppendSeparator();
+#if 0 // what is this for? (VZ)
+    menuFile->Append(BUSY_ON,         "&Busy cursor on");
+    menuFile->Append(BUSY_OFF,         "&Busy cursor off");
+    menuFile->AppendSeparator();
+#endif
+    menuFile->Append(LIST_QUIT, "E&xit\tAlt-X");
+
+    wxMenu *menuView = new wxMenu;
+    menuView->Append(LIST_LIST_VIEW,         "&List view\tF1");
+    menuView->Append(LIST_REPORT_VIEW,         "&Report view\tF2");
+    menuView->Append(LIST_ICON_VIEW,         "&Icon view\tF3");
+    menuView->Append(LIST_ICON_TEXT_VIEW,     "Icon view with &text\tF4");
+    menuView->Append(LIST_SMALL_ICON_VIEW,     "&Small icon view\tF5");
+    menuView->Append(LIST_SMALL_ICON_TEXT_VIEW,     "Small icon &view with text\tF6");
+
+    wxMenu *menuList = new wxMenu;
+    menuList->Append(LIST_DESELECT_ALL, "&Deselect All\tCtrl-D");
+    menuList->Append(LIST_SELECT_ALL, "S&elect All\tCtrl-A");
+    menuList->AppendSeparator();
+    menuList->Append(LIST_SORT, "&Sort\tCtrl-S");
+    menuList->AppendSeparator();
+    menuList->Append(LIST_DELETE_ALL, "Delete &all items");
+    menuList->AppendSeparator();
+    menuList->Append(LIST_TOGGLE_MULTI_SEL, "&Multiple selection\tCtrl-M",
+            "Toggle multiple selection", TRUE);
+
+    wxMenu *menuCol = new wxMenu;
+    menuCol->Append(LIST_SET_FG_COL, "&Foreground colour...");
+    menuCol->Append(LIST_SET_BG_COL, "&Background colour...");
+
+    wxMenuBar *menubar = new wxMenuBar;
+    menubar->Append(menuFile, "&File");
+    menubar->Append(menuView, "&View");
+    menubar->Append(menuList, "&List");
+    menubar->Append(menuCol, "&Colour");
+    SetMenuBar(menubar);
+
+    m_listCtrl = new MyListCtrl(this, LIST_CTRL,
+                                wxDefaultPosition, wxDefaultSize,
+                                wxLC_LIST |
+                                wxSUNKEN_BORDER |
+                                wxLC_EDIT_LABELS |
+                                // wxLC_USER_TEXT requires app to supply all
+                                // text on demand
+                                //wxLC_USER_TEXT |
+                                wxLC_SINGLE_SEL
+                               );
+
+    m_logWindow = new wxTextCtrl(this, -1, wxEmptyString,
+                                 wxDefaultPosition, wxDefaultSize,
+                                 wxTE_MULTILINE | wxSUNKEN_BORDER);
+
+    m_logOld = wxLog::SetActiveTarget(new wxLogTextCtrl(m_logWindow));
+
+    wxLayoutConstraints *c = new wxLayoutConstraints;
+    c->top.SameAs            (this, wxTop);
+    c->left.SameAs        (this, wxLeft);
+    c->right.SameAs        (this, wxRight);
+    c->height.PercentOf    (this, wxHeight, 66);
+    m_listCtrl->SetConstraints(c);
+
+    c = new wxLayoutConstraints;
+    c->top.Below            (m_listCtrl);
+    c->left.SameAs        (this, wxLeft);
+    c->right.SameAs        (this, wxRight);
+    c->bottom.SameAs        (this, wxBottom);
+    m_logWindow->SetConstraints(c);
+    SetAutoLayout(TRUE);
+
+    for ( int i = 0; i < 30; i++ )
+    {
+        long idx = m_listCtrl->InsertItem(i, wxString::Format(_T("Item %d"), i));
+        m_listCtrl->SetItemData(idx, i*i);
+    }
+
+    CreateStatusBar(3);
 }
 
 MyFrame::~MyFrame()
 {
 }
 
 MyFrame::~MyFrame()
 {
-    delete wxGetApp().m_imageListNormal;
-    delete wxGetApp().m_imageListSmall;
+    delete wxLog::SetActiveTarget(m_logOld);
+
+    delete m_imageListNormal;
+    delete m_imageListSmall;
 }
 
 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 {
 }
 
 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 {
-  Close(TRUE);
+    Close(TRUE);
 }
 
 void MyFrame::BusyOn(wxCommandEvent& WXUNUSED(event))
 }
 
 void MyFrame::BusyOn(wxCommandEvent& WXUNUSED(event))
@@ -292,7 +296,7 @@ void MyFrame::OnReportView(wxCommandEvent& WXUNUSED(event))
 
     m_listCtrl->SetSingleStyle(wxLC_REPORT);
     m_listCtrl->SetImageList((wxImageList *) NULL, wxIMAGE_LIST_NORMAL);
 
     m_listCtrl->SetSingleStyle(wxLC_REPORT);
     m_listCtrl->SetImageList((wxImageList *) NULL, wxIMAGE_LIST_NORMAL);
-    m_listCtrl->SetImageList(wxGetApp().m_imageListSmall, wxIMAGE_LIST_SMALL);
+    m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
 
     m_listCtrl->InsertColumn(0, "Column 1"); // , wxLIST_FORMAT_LEFT, 140);
     m_listCtrl->InsertColumn(1, "Column 2"); // , wxLIST_FORMAT_LEFT, 140);
 
     m_listCtrl->InsertColumn(0, "Column 1"); // , wxLIST_FORMAT_LEFT, 140);
     m_listCtrl->InsertColumn(1, "Column 2"); // , wxLIST_FORMAT_LEFT, 140);
@@ -351,8 +355,8 @@ void MyFrame::OnIconView(wxCommandEvent& WXUNUSED(event))
     m_listCtrl->ClearAll();
 
     m_listCtrl->SetSingleStyle(wxLC_ICON);
     m_listCtrl->ClearAll();
 
     m_listCtrl->SetSingleStyle(wxLC_ICON);
-    m_listCtrl->SetImageList(wxGetApp().m_imageListNormal, wxIMAGE_LIST_NORMAL);
-    m_listCtrl->SetImageList(wxGetApp().m_imageListSmall, wxIMAGE_LIST_SMALL);
+    m_listCtrl->SetImageList(m_imageListNormal, wxIMAGE_LIST_NORMAL);
+    m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
 
     for ( int i=0; i < 9; i++)
     {
 
     for ( int i=0; i < 9; i++)
     {
@@ -366,8 +370,8 @@ void MyFrame::OnIconTextView(wxCommandEvent& WXUNUSED(event))
     m_listCtrl->ClearAll();
 
     m_listCtrl->SetSingleStyle(wxLC_ICON);
     m_listCtrl->ClearAll();
 
     m_listCtrl->SetSingleStyle(wxLC_ICON);
-    m_listCtrl->SetImageList(wxGetApp().m_imageListNormal, wxIMAGE_LIST_NORMAL);
-    m_listCtrl->SetImageList(wxGetApp().m_imageListSmall, wxIMAGE_LIST_SMALL);
+    m_listCtrl->SetImageList(m_imageListNormal, wxIMAGE_LIST_NORMAL);
+    m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
 
     for ( int i=0; i < 9; i++)
     {
 
     for ( int i=0; i < 9; i++)
     {
@@ -383,8 +387,8 @@ void MyFrame::OnSmallIconView(wxCommandEvent& WXUNUSED(event))
     m_listCtrl->ClearAll();
 
     m_listCtrl->SetSingleStyle(wxLC_SMALL_ICON);
     m_listCtrl->ClearAll();
 
     m_listCtrl->SetSingleStyle(wxLC_SMALL_ICON);
-    m_listCtrl->SetImageList(wxGetApp().m_imageListNormal, wxIMAGE_LIST_NORMAL);
-    m_listCtrl->SetImageList(wxGetApp().m_imageListSmall, wxIMAGE_LIST_SMALL);
+    m_listCtrl->SetImageList(m_imageListNormal, wxIMAGE_LIST_NORMAL);
+    m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
 
     for ( int i=0; i < 9; i++)
     {
 
     for ( int i=0; i < 9; i++)
     {
@@ -398,8 +402,8 @@ void MyFrame::OnSmallIconTextView(wxCommandEvent& WXUNUSED(event))
     m_listCtrl->ClearAll();
 
     m_listCtrl->SetSingleStyle(wxLC_SMALL_ICON);
     m_listCtrl->ClearAll();
 
     m_listCtrl->SetSingleStyle(wxLC_SMALL_ICON);
-    m_listCtrl->SetImageList(wxGetApp().m_imageListNormal, wxIMAGE_LIST_NORMAL);
-    m_listCtrl->SetImageList(wxGetApp().m_imageListSmall, wxIMAGE_LIST_SMALL);
+    m_listCtrl->SetImageList(m_imageListNormal, wxIMAGE_LIST_NORMAL);
+    m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
 
     for ( int i=0; i < 9; i++)
     {
 
     for ( int i=0; i < 9; i++)
     {
@@ -464,152 +468,77 @@ void MyFrame::OnDeleteAll(wxCommandEvent& WXUNUSED(event))
 
 void MyListCtrl::OnColClick(wxListEvent& event)
 {
 
 void MyListCtrl::OnColClick(wxListEvent& event)
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
-
-    wxString msg;
-    msg.Printf( "OnColumnClick at %d.\n", event.GetColumn() );
-    text->WriteText(msg);
+    wxLogMessage( "OnColumnClick at %d.", event.GetColumn() );
 }
 
 void MyListCtrl::OnBeginDrag(wxListEvent& event)
 {
 }
 
 void MyListCtrl::OnBeginDrag(wxListEvent& event)
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
-
-    wxString msg;
-    msg.Printf( "OnBeginDrag at %d,%d.\n", event.m_pointDrag.x, event.m_pointDrag.y );
-    text->WriteText(msg);
+    wxLogMessage( "OnBeginDrag at %d,%d.",
+                  event.m_pointDrag.x, event.m_pointDrag.y );
 }
 
 void MyListCtrl::OnBeginRDrag(wxListEvent& event)
 {
 }
 
 void MyListCtrl::OnBeginRDrag(wxListEvent& event)
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
-
-    wxString msg;
-    msg.Printf( "OnBeginRDrag at %d,%d.\n", event.m_pointDrag.x, event.m_pointDrag.y );
-    text->WriteText(msg);
+    wxLogMessage( "OnBeginRDrag at %d,%d.",
+                  event.m_pointDrag.x, event.m_pointDrag.y );
 }
 
 void MyListCtrl::OnBeginLabelEdit(wxListEvent& event)
 {
 }
 
 void MyListCtrl::OnBeginLabelEdit(wxListEvent& event)
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
-
-    text->WriteText("OnBeginLabelEdit: ");
-    text->WriteText(event.m_item.m_text);
-    text->WriteText("\n");
+    wxLogMessage("OnBeginLabelEdit: %s", event.m_item.m_text.c_str());
 }
 
 void MyListCtrl::OnEndLabelEdit(wxListEvent& event)
 {
 }
 
 void MyListCtrl::OnEndLabelEdit(wxListEvent& event)
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
-
-    text->WriteText("OnEndLabelEdit: ");
-    text->WriteText(event.m_item.m_text);
-    text->WriteText("\n");
+    wxLogMessage("OnEndLabelEdit: %s", event.m_item.m_text.c_str());
 }
 
 void MyListCtrl::OnDeleteItem(wxListEvent& event)
 {
 }
 
 void MyListCtrl::OnDeleteItem(wxListEvent& event)
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
-
-    text->WriteText(wxString::Format("%ld OnDeleteItem\n", event.GetIndex()));
+    LogEvent(event, _T("OnDeleteItem"));
 }
 
 }
 
-void MyListCtrl::OnDeleteAllItems(wxListEvent& WXUNUSED(event))
+void MyListCtrl::OnDeleteAllItems(wxListEvent& event)
 {
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
-
-    text->WriteText("OnDeleteAllItems\n");
+    LogEvent(event, _T("OnDeleteAllItems"));
 }
 
 void MyListCtrl::OnGetInfo(wxListEvent& event)
 {
 }
 
 void MyListCtrl::OnGetInfo(wxListEvent& event)
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
-
-    text->WriteText("OnGetInfo\n");
+    wxString msg;
 
 
-    (*text) << "OnGetInfo (" << event.m_item.m_itemId << ", " << event.m_item.m_col << ")";
+    msg << "OnGetInfo (" << event.m_item.m_itemId << ", " << event.m_item.m_col << ")";
     if ( event.m_item.m_mask & wxLIST_MASK_STATE )
     if ( event.m_item.m_mask & wxLIST_MASK_STATE )
-        (*text) << " wxLIST_MASK_STATE";
+        msg << " wxLIST_MASK_STATE";
     if ( event.m_item.m_mask & wxLIST_MASK_TEXT )
     if ( event.m_item.m_mask & wxLIST_MASK_TEXT )
-        (*text) << " wxLIST_MASK_TEXT";
+        msg << " wxLIST_MASK_TEXT";
     if ( event.m_item.m_mask & wxLIST_MASK_IMAGE )
     if ( event.m_item.m_mask & wxLIST_MASK_IMAGE )
-        (*text) << " wxLIST_MASK_IMAGE";
+        msg << " wxLIST_MASK_IMAGE";
     if ( event.m_item.m_mask & wxLIST_MASK_DATA )
     if ( event.m_item.m_mask & wxLIST_MASK_DATA )
-        (*text) << " wxLIST_MASK_DATA";
+        msg << " wxLIST_MASK_DATA";
     if ( event.m_item.m_mask & wxLIST_SET_ITEM )
     if ( event.m_item.m_mask & wxLIST_SET_ITEM )
-        (*text) << " wxLIST_SET_ITEM";
+        msg << " wxLIST_SET_ITEM";
     if ( event.m_item.m_mask & wxLIST_MASK_WIDTH )
     if ( event.m_item.m_mask & wxLIST_MASK_WIDTH )
-        (*text) << " wxLIST_MASK_WIDTH";
+        msg << " wxLIST_MASK_WIDTH";
     if ( event.m_item.m_mask & wxLIST_MASK_FORMAT )
     if ( event.m_item.m_mask & wxLIST_MASK_FORMAT )
-        (*text) << " wxLIST_MASK_WIDTH";
+        msg << " wxLIST_MASK_WIDTH";
 
     if ( event.m_item.m_mask & wxLIST_MASK_TEXT )
     {
         event.m_item.m_text = "My callback text";
     }
 
     if ( event.m_item.m_mask & wxLIST_MASK_TEXT )
     {
         event.m_item.m_text = "My callback text";
     }
-    (*text) << "\n";
+
+    wxLogMessage(msg);
 }
 
 void MyListCtrl::OnSetInfo(wxListEvent& event)
 {
 }
 
 void MyListCtrl::OnSetInfo(wxListEvent& event)
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
-
-    text->WriteText(wxString::Format("%ld OnSetInfo\n", event.GetIndex()));
+    LogEvent(event, _T("OnSetInfo"));
 }
 
 void MyListCtrl::OnSelected(wxListEvent& event)
 {
 }
 
 void MyListCtrl::OnSelected(wxListEvent& event)
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
+    LogEvent(event, _T("OnSelected"));
 
     if ( GetWindowStyle() & wxLC_REPORT )
     {
 
     if ( GetWindowStyle() & wxLC_REPORT )
     {
@@ -619,52 +548,34 @@ void MyListCtrl::OnSelected(wxListEvent& event)
         info.m_mask = wxLIST_MASK_TEXT;
         if ( GetItem(info) )
         {
         info.m_mask = wxLIST_MASK_TEXT;
         if ( GetItem(info) )
         {
-            *text << "Value of the 2nd field of the selected item: "
-                  << info.m_text << '\n';
+            wxLogMessage("Value of the 2nd field of the selected item: %s",
+                         info.m_text.c_str());
         }
         else
         {
             wxFAIL_MSG("wxListCtrl::GetItem() failed");
         }
     }
         }
         else
         {
             wxFAIL_MSG("wxListCtrl::GetItem() failed");
         }
     }
-
-    text->WriteText(wxString::Format("%ld OnSelected\n", event.GetIndex()));
 }
 
 void MyListCtrl::OnDeselected(wxListEvent& event)
 {
 }
 
 void MyListCtrl::OnDeselected(wxListEvent& event)
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
-
-    text->WriteText(wxString::Format("%ld OnDeselected\n", event.GetIndex()));
+    LogEvent(event, _T("OnDeselected"));
 }
 
 void MyListCtrl::OnActivated(wxListEvent& event)
 {
 }
 
 void MyListCtrl::OnActivated(wxListEvent& event)
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
-
-    text->WriteText(wxString::Format("%ld OnActivated\n", event.GetIndex()));
+    LogEvent(event, _T("OnActivated"));
 }
 
 void MyListCtrl::OnListKeyDown(wxListEvent& event)
 {
 }
 
 void MyListCtrl::OnListKeyDown(wxListEvent& event)
 {
-    if ( !wxGetApp().GetTopWindow() )
-        return;
-
-    wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
-    if ( !text )
-        return;
-
-    text->WriteText(wxString::Format("%ld OnListKeyDown\n", event.GetIndex()));
+    LogEvent(event, _T("OnListKeyDown"));
 }
 
 }
 
+void MyListCtrl::LogEvent(const wxListEvent& event, const wxChar *eventName)
+{
+    wxLogMessage(_T("Item %ld: %s (item data = %ld)"),
+                 event.GetIndex(), eventName, event.GetData());
+}
 
 
index 3436c50f16a86e5e7248534e5256ce12aaa599b3..c1bf2d02b597f5a7a736867d571037ca5ba88878 100644 (file)
@@ -14,9 +14,6 @@ class MyApp: public wxApp
 {
 public:
     virtual bool OnInit();
 {
 public:
     virtual bool OnInit();
-
-    wxImageList *m_imageListNormal;
-    wxImageList *m_imageListSmall;
 };
 
 class MyListCtrl: public wxListCtrl
 };
 
 class MyListCtrl: public wxListCtrl
@@ -44,6 +41,9 @@ public:
 
     void OnChar(wxKeyEvent& event);
 
 
     void OnChar(wxKeyEvent& event);
 
+private:
+    void LogEvent(const wxListEvent& event, const wxChar *eventName);
+
     DECLARE_EVENT_TABLE()
 };
 
     DECLARE_EVENT_TABLE()
 };
 
@@ -54,7 +54,7 @@ public:
     MyListCtrl *m_listCtrl;
     wxTextCtrl *m_logWindow;
 
     MyListCtrl *m_listCtrl;
     wxTextCtrl *m_logWindow;
 
-    MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
+    MyFrame(const wxChar *title, int x, int y, int w, int h);
     ~MyFrame();
 
 public:
     ~MyFrame();
 
 public:
@@ -77,6 +77,12 @@ public:
     void BusyOn(wxCommandEvent& event);
     void BusyOff(wxCommandEvent& event);
 
     void BusyOn(wxCommandEvent& event);
     void BusyOff(wxCommandEvent& event);
 
+    wxImageList *m_imageListNormal;
+    wxImageList *m_imageListSmall;
+
+private:
+    wxLog *m_logOld;
+
     DECLARE_EVENT_TABLE()
 };
 
     DECLARE_EVENT_TABLE()
 };
 
index 7774866d6d56ca7259e0722b6f830077d73f33f5..892bdd5537449e00cbd87b8e97fddf0f1a134e21 100644 (file)
@@ -248,6 +248,9 @@ void MyFrame::OnNewWindow(wxCommandEvent& WXUNUSED(event) )
     // Associate the menu bar with the frame
     subframe->SetMenuBar(menu_bar);
 
     // Associate the menu bar with the frame
     subframe->SetMenuBar(menu_bar);
 
+    subframe->CreateStatusBar();
+    subframe->SetStatusText(title);
+
     int width, height;
     subframe->GetClientSize(&width, &height);
     MyCanvas *canvas = new MyCanvas(subframe, wxPoint(0, 0), wxSize(width, height));
     int width, height;
     subframe->GetClientSize(&width, &height);
     MyCanvas *canvas = new MyCanvas(subframe, wxPoint(0, 0), wxSize(width, height));
@@ -257,9 +260,6 @@ void MyFrame::OnNewWindow(wxCommandEvent& WXUNUSED(event) )
     // Give it scrollbars
     canvas->SetScrollbars(20, 20, 50, 50);
 
     // Give it scrollbars
     canvas->SetScrollbars(20, 20, 50, 50);
 
-    subframe->CreateStatusBar();
-    subframe->SetStatusText(title);
-
     subframe->Show(TRUE);
 }
 
     subframe->Show(TRUE);
 }
 
@@ -357,7 +357,9 @@ void MyCanvas::OnDraw(wxDC& dc)
     dc.DrawRoundedRectangle(150, 150, 100, 50, 20);
 
     dc.DrawEllipse(250, 250, 100, 50);
     dc.DrawRoundedRectangle(150, 150, 100, 50, 20);
 
     dc.DrawEllipse(250, 250, 100, 50);
+#if wxUSE_SPLINES
     dc.DrawSpline(50, 200, 50, 100, 200, 10);
     dc.DrawSpline(50, 200, 50, 100, 200, 10);
+#endif // wxUSE_SPLINES
     dc.DrawLine(50, 230, 200, 230);
     dc.DrawText("This is a test string", 50, 230);
 
     dc.DrawLine(50, 230, 200, 230);
     dc.DrawText("This is a test string", 50, 230);
 
index 3ebfa3ace3528dcdfb2575240933107b298cba33..c706b8a013d2d468fde35a9a51b80bdf0a1dbbb9 100644 (file)
Binary files a/samples/regtest/registry.ico and b/samples/regtest/registry.ico differ
index 79c3655f83e0812d1733cc2e7b48477b9f9d8522..f1960608af9674362dc62509d3da9d97d5bf6e74 100644 (file)
@@ -31,6 +31,8 @@
 #include "wx/msw/registry.h"
 #include "wx/msw/imaglist.h"
 
 #include "wx/msw/registry.h"
 #include "wx/msw/imaglist.h"
 
+#include "wx/tokenzr.h"
+
 // ----------------------------------------------------------------------------
 // application type
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // application type
 // ----------------------------------------------------------------------------
@@ -73,6 +75,9 @@ public:
   void OnItemExpanding(wxTreeEvent& event);
   void OnSelChanged   (wxTreeEvent& event);
 
   void OnItemExpanding(wxTreeEvent& event);
   void OnSelChanged   (wxTreeEvent& event);
 
+  void OnBeginEdit    (wxTreeEvent& event);
+  void OnEndEdit      (wxTreeEvent& event);
+
   void OnBeginDrag    (wxTreeEvent& event);
   void OnEndDrag      (wxTreeEvent& event);
 
   void OnBeginDrag    (wxTreeEvent& event);
   void OnEndDrag      (wxTreeEvent& event);
 
@@ -84,6 +89,7 @@ public:
   void OnMenuTest();
 
   // operations
   void OnMenuTest();
 
   // operations
+  void GoTo(const wxString& location);
   void Refresh();
   void DeleteSelected();
   void ShowProperties();
   void Refresh();
   void DeleteSelected();
   void ShowProperties();
@@ -141,6 +147,8 @@ private:
 
   bool         m_restoreStatus;     // after OnItemExpanding()
 
 
   bool         m_restoreStatus;     // after OnItemExpanding()
 
+  wxString     m_nameOld;           // the initial value of item being renamed
+
   TreeNode *GetNode(const wxTreeEvent& event)
     { return (TreeNode *)GetItemData((WXHTREEITEM)event.GetItem()); }
 
   TreeNode *GetNode(const wxTreeEvent& event)
     { return (TreeNode *)GetItemData((WXHTREEITEM)event.GetItem()); }
 
@@ -172,6 +180,8 @@ public:
   void OnAbout(wxCommandEvent& event);
   void OnTest (wxCommandEvent& event);
 
   void OnAbout(wxCommandEvent& event);
   void OnTest (wxCommandEvent& event);
 
+  void OnGoTo (wxCommandEvent& event);
+
   void OnExpand  (wxCommandEvent& event);
   void OnCollapse(wxCommandEvent& event);
   void OnToggle  (wxCommandEvent& event);
   void OnExpand  (wxCommandEvent& event);
   void OnCollapse(wxCommandEvent& event);
   void OnToggle  (wxCommandEvent& event);
@@ -199,6 +209,7 @@ enum
   Menu_Quit     = 100,
   Menu_About,
   Menu_Test,
   Menu_Quit     = 100,
   Menu_About,
   Menu_Test,
+  Menu_GoTo,
   Menu_Expand,
   Menu_Collapse,
   Menu_Toggle,
   Menu_Expand,
   Menu_Collapse,
   Menu_Toggle,
@@ -221,6 +232,7 @@ BEGIN_EVENT_TABLE(RegFrame, wxFrame)
   EVT_MENU(Menu_Test,     RegFrame::OnTest)
   EVT_MENU(Menu_About,    RegFrame::OnAbout)
   EVT_MENU(Menu_Quit,     RegFrame::OnQuit)
   EVT_MENU(Menu_Test,     RegFrame::OnTest)
   EVT_MENU(Menu_About,    RegFrame::OnAbout)
   EVT_MENU(Menu_Quit,     RegFrame::OnQuit)
+  EVT_MENU(Menu_GoTo,     RegFrame::OnGoTo)
   EVT_MENU(Menu_Expand,   RegFrame::OnExpand)
   EVT_MENU(Menu_Collapse, RegFrame::OnCollapse)
   EVT_MENU(Menu_Toggle,   RegFrame::OnToggle)
   EVT_MENU(Menu_Expand,   RegFrame::OnExpand)
   EVT_MENU(Menu_Collapse, RegFrame::OnCollapse)
   EVT_MENU(Menu_Toggle,   RegFrame::OnToggle)
@@ -236,6 +248,10 @@ BEGIN_EVENT_TABLE(RegTreeCtrl, wxTreeCtrl)
   EVT_TREE_DELETE_ITEM   (Ctrl_RegTree, RegTreeCtrl::OnDeleteItem)
   EVT_TREE_ITEM_EXPANDING(Ctrl_RegTree, RegTreeCtrl::OnItemExpanding)
   EVT_TREE_SEL_CHANGED   (Ctrl_RegTree, RegTreeCtrl::OnSelChanged)
   EVT_TREE_DELETE_ITEM   (Ctrl_RegTree, RegTreeCtrl::OnDeleteItem)
   EVT_TREE_ITEM_EXPANDING(Ctrl_RegTree, RegTreeCtrl::OnItemExpanding)
   EVT_TREE_SEL_CHANGED   (Ctrl_RegTree, RegTreeCtrl::OnSelChanged)
+
+  EVT_TREE_BEGIN_LABEL_EDIT(Ctrl_RegTree, RegTreeCtrl::OnBeginEdit)
+  EVT_TREE_END_LABEL_EDIT  (Ctrl_RegTree, RegTreeCtrl::OnEndEdit)
+
   EVT_TREE_BEGIN_DRAG    (Ctrl_RegTree, RegTreeCtrl::OnBeginDrag)
   EVT_TREE_BEGIN_RDRAG   (Ctrl_RegTree, RegTreeCtrl::OnBeginDrag)
   EVT_TREE_END_DRAG      (Ctrl_RegTree, RegTreeCtrl::OnEndDrag)
   EVT_TREE_BEGIN_DRAG    (Ctrl_RegTree, RegTreeCtrl::OnBeginDrag)
   EVT_TREE_BEGIN_RDRAG   (Ctrl_RegTree, RegTreeCtrl::OnBeginDrag)
   EVT_TREE_END_DRAG      (Ctrl_RegTree, RegTreeCtrl::OnEndDrag)
@@ -266,6 +282,7 @@ wxMenu *CreateRegistryMenu()
   pMenuReg->Append(Menu_New, "&New", pMenuNew);
   pMenuReg->Append(Menu_Delete,   "&Delete...", "Delete selected key/value");
   pMenuReg->AppendSeparator();
   pMenuReg->Append(Menu_New, "&New", pMenuNew);
   pMenuReg->Append(Menu_Delete,   "&Delete...", "Delete selected key/value");
   pMenuReg->AppendSeparator();
+  pMenuReg->Append(Menu_GoTo,     "&Go to...\tCtrl-G",    "Go to registry key");
   pMenuReg->Append(Menu_Expand,   "&Expand",    "Expand current key");
   pMenuReg->Append(Menu_Collapse, "&Collapse",  "Collapse current key");
   pMenuReg->Append(Menu_Toggle,   "&Toggle",    "Toggle current key");
   pMenuReg->Append(Menu_Expand,   "&Expand",    "Expand current key");
   pMenuReg->Append(Menu_Collapse, "&Collapse",  "Collapse current key");
   pMenuReg->Append(Menu_Toggle,   "&Toggle",    "Toggle current key");
@@ -352,37 +369,55 @@ void RegFrame::OnAbout(wxCommandEvent& event)
   dialog.ShowModal();
 }
 
   dialog.ShowModal();
 }
 
-void RegFrame::OnTest(wxCommandEvent& event)
+void RegFrame::OnTest(wxCommandEvent& WXUNUSED(event))
 {
   m_treeCtrl->OnMenuTest();
 }
 
 {
   m_treeCtrl->OnMenuTest();
 }
 
-void RegFrame::OnExpand(wxCommandEvent& event)
+void RegFrame::OnGoTo(wxCommandEvent& WXUNUSED(event))
+{
+    static wxString s_location = _T("HKEY_CURRENT_USER\\Software\\wxWindows");
+
+    wxString location = wxGetTextFromUser
+                        (
+                         _T("Enter the location to go to:"),
+                         _T("wxRegTest question"),
+                         s_location,
+                         this
+                        );
+    if ( !location )
+        return;
+
+    s_location = location;
+    m_treeCtrl->GoTo(location);
+}
+
+void RegFrame::OnExpand(wxCommandEvent& WXUNUSED(event))
 {
   m_treeCtrl->ExpandItem(m_treeCtrl->GetSelection(), wxTREE_EXPAND_EXPAND);
 }
 
 {
   m_treeCtrl->ExpandItem(m_treeCtrl->GetSelection(), wxTREE_EXPAND_EXPAND);
 }
 
-void RegFrame::OnCollapse(wxCommandEvent& event)
+void RegFrame::OnCollapse(wxCommandEvent& WXUNUSED(event))
 {
   m_treeCtrl->ExpandItem(m_treeCtrl->GetSelection(), wxTREE_EXPAND_COLLAPSE);
 }
 
 {
   m_treeCtrl->ExpandItem(m_treeCtrl->GetSelection(), wxTREE_EXPAND_COLLAPSE);
 }
 
-void RegFrame::OnToggle(wxCommandEvent& event)
+void RegFrame::OnToggle(wxCommandEvent& WXUNUSED(event))
 {
   m_treeCtrl->ExpandItem(m_treeCtrl->GetSelection(), wxTREE_EXPAND_TOGGLE);
 }
 
 {
   m_treeCtrl->ExpandItem(m_treeCtrl->GetSelection(), wxTREE_EXPAND_TOGGLE);
 }
 
-void RegFrame::OnRefresh(wxCommandEvent& event)
+void RegFrame::OnRefresh(wxCommandEvent& WXUNUSED(event))
 {
   m_treeCtrl->Refresh();
 }
 
 {
   m_treeCtrl->Refresh();
 }
 
-void RegFrame::OnDelete(wxCommandEvent& event)
+void RegFrame::OnDelete(wxCommandEvent& WXUNUSED(event))
 {
   m_treeCtrl->DeleteSelected();
 }
 
 {
   m_treeCtrl->DeleteSelected();
 }
 
-void RegFrame::OnNewKey(wxCommandEvent& event)
+void RegFrame::OnNewKey(wxCommandEvent& WXUNUSED(event))
 {
   if ( m_treeCtrl->IsKeySelected() ) {
     m_treeCtrl->CreateNewKey(
 {
   if ( m_treeCtrl->IsKeySelected() ) {
     m_treeCtrl->CreateNewKey(
@@ -390,7 +425,7 @@ void RegFrame::OnNewKey(wxCommandEvent& event)
   }
 }
 
   }
 }
 
-void RegFrame::OnNewText(wxCommandEvent& event)
+void RegFrame::OnNewText(wxCommandEvent& WXUNUSED(event))
 {
   if ( m_treeCtrl->IsKeySelected() ) {
     m_treeCtrl->CreateNewTextValue(
 {
   if ( m_treeCtrl->IsKeySelected() ) {
     m_treeCtrl->CreateNewTextValue(
@@ -398,7 +433,7 @@ void RegFrame::OnNewText(wxCommandEvent& event)
   }
 }
 
   }
 }
 
-void RegFrame::OnNewBinary(wxCommandEvent& event)
+void RegFrame::OnNewBinary(wxCommandEvent& WXUNUSED(event))
 {
   if ( m_treeCtrl->IsKeySelected() ) {
     m_treeCtrl->CreateNewBinaryValue(
 {
   if ( m_treeCtrl->IsKeySelected() ) {
     m_treeCtrl->CreateNewBinaryValue(
@@ -406,7 +441,7 @@ void RegFrame::OnNewBinary(wxCommandEvent& event)
   }
 }
 
   }
 }
 
-void RegFrame::OnInfo(wxCommandEvent& event)
+void RegFrame::OnInfo(wxCommandEvent& WXUNUSED(event))
 {
     m_treeCtrl->ShowProperties();
 }
 {
     m_treeCtrl->ShowProperties();
 }
@@ -471,7 +506,7 @@ RegTreeCtrl::TreeNode *RegTreeCtrl::InsertNewTreeNode(TreeNode *pParent,
 
 RegTreeCtrl::RegTreeCtrl(wxWindow *parent, wxWindowID id)
            : wxTreeCtrl(parent, id, wxDefaultPosition, wxDefaultSize,
 
 RegTreeCtrl::RegTreeCtrl(wxWindow *parent, wxWindowID id)
            : wxTreeCtrl(parent, id, wxDefaultPosition, wxDefaultSize,
-                        wxTR_HAS_BUTTONS | wxSUNKEN_BORDER)
+                        wxTR_HAS_BUTTONS | wxTR_EDIT_LABELS | wxSUNKEN_BORDER)
 {
   // init members
   m_draggedItem = NULL;
 {
   // init members
   m_draggedItem = NULL;
@@ -625,6 +660,50 @@ void RegTreeCtrl::OnItemExpanding(wxTreeEvent& event)
   }
 }
 
   }
 }
 
+void RegTreeCtrl::OnBeginEdit(wxTreeEvent& event)
+{
+    TreeNode *pNode = GetNode(event);
+    if ( pNode->IsRoot() || pNode->Parent()->IsRoot() ) {
+        wxLogStatus(_T("This registry key can't be renamed."));
+
+        event.Veto();
+    }
+    else {
+        m_nameOld = pNode->m_strName;
+    }
+}
+
+void RegTreeCtrl::OnEndEdit(wxTreeEvent& event)
+{
+    bool ok;
+
+    wxString name = event.GetLabel();
+
+    TreeNode *pNode = GetNode(event);
+    if ( pNode->IsKey() )
+    {
+        wxRegKey& key = pNode->Key();
+        ok = key.Rename(name);
+    }
+    else
+    {
+        pNode = pNode->Parent();
+        wxRegKey& key = pNode->Key();
+
+        ok = key.RenameValue(m_nameOld, name);
+    }
+
+    if ( !ok ) {
+        wxLogError(_T("Failed to rename '%s' to '%s'."),
+                   m_nameOld.c_str(), name.c_str());
+    }
+#if 0   // MSW tree ctrl doesn't like this at all, it hangs
+    else {
+        pNode->Refresh();
+    }
+#endif // 0
+}
+
 void RegTreeCtrl::OnBeginDrag(wxTreeEvent& event)
 {
     m_copyOnDrop = event.GetEventType() == wxEVT_COMMAND_TREE_BEGIN_DRAG;
 void RegTreeCtrl::OnBeginDrag(wxTreeEvent& event)
 {
     m_copyOnDrop = event.GetEventType() == wxEVT_COMMAND_TREE_BEGIN_DRAG;
@@ -697,8 +776,6 @@ void RegTreeCtrl::OnEndDrag(wxTreeEvent& event)
       return;
     }
 
       return;
     }
 
-    bool dstExpanded = IsExpanded(dst->Id());
-
     bool ok;
     if ( isKey ) {
         wxRegKey& key = src->Key();
     bool ok;
     if ( isKey ) {
         wxRegKey& key = src->Key();
@@ -710,10 +787,6 @@ void RegTreeCtrl::OnEndDrag(wxTreeEvent& event)
         else {
             ok = key.Copy(keyDst);
         }
         else {
             ok = key.Copy(keyDst);
         }
-        if ( ok && dstExpanded ) {
-            dst->OnCollapse();
-            dst->OnExpand();
-        }
 
         if ( ok && !m_copyOnDrop ) {
             // delete the old key
 
         if ( ok && !m_copyOnDrop ) {
             // delete the old key
@@ -729,16 +802,15 @@ void RegTreeCtrl::OnEndDrag(wxTreeEvent& event)
         if ( ok && !m_copyOnDrop ) {
             // we moved it, so delete the old one
             ok = key.DeleteValue(src->m_strName);
         if ( ok && !m_copyOnDrop ) {
             // we moved it, so delete the old one
             ok = key.DeleteValue(src->m_strName);
-            if ( ok ) {
-                // reexpand the key
-                dst->Refresh();
-            }
         }
     }
 
     if ( !ok ) {
         wxLogError("Failed to %s registry %s.", verb.c_str(), what.c_str());
     }
         }
     }
 
     if ( !ok ) {
         wxLogError("Failed to %s registry %s.", verb.c_str(), what.c_str());
     }
+    else {
+        dst->Refresh();
+    }
 }
 
 // ----------------------------------------------------------------------------
 }
 
 // ----------------------------------------------------------------------------
@@ -863,17 +935,16 @@ void RegTreeCtrl::TreeNode::Refresh()
     if ( !IsKey() )
         return;
 
     if ( !IsKey() )
         return;
 
-    if ( m_pTree->IsExpanded(Id()) ) {
+    bool wasExpanded = m_pTree->IsExpanded(Id());
+    if ( wasExpanded )
         m_pTree->Collapse(Id());
         m_pTree->Collapse(Id());
-        OnCollapse();
-        m_pTree->SetItemHasChildren(Id());
+
+    OnCollapse();
+    m_pTree->SetItemHasChildren(Id());
+    if ( wasExpanded ) {
         m_pTree->Expand(Id());
         OnExpand();
     }
         m_pTree->Expand(Id());
         OnExpand();
     }
-    else {
-        // just allow it to be expanded
-        m_pTree->SetItemHasChildren(Id());
-    }
 }
 
 bool RegTreeCtrl::TreeNode::DeleteChild(TreeNode *child)
 }
 
 bool RegTreeCtrl::TreeNode::DeleteChild(TreeNode *child)
@@ -944,6 +1015,54 @@ const char *RegTreeCtrl::TreeNode::FullName() const
 // operations on RegTreeCtrl
 // ----------------------------------------------------------------------------
 
 // operations on RegTreeCtrl
 // ----------------------------------------------------------------------------
 
+void RegTreeCtrl::GoTo(const wxString& location)
+{
+    wxStringTokenizer tk(location, _T("\\"));
+
+    wxTreeItemId id = GetRootItem();
+
+    while ( tk.HasMoreTokens() ) {
+        wxString subkey = tk.GetNextToken();
+
+        wxTreeItemId idCurrent = id;
+        if ( !IsExpanded(idCurrent) )
+            Expand(idCurrent);
+
+        long dummy;
+        id = GetFirstChild(idCurrent, dummy);
+
+        if ( idCurrent == GetRootItem() ) {
+            // special case: we understand both HKCU and HKEY_CURRENT_USER here
+            for ( size_t key = 0; key < wxRegKey::nStdKeys; key++ ) {
+                if ( subkey == wxRegKey::GetStdKeyName(key) ||
+                     subkey == wxRegKey::GetStdKeyShortName(key) ) {
+                    break;
+                }
+
+                id = GetNextChild(idCurrent, dummy);
+            }
+        }
+        else {
+            // enum all children
+            while ( id.IsOk() ) {
+                if ( subkey == ((TreeNode *)GetItemData(id))->m_strName )
+                    break;
+
+                id = GetNextChild(idCurrent, dummy);
+            }
+        }
+
+        if ( !id.IsOk() ) {
+            wxLogError(_T("No such key '%s'."), location.c_str());
+
+            return;
+        }
+    }
+
+    if ( id.IsOk() )
+        SelectItem(id);
+}
+
 void RegTreeCtrl::DeleteSelected()
 {
   long lCurrent = GetSelection(),
 void RegTreeCtrl::DeleteSelected()
 {
   long lCurrent = GetSelection(),
index 55beadd7c2558269eb9427edba843ee330815530..4406fecbfbf1b70c1b04ece58637aca14cfd9298 100644 (file)
@@ -9,7 +9,8 @@
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
-    #pragma implementation "controls.h"
+    #pragma interface "text.cpp"
+    #pragma implementation "text.cpp"
 #endif
 
 // For compilers that support precompilation, includes "wx/wx.h".
 #endif
 
 // For compilers that support precompilation, includes "wx/wx.h".
@@ -194,7 +195,7 @@ bool MyApp::OnInit()
     file_menu->AppendSeparator();
     file_menu->Append(TEXT_ABOUT, "&About\tAlt-A");
     file_menu->AppendSeparator();
     file_menu->AppendSeparator();
     file_menu->Append(TEXT_ABOUT, "&About\tAlt-A");
     file_menu->AppendSeparator();
-    file_menu->Append(TEXT_QUIT, "E&xit\tAlt-X", "Quit controls sample");
+    file_menu->Append(TEXT_QUIT, "E&xit\tAlt-X", "Quit this sample");
 
     wxMenuBar *menu_bar = new wxMenuBar( wxMB_DOCKABLE );
     menu_bar->Append(file_menu, "&File");
 
     wxMenuBar *menu_bar = new wxMenuBar( wxMB_DOCKABLE );
     menu_bar->Append(file_menu, "&File");
@@ -444,7 +445,7 @@ void MyTextCtrl::OnText(wxCommandEvent& event)
     const wxChar *data = (const wxChar *)(win->GetClientData());
     if ( data )
     {
     const wxChar *data = (const wxChar *)(win->GetClientData());
     if ( data )
     {
-        wxLogMessage(_T("text changed in control '%s'"), data);
+        wxLogMessage(_T("Text changed in control '%s'"), data);
     }
 }
 
     }
 }
 
@@ -755,7 +756,7 @@ void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
         "tooltips and intercepting key and char events.\n"
         "\n"
         "Copyright (c) 1999, Robert Roebling, Julian Smart, Vadim Zeitlin",
         "tooltips and intercepting key and char events.\n"
         "\n"
         "Copyright (c) 1999, Robert Roebling, Julian Smart, Vadim Zeitlin",
-        "About Text Controls",
+        "About wxTextCtrl Sample",
         wxOK | wxICON_INFORMATION);
 
     dialog.ShowModal();
         wxOK | wxICON_INFORMATION);
 
     dialog.ShowModal();