jsweeper/src/preferences_gui.cpp

258 lines
8.5 KiB
C++

#include "config.h"
#include "portmanager.h"
#include "gui.h"
#include "preferences_gui.h"
Preferences::Preferences(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &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<Gtk::TreeSelection> 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<int>(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();
}