2009-11-25 09:22:48 +00:00
|
|
|
#include <iostream>
|
|
|
|
#include <cmath>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include "jack.h"
|
|
|
|
#include "portmanager.h"
|
|
|
|
#include "gui.h"
|
2009-11-25 19:39:18 +00:00
|
|
|
#include "config.h"
|
2009-11-25 09:22:48 +00:00
|
|
|
|
2009-11-26 08:34:17 +00:00
|
|
|
Glib::RefPtr<Gtk::Builder> g_builder;
|
2009-11-25 09:22:48 +00:00
|
|
|
|
2009-11-26 08:34:17 +00:00
|
|
|
Gui::Gui(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &builder)
|
|
|
|
: Gtk::Window(cobject),
|
2009-11-26 17:19:03 +00:00
|
|
|
m_vbox(NULL),
|
|
|
|
m_matrix_audio(NULL),
|
|
|
|
m_matrix_midi(NULL),
|
|
|
|
m_closing(false)
|
2009-11-26 08:34:17 +00:00
|
|
|
{
|
2009-11-26 17:19:03 +00:00
|
|
|
builder->get_widget("vbox1", m_vbox);
|
2009-11-25 09:22:48 +00:00
|
|
|
|
2009-11-26 17:19:03 +00:00
|
|
|
SetPortTypeSeparation();
|
2009-11-25 09:22:48 +00:00
|
|
|
Refresh();
|
|
|
|
|
|
|
|
Glib::signal_idle().connect(sigc::mem_fun(*this, &Gui::on_idle));
|
2009-11-26 10:38:37 +00:00
|
|
|
|
|
|
|
Preferences *p = Preferences::Open();
|
|
|
|
p->show();
|
2009-11-25 09:22:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Gui::~Gui()
|
|
|
|
{
|
2009-11-26 17:19:03 +00:00
|
|
|
m_closing = true;
|
|
|
|
delete m_matrix_audio;
|
|
|
|
delete m_matrix_midi;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Gui::SetPortTypeSeparation()
|
|
|
|
{
|
|
|
|
if (cfg.SeparateByPortType) {
|
|
|
|
if (m_matrix_audio && m_matrix_midi) return;
|
|
|
|
|
|
|
|
m_scrolledwindow_audio.remove();
|
|
|
|
m_scrolledwindow_midi.remove();
|
|
|
|
|
|
|
|
if (m_notebook.pages().size() > 0) {
|
|
|
|
m_notebook.remove(m_scrolledwindow_audio);
|
|
|
|
m_notebook.remove(m_scrolledwindow_midi);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (m_vbox->children().size() == 3) {
|
|
|
|
m_vbox->remove(m_scrolledwindow_audio);
|
|
|
|
}
|
|
|
|
|
|
|
|
delete m_matrix_audio;
|
|
|
|
delete m_matrix_midi;
|
|
|
|
|
|
|
|
m_matrix_audio = new Matrix(PT_AUDIO);
|
|
|
|
m_matrix_midi = new Matrix(PT_MIDI);
|
|
|
|
|
|
|
|
m_notebook.pages().clear();
|
|
|
|
|
|
|
|
m_notebook.pages().push_back(
|
|
|
|
Gtk::Notebook_Helpers::TabElem(m_scrolledwindow_audio, "Audio"));
|
|
|
|
m_scrolledwindow_audio.add(*m_matrix_audio);
|
|
|
|
m_scrolledwindow_audio.show();
|
|
|
|
|
|
|
|
m_notebook.pages().push_back(
|
|
|
|
Gtk::Notebook_Helpers::TabElem(m_scrolledwindow_midi, "MIDI"));
|
|
|
|
m_scrolledwindow_midi.add(*m_matrix_midi);
|
|
|
|
m_scrolledwindow_midi.show();
|
|
|
|
|
|
|
|
m_notebook.show();
|
|
|
|
m_notebook.signal_switch_page().connect(sigc::mem_fun(*this, &Gui::on_notebook_switch_page));
|
|
|
|
|
|
|
|
m_vbox->pack_start(m_notebook);
|
|
|
|
} else {
|
|
|
|
if (m_matrix_audio && !m_matrix_midi) return;
|
|
|
|
|
|
|
|
m_scrolledwindow_audio.remove();
|
|
|
|
m_scrolledwindow_midi.remove();
|
|
|
|
|
|
|
|
if (m_notebook.pages().size() > 0) {
|
|
|
|
m_notebook.remove(m_scrolledwindow_audio);
|
|
|
|
m_notebook.remove(m_scrolledwindow_midi);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (m_vbox->children().size() == 3) {
|
|
|
|
m_vbox->remove(m_notebook);
|
|
|
|
}
|
|
|
|
|
|
|
|
delete m_matrix_audio;
|
|
|
|
delete m_matrix_midi;
|
|
|
|
|
|
|
|
m_matrix_audio = new Matrix(PT_ALL);
|
|
|
|
m_matrix_midi = NULL;
|
|
|
|
|
|
|
|
m_scrolledwindow_audio.add(*m_matrix_audio);
|
|
|
|
m_scrolledwindow_audio.show();
|
|
|
|
|
|
|
|
m_vbox->pack_start(m_scrolledwindow_audio);
|
|
|
|
}
|
2009-11-25 09:22:48 +00:00
|
|
|
}
|
|
|
|
|
2009-11-26 08:34:17 +00:00
|
|
|
Gui *Gui::Open()
|
|
|
|
{
|
|
|
|
if (g_builder == NULL) {
|
|
|
|
g_builder = Gtk::Builder::create_from_file("jsweeper.ui");
|
|
|
|
}
|
|
|
|
|
|
|
|
Gui *window = NULL;
|
|
|
|
g_builder->get_widget_derived("window1", window);
|
|
|
|
return window;
|
|
|
|
}
|
|
|
|
|
2009-11-25 09:22:48 +00:00
|
|
|
void Gui::Refresh()
|
|
|
|
{
|
2009-11-26 17:19:03 +00:00
|
|
|
if (m_closing) return;
|
|
|
|
|
|
|
|
if (cfg.SeparateByPortType) {
|
|
|
|
int page = m_notebook.get_current_page();
|
|
|
|
|
|
|
|
if (page == 0 && m_matrix_audio != NULL) m_matrix_audio->Refresh();
|
|
|
|
if (page == 1 && m_matrix_midi != NULL) m_matrix_midi->Refresh();
|
|
|
|
} else {
|
|
|
|
if (m_matrix_audio != NULL) m_matrix_audio->Refresh();
|
|
|
|
}
|
2009-11-25 09:22:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
bool Gui::on_idle()
|
|
|
|
{
|
2009-11-26 17:19:03 +00:00
|
|
|
if (m_closing) return false;
|
|
|
|
|
2009-11-25 09:22:48 +00:00
|
|
|
if (jack.ProcessEvents()) {
|
|
|
|
Refresh();
|
|
|
|
queue_draw();
|
|
|
|
}
|
|
|
|
|
|
|
|
usleep(1000);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2009-11-26 17:19:03 +00:00
|
|
|
void Gui::on_notebook_switch_page(GtkNotebookPage * /* page */, guint /* page_num */)
|
|
|
|
{
|
|
|
|
if (m_closing) return;
|
|
|
|
|
|
|
|
Refresh();
|
|
|
|
}
|
|
|
|
|
2009-11-26 10:38:37 +00:00
|
|
|
Preferences::Preferences(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &builder)
|
|
|
|
: Gtk::Dialog(cobject)
|
|
|
|
{
|
2009-11-26 17:19:03 +00:00
|
|
|
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("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);
|
|
|
|
|
|
|
|
fontbutton_font->set_font_name(cfg.FontFace);
|
|
|
|
spin_cell_padding->set_value(cfg.CellPadding);
|
|
|
|
|
|
|
|
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));
|
2009-11-26 10:38:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Preferences *Preferences::Open()
|
|
|
|
{
|
|
|
|
Preferences *window = NULL;
|
|
|
|
g_builder->get_widget_derived("dialog_preferences", window);
|
|
|
|
return window;
|
|
|
|
}
|
2009-11-26 17:19:03 +00:00
|
|
|
|
|
|
|
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();
|
|
|
|
}
|