#include "config.h" #include "portmanager.h" #include "gui.h" #include "preferences_gui.h" Preferences::Preferences(BaseObjectType *cobject, const Glib::RefPtr &builder) : Gtk::Dialog(cobject) { builder->get_widget("button_preferences_close", button_preferences_close); builder->get_widget("check_separate_port_type", check_separate_port_type); builder->get_widget("check_expand_clients", check_expand_clients); builder->get_widget("check_expand_groups", check_expand_groups); builder->get_widget("check_default_location", check_default_location); builder->get_widget("filechooser_custom_location", filechooser_custom_location); builder->get_widget("check_activate_connections", check_activate_connections); builder->get_widget("treeview_connections", treeview_connections); builder->get_widget("button_connections_add", button_connections_add); builder->get_widget("button_connections_remove", button_connections_remove); builder->get_widget("button_connections_edit", button_connections_edit); builder->get_widget("button_connections_up", button_connections_up); builder->get_widget("button_connections_down", button_connections_down); builder->get_widget("check_activate_aliases", check_activate_aliases); builder->get_widget("treeview_aliases", treeview_aliases); builder->get_widget("button_aliases_add", button_aliases_add); builder->get_widget("button_aliases_remove", button_aliases_remove); builder->get_widget("button_aliases_edit", button_aliases_edit); builder->get_widget("button_aliases_up", button_aliases_up); builder->get_widget("button_aliases_down", button_aliases_down); builder->get_widget("fontbutton_font", fontbutton_font); builder->get_widget("spin_cell_padding", spin_cell_padding); builder->get_widget("check_antialias", check_antialias); builder->get_widget("colorbutton_background", colour_background); builder->get_widget("colorbutton_clients", colour_clients); builder->get_widget("colorbutton_port_groups", colour_port_groups); builder->get_widget("colorbutton_ports_audio", colour_ports_audio); builder->get_widget("colorbutton_ports_midi", colour_ports_midi); builder->get_widget("colorbutton_text", colour_text); builder->get_widget("colorbutton_grid_client", colour_grid_client); builder->get_widget("colorbutton_grid_group", colour_grid_group); builder->get_widget("colorbutton_grid_port", colour_grid_port); check_separate_port_type->set_active(cfg.SeparateByPortType); check_expand_clients->set_active(cfg.ExpandClients); check_expand_groups->set_active(cfg.ExpandGroups); Refresh(); { check_activate_aliases->set_active(cfg.UseAliases); m_tree_model_aliases = Gtk::ListStore::create(m_columns); treeview_aliases->set_model(m_tree_model_aliases); RefreshAliases(); treeview_aliases->append_column("Match", m_columns.m_first); treeview_aliases->append_column("Replace", m_columns.m_second); } char font[256]; snprintf(font, sizeof font, "%s %d", cfg.FontFace.c_str(), cfg.FontSize); fontbutton_font->set_font_name(font); spin_cell_padding->set_value(cfg.CellPadding); check_antialias->set_active(cfg.Antialias); colour_background->set_color(cfg.Background.colour); colour_clients->set_color(cfg.TabClient.colour); colour_port_groups->set_color(cfg.TabGroup.colour); colour_ports_audio->set_color(cfg.TabPortAudio.colour); colour_ports_midi->set_color(cfg.TabPortMidi.colour); colour_text->set_color(cfg.Text.colour); colour_grid_client->set_color(cfg.GridLinesClient.colour); colour_grid_group->set_color(cfg.GridLinesGroup.colour); colour_grid_port->set_color(cfg.GridLinesPort.colour); button_preferences_close->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::on_preferences_close_click)); check_separate_port_type->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::on_check_separate_port_type_click)); check_expand_clients->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::on_check_expand_clients_click)); check_expand_groups->signal_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)); check_antialias->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::on_check_antialias_click)); } Preferences *Preferences::Open() { Preferences *window = NULL; g_builder->get_widget_derived("dialog_preferences", window); window->Refresh(); return window; } 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.m_match; row[m_columns.m_second] = a.m_replace; } } void Preferences::on_preferences_close_click() { hide(); } void Preferences::on_check_separate_port_type_click() { cfg.SeparateByPortType = check_separate_port_type->get_active(); g->SetPortTypeSeparation(); g->Refresh(); } void Preferences::on_check_expand_clients_click() { cfg.ExpandClients = check_expand_clients->get_active(); } void Preferences::on_check_expand_groups_click() { cfg.ExpandGroups = check_expand_groups->get_active(); } void Preferences::on_check_activate_aliases_click() { cfg.UseAliases = check_activate_aliases->get_active(); pm.Refresh(); g->Refresh(); 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].m_match; trow1[m_columns.m_second] = list[row].m_replace; trow2[m_columns.m_row] = row - 1; trow2[m_columns.m_first] = list[row - 1].m_match; trow2[m_columns.m_second] = list[row - 1].m_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].m_match; trow1[m_columns.m_second] = list[row].m_replace; trow2[m_columns.m_row] = row + 1; trow2[m_columns.m_first] = list[row + 1].m_match; trow2[m_columns.m_second] = list[row + 1].m_replace; treeview_aliases->get_selection()->select(trow2); } // RefreshAliases(); } void Preferences::on_fontbutton_font_click() { std::string font = fontbutton_font->get_font_name(); cfg.FontFace = font.substr(0, font.find_last_of(' ')); cfg.FontSize = ss_conv_to(font.substr(font.find_last_of(' ') + 1)); g->Refresh(); } void Preferences::on_spin_cell_padding_click() { cfg.CellPadding = spin_cell_padding->get_value(); g->Refresh(); } void Preferences::on_check_antialias_click() { cfg.Antialias = check_antialias->get_active(); }