/////////////////////////////////////////////////////////////////////////////
-// Name: editlbox.cpp
+// Name: src/generic/editlbox.cpp
// Purpose: ListBox with editable items
// Author: Vaclav Slavik
// RCS-ID: $Id$
#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",
" ",
" "};
-static char * elnew_xpm[] = {
+static const char* const elnew_xpm[] = {
"16 16 5 1",
" c None",
". c #7F7F7F",
" ",
" "};
-static char * eldel_xpm[] = {
+static const char* const eldel_xpm[] = {
"16 16 3 1",
" c None",
". c #7F0000",
" . . ",
" "};
-static char * eldown_xpm[] = {
+static const char* const eldown_xpm[] = {
"16 16 2 1",
" c None",
". c #000000",
" ",
" "};
-static char * elup_xpm[] = {
+static const char* const elup_xpm[] = {
"16 16 2 1",
" c None",
". c #000000",
void CreateColumns()
{
- InsertColumn(0, _T("item"));
+ InsertColumn(0, wxT("item"));
SizeColumns();
}
#else
w -= 2*wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
#endif
+ if (w < 0) w = 0;
SetColumnWidth(0, w);
}
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)
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);
SetSizer(sizer);
Layout();
+
+ return true;
}
void wxEditableListBox::SetStrings(const wxArrayString& strings)
// 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);
}
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);
}