]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/listctrl/listtest.cpp
Use memcmp instead of that wxString hack
[wxWidgets.git] / samples / listctrl / listtest.cpp
index 410efa75716eb1013cfeeca9d86332e4fe9b9535..11857e7add8df85a1a74370a306ec5073c2233f3 100644 (file)
 #include "wx/wx.h"
 #endif
 
+#ifndef __WXMSW__
+#include "mondrian.xpm"
+#endif
+
 #include "wx/listctrl.h"
 #include "listtest.h"
 
 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
+       EVT_MENU(BUSY_ON, MyFrame::BusyOn)
+       EVT_MENU(BUSY_OFF, MyFrame::BusyOff)
        EVT_MENU(LIST_QUIT, MyFrame::OnQuit)
        EVT_MENU(LIST_ABOUT, MyFrame::OnAbout)
        EVT_MENU(LIST_LIST_VIEW, MyFrame::OnListView)
@@ -37,6 +43,8 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
        EVT_MENU(LIST_ICON_TEXT_VIEW, MyFrame::OnIconTextView)
        EVT_MENU(LIST_SMALL_ICON_VIEW, MyFrame::OnSmallIconView)
        EVT_MENU(LIST_SMALL_ICON_TEXT_VIEW, MyFrame::OnSmallIconTextView)
+       EVT_MENU(LIST_DESELECT_ALL, MyFrame::OnDeselectAll)
+       EVT_MENU(LIST_SELECT_ALL, MyFrame::OnSelectAll)
 END_EVENT_TABLE()
 
 BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl)
@@ -49,7 +57,8 @@ BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl)
        EVT_LIST_SET_INFO(LIST_CTRL, MyListCtrl::OnSetInfo)
        EVT_LIST_ITEM_SELECTED(LIST_CTRL, MyListCtrl::OnSelected)
        EVT_LIST_ITEM_DESELECTED(LIST_CTRL, MyListCtrl::OnDeselected)
-       EVT_LIST_KEY_DOWN(LIST_CTRL, MyListCtrl::OnKeyDown)
+       EVT_LIST_KEY_DOWN(LIST_CTRL, MyListCtrl::OnListKeyDown)
+       EVT_LIST_ITEM_ACTIVATED(LIST_CTRL, MyListCtrl::OnActivated)
 END_EVENT_TABLE()
 
 IMPLEMENT_APP(MyApp)
@@ -58,20 +67,15 @@ IMPLEMENT_APP(MyApp)
 bool MyApp::OnInit(void)
 {
   // Create the main frame window
-  MyFrame *frame = new MyFrame(NULL, "wxListCtrl Test", 50, 50, 450, 340);
+  MyFrame *frame = new MyFrame((wxFrame *) NULL, "wxListCtrl Test", 50, 50, 450, 340);
 
   // This reduces flicker effects - even better would be to define OnEraseBackground
   // to do nothing. When the list control's scrollbars are show or hidden, the
   // frame is sent a background erase event.
-  frame->SetBackgroundColour(wxColour(255, 255, 255));
+  frame->SetBackgroundColour( *wxWHITE );
 
   // Give it an icon
-#ifdef __WXMSW__
-  frame->SetIcon(wxIcon("mondrian"));
-#else
-#include "mondrian.xpm"
-  frame->SetIcon(wxIcon(mondrian_xpm));
-#endif
+  frame->SetIcon( wxICON(mondrian) );
 
   // Make an image list containing large icons
   m_imageListNormal = new wxImageList(32, 32, TRUE);
@@ -125,6 +129,10 @@ bool MyApp::OnInit(void)
   file_menu->Append(LIST_ICON_TEXT_VIEW,       "Icon view with &text");
   file_menu->Append(LIST_SMALL_ICON_VIEW,      "&Small icon view");
   file_menu->Append(LIST_SMALL_ICON_TEXT_VIEW,         "Small icon &view with text");
+  file_menu->Append(LIST_DESELECT_ALL, "&Deselect All");
+  file_menu->Append(LIST_SELECT_ALL, "S&elect All");
+  file_menu->Append(BUSY_ON,           "&Busy cursor on");
+  file_menu->Append(BUSY_OFF,          "&Busy cursor off");
   file_menu->AppendSeparator();
   file_menu->Append(LIST_ABOUT, "&About");
   file_menu->Append(LIST_QUIT, "E&xit");
@@ -155,9 +163,9 @@ bool MyApp::OnInit(void)
 
   for ( int i=0; i < 30; i++)
        {
-               char buf[20];
-               sprintf(buf, "Item %d", i);
-               long tmp = frame->m_listCtrl->InsertItem(i, buf);
+               wxChar buf[20];
+               wxSprintf(buf, _T("Item %d"), i);
+               frame->m_listCtrl->InsertItem(i, buf);
        }
 
   frame->CreateStatusBar(3);
@@ -175,8 +183,8 @@ bool MyApp::OnInit(void)
 MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h):
   wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
 {
-       m_listCtrl = NULL;
-       m_logWindow = NULL;
+       m_listCtrl = (MyListCtrl *) NULL;
+       m_logWindow = (wxTextCtrl *) NULL;
 }
 
 MyFrame::~MyFrame(void)
