From c41ea66a5de1e88529e0ce2e629f5757b219b97d Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 24 Feb 2000 23:40:42 +0000 Subject: [PATCH 1/1] 1. corrected bug in MDI sample (which resulted in missing horz scrollbar) 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 | 443 ++++++++++++++-------------------- samples/listctrl/listtest.h | 14 +- samples/mdi/mdi.cpp | 8 +- samples/regtest/registry.ico | Bin 1078 -> 1078 bytes samples/regtest/regtest.cpp | 175 +++++++++++--- samples/text/text.cpp | 9 +- 6 files changed, 344 insertions(+), 305 deletions(-) diff --git a/samples/listctrl/listtest.cpp b/samples/listctrl/listtest.cpp index 6f93325f14..c90a74ae76 100644 --- a/samples/listctrl/listtest.cpp +++ b/samples/listctrl/listtest.cpp @@ -26,7 +26,18 @@ #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" @@ -83,131 +94,7 @@ int wxCALLBACK MyCompareFunction(long item1, long item2, long sortData) 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); @@ -218,22 +105,139 @@ bool MyApp::OnInit() } // 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; + + // 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() { - 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)) { - Close(TRUE); + Close(TRUE); } 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->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); @@ -351,8 +355,8 @@ void MyFrame::OnIconView(wxCommandEvent& WXUNUSED(event)) 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++) { @@ -366,8 +370,8 @@ void MyFrame::OnIconTextView(wxCommandEvent& WXUNUSED(event)) 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++) { @@ -383,8 +387,8 @@ void MyFrame::OnSmallIconView(wxCommandEvent& WXUNUSED(event)) 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++) { @@ -398,8 +402,8 @@ void MyFrame::OnSmallIconTextView(wxCommandEvent& WXUNUSED(event)) 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++) { @@ -464,152 +468,77 @@ void MyFrame::OnDeleteAll(wxCommandEvent& WXUNUSED(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) { - 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) { - 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) { - 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) { - 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) { - 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) { - 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 ) - (*text) << " wxLIST_MASK_STATE"; + msg << " wxLIST_MASK_STATE"; 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 ) - (*text) << " wxLIST_MASK_IMAGE"; + msg << " wxLIST_MASK_IMAGE"; 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 ) - (*text) << " wxLIST_SET_ITEM"; + msg << " wxLIST_SET_ITEM"; 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 ) - (*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"; } - (*text) << "\n"; + + wxLogMessage(msg); } 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) { - if ( !wxGetApp().GetTopWindow() ) - return; - - wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow; - if ( !text ) - return; + LogEvent(event, _T("OnSelected")); if ( GetWindowStyle() & wxLC_REPORT ) { @@ -619,52 +548,34 @@ void MyListCtrl::OnSelected(wxListEvent& event) 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"); } } - - text->WriteText(wxString::Format("%ld OnSelected\n", event.GetIndex())); } 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) { - 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) { - 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()); +} diff --git a/samples/listctrl/listtest.h b/samples/listctrl/listtest.h index 3436c50f16..c1bf2d02b5 100644 --- a/samples/listctrl/listtest.h +++ b/samples/listctrl/listtest.h @@ -14,9 +14,6 @@ class MyApp: public wxApp { public: virtual bool OnInit(); - - wxImageList *m_imageListNormal; - wxImageList *m_imageListSmall; }; class MyListCtrl: public wxListCtrl @@ -44,6 +41,9 @@ public: void OnChar(wxKeyEvent& event); +private: + void LogEvent(const wxListEvent& event, const wxChar *eventName); + DECLARE_EVENT_TABLE() }; @@ -54,7 +54,7 @@ public: 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: @@ -77,6 +77,12 @@ public: void BusyOn(wxCommandEvent& event); void BusyOff(wxCommandEvent& event); + wxImageList *m_imageListNormal; + wxImageList *m_imageListSmall; + +private: + wxLog *m_logOld; + DECLARE_EVENT_TABLE() }; diff --git a/samples/mdi/mdi.cpp b/samples/mdi/mdi.cpp index 7774866d6d..892bdd5537 100644 --- a/samples/mdi/mdi.cpp +++ b/samples/mdi/mdi.cpp @@ -248,6 +248,9 @@ void MyFrame::OnNewWindow(wxCommandEvent& WXUNUSED(event) ) // 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)); @@ -257,9 +260,6 @@ void MyFrame::OnNewWindow(wxCommandEvent& WXUNUSED(event) ) // Give it scrollbars canvas->SetScrollbars(20, 20, 50, 50); - subframe->CreateStatusBar(); - subframe->SetStatusText(title); - 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); +#if wxUSE_SPLINES 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); diff --git a/samples/regtest/registry.ico b/samples/regtest/registry.ico index 3ebfa3ace3528dcdfb2575240933107b298cba33..c706b8a013d2d468fde35a9a51b80bdf0a1dbbb9 100644 GIT binary patch delta 187 zcmdnSv5jMb6;lJ#L`UI?0W6cPnVmOI%VezQ-T;COK*YfDEr9{Z05W$o>;^LX-={G! z>;?h`?%mtc7&!j@11i|fy%W8nDr53YbC z4ah{2=g5Dbz<{J5sP+Q`Lq`K#fB$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"); @@ -352,37 +369,55 @@ void RegFrame::OnAbout(wxCommandEvent& event) dialog.ShowModal(); } -void RegFrame::OnTest(wxCommandEvent& event) +void RegFrame::OnTest(wxCommandEvent& WXUNUSED(event)) { 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); } -void RegFrame::OnCollapse(wxCommandEvent& event) +void RegFrame::OnCollapse(wxCommandEvent& WXUNUSED(event)) { 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); } -void RegFrame::OnRefresh(wxCommandEvent& event) +void RegFrame::OnRefresh(wxCommandEvent& WXUNUSED(event)) { m_treeCtrl->Refresh(); } -void RegFrame::OnDelete(wxCommandEvent& event) +void RegFrame::OnDelete(wxCommandEvent& WXUNUSED(event)) { m_treeCtrl->DeleteSelected(); } -void RegFrame::OnNewKey(wxCommandEvent& event) +void RegFrame::OnNewKey(wxCommandEvent& WXUNUSED(event)) { 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( @@ -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( @@ -406,7 +441,7 @@ void RegFrame::OnNewBinary(wxCommandEvent& event) } } -void RegFrame::OnInfo(wxCommandEvent& event) +void RegFrame::OnInfo(wxCommandEvent& WXUNUSED(event)) { m_treeCtrl->ShowProperties(); } @@ -471,7 +506,7 @@ RegTreeCtrl::TreeNode *RegTreeCtrl::InsertNewTreeNode(TreeNode *pParent, 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; @@ -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; @@ -697,8 +776,6 @@ void RegTreeCtrl::OnEndDrag(wxTreeEvent& event) return; } - bool dstExpanded = IsExpanded(dst->Id()); - bool ok; if ( isKey ) { wxRegKey& key = src->Key(); @@ -710,10 +787,6 @@ void RegTreeCtrl::OnEndDrag(wxTreeEvent& event) else { ok = key.Copy(keyDst); } - if ( ok && dstExpanded ) { - dst->OnCollapse(); - dst->OnExpand(); - } 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 ) { - // reexpand the key - dst->Refresh(); - } } } 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 ( m_pTree->IsExpanded(Id()) ) { + bool wasExpanded = m_pTree->IsExpanded(Id()); + if ( wasExpanded ) m_pTree->Collapse(Id()); - OnCollapse(); - m_pTree->SetItemHasChildren(Id()); + + OnCollapse(); + m_pTree->SetItemHasChildren(Id()); + if ( wasExpanded ) { m_pTree->Expand(Id()); OnExpand(); } - else { - // just allow it to be expanded - m_pTree->SetItemHasChildren(Id()); - } } bool RegTreeCtrl::TreeNode::DeleteChild(TreeNode *child) @@ -944,6 +1015,54 @@ const char *RegTreeCtrl::TreeNode::FullName() const // 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(), diff --git a/samples/text/text.cpp b/samples/text/text.cpp index 55beadd7c2..4406fecbfb 100644 --- a/samples/text/text.cpp +++ b/samples/text/text.cpp @@ -9,7 +9,8 @@ ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ - #pragma implementation "controls.h" + #pragma interface "text.cpp" + #pragma implementation "text.cpp" #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->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"); @@ -444,7 +445,7 @@ void MyTextCtrl::OnText(wxCommandEvent& event) 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", - "About Text Controls", + "About wxTextCtrl Sample", wxOK | wxICON_INFORMATION); dialog.ShowModal(); -- 2.45.2