bool growable;
};
+
+namespace EditableListButton
+{
+ static int constexpr NEW = 0x1;
+ static int constexpr EDIT = 0x2;
+ static int constexpr REMOVE = 0x4;
+};
+
+
/** @param T type of things being edited.
* @param S dialog to edit a thing.
* @param get Function to get a std::vector of the things being edited.
std::function<std::vector<T> ()> get,
std::function<void (std::vector<T>)> set,
std::function<std::string (T, int)> column,
- bool can_edit = true,
- bool title = true
+ bool title,
+ int buttons
)
: wxPanel (parent)
, _get (get)
, _set (set)
, _columns (columns)
, _column (column)
- , _edit (0)
, _default_width (200)
{
_sizer = new wxBoxSizer (wxHORIZONTAL);
#endif
{
- wxSizer* s = new wxBoxSizer (wxVERTICAL);
- _add = new Button (this, _("Add..."));
- s->Add (_add, 1, wxEXPAND | wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP);
- if (can_edit) {
+ auto s = new wxBoxSizer (wxVERTICAL);
+ if (buttons & EditableListButton::NEW) {
+ _add = new Button (this, _("Add..."));
+ s->Add (_add, 1, wxEXPAND | wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP);
+ }
+ if (buttons & EditableListButton::EDIT) {
_edit = new Button (this, _("Edit..."));
s->Add (_edit, 1, wxEXPAND | wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP);
}
- _remove = new Button (this, _("Remove"));
- s->Add (_remove, 1, wxEXPAND | wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP);
+ if (buttons & EditableListButton::REMOVE) {
+ _remove = new Button (this, _("Remove"));
+ s->Add (_remove, 1, wxEXPAND | wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP);
+ }
_sizer->Add (s, 0, wxLEFT, DCPOMATIC_SIZER_X_GAP);
}
- _add->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&EditableList::add_clicked, this));
+ if (_add) {
+ _add->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&EditableList::add_clicked, this));
+ }
if (_edit) {
_edit->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&EditableList::edit_clicked, this));
}
- _remove->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&EditableList::remove_clicked, this));
+ if (_remove) {
+ _remove->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&EditableList::remove_clicked, this));
+ }
_list->Bind (wxEVT_COMMAND_LIST_ITEM_SELECTED, boost::bind (&EditableList::selection_changed, this));
_list->Bind (wxEVT_COMMAND_LIST_ITEM_DESELECTED, boost::bind (&EditableList::selection_changed, this));
if (_edit) {
_edit->Enable (i >= 0);
}
- _remove->Enable (i >= 0);
+ if (_remove) {
+ _remove->Enable (i >= 0);
+ }
SelectionChanged ();
}
std::vector<EditableListColumn> _columns;
std::function<std::string (T, int)> _column;
- wxButton* _add;
- wxButton* _edit;
- wxButton* _remove;
+ wxButton* _add = nullptr;
+ wxButton* _edit = nullptr;
+ wxButton* _remove = nullptr;
wxListCtrl* _list;
wxBoxSizer* _sizer;
int _default_width;
columns,
boost::bind (&Config::servers, Config::instance()),
boost::bind (&Config::set_servers, Config::instance(), _1),
- boost::bind (&EncodingServersPage::server_column, this, _1)
+ boost::bind (&EncodingServersPage::server_column, this, _1),
+ false,
+ EditableListButton::NEW | EditableListButton::EDIT | EditableListButton::REMOVE
);
_panel->GetSizer()->Add (_servers_list, 1, wxEXPAND | wxALL, _border);
bind (&Config::set_kdm_cc, Config::instance(), _1),
[] (string s, int) {
return s;
- });
+ },
+ true,
+ EditableListButton::NEW | EditableListButton::EDIT | EditableListButton::REMOVE
+ );
table->Add (_cc, 1, wxEXPAND | wxALL);
add_label_to_sizer (table, _panel, _("BCC address"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL);
bind (&Config::set_notification_cc, Config::instance(), _1),
[] (string s, int) {
return s;
- });
+ },
+ true,
+ EditableListButton::NEW | EditableListButton::EDIT | EditableListButton::REMOVE
+ );
table->Add (_cc, 1, wxEXPAND | wxALL);
add_label_to_sizer (table, _panel, _("BCC address"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL);
vector<EditableListColumn> columns;
columns.push_back (EditableListColumn(_("Address")));
_email_list = new EditableList<string, EmailDialog> (
- this, columns, bind(&RecipientDialog::get_emails, this), bind(&RecipientDialog::set_emails, this, _1), bind(&column, _1)
+ this, columns, bind(&RecipientDialog::get_emails, this), bind(&RecipientDialog::set_emails, this, _1), bind(&column, _1),
+ EditableListButton::NEW | EditableListButton::EDIT | EditableListButton::REMOVE, true
);
_sizer->Add (_email_list, wxGBPosition (r, 0), wxGBSpan (1, 2), wxEXPAND);