]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/checklst/checklst.cpp
wxAuiNotebook has external tab dragging now
[wxWidgets.git] / samples / checklst / checklst.cpp
index e9f4de3dabef45df5368599d9fd900f162763d10..a6e13a446725a5d0df3a942141f29e9cf42ccce6 100644 (file)
@@ -57,7 +57,18 @@ public:
     void OnUncheckFirstItem(wxCommandEvent& event);
     void OnToggleFirstItem(wxCommandEvent& event);
     void OnToggleSelection(wxCommandEvent& event);
-    void OnAddItems(wxCommandEvent& event);
+    void OnToggleSorting(wxCommandEvent& event);
+    void OnToggleExtended(wxCommandEvent& event);
+
+    void OnInsertItemsStart(wxCommandEvent& event);
+    void OnInsertItemsMiddle(wxCommandEvent& event);
+    void OnInsertItemsEnd(wxCommandEvent& event);
+    void OnAppendItems(wxCommandEvent& event);
+    void OnRemoveItems(wxCommandEvent& event);
+
+    void OnGetBestSize(wxCommandEvent& event);
+
+    void OnMakeItemFirst(wxCommandEvent& event);
 
     void OnListboxSelect(wxCommandEvent& event);
     void OnCheckboxToggle(wxCommandEvent& event);
@@ -89,7 +100,15 @@ enum
     Menu_UncheckFirst,
     Menu_ToggleFirst,
     Menu_Selection,
-    Menu_AddItems,
+    Menu_Extended,
+    Menu_Sorting,
+    Menu_InsertItemsStart,
+    Menu_InsertItemsMiddle,
+    Menu_InsertItemsEnd,
+    Menu_AppendItems,
+    Menu_RemoveItems,
+    Menu_GetBestSize,
+    Menu_MakeItemFirst,
 
     Control_First,
     Control_Listbox,
@@ -106,7 +125,18 @@ BEGIN_EVENT_TABLE(CheckListBoxFrame, wxFrame)
     EVT_MENU(Menu_UncheckFirst, CheckListBoxFrame::OnUncheckFirstItem)
     EVT_MENU(Menu_ToggleFirst, CheckListBoxFrame::OnToggleFirstItem)
     EVT_MENU(Menu_Selection, CheckListBoxFrame::OnToggleSelection)
-    EVT_MENU(Menu_AddItems, CheckListBoxFrame::OnAddItems)
+    EVT_MENU(Menu_Extended, CheckListBoxFrame::OnToggleExtended)
+    EVT_MENU(Menu_Sorting, CheckListBoxFrame::OnToggleSorting)
+
+    EVT_MENU(Menu_InsertItemsStart, CheckListBoxFrame::OnInsertItemsStart)
+    EVT_MENU(Menu_InsertItemsMiddle, CheckListBoxFrame::OnInsertItemsMiddle)
+    EVT_MENU(Menu_InsertItemsEnd, CheckListBoxFrame::OnInsertItemsEnd)
+    EVT_MENU(Menu_AppendItems, CheckListBoxFrame::OnAppendItems)
+    EVT_MENU(Menu_RemoveItems, CheckListBoxFrame::OnRemoveItems)
+
+    EVT_MENU(Menu_GetBestSize, CheckListBoxFrame::OnGetBestSize)
+
+    EVT_MENU(Menu_MakeItemFirst, CheckListBoxFrame::OnMakeItemFirst)
 
     EVT_LISTBOX(Control_Listbox, CheckListBoxFrame::OnListboxSelect)
     EVT_CHECKLISTBOX(Control_Listbox, CheckListBoxFrame::OnCheckboxToggle)
@@ -116,7 +146,7 @@ BEGIN_EVENT_TABLE(CheckListBoxFrame, wxFrame)
     EVT_BUTTON(Btn_Down, CheckListBoxFrame::OnButtonDown)
 END_EVENT_TABLE()
 
-IMPLEMENT_APP(CheckListBoxApp);
+IMPLEMENT_APP(CheckListBoxApp)
 
 // init our app: create windows
 bool CheckListBoxApp::OnInit(void)
@@ -158,9 +188,20 @@ CheckListBoxFrame::CheckListBoxFrame(wxFrame *frame,
     menuList->Append(Menu_UncheckFirst, _T("Uncheck the first item\tCtrl-U"));
     menuList->Append(Menu_ToggleFirst, _T("Toggle the first item\tCtrl-T"));
     menuList->AppendSeparator();
-    menuList->Append(Menu_AddItems, _T("Add more items\tCtrl-A"));
+    menuList->Append(Menu_InsertItemsStart, _T("Insert some item at the beginning"));
+    menuList->Append(Menu_InsertItemsMiddle, _T("Insert some item at the middle"));
+    menuList->Append(Menu_InsertItemsEnd, _T("Insert some item at the end"));
+    menuList->Append(Menu_AppendItems, _T("Append some items\tCtrl-A"));
+    menuList->Append(Menu_RemoveItems, _T("Remove some items"));
     menuList->AppendSeparator();
     menuList->AppendCheckItem(Menu_Selection, _T("Multiple selection\tCtrl-M"));
+    menuList->AppendCheckItem(Menu_Extended, _T("Extended selection"));
+    menuList->AppendCheckItem(Menu_Sorting, _T("Sorting"));
+    menuList->AppendSeparator();
+    menuList->Append(Menu_GetBestSize, _T("Get the best size of the checklistbox control"));
+    menuList->AppendSeparator();
+    menuList->Append(Menu_MakeItemFirst, _T("Make selected item the first item"));
+
 
     // put it all together
     wxMenuBar *menu_bar = new wxMenuBar;
@@ -228,8 +269,6 @@ void CheckListBoxFrame::CreateCheckListbox(long flags)
          flags
         );
 
