diff --git a/src/portmanager.h b/src/portmanager.h index 750cdff..cc7f4b7 100644 --- a/src/portmanager.h +++ b/src/portmanager.h @@ -2,6 +2,7 @@ #define PORTMANAGER_H #include +#include #include "port.h" struct Alias @@ -13,7 +14,7 @@ struct Alias std::string Replace(std::string name); }; -typedef std::list AliasList; +typedef std::vector AliasList; class PortManager { @@ -46,7 +47,7 @@ public: void AliasClear(); void AliasAdd(std::string source, std::string target); - const AliasList &AliasGetList() const { return m_aliases; } + AliasList &AliasGetList() { return m_aliases; } }; extern PortManager pm; diff --git a/src/preferences_gui.cpp b/src/preferences_gui.cpp index 2929a79..310af72 100644 --- a/src/preferences_gui.cpp +++ b/src/preferences_gui.cpp @@ -94,6 +94,11 @@ Preferences::Preferences(BaseObjectType *cobject, const Glib::RefPtrsignal_clicked().connect(sigc::mem_fun(*this, &Preferences::on_check_expand_groups_click)); check_activate_aliases->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::on_check_activate_aliases_click)); + button_aliases_add->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::on_button_aliases_add_click)); + button_aliases_remove->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::on_button_aliases_remove_click)); + button_aliases_edit->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::on_button_aliases_edit_click)); + button_aliases_up->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::on_button_aliases_up_click)); + button_aliases_down->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::on_button_aliases_down_click)); fontbutton_font->signal_font_set().connect(sigc::mem_fun(*this, &Preferences::on_fontbutton_font_click)); spin_cell_padding->signal_value_changed().connect(sigc::mem_fun(*this, &Preferences::on_spin_cell_padding_click)); @@ -111,6 +116,23 @@ void Preferences::Refresh() { } +void Preferences::RefreshAliases() +{ + m_tree_model_aliases->clear(); + + const AliasList &list = pm.AliasGetList(); + AliasList::const_iterator it; + int i = 0; + for (it = list.begin(); it != list.end(); ++it, i++) { + const Alias &a = *it; + Gtk::TreeModel::Row row = *(m_tree_model_aliases->append()); + + row[m_columns.m_row] = i; + row[m_columns.m_first] = a.match; + row[m_columns.m_second] = a.replace; + } +} + void Preferences::on_preferences_close_click() { hide(); @@ -141,6 +163,86 @@ void Preferences::on_check_activate_aliases_click() Refresh(); } +int Preferences::GetAliasRow() +{ + Glib::RefPtr selection = treeview_aliases->get_selection(); + Gtk::TreeModel::iterator iter = selection->get_selected(); + if (iter) { + Gtk::TreeModel::Row row = *iter; + + return row[m_columns.m_row]; + } + + return -1; +} + +void Preferences::on_button_aliases_add_click() +{ +} + +void Preferences::on_button_aliases_remove_click() +{ +} + +void Preferences::on_button_aliases_edit_click() +{ +} + +void Preferences::on_button_aliases_up_click() +{ + int row = GetAliasRow(); + if (row > 0) { + AliasList &list = pm.AliasGetList(); + + Alias t = list[row]; + list[row] = list[row - 1]; + list[row - 1] = t; + + Gtk::TreeModel::Row trow1 = m_tree_model_aliases->children()[row]; + Gtk::TreeModel::Row trow2 = m_tree_model_aliases->children()[row - 1]; + + trow1[m_columns.m_row] = row; + trow1[m_columns.m_first] = list[row].match; + trow1[m_columns.m_second] = list[row].replace; + + trow2[m_columns.m_row] = row - 1; + trow2[m_columns.m_first] = list[row - 1].match; + trow2[m_columns.m_second] = list[row - 1].replace; + + treeview_aliases->get_selection()->select(trow2); + } + +// RefreshAliases(); +} + +void Preferences::on_button_aliases_down_click() +{ + int row = GetAliasRow(); + AliasList &list = pm.AliasGetList(); + if (row < (int)list.size() - 1) { + Alias t = list[row]; + list[row] = list[row + 1]; + list[row + 1] = t; + + Gtk::TreeModel::Row trow1 = m_tree_model_aliases->children()[row]; + Gtk::TreeModel::Row trow2 = m_tree_model_aliases->children()[row + 1]; + + trow1[m_columns.m_row] = row; + trow1[m_columns.m_first] = list[row].match; + trow1[m_columns.m_second] = list[row].replace; + + trow2[m_columns.m_row] = row + 1; + trow2[m_columns.m_first] = list[row + 1].match; + trow2[m_columns.m_second] = list[row + 1].replace; + + treeview_aliases->get_selection()->select(trow2); + } + + + +// RefreshAliases(); +} + void Preferences::on_fontbutton_font_click() { std::string font = fontbutton_font->get_font_name(); diff --git a/src/preferences_gui.h b/src/preferences_gui.h index b439765..8ab0e8f 100644 --- a/src/preferences_gui.h +++ b/src/preferences_gui.h @@ -54,6 +54,7 @@ public: Preferences(BaseObjectType *cobject, const Glib::RefPtr &builder); static Preferences *Open(); void Refresh(); + void RefreshAliases(); protected: void on_preferences_close_click(); @@ -63,6 +64,11 @@ protected: void on_check_expand_groups_click(); void on_check_activate_aliases_click(); + void on_button_aliases_add_click(); + void on_button_aliases_remove_click(); + void on_button_aliases_edit_click(); + void on_button_aliases_up_click(); + void on_button_aliases_down_click(); void on_fontbutton_font_click(); void on_spin_cell_padding_click(); @@ -85,6 +91,8 @@ protected: ModelColumns m_columns; Glib::RefPtr m_tree_model_connections; Glib::RefPtr m_tree_model_aliases; + + int GetAliasRow(); }; #endif // PREFERENCES_GUI_H