X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_ui_dependents.cc;h=8490643487ccf6753c35b6909b7baf8f6c26a895;hb=1a7fd81f4095e3ee8cb42e63c232a51529412846;hp=ddeebdef83ba8eba31de3488d6c89078e6af3b2b;hpb=9b9a7beb130d183fc08a57927a3eaf4441be6809;p=ardour.git diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc index ddeebdef83..8490643487 100644 --- a/gtk2_ardour/ardour_ui_dependents.cc +++ b/gtk2_ardour/ardour_ui_dependents.cc @@ -37,6 +37,7 @@ #include "ardour_ui.h" #include "public_editor.h" #include "meterbridge.h" +#include "luawindow.h" #include "mixer_ui.h" #include "keyboard.h" #include "splash.h" @@ -45,7 +46,7 @@ #include "opts.h" #include "utils.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace Gtk; using namespace PBD; @@ -62,13 +63,13 @@ ARDOUR_UI::we_have_dependents () { install_actions (); load_bindings (); - + ProcessorBox::register_actions (); /* Global, editor, mixer, processor box actions are defined now. Link them with any bindings, so that GTK does not get a chance to define the GTK accel map entries first when we ask the GtkUIManager to - create menus/widgets. + create menus/widgets. If GTK adds the actions to its accel map before we do, we lose our freedom to use any keys. More precisely, we can use any keys, but @@ -81,18 +82,20 @@ ARDOUR_UI::we_have_dependents () importantly they don't have menus showing the bindings, so it is less of an issue. */ - + Gtkmm2ext::Bindings::associate_all (); - + editor->setup_tooltips (); editor->UpdateAllTransportClocks.connect (sigc::mem_fun (*this, &ARDOUR_UI::update_transport_clocks)); - /* catch up on tabbable state */ + /* catch up on tabbable state, in the right order to leave the editor + * selected by default + */ - tabbable_state_change (*editor); - tabbable_state_change (*mixer); tabbable_state_change (*rc_option_editor); - + tabbable_state_change (*mixer); + tabbable_state_change (*editor); + /* all actions are defined */ ActionManager::load_menus (ARDOUR_COMMAND_LINE::menus_file); @@ -101,7 +104,7 @@ ARDOUR_UI::we_have_dependents () mixer->track_editor_selection (); /* catch up on parameters */ - + boost::function pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1)); Config->map_parameters (pc); @@ -117,6 +120,7 @@ ARDOUR_UI::connect_dependents_to_session (ARDOUR::Session *s) BootMessage (_("Setup Mixer")); mixer->set_session (s); meterbridge->set_session (s); + luawindow->set_session (s); /* its safe to do this now */ @@ -171,7 +175,7 @@ ARDOUR_UI::tab_window_root_drop (GtkNotebook* src, win->present (); return nb->gobj(); } - + return 0; /* what was that? */ } @@ -207,9 +211,9 @@ ARDOUR_UI::main_window_delete_event (GdkEventAny* ev) * the window manager/desktop can think we're taking too longer to * handle the "delete" event */ - - Glib::signal_idle().connect (sigc::mem_fun (*this, &ARDOUR_UI::idle_ask_about_quit)); - + + Glib::signal_idle().connect (sigc::mem_fun (*this, &ARDOUR_UI::idle_ask_about_quit)); + return true; } @@ -233,15 +237,9 @@ ARDOUR_UI::setup_windows () keyboard->setup_keybindings (); - /* we don't use a widget with its own window for the tab close button, - which makes it impossible to rely on GTK+ to generate signals for - events occuring "in" this widget. Instead, we pre-connect a - handler to the relevant events on the notebook and then check - to see if the event coordinates tell us that it occured "in" - the close button. - */ - _tabs.signal_button_press_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_button_event), false); - _tabs.signal_button_release_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_button_event), false); + _tabs.signal_switch_page().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_switch)); + _tabs.signal_page_added().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_page_added)); + _tabs.signal_page_removed().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_page_removed)); rc_option_editor = new RCOptionEditor; rc_option_editor->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change)); @@ -261,8 +259,13 @@ ARDOUR_UI::setup_windows () return -1; } + if (create_luawindow ()) { + error << _("UI: cannot setup luawindow") << endmsg; + return -1; + } + /* order of addition affects order seen in initial window display */ - + rc_option_editor->add_to_notebook (_tabs, _("Preferences")); mixer->add_to_notebook (_tabs, _("Mixer")); editor->add_to_notebook (_tabs, _("Editor")); @@ -292,7 +295,7 @@ ARDOUR_UI::setup_windows () main_vpacker.pack_start (top_packer, false, false); /* now add the transport frame to the top of main window */ - + main_vpacker.pack_start (transport_frame, false, false); main_vpacker.pack_start (_tabs, true, true); @@ -300,12 +303,30 @@ ARDOUR_UI::setup_windows () main_vpacker.pack_start (status_bar_hpacker, false, false); #endif + for (int i = 0; i < 9; ++i) { + std::string const a = string_compose (X_("script-action-%1"), i + 1); + Glib::RefPtr act = ActionManager::get_action(X_("Editor"), a.c_str()); + assert (act); + action_script_call_btn[i].set_text (string_compose ("%1", i+1)); + action_script_call_btn[i].set_related_action (act); + if (act->get_sensitive ()) { + action_script_call_btn[i].set_visual_state (Gtkmm2ext::VisualState (action_script_call_btn[i].visual_state() & ~Gtkmm2ext::Insensitive)); + } else { + action_script_call_btn[i].set_visual_state (Gtkmm2ext::VisualState (action_script_call_btn[i].visual_state() | Gtkmm2ext::Insensitive)); + } + const int row = i % 3; + const int col = i / 3; + action_script_table.attach (action_script_call_btn[i], col, col + 1, row, row + 1, EXPAND, EXPAND, 1, 1); + action_script_call_btn[i].set_no_show_all (); + } + action_script_table.show (); + setup_transport(); build_menu_bar (); setup_tooltips (); _main_window.signal_delete_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::main_window_delete_event)); - + /* pack the main vpacker into the main window and show everything */ @@ -315,7 +336,7 @@ ARDOUR_UI::setup_windows () const XMLNode* mnode = main_window_settings (); if (mnode) { - const XMLProperty* prop; + XMLProperty const * prop; gint x = -1; gint y = -1; gint w = -1; @@ -327,12 +348,12 @@ ARDOUR_UI::setup_windows () if ((prop = mnode->property (X_("y"))) != 0) { y = atoi (prop->value()); - } + } if ((prop = mnode->property (X_("w"))) != 0) { w = atoi (prop->value()); - } - + } + if ((prop = mnode->property (X_("h"))) != 0) { h = atoi (prop->value()); } @@ -340,17 +361,17 @@ ARDOUR_UI::setup_windows () if (x >= 0 && y >= 0 && w >= 0 && h >= 0) { _main_window.set_position (Gtk::WIN_POS_NONE); } - + if (x >= 0 && y >= 0) { _main_window.move (x, y); } - + if (w > 0 && h > 0) { _main_window.set_default_size (w, h); } std::string current_tab; - + if ((prop = mnode->property (X_("current-tab"))) != 0) { current_tab = prop->value(); } else { @@ -364,13 +385,11 @@ ARDOUR_UI::setup_windows () _tabs.set_current_page (_tabs.page_num (editor->contents())); } } - - _main_window.show_all (); + setup_toplevel_window (_main_window, "", this); - - _tabs.signal_switch_page().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_switch)); - _tabs.signal_page_removed().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_page_removed)); - _tabs.signal_page_added().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_page_added)); + _main_window.show_all (); + + _tabs.set_show_tabs (false); /* It would be nice if Gtkmm had wrapped this rather than just * deprecating the old set_window_creation_hook() method, but oh well...