@@ -190,6 +198,16 @@ void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
   Close(TRUE);
 }
 
+void MyFrame::BusyOn(wxCommandEvent& WXUNUSED(event))
+{
+   wxBeginBusyCursor();
+}
+
+void MyFrame::BusyOff(wxCommandEvent& WXUNUSED(event))
+{
+   wxEndBusyCursor();
+}
+
 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 {
   wxMessageDialog dialog(this, "List test sample\nJulian Smart (c) 1997",
@@ -198,105 +216,129 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
   dialog.ShowModal();
 }
 
-void MyFrame::OnListView(wxCommandEvent& WXUNUSED(event))
+void MyFrame::OnDeselectAll(wxCommandEvent& WXUNUSED(event))
 {
-       m_logWindow->Clear();
-       m_listCtrl->DeleteAllItems();
-       m_listCtrl->SetSingleStyle(wxLC_LIST);
-    m_listCtrl->SetImageList(NULL, wxIMAGE_LIST_NORMAL);
-    m_listCtrl->SetImageList(NULL, wxIMAGE_LIST_SMALL);
+   int n = m_listCtrl->GetItemCount();
+   for (int i = 0; i < n; i++)
+      m_listCtrl->SetItemState(i,0,wxLIST_STATE_SELECTED);
+}
 
-       for ( int i=0; i < 30; i++)
-       {
-               char buf[20];
-               sprintf(buf, "Item %d", i);
-               long tmp = m_listCtrl->InsertItem(i, buf);
-       }
+void MyFrame::OnSelectAll(wxCommandEvent& WXUNUSED(event))
+{
+   int n = m_listCtrl->GetItemCount();
+   for (int i = 0; i < n; i++)
+      m_listCtrl->SetItemState(i,wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
+}
+
+void MyFrame::OnListView(wxCommandEvent& WXUNUSED(event))
+{
+    m_listCtrl->DeleteAllItems();
+    m_logWindow->Clear();
+    m_listCtrl->SetSingleStyle(wxLC_LIST);
+    m_listCtrl->SetImageList((wxImageList *) NULL, wxIMAGE_LIST_NORMAL);
+    m_listCtrl->SetImageList((wxImageList *) NULL, wxIMAGE_LIST_SMALL);
+
+    for ( int i=0; i < 30; i++)
+    {
+       wxChar buf[20];
+       wxSprintf(buf, _T("Item %d"), i);
+       m_listCtrl->InsertItem(i, buf);
+    }
 }
 
 void MyFrame::OnReportView(wxCommandEvent& WXUNUSED(event))
 {
-       m_logWindow->Clear();
-       m_listCtrl->DeleteAllItems();
-       m_listCtrl->SetSingleStyle(wxLC_REPORT);
-    m_listCtrl->SetImageList(NULL, wxIMAGE_LIST_NORMAL);
+    m_listCtrl->DeleteAllItems();
+    m_listCtrl->DeleteAllColumns();
+    m_logWindow->Clear();
+   
+    m_listCtrl->SetSingleStyle(wxLC_REPORT);
+    m_listCtrl->SetImageList((wxImageList *) NULL, wxIMAGE_LIST_NORMAL);
     m_listCtrl->SetImageList(wxGetApp().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);
-
-       for ( int i=0; i < 30; i++)
-       {
-               char buf[20];
-               sprintf(buf, "Item %d, col 1", i);
-               long tmp = m_listCtrl->InsertItem(i, buf, 0);
-
-               sprintf(buf, "Item %d, col 2", i);
-               tmp = m_listCtrl->SetItem(i, 1, buf);
-       }
+    m_listCtrl->InsertColumn(0, "Column 1"); // , wxLIST_FORMAT_LEFT, 140);
+    m_listCtrl->InsertColumn(1, "Column 2"); // , wxLIST_FORMAT_LEFT, 140);
+    m_listCtrl->InsertColumn(2, "One More Column (2)"); // , wxLIST_FORMAT_LEFT, 140);
+
+    for ( int i=0; i < 30; i++)
+    {
+       wxChar buf[50];
+       wxSprintf(buf, _T("This is item %d"), i);
+       long tmp = m_listCtrl->InsertItem(i, buf, 0);
+
+       wxSprintf(buf, _T("Col 1, item %d"), i);
+       tmp = m_listCtrl->SetItem(i, 1, buf);
+       
+       wxSprintf(buf, _T("Item %d in column 2"), i);
+       tmp = m_listCtrl->SetItem(i, 2, buf);
+    }
+    
+    m_listCtrl->SetColumnWidth( 0, wxLIST_AUTOSIZE );
+    m_listCtrl->SetColumnWidth( 1, wxLIST_AUTOSIZE );
+    m_listCtrl->SetColumnWidth( 2, wxLIST_AUTOSIZE );
 }
 
 void MyFrame::OnIconView(wxCommandEvent& WXUNUSED(event))
 {
-       m_logWindow->Clear();
-       m_listCtrl->DeleteAllItems();
-       m_listCtrl->SetSingleStyle(wxLC_ICON);
+   m_listCtrl->DeleteAllItems();
+   m_logWindow->Clear();
+   m_listCtrl->SetSingleStyle(wxLC_ICON);
     m_listCtrl->SetImageList(wxGetApp().m_imageListNormal, wxIMAGE_LIST_NORMAL);
     m_listCtrl->SetImageList(wxGetApp().m_imageListSmall, wxIMAGE_LIST_SMALL);
 
        for ( int i=0; i < 9; i++)
        {
-               long tmp = m_listCtrl->InsertItem(i, i);
+               m_listCtrl->InsertItem(i, i);
        }
 }
 
 void MyFrame::OnIconTextView(wxCommandEvent& WXUNUSED(event))
 {
-       m_logWindow->Clear();
        m_listCtrl->DeleteAllItems();
+       m_logWindow->Clear();
        m_listCtrl->SetSingleStyle(wxLC_ICON);
     m_listCtrl->SetImageList(wxGetApp().m_imageListNormal, wxIMAGE_LIST_NORMAL);
     m_listCtrl->SetImageList(wxGetApp().m_imageListSmall, wxIMAGE_LIST_SMALL);
 
        for ( int i=0; i < 9; i++)
        {
-               char buf[20];
-               sprintf(buf, "Label %d", i);
-               long tmp = m_listCtrl->InsertItem(i, buf, i);
+               wxChar buf[20];
+               wxSprintf(buf, _T("Label %d"), i);
+               m_listCtrl->InsertItem(i, buf, i);
        }
 }
 
 void MyFrame::OnSmallIconView(wxCommandEvent& WXUNUSED(event))
 {
-       m_logWindow->Clear();
        m_listCtrl->DeleteAllItems();
+       m_logWindow->Clear();
        m_listCtrl->SetSingleStyle(wxLC_SMALL_ICON);
     m_listCtrl->SetImageList(wxGetApp().m_imageListNormal, wxIMAGE_LIST_NORMAL);
     m_listCtrl->SetImageList(wxGetApp().m_imageListSmall, wxIMAGE_LIST_SMALL);
 
        for ( int i=0; i < 9; i++)
        {
-               long tmp = m_listCtrl->InsertItem(i, 0);
+               m_listCtrl->InsertItem(i, 0);
        }
 }
 
 void MyFrame::OnSmallIconTextView(wxCommandEvent& WXUNUSED(event))
 {
-       m_logWindow->Clear();
        m_listCtrl->DeleteAllItems();
+       m_logWindow->Clear();
        m_listCtrl->SetSingleStyle(wxLC_SMALL_ICON);
     m_listCtrl->SetImageList(wxGetApp().m_imageListNormal, wxIMAGE_LIST_NORMAL);
     m_listCtrl->SetImageList(wxGetApp().m_imageListSmall, wxIMAGE_LIST_SMALL);
 
        for ( int i=0; i < 9; i++)
        {
-               long tmp = m_listCtrl->InsertItem(i, "Label", 0);
+               m_listCtrl->InsertItem(i, "Label", 0);
        }
 }
 
 // MyListCtrl
 
-void MyListCtrl::OnBeginDrag(wxListEvent& event)
+void MyListCtrl::OnBeginDrag(wxListEvent& WXUNUSED(event))
 {
        if ( !wxGetApp().GetTopWindow() )
                return;
@@ -305,15 +347,10 @@ void MyListCtrl::OnBeginDrag(wxListEvent& event)
        if ( !text )
                return;
 
-#ifndef __GNUWIN32__
-       ostream str(text);
-
-       str << "OnBeginDrag\n";
-       str.flush();
-#endif
+        text->WriteText("OnBeginDrag\n");
 }
 
-void MyListCtrl::OnBeginRDrag(wxListEvent& event)
+void MyListCtrl::OnBeginRDrag(wxListEvent& WXUNUSED(event))
 {
        if ( !wxGetApp().GetTopWindow() )
                return;
@@ -321,15 +358,10 @@ void MyListCtrl::OnBeginRDrag(wxListEvent& event)
        wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
        if ( !text )
                return;
-#ifndef __GNUWIN32__
-       ostream str(text);
-
-       str << "OnBeginRDrag\n";
-       str.flush();
-#endif
+        text->WriteText("OnBeginRDrag\n");
 }
 
-void MyListCtrl::OnBeginLabelEdit(wxListEvent& event)
+void MyListCtrl::OnBeginLabelEdit(wxListEvent& WXUNUSED(event))
 {
        if ( !wxGetApp().GetTopWindow() )
                return;
@@ -338,15 +370,10 @@ void MyListCtrl::OnBeginLabelEdit(wxListEvent& event)
        if ( !text )
                return;
 
-#ifndef __GNUWIN32__
-       ostream str(text);
-
-       str << "OnBeginLabelEdit\n";
-       str.flush();
-#endif
+        text->WriteText("OnBeginLabelEdit\n");
 }
 
-void MyListCtrl::OnEndLabelEdit(wxListEvent& event)
+void MyListCtrl::OnEndLabelEdit(wxListEvent& WXUNUSED(event))
 {
        if ( !wxGetApp().GetTopWindow() )
                return;
@@ -355,15 +382,10 @@ void MyListCtrl::OnEndLabelEdit(wxListEvent& event)
        if ( !text )
                return;
 
-#ifndef __GNUWIN32__
-       ostream str(text);
-
-       str << "OnEndLabelEdit\n";
-       str.flush();
-#endif
+        text->WriteText("OnEndLabelEdit\n");
 }
 
-void MyListCtrl::OnDeleteItem(wxListEvent& event)
+void MyListCtrl::OnDeleteItem(wxListEvent& WXUNUSED(event))
 {
        if ( !wxGetApp().GetTopWindow() )
                return;
@@ -372,15 +394,10 @@ void MyListCtrl::OnDeleteItem(wxListEvent& event)
        if ( !text )
                return;
 
-#ifndef __GNUWIN32__
-       ostream str(text);
-
-       str << "OnDeleteItem\n";
-       str.flush();
-#endif
+        text->WriteText("OnDeleteItem\n");
 }
 
-void MyListCtrl::OnGetInfo(wxListEvent& event)
+void MyListCtrl::OnGetInfo(wxListEvent& /*event*/)
 {
        if ( !wxGetApp().GetTopWindow() )
                return;
@@ -389,7 +406,9 @@ void MyListCtrl::OnGetInfo(wxListEvent& event)
        if ( !text )
                return;
 
-#ifndef __GNUWIN32__
+        text->WriteText("OnGetInfo\n");
+
+/*
        ostream str(text);
 
        str << "OnGetInfo (" << event.m_item.m_itemId << ", " << event.m_item.m_col << ")";
@@ -414,10 +433,10 @@ void MyListCtrl::OnGetInfo(wxListEvent& event)
        }
        str << "\n";
        str.flush();
-#endif
+*/
 }
 
-void MyListCtrl::OnSetInfo(wxListEvent& event)
+void MyListCtrl::OnSetInfo(wxListEvent& WXUNUSED(event))
 {
        if ( !wxGetApp().GetTopWindow() )
                return;
@@ -426,15 +445,10 @@ void MyListCtrl::OnSetInfo(wxListEvent& event)
        if ( !text )
                return;
 
-#ifndef __GNUWIN32__
-       ostream str(text);
-
-       str << "OnSetInfo\n";
-       str.flush();
-#endif
+       text->WriteText("OnSetInfo\n");
 }
 
-void MyListCtrl::OnSelected(wxListEvent& event)
+void MyListCtrl::OnSelected(wxListEvent& WXUNUSED(event))
 {
        if ( !wxGetApp().GetTopWindow() )
                return;
@@ -443,15 +457,10 @@ void MyListCtrl::OnSelected(wxListEvent& event)
        if ( !text )
                return;
 
-#ifndef __GNUWIN32__
-       ostream str(text);
-
-       str << "OnSelected\n";
-       str.flush();
-#endif
+       text->WriteText("OnSelected\n");
 }
 
-void MyListCtrl::OnDeselected(wxListEvent& event)
+void MyListCtrl::OnDeselected(wxListEvent& WXUNUSED(event))
 {
        if ( !wxGetApp().GetTopWindow() )
                return;
@@ -460,15 +469,10 @@ void MyListCtrl::OnDeselected(wxListEvent& event)
        if ( !text )
                return;
 
-#ifndef __GNUWIN32__
-       ostream str(text);
-
-       str << "OnDeselected\n";
-       str.flush();
-#endif
+       text->WriteText("OnDeselected\n");
 }
 
-void MyListCtrl::OnKeyDown(wxListEvent& event)
+void MyListCtrl::OnActivated(wxListEvent& WXUNUSED(event))
 {
        if ( !wxGetApp().GetTopWindow() )
                return;
@@ -477,11 +481,19 @@ void MyListCtrl::OnKeyDown(wxListEvent& event)
        if ( !text )
                return;
 
-#ifndef __GNUWIN32__
-       ostream str(text);
+       text->WriteText("OnActivated\n");
+}
 
-       str << "OnKeyDown\n";
-       str.flush();
-#endif
+void MyListCtrl::OnListKeyDown(wxListEvent& event)
+{
+       if ( !wxGetApp().GetTopWindow() )
+               return;
+
+       wxTextCtrl *text = ((MyFrame *)wxGetApp().GetTopWindow())->m_logWindow;
+       if ( !text )
+               return;
+
+       text->WriteText("OnListKeyDown\n");
 }
 
+