Add copy button to EditableList (#399).
authorCarl Hetherington <cth@carlh.net>
Sun, 31 Aug 2014 14:14:48 +0000 (15:14 +0100)
committerCarl Hetherington <cth@carlh.net>
Sun, 31 Aug 2014 14:14:48 +0000 (15:14 +0100)
ChangeLog
src/wx/editable_list.h

index d2938bda9a7e2901d09c541804aa06a32ea5b738..ec754c77b1249ad6660ad85c09666a19e3afc46a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2014-08-31  Carl Hetherington  <cth@carlh.net>
 
+       * Add "copy" button to colour conversion presets editor (#399).
+
        * Allow drag-and-drop of files onto the content list (#395).
 
 2014-08-29  Carl Hetherington  <cth@carlh.net>
index 470be2d09186faff35e62c2b47597c882d63b7fc..5772f6391e7cc94dc9d898799ecdab2ab4f66edf 100644 (file)
@@ -61,6 +61,8 @@ public:
                        wxSizer* s = new wxBoxSizer (wxVERTICAL);
                        _add = new wxButton (this, wxID_ANY, _("Add..."));
                        s->Add (_add, 0, wxTOP | wxBOTTOM, 2);
+                       _copy = new wxButton (this, wxID_ANY, _("Copy..."));
+                       s->Add (_copy, 0, wxTOP | wxBOTTOM, 2);
                        _edit = new wxButton (this, wxID_ANY, _("Edit..."));
                        s->Add (_edit, 0, wxTOP | wxBOTTOM, 2);
                        _remove = new wxButton (this, wxID_ANY, _("Remove"));
@@ -74,6 +76,7 @@ public:
                }
 
                _add->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&EditableList::add_clicked, this));
+               _copy->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&EditableList::copy_clicked, this));
                _edit->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&EditableList::edit_clicked, this));
                _remove->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&EditableList::remove_clicked, this));
 
@@ -121,6 +124,23 @@ private:
                dialog->Destroy ();
        }
 
+       void copy_clicked ()
+       {
+               int item = _list->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
+               if (item == -1) {
+                       return;
+               }
+
+               std::vector<T> all = _get ();
+               assert (item >= 0 && item < int (all.size ()));
+
+               T copy (all[item]);
+               add_to_control (copy);
+               
+               all.push_back (copy);
+               _set (all);
+       }
+
        void edit_clicked ()
        {
                int item = _list->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
@@ -174,6 +194,7 @@ private:
        boost::function<std::string (T, int)> _column;
 
        wxButton* _add;
+       wxButton* _copy;
        wxButton* _edit;
        wxButton* _remove;
        wxListCtrl* _list;