]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/editlbox.cpp
missing commit
[wxWidgets.git] / src / generic / editlbox.cpp
index b01dcf968d2a6d305d32a2fc0c5579c0e2f851df..14d3cd18cb7ee8b2be8b498e782163b3deb1c982 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        editlbox.cpp
+// Name:        src/generic/editlbox.cpp
 // Purpose:     ListBox with editable items
 // Author:      Vaclav Slavik
 // RCS-ID:      $Id$
@@ -14,6 +14,8 @@
     #pragma hdrstop
 #endif
 
+#if wxUSE_EDITABLELISTBOX
+
 // for all others, include the necessary headers (this file is usually all you
 // need because it includes almost all "standard" wxWidgets headers)
 #ifndef WX_PRECOMP
 #include "wx/sizer.h"
 #include "wx/listctrl.h"
 
-static char * eledit_xpm[] = {
+// ============================================================================
+// implementation
+// ============================================================================
+
+const char wxEditableListBoxNameStr[] = "editableListBox";
+
+static const char* const eledit_xpm[] = {
 "16 16 3 1",
 "   c None",
 ".  c #000000",
@@ -46,7 +54,7 @@ static char * eledit_xpm[] = {
 "                ",
 "                "};
 
-static char * elnew_xpm[] = {
+static const char* const elnew_xpm[] = {
 "16 16 5 1",
 "   c None",
 ".  c #7F7F7F",
@@ -70,7 +78,7 @@ static char * elnew_xpm[] = {
 "                ",
 "                "};
 
-static char * eldel_xpm[] = {
+static const char* const eldel_xpm[] = {
 "16 16 3 1",
 "   c None",
 ".  c #7F0000",
@@ -92,7 +100,7 @@ static char * eldel_xpm[] = {
 "   .         .  ",
 "                "};
 
-static char * eldown_xpm[] = {
+static const char* const eldown_xpm[] = {
 "16 16 2 1",
 "   c None",
 ".  c #000000",
@@ -113,7 +121,7 @@ static char * eldown_xpm[] = {
 "                ",
 "                "};
 
-static char * elup_xpm[] = {
+static const char* const elup_xpm[] = {
 "16 16 2 1",
 "   c None",
 ".  c #000000",
@@ -152,7 +160,7 @@ public:
 
     void CreateColumns()
     {
-        InsertColumn(0, _T("item"));
+        InsertColumn(0, wxT("item"));
         SizeColumns();
     }
 
@@ -164,6 +172,7 @@ public:
 #else
          w -= 2*wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
 #endif
+         if (w < 0) w = 0;
          SetColumnWidth(0, w);
     }
 
@@ -180,16 +189,21 @@ BEGIN_EVENT_TABLE(CleverListCtrl, wxListCtrl)
    EVT_SIZE(CleverListCtrl::OnSize)
 END_EVENT_TABLE()
 
+
+// ----------------------------------------------------------------------------
+// wxEditableListBox
+// ----------------------------------------------------------------------------
+
 IMPLEMENT_CLASS(wxEditableListBox, wxPanel)
 
 // NB: generate the IDs at runtime to avoid conflict with XRCID values,
 //     they could cause XRCCTRL() failures in XRC-based dialogs
-const int wxID_ELB_DELETE = wxNewId();
-const int wxID_ELB_EDIT = wxNewId();
-const int wxID_ELB_NEW = wxNewId();
-const int wxID_ELB_UP = wxNewId();
-const int wxID_ELB_DOWN = wxNewId();
-const int wxID_ELB_LISTCTRL = wxNewId();
+const wxWindowIDRef wxID_ELB_DELETE = wxWindow::NewControlId();
+const wxWindowIDRef wxID_ELB_EDIT = wxWindow::NewControlId();
+const wxWindowIDRef wxID_ELB_NEW = wxWindow::NewControlId();
+const wxWindowIDRef wxID_ELB_UP = wxWindow::NewControlId();
+const wxWindowIDRef wxID_ELB_DOWN = wxWindow::NewControlId();
+const wxWindowIDRef wxID_ELB_LISTCTRL = wxWindow::NewControlId();
 
 BEGIN_EVENT_TABLE(wxEditableListBox, wxPanel)
     EVT_LIST_ITEM_SELECTED(wxID_ELB_LISTCTRL, wxEditableListBox::OnItemSelected)
@@ -201,15 +215,16 @@ BEGIN_EVENT_TABLE(wxEditableListBox, wxPanel)
     EVT_BUTTON(wxID_ELB_DELETE, wxEditableListBox::OnDelItem)
 END_EVENT_TABLE()
 
-wxEditableListBox::wxEditableListBox(wxWindow *parent, wxWindowID id,
+bool wxEditableListBox::Create(wxWindow *parent, wxWindowID id,
                           const wxString& label,
                           const wxPoint& pos, const wxSize& size,
                           long style,
                           const wxString& name)
-   : wxPanel(parent, id, pos, size, wxTAB_TRAVERSAL, name)
 {
+    if (!wxPanel::Create(parent, id, pos, size, wxTAB_TRAVERSAL, name))
+        return false;
+
     m_style = style;
-    m_bEdit = m_bNew = m_bDel = m_bUp = m_bDown = NULL;
 
     wxSizer *sizer = new wxBoxSizer(wxVERTICAL);
 
@@ -279,6 +294,8 @@ wxEditableListBox::wxEditableListBox(wxWindow *parent, wxWindowID id,
 
     SetSizer(sizer);
     Layout();
+
+    return true;
 }
 
 void wxEditableListBox::SetStrings(const wxArrayString& strings)
@@ -333,9 +350,9 @@ void wxEditableListBox::OnEndLabelEdit(wxListEvent& event)
         // possible:
         m_listCtrl->InsertItem(m_listCtrl->GetItemCount(), wxEmptyString);
 
-        // Simulate a wxEVT_COMMAND_LIST_ITEM_SELECTED event for the new item,
+        // Simulate a wxEVT_LIST_ITEM_SELECTED event for the new item,
         // so that the buttons are enabled/disabled properly
-        wxListEvent selectionEvent(wxEVT_COMMAND_LIST_ITEM_SELECTED, m_listCtrl->GetId());
+        wxListEvent selectionEvent(wxEVT_LIST_ITEM_SELECTED, m_listCtrl->GetId());
         selectionEvent.m_itemIndex = event.GetIndex();
         m_listCtrl->GetEventHandler()->ProcessEvent(selectionEvent);
     }
@@ -353,26 +370,34 @@ void wxEditableListBox::OnEditItem(wxCommandEvent& WXUNUSED(event))
     m_listCtrl->EditLabel(m_selection);
 }
 
-void wxEditableListBox::OnUpItem(wxCommandEvent& WXUNUSED(event))
+void wxEditableListBox::SwapItems(long i1, long i2)
 {
-    wxString t1, t2;
+    // swap the text
+    wxString t1 = m_listCtrl->GetItemText(i1);
+    wxString t2 = m_listCtrl->GetItemText(i2);
+    m_listCtrl->SetItemText(i1, t2);
+    m_listCtrl->SetItemText(i2, t1);
+
+    // swap the item data
+    long d1 = m_listCtrl->GetItemData(i1);
+    long d2 = m_listCtrl->GetItemData(i2);
+    m_listCtrl->SetItemData(i1, d2);
+    m_listCtrl->SetItemData(i2, d1);
+}
 
-    t1 = m_listCtrl->GetItemText(m_selection - 1);
-    t2 = m_listCtrl->GetItemText(m_selection);
-    m_listCtrl->SetItemText(m_selection - 1, t2);
-    m_listCtrl->SetItemText(m_selection, t1);
+
+void wxEditableListBox::OnUpItem(wxCommandEvent& WXUNUSED(event))
+{
+    SwapItems(m_selection - 1, m_selection);
     m_listCtrl->SetItemState(m_selection - 1,
                              wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
 }
 
 void wxEditableListBox::OnDownItem(wxCommandEvent& WXUNUSED(event))
 {
-    wxString t1, t2;
-
-    t1 = m_listCtrl->GetItemText(m_selection + 1);
-    t2 = m_listCtrl->GetItemText(m_selection);
-    m_listCtrl->SetItemText(m_selection + 1, t2);
-    m_listCtrl->SetItemText(m_selection, t1);
+    SwapItems(m_selection + 1, m_selection);
     m_listCtrl->SetItemState(m_selection + 1,
                              wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
 }
+
+#endif // wxUSE_EDITABLELISTBOX