X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_ui_dependents.cc;h=87beab6b0e417faddad7fd0b2bafae52d61f638c;hb=38e94875647782fa6c28e25be471f0cff6c97d2a;hp=939c7d0eebd125956facfbf44b7ac8ec92a40c79;hpb=a29fd4542e885cc8dff2e10ef5fc15912c6d4277;p=ardour.git diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc index 939c7d0eeb..87beab6b0e 100644 --- a/gtk2_ardour/ardour_ui_dependents.cc +++ b/gtk2_ardour/ardour_ui_dependents.cc @@ -37,15 +37,19 @@ #include "ardour_ui.h" #include "public_editor.h" #include "meterbridge.h" +#include "luainstance.h" +#include "luawindow.h" #include "mixer_ui.h" #include "keyboard.h" +#include "keyeditor.h" #include "splash.h" #include "rc_option_editor.h" #include "route_params_ui.h" +#include "time_info_box.h" #include "opts.h" #include "utils.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace Gtk; using namespace PBD; @@ -99,9 +103,6 @@ ARDOUR_UI::we_have_dependents () ActionManager::load_menus (ARDOUR_COMMAND_LINE::menus_file); - editor->track_mixer_selection (); - mixer->track_editor_selection (); - /* catch up on parameters */ boost::function pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1)); @@ -119,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 */ @@ -151,7 +153,7 @@ ARDOUR_UI::tab_window_root_drop (GtkNotebook* src, using namespace std; Gtk::Notebook* nb = 0; Gtk::Window* win = 0; - Gtkmm2ext::Tabbable* tabbable = 0; + ArdourWidgets::Tabbable* tabbable = 0; if (w == GTK_WIDGET(editor->contents().gobj())) { @@ -185,7 +187,7 @@ ARDOUR_UI::idle_ask_about_quit () } else { /* no session or session not dirty, but still ask anyway */ - Gtk::MessageDialog msg (string_compose ("Quit %1?", PROGRAM_NAME), + Gtk::MessageDialog msg (string_compose (_("Quit %1?"), PROGRAM_NAME), false, /* no markup */ Gtk::MESSAGE_INFO, Gtk::BUTTONS_YES_NO, @@ -217,10 +219,10 @@ ARDOUR_UI::main_window_delete_event (GdkEventAny* ev) static GtkNotebook* tab_window_root_drop (GtkNotebook* src, - GtkWidget* w, - gint x, - gint y, - gpointer user_data) + GtkWidget* w, + gint x, + gint y, + gpointer user_data) { return ARDOUR_UI::instance()->tab_window_root_drop (src, w, x, y, user_data); } @@ -235,6 +237,7 @@ ARDOUR_UI::setup_windows () keyboard->setup_keybindings (); + _tabs.set_show_border(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)); @@ -257,12 +260,18 @@ 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")); + time_info_box = new TimeInfoBox ("ToolbarTimeInfo", false); /* all other dialogs are created conditionally */ we_have_dependents (); @@ -296,6 +305,27 @@ ARDOUR_UI::setup_windows () main_vpacker.pack_start (status_bar_hpacker, false, false); #endif + LuaInstance::instance()->ActionChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::update_action_script_btn)); + + 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); + action_script_call_btn[i].signal_button_press_event().connect (sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::bind_lua_action_script), i), false); + 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 % 2; + const int col = i / 2; + action_script_table.attach (action_script_call_btn[i], col, col + 1, row, row + 1, EXPAND, EXPAND, 1, 0); + action_script_call_btn[i].set_no_show_all (); + } + action_script_table.show (); + setup_transport(); build_menu_bar (); setup_tooltips (); @@ -311,7 +341,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; @@ -373,3 +403,43 @@ ARDOUR_UI::setup_windows () return 0; } + +bool +ARDOUR_UI::bind_lua_action_script (GdkEventButton*ev, int i) +{ + if (ev->button != 3) { + return false; + } + LuaInstance *li = LuaInstance::instance(); + if (Gtkmm2ext::Keyboard::modifier_state_equals (ev->state, Gtkmm2ext::Keyboard::TertiaryModifier)) { + li->remove_lua_action (i); + } else { + li->interactive_add (LuaScriptInfo::EditorAction, i); + } + return true; +} + +void +ARDOUR_UI::update_action_script_btn (int i, const std::string& n) +{ + if (LuaInstance::instance()->lua_action_has_icon (i)) { + uintptr_t ii = i; + action_script_call_btn[i].set_icon (&LuaInstance::render_action_icon, (void*)ii); + } else { + action_script_call_btn[i].set_icon (0, 0); + } + + 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); + if (n.empty ()) { + act->set_label (string_compose (_("Unset #%1"), i + 1)); + act->set_tooltip (_("No action bound\nRight-click to assign")); + act->set_sensitive (false); + } else { + act->set_label (n); + act->set_tooltip (string_compose (_("%1\n\nClick to run\nRight-click to re-assign\nShift+right-click to unassign"), n)); + act->set_sensitive (true); + } + KeyEditor::UpdateBindings (); +}