diff options
author | David Robillard <d@drobilla.net> | 2007-12-20 02:04:55 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-12-20 02:04:55 +0000 |
commit | 07115ad5e6fa4af82b4efd06ce1d3f60cc2d07bb (patch) | |
tree | 7b9ddcdb3491f6e9332eb5a561afbdfe60361f13 | |
parent | 46452c287cdc4b12c30589a8f877f3ab7359265b (diff) | |
download | patchage-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.hpp | 30 | ||||
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/Patchage.cpp | 275 | ||||
-rw-r--r-- | src/Patchage.hpp | 101 | ||||
-rw-r--r-- | src/Widget.hpp | 42 | ||||
-rw-r--r-- | src/patchage.glade | 68 | ||||
l--------- | src/patchage.svg | 1 |
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 |