-    //m_pListBox->SetBackgroundColour(*wxGREEN);
-
     delete [] astrChoices;
 
     // set grey background for every second entry
@@ -271,7 +310,7 @@ void CheckListBoxFrame::OnToggleFirstItem(wxCommandEvent& WXUNUSED(event))
         m_pListBox->Check(0, !m_pListBox->IsChecked(0));
 }
 
-void CheckListBoxFrame::OnAddItems(wxCommandEvent& WXUNUSED(event))
+void CheckListBoxFrame::OnInsertItemsStart(wxCommandEvent& WXUNUSED(event))
 {
     static size_t s_nItem = 0;
     wxArrayString items;
@@ -282,6 +321,64 @@ void CheckListBoxFrame::OnAddItems(wxCommandEvent& WXUNUSED(event))
     m_pListBox->InsertItems(items, 0);//m_pListBox->GetCount());
 }
 
+void CheckListBoxFrame::OnInsertItemsMiddle(wxCommandEvent& WXUNUSED(event))
+{
+    static size_t s_nItem = 0;
+    wxArrayString items;
+    items.Add(wxString::Format(_T("New item %lu"), (unsigned long)++s_nItem));
+    items.Add(wxString::Format(_T("New item %lu"), (unsigned long)++s_nItem));
+    items.Add(wxString::Format(_T("New item %lu"), (unsigned long)++s_nItem));
+
+    m_pListBox->InsertItems(items, m_pListBox->GetCount() ? 1 : 0);
+}
+
+void CheckListBoxFrame::OnInsertItemsEnd(wxCommandEvent& WXUNUSED(event))
+{
+    static size_t s_nItem = 0;
+    wxArrayString items;
+    items.Add(wxString::Format(_T("New item %lu"), (unsigned long)++s_nItem));
+    items.Add(wxString::Format(_T("New item %lu"), (unsigned long)++s_nItem));
+    items.Add(wxString::Format(_T("New item %lu"), (unsigned long)++s_nItem));
+
+    m_pListBox->InsertItems(items, m_pListBox->GetCount() );
+}
+
+void CheckListBoxFrame::OnAppendItems(wxCommandEvent& WXUNUSED(event))
+{
+    static size_t s_nItem = 0;
+    m_pListBox->Append(wxString::Format(_T("New item %lu"), (unsigned long)++s_nItem));
+    m_pListBox->Append(wxString::Format(_T("New item %lu"), (unsigned long)++s_nItem));
+    m_pListBox->Append(wxString::Format(_T("New item %lu"), (unsigned long)++s_nItem));
+}
+
+void CheckListBoxFrame::OnRemoveItems(wxCommandEvent& WXUNUSED(event))
+{
+    if(m_pListBox->GetCount())
+        m_pListBox->Delete(0);
+    if(m_pListBox->GetCount())
+        m_pListBox->Delete(0);
+    if(m_pListBox->GetCount())
+        m_pListBox->Delete(0);
+}
+
+void CheckListBoxFrame::OnGetBestSize(wxCommandEvent& WXUNUSED(event))
+{
+    wxSize bestSize = m_pListBox->GetBestSize();
+
+    wxMessageBox(wxString::Format(wxT("Best size of the checklistbox is:[%i,%i]"),
+                                  bestSize.x, bestSize.y
+                                 )
+                );
+}
+
+void CheckListBoxFrame::OnMakeItemFirst(wxCommandEvent& WXUNUSED(event))
+{
+    if(m_pListBox->GetSelection() != -1)
+        m_pListBox->SetFirstItem(m_pListBox->GetSelection());
+    else
+        wxMessageBox(wxT("Nothing selected!"));
+}
+
 void CheckListBoxFrame::OnToggleSelection(wxCommandEvent& event)
 {
     wxSizer *sizer = m_panel->GetSizer();
@@ -296,6 +393,34 @@ void CheckListBoxFrame::OnToggleSelection(wxCommandEvent& event)
     m_panel->Layout();
 }
 
+void CheckListBoxFrame::OnToggleExtended(wxCommandEvent& event)
+{
+    wxSizer *sizer = m_panel->GetSizer();
+
+    sizer->Detach( m_pListBox );
+    delete m_pListBox;
+
+    CreateCheckListbox(event.IsChecked() ? wxLB_EXTENDED : 0);
+
+    sizer->Insert(0, m_pListBox, 1, wxGROW | wxALL, 10);
+
+    m_panel->Layout();
+}
+
+void CheckListBoxFrame::OnToggleSorting(wxCommandEvent& event)
+{
+    wxSizer *sizer = m_panel->GetSizer();
+
+    sizer->Detach( m_pListBox );
+    delete m_pListBox;
+
+    CreateCheckListbox(event.IsChecked() ? wxLB_SORT : 0);
+
+    sizer->Insert(0, m_pListBox, 1, wxGROW | wxALL, 10);
+
+    m_panel->Layout();
+}
+
 void CheckListBoxFrame::OnListboxSelect(wxCommandEvent& event)
 {
     int nSel = event.GetSelection();
@@ -372,7 +497,7 @@ void CheckListBoxFrame::OnButtonMove(bool up)
         wxString label = m_pListBox->GetString(selection);
 
         int positionNew = up ? selection - 1 : selection + 2;
-        if ( positionNew < 0 || positionNew > m_pListBox->GetCount() )
+        if ( positionNew < 0 || positionNew > (int)m_pListBox->GetCount() )
         {
             wxLogStatus(this, wxT("Can't move this item %s"), up ? wxT("up") : wxT("down"));
         }