X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/235751501d3bb4141424cc08a7d88dd506746d18..12bb29f5432174ecbd65549bda832d70d34a98ae:/src/generic/editlbox.cpp diff --git a/src/generic/editlbox.cpp b/src/generic/editlbox.cpp index 76a2d5360f..14d3cd18cb 100644 --- a/src/generic/editlbox.cpp +++ b/src/generic/editlbox.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: editlbox.cpp +// Name: src/generic/editlbox.cpp // Purpose: ListBox with editable items // Author: Vaclav Slavik // RCS-ID: $Id$ @@ -26,7 +26,13 @@ #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", @@ -48,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", @@ -72,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", @@ -94,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", @@ -115,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", @@ -154,7 +160,7 @@ public: void CreateColumns() { - InsertColumn(0, _T("item")); + InsertColumn(0, wxT("item")); SizeColumns(); } @@ -166,6 +172,7 @@ public: #else w -= 2*wxSystemSettings::GetMetric(wxSYS_VSCROLL_X); #endif + if (w < 0) w = 0; SetColumnWidth(0, w); } @@ -182,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) @@ -203,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); @@ -281,6 +294,8 @@ wxEditableListBox::wxEditableListBox(wxWindow *parent, wxWindowID id, SetSizer(sizer); Layout(); + + return true; } void wxEditableListBox::SetStrings(const wxArrayString& strings) @@ -335,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); } @@ -355,26 +370,32 @@ 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); }