summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-12-20 02:04:55 +0000
committerDavid Robillard <d@drobilla.net>2007-12-20 02:04:55 +0000
commit07115ad5e6fa4af82b4efd06ce1d3f60cc2d07bb (patch)
tree7b9ddcdb3491f6e9332eb5a561afbdfe60361f13
parent46452c287cdc4b12c30589a8f877f3ab7359265b (diff)
downloadpatchage-07115ad5e6fa4af82b4efd06ce1d3f60cc2d07bb.tar.gz
patchage-07115ad5e6fa4af82b4efd06ce1d3f60cc2d07bb.tar.bz2
patchage-07115ad5e6fa4af82b4efd06ce1d3f60cc2d07bb.zip
Use fancy Widget class for Glade widgets.
Somewhat consistently rename glade widgets. Fix about dialog program name, icon (when run from source tree), and close button. git-svn-id: http://svn.drobilla.net/lad/patchage@989 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r--src/JackSettingsDialog.hpp30
-rw-r--r--src/Makefile.am1
-rw-r--r--src/Patchage.cpp275
-rw-r--r--src/Patchage.hpp101
-rw-r--r--src/Widget.hpp42
-rw-r--r--src/patchage.glade68
l---------src/patchage.svg1
7 files changed, 274 insertions, 244 deletions
diff --git a/src/JackSettingsDialog.hpp b/src/JackSettingsDialog.hpp
index a3e544d..1acb191 100644
--- a/src/JackSettingsDialog.hpp
+++ b/src/JackSettingsDialog.hpp
@@ -28,25 +28,24 @@
class JackSettingsDialog : public Gtk::Dialog {
public:
JackSettingsDialog(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& xml)
- : Gtk::Dialog(cobject)
+ : Gtk::Dialog(cobject)
{
xml->get_widget("jack_settings_command_entry", _command_entry);
- xml->get_widget("jack_settings_cancel_button", _cancel_button);
- xml->get_widget("jack_settings_ok_button", _ok_button);
-
- _cancel_button->signal_clicked().connect(sigc::mem_fun(this, &JackSettingsDialog::on_cancel));
- _ok_button->signal_clicked().connect(sigc::mem_fun(this, &JackSettingsDialog::on_ok));
+ xml->get_widget("jack_settings_cancel_but", _cancel_but);
+ xml->get_widget("jack_settings_ok_but", _ok_but);
+
+ _cancel_but->signal_clicked().connect(
+ sigc::mem_fun(this, &JackSettingsDialog::on_cancel));
+ _ok_but->signal_clicked().connect(
+ sigc::mem_fun(this, &JackSettingsDialog::on_ok));
+
_command_entry->set_text(current_jack_command());
}
private:
- void on_cancel()
- {
- hide();
- }
+ void on_cancel() { hide(); }
- string current_jack_command()
- {
+ string current_jack_command() {
std::string result;
const char* const home = getenv("HOME");
@@ -62,8 +61,7 @@ private:
return result;
}
- void on_ok()
- {
+ void on_ok() {
hide();
const char* const home = getenv("HOME");
if (home) {
@@ -78,8 +76,8 @@ private:
Gtk::Entry* _command_entry;
- Gtk::Button* _cancel_button;
- Gtk::Button* _ok_button;
+ Gtk::Button* _cancel_but;
+ Gtk::Button* _ok_but;
};
diff --git a/src/Makefile.am b/src/Makefile.am
index 6d7a63d..a87563b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -23,6 +23,7 @@ patchage_SOURCES = \
PatchagePort.hpp \
StateManager.cpp \
StateManager.hpp \
+ Widget.hpp \
main.cpp
if WITH_LASH
diff --git a/src/Patchage.cpp b/src/Patchage.cpp
index 0991380..0cd7328 100644
--- a/src/Patchage.cpp
+++ b/src/Patchage.cpp
@@ -71,14 +71,23 @@ gtkmm_set_width_for_given_text (Gtk::Widget &w, const gchar *text,
/* end Gtk helpers */
+#define INIT_WIDGET(x) x(xml, ((const char*)#x) + 1)
Patchage::Patchage(int argc, char** argv)
: xml(GladeFile::open("patchage"))
#ifdef HAVE_LASH
, _lash_driver(NULL)
+ , INIT_WIDGET(_menu_open_session)
+ , INIT_WIDGET(_menu_save_session)
+ , INIT_WIDGET(_menu_save_session_as)
+ , INIT_WIDGET(_menu_close_session)
+ , INIT_WIDGET(_menu_lash_connect)
+ , INIT_WIDGET(_menu_lash_disconnect)
#endif
#ifdef HAVE_ALSA
, _alsa_driver(NULL)
+ , INIT_WIDGET(_menu_alsa_connect)
+ , INIT_WIDGET(_menu_alsa_disconnect)
#endif
, _jack_driver(NULL)
, _state_manager(NULL)
@@ -87,12 +96,40 @@ Patchage::Patchage(int argc, char** argv)
, _pane_closed(false)
, _update_pane_position(true)
, _user_pane_position(0)
+ , _jack_settings_dialog(NULL)
+ , INIT_WIDGET(_about_win)
+ , INIT_WIDGET(_buffer_size_combo)
+ , INIT_WIDGET(_clear_load_but)
+ , INIT_WIDGET(_main_paned)
+ , INIT_WIDGET(_main_scrolledwin)
+ , INIT_WIDGET(_main_win)
+ , INIT_WIDGET(_main_xrun_progress)
+ , INIT_WIDGET(_menu_file_quit)
+ , INIT_WIDGET(_menu_help_about)
+ , INIT_WIDGET(_menu_jack_connect)
+ , INIT_WIDGET(_menu_jack_disconnect)
+ , INIT_WIDGET(_menu_jack_settings)
+ , INIT_WIDGET(_menu_store_positions)
+ , INIT_WIDGET(_menu_view_arrange)
+ , INIT_WIDGET(_menu_view_messages)
+ , INIT_WIDGET(_menu_view_refresh)
+ , INIT_WIDGET(_menu_view_toolbar)
+ , INIT_WIDGET(_messages_expander)
+ , INIT_WIDGET(_play_but)
+ , INIT_WIDGET(_rewind_but)
+ , INIT_WIDGET(_sample_rate_label)
+ , INIT_WIDGET(_status_text)
+ , INIT_WIDGET(_stop_but)
+ , INIT_WIDGET(_toolbar)
+ , INIT_WIDGET(_toolbars_box)
+ , INIT_WIDGET(_zoom_full_but)
+ , INIT_WIDGET(_zoom_normal_but)
{
_settings_filename = getenv("HOME");
_settings_filename += "/.patchagerc";
-
_state_manager = new StateManager();
_canvas = boost::shared_ptr<PatchageCanvas>(new PatchageCanvas(this, 1600*2, 1200*2));
+
_jack_driver = new JackDriver(this);
_jack_driver->signal_detached.connect(sigc::mem_fun(this, &Patchage::queue_refresh));
@@ -106,54 +143,12 @@ Patchage::Patchage(int argc, char** argv)
_lash_driver = new LashDriver(this, argc, argv);
#endif
- xml->get_widget("patchage_win", _main_window);
xml->get_widget_derived("jack_settings_win", _jack_settings_dialog);
- xml->get_widget("about_win", _about_window);
- xml->get_widget("jack_settings_menuitem", _menu_jack_settings);
- xml->get_widget("connect_to_jack_menuitem", _menu_jack_connect);
- xml->get_widget("disconnect_from_jack_menuitem", _menu_jack_disconnect);
-#ifdef HAVE_LASH
- xml->get_widget("open_session_menuitem", _menu_open_session);
- xml->get_widget("save_session_menuitem", _menu_save_session);
- xml->get_widget("save_session_as_menuitem", _menu_save_session_as);
- xml->get_widget("close_session_menuitem", _menu_close_session);
- xml->get_widget("connect_to_lash_menuitem", _menu_lash_connect);
- xml->get_widget("disconnect_from_lash_menuitem", _menu_lash_disconnect);
-#endif
-#ifdef HAVE_ALSA
- xml->get_widget("connect_to_alsa_menuitem", _menu_alsa_connect);
- xml->get_widget("disconnect_from_alsa_menuitem", _menu_alsa_disconnect);
-#endif
- xml->get_widget("store_positions_menuitem", _menu_store_positions);
- xml->get_widget("file_quit_menuitem", _menu_file_quit);
- xml->get_widget("view_refresh_menuitem", _menu_view_refresh);
- xml->get_widget("view_arrange_menuitem", _menu_view_arrange);
- xml->get_widget("view_messages_menuitem", _menu_view_messages);
- xml->get_widget("view_toolbar_menuitem", _menu_view_toolbar);
- xml->get_widget("help_about_menuitem", _menu_help_about);
- xml->get_widget("toolbar", _toolbar);
- xml->get_widget("toolbars_hbox", _toolbars_box);
- xml->get_widget("canvas_scrolledwindow", _canvas_scrolledwindow);
- //xml->get_widget("zoom_scale", _zoom_slider);
- xml->get_widget("status_text", _status_text);
- xml->get_widget("main_paned", _main_paned);
- xml->get_widget("messages_expander", _messages_expander);
- xml->get_widget("rewind_but", _rewind_button);
- xml->get_widget("play_but", _play_button);
- xml->get_widget("stop_but", _stop_button);
- xml->get_widget("zoom_full_but", _zoom_full_button);
- xml->get_widget("zoom_normal_but", _zoom_normal_button);
- //xml->get_widget("main_statusbar", _status_bar);
- //xml->get_widget("main_load_progress", _load_progress_bar);
- //xml->get_widget("main_jack_connect_toggle", _jack_connect_toggle);
- //xml->get_widget("main_jack_realtime_check", _jack_realtime_check);
- xml->get_widget("main_buffer_size_combo", _buffer_size_combo);
- xml->get_widget("main_xrun_progress", _xrun_progress_bar);
- xml->get_widget("main_clear_load_button", _clear_load_button);
+ _about_win->property_program_name() = "Patchage";
gtkmm_set_width_for_given_text(*_buffer_size_combo, "4096 frames", 40);
- _canvas_scrolledwindow->add(*_canvas);
+ _main_scrolledwin->add(*_canvas);
_canvas->scroll_to(static_cast<int>(_canvas->width()/2 - 320),
static_cast<int>(_canvas->height()/2 - 240)); // FIXME: hardcoded
@@ -164,17 +159,17 @@ Patchage::Patchage(int argc, char** argv)
_buffer_size_combo->signal_changed().connect(
sigc::mem_fun(this, &Patchage::buffer_size_changed));
- _rewind_button->signal_clicked().connect(
+ _rewind_but->signal_clicked().connect(
sigc::mem_fun(_jack_driver, &JackDriver::rewind_transport));
- _play_button->signal_clicked().connect(
+ _play_but->signal_clicked().connect(
sigc::mem_fun(_jack_driver, &JackDriver::start_transport));
- _stop_button->signal_clicked().connect(
+ _stop_but->signal_clicked().connect(
sigc::mem_fun(_jack_driver, &JackDriver::stop_transport));
- _clear_load_button->signal_clicked().connect(
+ _clear_load_but->signal_clicked().connect(
sigc::mem_fun(this, &Patchage::clear_load));
- _zoom_normal_button->signal_clicked().connect(sigc::bind(
+ _zoom_normal_but->signal_clicked().connect(sigc::bind(
sigc::mem_fun(this, &Patchage::zoom), 1.0));
- _zoom_full_button->signal_clicked().connect(
+ _zoom_full_but->signal_clicked().connect(
sigc::mem_fun(_canvas.get(), &PatchageCanvas::zoom_full));
_menu_jack_settings->signal_activate().connect(sigc::hide_return(
sigc::mem_fun(_jack_settings_dialog, &JackSettingsDialog::run)));
@@ -206,29 +201,29 @@ Patchage::Patchage(int argc, char** argv)
#endif
_menu_store_positions->signal_activate().connect(
- sigc::mem_fun(this, &Patchage::menu_store_positions));
+ sigc::mem_fun(this, &Patchage::on_store_positions));
_menu_file_quit->signal_activate().connect(
- sigc::mem_fun(this, &Patchage::menu_file_quit));
+ sigc::mem_fun(this, &Patchage::on_quit));
_menu_view_refresh->signal_activate().connect(
sigc::mem_fun(this, &Patchage::refresh));
_menu_view_arrange->signal_activate().connect(
- sigc::mem_fun(this, &Patchage::menu_view_arrange));
+ sigc::mem_fun(this, &Patchage::on_arrange));
_menu_view_toolbar->signal_activate().connect(
- sigc::mem_fun(this, &Patchage::view_toolbar_toggled));
+ sigc::mem_fun(this, &Patchage::on_view_toolbar));
_menu_view_messages->signal_toggled().connect(
- sigc::mem_fun(this, &Patchage::show_messages_toggled));
+ sigc::mem_fun(this, &Patchage::on_show_messages));
_menu_help_about->signal_activate().connect(
- sigc::mem_fun(this, &Patchage::menu_help_about));
+ sigc::mem_fun(this, &Patchage::on_help_about));
connect_widgets();
update_state();
_canvas->show();
- _main_window->present();
+ _main_win->present();
_update_pane_position = false;
_main_paned->set_position(max_pane_position());
- _user_pane_position = max_pane_position() - _main_window->get_height()/8;
+ _user_pane_position = max_pane_position() - _main_win->get_height()/8;
_messages_expander->set_expanded(false);
_pane_closed = true;
@@ -355,15 +350,15 @@ Patchage::update_load()
const float buffer_size = _jack_driver->buffer_size();
const float period = buffer_size / sample_rate * 1000000; // usec
- _xrun_progress_bar->set_fraction(max_delay / period);
+ _main_xrun_progress->set_fraction(max_delay / period);
char tmp_buf[8];
snprintf(tmp_buf, 8, "%zd", _jack_driver->xruns());
- _xrun_progress_bar->set_text(string(tmp_buf) + " Dropouts");
+ _main_xrun_progress->set_text(string(tmp_buf) + " Dropouts");
if (max_delay > period) {
- _xrun_progress_bar->set_fraction(1.0);
+ _main_xrun_progress->set_fraction(1.0);
_jack_driver->reset_delay();
}
@@ -393,19 +388,37 @@ Patchage::zoom_changed()
}
}
-
+
void
-Patchage::update_state()
+Patchage::refresh()
{
- for (ItemList::iterator i = _canvas->items().begin(); i != _canvas->items().end(); ++i) {
- SharedPtr<Module> module = PtrCast<Module>(*i);
- if (module)
- module->load_location();
+ assert(_canvas);
+
+ if (_enable_refresh) {
+
+ _canvas->destroy();
+
+ if (_jack_driver)
+ _jack_driver->refresh();
+
+#ifdef HAVE_ALSA
+ if (_alsa_driver)
+ _alsa_driver->refresh();
+#endif
}
}
void
+Patchage::clear_load()
+{
+ _main_xrun_progress->set_fraction(0.0);
+ _jack_driver->reset_xruns();
+ _jack_driver->reset_delay();
+}
+
+
+void
Patchage::status_message(const string& msg)
{
if (_status_text->get_buffer()->size() > 0)
@@ -416,6 +429,17 @@ Patchage::status_message(const string& msg)
}
+void
+Patchage::update_state()
+{
+ for (ItemList::iterator i = _canvas->items().begin(); i != _canvas->items().end(); ++i) {
+ SharedPtr<Module> module = PtrCast<Module>(*i);
+ if (module)
+ module->load_location();
+ }
+}
+
+
/** Update the sensitivity status of menus to reflect the present.
*
* (eg. disable "Connect to Jack" when Patchage is already connected to Jack)
@@ -425,40 +449,40 @@ Patchage::connect_widgets()
{
#ifdef HAVE_LASH
_lash_driver->signal_attached.connect(sigc::bind(
- sigc::mem_fun(_menu_lash_connect, &Gtk::MenuItem::set_sensitive), false));
+ sigc::mem_fun(*_menu_lash_connect, &Gtk::MenuItem::set_sensitive), false));
_lash_driver->signal_attached.connect(sigc::bind(
- sigc::mem_fun(_menu_lash_disconnect, &Gtk::MenuItem::set_sensitive), true));
+ sigc::mem_fun(*_menu_lash_disconnect, &Gtk::MenuItem::set_sensitive), true));
_lash_driver->signal_detached.connect(sigc::bind(
- sigc::mem_fun(_menu_lash_connect, &Gtk::MenuItem::set_sensitive), true));
+ sigc::mem_fun(*_menu_lash_connect, &Gtk::MenuItem::set_sensitive), true));
_lash_driver->signal_detached.connect(sigc::bind(
- sigc::mem_fun(_menu_lash_disconnect, &Gtk::MenuItem::set_sensitive), false));
+ sigc::mem_fun(*_menu_lash_disconnect, &Gtk::MenuItem::set_sensitive), false));
#endif
_jack_driver->signal_attached.connect(
sigc::mem_fun(this, &Patchage::update_toolbar));
_jack_driver->signal_attached.connect(sigc::bind(
- sigc::mem_fun(_menu_jack_connect, &Gtk::MenuItem::set_sensitive), false));
+ sigc::mem_fun(*_menu_jack_connect, &Gtk::MenuItem::set_sensitive), false));
_jack_driver->signal_attached.connect(
sigc::mem_fun(this, &Patchage::refresh));
_jack_driver->signal_attached.connect(sigc::bind(
- sigc::mem_fun(_menu_jack_disconnect, &Gtk::MenuItem::set_sensitive), true));
+ sigc::mem_fun(*_menu_jack_disconnect, &Gtk::MenuItem::set_sensitive), true));
_jack_driver->signal_detached.connect(sigc::bind(
- sigc::mem_fun(_menu_jack_connect, &Gtk::MenuItem::set_sensitive), true));
+ sigc::mem_fun(*_menu_jack_connect, &Gtk::MenuItem::set_sensitive), true));
_jack_driver->signal_detached.connect(sigc::bind(
- sigc::mem_fun(_menu_jack_disconnect, &Gtk::MenuItem::set_sensitive), false));
+ sigc::mem_fun(*_menu_jack_disconnect, &Gtk::MenuItem::set_sensitive), false));
#ifdef HAVE_ALSA
_alsa_driver->signal_attached.connect(sigc::bind(
- sigc::mem_fun(_menu_alsa_connect, &Gtk::MenuItem::set_sensitive), false));
+ sigc::mem_fun(*_menu_alsa_connect, &Gtk::MenuItem::set_sensitive), false));
_alsa_driver->signal_attached.connect(sigc::bind(
- sigc::mem_fun(_menu_alsa_disconnect, &Gtk::MenuItem::set_sensitive), true));
+ sigc::mem_fun(*_menu_alsa_disconnect, &Gtk::MenuItem::set_sensitive), true));
_alsa_driver->signal_detached.connect(sigc::bind(
- sigc::mem_fun(_menu_alsa_connect, &Gtk::MenuItem::set_sensitive), true));
+ sigc::mem_fun(*_menu_alsa_connect, &Gtk::MenuItem::set_sensitive), true));
_alsa_driver->signal_detached.connect(sigc::bind(
- sigc::mem_fun(_menu_alsa_disconnect, &Gtk::MenuItem::set_sensitive), false));
+ sigc::mem_fun(*_menu_alsa_disconnect, &Gtk::MenuItem::set_sensitive), false));
#endif
}
@@ -467,7 +491,7 @@ Patchage::connect_widgets()
void
Patchage::menu_open_session()
{
- Gtk::FileChooserDialog dialog(*_main_window, "Open LASH Session",
+ Gtk::FileChooserDialog dialog(*_main_win, "Open LASH Session",
Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER);
dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
@@ -495,7 +519,7 @@ Patchage::menu_save_session_as()
if (!_lash_driver)
return;
- Gtk::FileChooserDialog dialog(*_main_window, "Save LASH Session",
+ Gtk::FileChooserDialog dialog(*_main_win, "Save LASH Session",
Gtk::FILE_CHOOSER_ACTION_SAVE);
dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
@@ -547,30 +571,12 @@ Patchage::menu_alsa_disconnect()
}
#endif
-void
-Patchage::menu_store_positions()
-{
- _state_manager->save(_settings_filename);
-}
-
-
-void
-Patchage::menu_file_quit()
-{
-#ifdef HAVE_ALSA
- _alsa_driver->detach();
-#endif
- _jack_driver->detach();
- _main_window->hide();
-}
-
void
Patchage::on_pane_position_changed()
{
- // avoid infinite recursion...
if (!_update_pane_position)
- return;
+ return; // avoid infinite recursion ...
_update_pane_position = false;
@@ -591,7 +597,7 @@ Patchage::on_pane_position_changed()
_main_paned->set_position(max_pane_position()); // ... here
_menu_view_messages->set_active(false);
- _user_pane_position = max_pane_position() - _main_window->get_height()/8;
+ _user_pane_position = max_pane_position() - _main_win->get_height()/8;
}
_update_pane_position = true;
@@ -621,44 +627,49 @@ Patchage::on_messages_expander_changed()
void
-Patchage::show_messages_toggled()
+Patchage::on_arrange()
{
- if (_update_pane_position)
- _messages_expander->set_expanded(_menu_view_messages->get_active());
+ assert(_canvas);
+
+ _canvas->arrange();
}
-
+
void
-Patchage::refresh()
+Patchage::on_help_about()
{
- assert(_canvas);
-
- if (_enable_refresh) {
-
- _canvas->destroy();
-
- if (_jack_driver)
- _jack_driver->refresh();
+ _about_win->run();
+ _about_win->hide();
+}
+void
+Patchage::on_quit()
+{
#ifdef HAVE_ALSA
- if (_alsa_driver)
- _alsa_driver->refresh();
+ _alsa_driver->detach();
#endif
- }
+ _jack_driver->detach();
+ _main_win->hide();
}
-
+
void
-Patchage::menu_view_arrange()
+Patchage::on_show_messages()
{
- assert(_canvas);
+ if (_update_pane_position)
+ _messages_expander->set_expanded(_menu_view_messages->get_active());
+}
+
- _canvas->arrange();
+void
+Patchage::on_store_positions()
+{
+ _state_manager->save(_settings_filename);
}
void
-Patchage::view_toolbar_toggled()
+Patchage::on_view_toolbar()
{
_update_pane_position = false;
@@ -672,22 +683,6 @@ Patchage::view_toolbar_toggled()
void
-Patchage::menu_help_about()
-{
- _about_window->show();
-}
-
-
-void
-Patchage::clear_load()
-{
- _xrun_progress_bar->set_fraction(0.0);
- _jack_driver->reset_xruns();
- _jack_driver->reset_delay();
-}
-
-
-void
Patchage::buffer_size_changed()
{
const int selected = _buffer_size_combo->get_active_row_number();
@@ -697,8 +692,6 @@ Patchage::buffer_size_changed()
} else {
jack_nframes_t buffer_size = 1 << (selected+5);
- //cerr << "BS Changed: " << selected << ": " << buffer_size << endl;
-
if ( ! _jack_driver->set_buffer_size(buffer_size))
update_toolbar(); // reset combo box to actual value
}
diff --git a/src/Patchage.hpp b/src/Patchage.hpp
index 96aa35d..752510b 100644
--- a/src/Patchage.hpp
+++ b/src/Patchage.hpp
@@ -23,6 +23,7 @@
#include <libgnomecanvasmm.h>
#include <libglademm/xml.h>
#include CONFIG_H_PATH
+#include "Widget.hpp"
class PatchageCanvas;
class JackDriver;
@@ -40,8 +41,9 @@ public:
boost::shared_ptr<PatchageCanvas> canvas() const { return _canvas; }
+ Gtk::Window* window() { return _main_win.get(); }
+
StateManager* state_manager() const { return _state_manager; }
- Gtk::Window* window() const { return _main_window; }
JackDriver* jack_driver() const { return _jack_driver; }
#ifdef HAVE_ALSA
AlsaDriver* alsa_driver() const { return _alsa_driver; }
@@ -51,7 +53,7 @@ public:
#endif
void attach();
- void quit() { _main_window->hide(); }
+ void quit() { _main_win->hide(); }
void refresh();
inline void queue_refresh() { _refresh = true; }
@@ -62,28 +64,26 @@ public:
int max_pane_position() {
return _main_paned->property_max_position()
- - _messages_expander->get_label_widget()->get_height() - 10;
+ - _messages_expander->get_label_widget()->get_height() - 10;
}
protected:
void connect_widgets();
- void menu_store_positions();
- void menu_file_quit();
- void show_messages_toggled();
- void view_toolbar_toggled();
- void menu_view_arrange();
- void menu_help_about();
+ void on_arrange();
+ void on_help_about();
+ void on_quit();
+ void on_show_messages();
+ void on_store_positions();
+ void on_view_toolbar();
+
void zoom(double z);
void zoom_changed();
bool idle_callback();
bool update_load();
void update_toolbar();
- //void jack_connect_changed();
void buffer_size_changed();
- //void sample_rate_changed();
- //void realtime_changed();
void on_pane_position_changed();
void on_messages_expander_changed();
@@ -92,26 +92,24 @@ protected:
#ifdef HAVE_LASH
LashDriver* _lash_driver;
- Gtk::MenuItem* _menu_open_session;
- Gtk::MenuItem* _menu_save_session;
- Gtk::MenuItem* _menu_save_session_as;
- Gtk::MenuItem* _menu_close_session;
- Gtk::MenuItem* _menu_lash_launch;
- Gtk::MenuItem* _menu_lash_connect;
- Gtk::MenuItem* _menu_lash_disconnect;
+ Widget<Gtk::MenuItem> _menu_open_session;
+ Widget<Gtk::MenuItem> _menu_save_session;
+ Widget<Gtk::MenuItem> _menu_save_session_as;
+ Widget<Gtk::MenuItem> _menu_close_session;
+ Widget<Gtk::MenuItem> _menu_lash_connect;
+ Widget<Gtk::MenuItem> _menu_lash_disconnect;
void menu_open_session();
void menu_save_session();
void menu_save_session_as();
void menu_close_session();
- void menu_lash_launch();
void menu_lash_connect();
void menu_lash_disconnect();
#endif
#ifdef HAVE_ALSA
AlsaDriver* _alsa_driver;
- Gtk::MenuItem* _menu_alsa_connect;
- Gtk::MenuItem* _menu_alsa_disconnect;
+ Widget<Gtk::MenuItem> _menu_alsa_connect;
+ Widget<Gtk::MenuItem> _menu_alsa_disconnect;
void menu_alsa_connect();
void menu_alsa_disconnect();
#endif
@@ -130,38 +128,35 @@ protected:
bool _update_pane_position;
int _user_pane_position;
- Gtk::Window* _main_window;
JackSettingsDialog* _jack_settings_dialog;
- Gtk::AboutDialog* _about_window;
- Gtk::MenuItem* _menu_jack_settings;
- Gtk::MenuItem* _menu_jack_launch;
- Gtk::MenuItem* _menu_jack_connect;
- Gtk::MenuItem* _menu_jack_disconnect;
- Gtk::MenuItem* _menu_store_positions;
- Gtk::MenuItem* _menu_file_quit;
- Gtk::Box* _toolbars_box;
- Gtk::CheckMenuItem* _menu_view_toolbar;
- Gtk::CheckMenuItem* _menu_view_messages;
- Gtk::MenuItem* _menu_view_refresh;
- Gtk::MenuItem* _menu_view_arrange;
- Gtk::MenuItem* _menu_help_about;
- Gtk::Toolbar* _toolbar;
- Gtk::ScrolledWindow* _canvas_scrolledwindow;
- //Gtk::HScale* _zoom_slider;
- Gtk::TextView* _status_text;
- Gtk::Paned* _main_paned;
- Gtk::Expander* _messages_expander;
- Gtk::Button* _rewind_button;
- Gtk::Button* _play_button;
- Gtk::Button* _stop_button;
- Gtk::ToolButton* _zoom_normal_button;
- Gtk::ToolButton* _zoom_full_button;
- //Gtk::ProgressBar* _load_progress_bar;
- Gtk::ComboBox* _buffer_size_combo;
- Gtk::Label* _sample_rate_label;
- Gtk::ProgressBar* _xrun_progress_bar;
- Gtk::ToolButton* _clear_load_button;
- //Gtk::Statusbar* _status_bar;
+
+ Widget<Gtk::AboutDialog> _about_win;
+ Widget<Gtk::ComboBox> _buffer_size_combo;
+ Widget<Gtk::ToolButton> _clear_load_but;
+ Widget<Gtk::Paned> _main_paned;
+ Widget<Gtk::ScrolledWindow> _main_scrolledwin;
+ Widget<Gtk::Window> _main_win;
+ Widget<Gtk::ProgressBar> _main_xrun_progress;
+ Widget<Gtk::MenuItem> _menu_file_quit;
+ Widget<Gtk::MenuItem> _menu_help_about;
+ Widget<Gtk::MenuItem> _menu_jack_connect;
+ Widget<Gtk::MenuItem> _menu_jack_disconnect;
+ Widget<Gtk::MenuItem> _menu_jack_settings;
+ Widget<Gtk::MenuItem> _menu_store_positions;
+ Widget<Gtk::MenuItem> _menu_view_arrange;
+ Widget<Gtk::CheckMenuItem> _menu_view_messages;
+ Widget<Gtk::MenuItem> _menu_view_refresh;
+ Widget<Gtk::CheckMenuItem> _menu_view_toolbar;
+ Widget<Gtk::Expander> _messages_expander;
+ Widget<Gtk::Button> _play_but;
+ Widget<Gtk::Button> _rewind_but;
+ Widget<Gtk::Label> _sample_rate_label;
+ Widget<Gtk::TextView> _status_text;
+ Widget<Gtk::Button> _stop_but;
+ Widget<Gtk::Toolbar> _toolbar;
+ Widget<Gtk::Box> _toolbars_box;
+ Widget<Gtk::ToolButton> _zoom_full_but;
+ Widget<Gtk::ToolButton> _zoom_normal_but;
};
#endif // PATCHAGE_H
diff --git a/src/Widget.hpp b/src/Widget.hpp
new file mode 100644
index 0000000..ea8a218
--- /dev/null
+++ b/src/Widget.hpp
@@ -0,0 +1,42 @@
+/* This file is part of Patchage
+ * Copyright (C) 2007 Dave Robillard <http://drobilla.net>
+ *
+ * Patchage is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * Patchage is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with Patchage. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef WIDGET_HPP
+#define WIDGET_HPP
+
+#include <string>
+#include <boost/utility.hpp>
+
+template <typename W>
+class Widget : public boost::noncopyable {
+public:
+ Widget(Glib::RefPtr<Gnome::Glade::Xml> xml, const std::string& name) {
+ xml->get_widget(name.c_str(), _me);
+ }
+
+ W* get() { return _me; }
+ const W* get() const { return _me; }
+ W* operator->() { return _me; }
+ const W* operator->() const { return _me; }
+ W& operator*() { return *_me; }
+ const W& operator*() const { return *_me; }
+
+private:
+ W* _me;
+};
+
+#endif // WIDGET_HPP
diff --git a/src/patchage.glade b/src/patchage.glade
index daeabf9..8ab3068 100644
--- a/src/patchage.glade
+++ b/src/patchage.glade
@@ -2,7 +2,7 @@
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--*- mode: xml -*-->
<glade-interface>
- <widget class="GtkWindow" id="patchage_win">
+ <widget class="GtkWindow" id="main_win">
<property name="border_width">1</property>
<property name="title" translatable="yes">Patchage</property>
<property name="default_width">640</property>
@@ -22,7 +22,7 @@
<child>
<widget class="GtkMenu" id="file_menu_menu">
<child>
- <widget class="GtkImageMenuItem" id="open_session_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_open_session">
<property name="visible">True</property>
<property name="label" translatable="yes">_Open Project</property>
<property name="use_underline">True</property>
@@ -38,7 +38,7 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="save_session_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_save_session">
<property name="visible">True</property>
<property name="label" translatable="yes">_Save Project</property>
<property name="use_underline">True</property>
@@ -54,7 +54,7 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="save_session_as_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_save_session_as">
<property name="visible">True</property>
<property name="label" translatable="yes">Save Project _As...</property>
<property name="use_underline">True</property>
@@ -70,7 +70,7 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="close_session_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_close_session">
<property name="visible">True</property>
<property name="label" translatable="yes">_Close Project</property>
<property name="use_underline">True</property>
@@ -90,7 +90,7 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="store_positions_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_store_positions">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Store the current module positions as the defaults</property>
<property name="label" translatable="yes">_Save Layout as Default</property>
@@ -111,7 +111,7 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="file_quit_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_file_quit">
<property name="visible">True</property>
<property name="label">gtk-quit</property>
<property name="use_underline">True</property>
@@ -124,14 +124,14 @@
</widget>
</child>
<child>
- <widget class="GtkMenuItem" id="file_system_menuitem">
+ <widget class="GtkMenuItem" id="menu_file_system">
<property name="visible">True</property>
<property name="label" translatable="yes">_System</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="file_system_menuitem_menu">
<child>
- <widget class="GtkImageMenuItem" id="jack_settings_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_jack_settings">
<property name="visible">True</property>
<property name="label" translatable="yes">Jack _Settings</property>
<property name="use_underline">True</property>
@@ -152,11 +152,11 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="connect_to_jack_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_jack_connect">
<property name="visible">True</property>
<property name="label" translatable="yes">Connect to _JACK</property>
<property name="use_underline">True</property>
- <signal name="activate" handler="on_connect_to_jack_menuitem_activate"/>
+ <signal name="activate" handler="on_menu_jack_connect_activate"/>
<accelerator key="J" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image829">
@@ -168,7 +168,7 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="disconnect_from_jack_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_jack_disconnect">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="label" translatable="yes">Disconnect from JACK</property>
@@ -190,11 +190,11 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="connect_to_alsa_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_alsa_connect">
<property name="visible">True</property>
<property name="label" translatable="yes">Connect to _ALSA</property>
<property name="use_underline">True</property>
- <signal name="activate" handler="on_connect_to_alsa_menuitem_activate"/>
+ <signal name="activate" handler="on_menu_alsa_connect_activate"/>
<accelerator key="A" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image831">
@@ -206,12 +206,12 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="disconnect_from_alsa_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_alsa_disconnect">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="label" translatable="yes">Disconnect from ALSA</property>
<property name="use_underline">True</property>
- <signal name="activate" handler="on_disconnect_from_alsa_menuitem_activate"/>
+ <signal name="activate" handler="on_menu_alsa_disconnect_activate"/>
<accelerator key="A" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image832">
@@ -228,11 +228,11 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="connect_to_lash_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_lash_connect">
<property name="visible">True</property>
<property name="label" translatable="yes">Connect to _LASH</property>
<property name="use_underline">True</property>
- <signal name="activate" handler="on_connect_to_lash1_activate"/>
+ <signal name="activate" handler="on_menu_lash_connect"/>
<accelerator key="L" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image833">
@@ -244,12 +244,12 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="disconnect_from_lash_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_lash_disconnect">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="label" translatable="yes">Disconnect from LASH</property>
<property name="use_underline">True</property>
- <signal name="activate" handler="on_disconnect_from_lash1_activate"/>
+ <signal name="activate" handler="on_menu_lash_disconnect_activate"/>
<accelerator key="L" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image834">
@@ -272,17 +272,17 @@
<child>
<widget class="GtkMenu" id="view_menu_menu">
<child>
- <widget class="GtkCheckMenuItem" id="view_toolbar_menuitem">
+ <widget class="GtkCheckMenuItem" id="menu_view_toolbar">
<property name="visible">True</property>
<property name="label" translatable="yes">_Toolbar</property>
<property name="use_underline">True</property>
<property name="active">True</property>
- <signal name="activate" handler="on_view_jack_toolbar_menuitem_activate"/>
+ <signal name="activate" handler="on_menu_view_toolbar_activate"/>
<accelerator key="T" modifiers="GDK_CONTROL_MASK" signal="activate"/>
</widget>
</child>
<child>
- <widget class="GtkCheckMenuItem" id="view_messages_menuitem">
+ <widget class="GtkCheckMenuItem" id="menu_view_messages">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">View "console" messages</property>
<property name="label" translatable="yes">_Messages</property>
@@ -292,7 +292,7 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="view_refresh_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_view_refresh">
<property name="visible">True</property>
<property name="label" translatable="yes">_Refresh</property>
<property name="use_underline">True</property>
@@ -308,12 +308,12 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="view_arrange_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_view_arrange">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Automatically organize canvas</property>
<property name="label" translatable="yes">_Arrange</property>
<property name="use_underline">True</property>
- <signal name="activate" handler="on_view_arrange_menuitem_activate"/>
+ <signal name="activate" handler="on_menu_view_arrange"/>
<accelerator key="G" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image836">
@@ -336,7 +336,7 @@
<child>
<widget class="GtkMenu" id="help_menu_menu">
<child>
- <widget class="GtkImageMenuItem" id="help_about_menuitem">
+ <widget class="GtkImageMenuItem" id="menu_help_about">
<property name="visible">True</property>
<property name="label">gtk-about</property>
<property name="use_underline">True</property>
@@ -355,7 +355,7 @@
</packing>
</child>
<child>
- <widget class="GtkHBox" id="toolbars_hbox">
+ <widget class="GtkHBox" id="toolbars_box">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
@@ -386,7 +386,7 @@
</packing>
</child>
<child>
- <widget class="GtkComboBoxEntry" id="main_buffer_size_combo">
+ <widget class="GtkComboBoxEntry" id="buffer_size_combo">
<property name="visible">True</property>
<property name="border_width">1</property>
<property name="items" translatable="yes">32 frames
@@ -408,7 +408,7 @@
</packing>
</child>
<child>
- <widget class="GtkLabel" id="main_sample_rate_label">
+ <widget class="GtkLabel" id="sample_rate_label">
<property name="label" translatable="yes">48</property>
</widget>
<packing>
@@ -450,7 +450,7 @@
</packing>
</child>
<child>
- <widget class="GtkToolButton" id="main_clear_load_button">
+ <widget class="GtkToolButton" id="clear_load_but">
<property name="visible">True</property>
<property name="stock_id">gtk-clear</property>
</widget>
@@ -694,7 +694,7 @@ The bar represents the maximum processing delay as a fraction of the time availa
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
- <widget class="GtkScrolledWindow" id="canvas_scrolledwindow">
+ <widget class="GtkScrolledWindow" id="main_scrolledwin">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_focus">True</property>
@@ -878,7 +878,7 @@ along with Patchage; if not, write to the Free Software Foundation, Inc.,
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
- <widget class="GtkButton" id="jack_settings_cancel_button">
+ <widget class="GtkButton" id="jack_settings_cancel_but">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-cancel</property>
@@ -887,7 +887,7 @@ along with Patchage; if not, write to the Free Software Foundation, Inc.,
</widget>
</child>
<child>
- <widget class="GtkButton" id="jack_settings_ok_button">
+ <widget class="GtkButton" id="jack_settings_ok_but">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
diff --git a/src/patchage.svg b/src/patchage.svg
new file mode 120000
index 0000000..88500da
--- /dev/null
+++ b/src/patchage.svg
@@ -0,0 +1 @@
+../icons/48x48/patchage.svg \ No newline at end of file