/*
- Copyright (C) 2000 Paul Davis
-
- This program 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 2 of the License, or
- (at your option) any later version.
-
- This program 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 this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
+ * Copyright (C) 2005-2006 Taybin Rutkin <taybin@taybin.com>
+ * Copyright (C) 2005-2018 Paul Davis <paul@linuxaudiosystems.com>
+ * Copyright (C) 2006-2016 David Robillard <d@drobilla.net>
+ * Copyright (C) 2006 Hans Fugal <hans@fugal.net>
+ * Copyright (C) 2006 Nick Mainsbridge <mainsbridge@gmail.com>
+ * Copyright (C) 2007-2012 Carl Hetherington <carl@carlh.net>
+ * Copyright (C) 2007-2015 Tim Mayberry <mojofunk@gmail.com>
+ * Copyright (C) 2007 Doug McLain <doug@nostar.net>
+ * Copyright (C) 2013-2019 Robin Gareus <robin@gareus.org>
+ * Copyright (C) 2014-2018 Ben Loftis <ben@harrisonconsoles.com>
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
/* This file contains any ARDOUR_UI methods that require knowledge of
the various dialog boxes, and exists so that no compilation dependency
#include "midi_tracer.h"
#include "mini_timeline.h"
#include "mixer_ui.h"
+#include "plugin_dspload_window.h"
#include "public_editor.h"
#include "processor_box.h"
#include "rc_option_editor.h"
#include "sfdb_ui.h"
#include "time_info_box.h"
#include "timers.h"
+#include "transport_masters_dialog.h"
+#include "virtual_keyboard_window.h"
#include "pbd/i18n.h"
big_transport_window->set_session (s);
}
+ if (virtual_keyboard_window) {
+ virtual_keyboard_window->set_session (s);
+ }
+
if (!_session) {
WM::Manager::instance().set_session (s);
/* Session option editor cannot exist across change-of-session */
session_option_editor.drop_window ();
/* Ditto for AddVideoDialog */
add_video_dialog.drop_window ();
+ /* screensaver + layered button sensitivity */
+ map_transport_state ();
return;
}
big_clock->set_session (s);
video_timeline->set_session (s);
lua_script_window->set_session (s);
+ plugin_dsp_load_window->set_session (s);
+ transport_masters_window->set_session (s);
+ rc_option_editor->set_session (s);
/* sensitize menu bar options that are now valid */
ActionManager::set_sensitive (ActionManager::range_sensitive_actions, false);
}
- if (!_session->monitor_out()) {
- Glib::RefPtr<Action> act = ActionManager::get_action (X_("options"), X_("SoloViaBus"));
- if (act) {
- act->set_sensitive (false);
- }
- }
-
/* allow wastebasket flush again */
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Main"), X_("FlushWastebasket"));
_session->locations()->removed.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::handle_locations_change, this, _1), gui_context());
_session->config.ParameterChanged.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::session_parameter_changed, this, _1), gui_context ());
+ _session->LatencyUpdated.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::session_latency_updated, this), gui_context());
+ session_latency_updated ();
+
/* Clocks are on by default after we are connected to a session, so show that here.
*/
_session->master_out() &&
_session->master_out()->n_outputs().n(DataType::AUDIO) > 0) {
- if (!ARDOUR::Profile->get_trx()) {
- editor_meter = new LevelMeterHBox(_session);
- editor_meter->set_meter (_session->master_out()->shared_peak_meter().get());
- editor_meter->clear_meters();
- editor_meter->set_meter_type (_session->master_out()->meter_type());
- editor_meter->setup_meters (30, 10, 6);
- editor_meter->show();
- editor_meter->ButtonPress.connect_same_thread (editor_meter_connection, boost::bind (&ARDOUR_UI::editor_meter_button_press, this, _1));
-
- editor_meter_table.set_spacings(3);
- editor_meter_table.attach(*editor_meter, 0,1, 0,1, FILL, FILL);
- editor_meter_table.attach(editor_meter_peak_display, 0,1, 1,2, FILL, EXPAND|FILL);
-
- editor_meter->show();
- editor_meter_peak_display.show();
- }
+ editor_meter = new LevelMeterHBox(_session);
+ editor_meter->set_meter (_session->master_out()->shared_peak_meter().get());
+ editor_meter->clear_meters();
+ editor_meter->setup_meters (30, 10, 6);
+ editor_meter->show();
+
+ editor_meter_table.set_spacings(3);
+ editor_meter_table.attach(*editor_meter, 0,1, 0,1, FILL, FILL);
+ editor_meter_table.attach(editor_meter_peak_display, 0,1, 1,2, FILL, EXPAND|FILL);
+
+ editor_meter->show();
+ editor_meter_peak_display.show();
ArdourMeter::ResetAllPeakDisplays.connect (sigc::mem_fun(*this, &ARDOUR_UI::reset_peak_display));
ArdourMeter::ResetRoutePeakDisplays.connect (sigc::mem_fun(*this, &ARDOUR_UI::reset_route_peak_display));
blink_connection.disconnect ();
- delete _session;
+ ARDOUR::Session* session_to_delete = _session;
_session = 0;
+ delete session_to_delete;
- session_loaded = false;
-
- update_buffer_load ();
update_title ();
return 0;
}
for (std::vector<std::string>::iterator s = insensitive_action_names.begin(); s != insensitive_action_names.end(); ++s) {
- action = ActionManager::get_action (X_("Common"), (*s).c_str());
+ action = ActionManager::get_action (X_("Common"), (*s).c_str(), false);
if (action) {
action->set_sensitive (false);
}
}
for (std::vector<std::string>::iterator s = sensitive_action_names.begin(); s != sensitive_action_names.end(); ++s) {
- action = ActionManager::get_action (X_("Common"), (*s).c_str());
+ action = ActionManager::get_action (X_("Common"), (*s).c_str(), false);
if (action) {
action->set_sensitive (true);
}
return btw;
}
+VirtualKeyboardWindow*
+ARDOUR_UI::create_virtual_keyboard_window ()
+{
+ VirtualKeyboardWindow* vkbd = new VirtualKeyboardWindow ();
+ vkbd->set_session (_session);
+ return vkbd;
+}
+
void
ARDOUR_UI::handle_locations_change (Location *)
{
if (big_transport_window) {
big_transport_window->set_transient_for (*editor->own_window());
}
+ if (virtual_keyboard_window) {
+ virtual_keyboard_window->set_transient_for (*editor->own_window());
+ }
}
} else if (object == mixer) {
if (big_transport_window) {
big_transport_window->set_transient_for (*mixer->own_window());
}
+ if (virtual_keyboard_window) {
+ virtual_keyboard_window->set_transient_for (*mixer->own_window());
+ }
}
}
bool
ARDOUR_UI::editor_meter_peak_button_release (GdkEventButton* ev)
{
- if (ev->button == 1 && Gtkmm2ext::Keyboard::modifier_state_equals (ev->state, Gtkmm2ext::Keyboard::PrimaryModifier|Gtkmm2ext::Keyboard::TertiaryModifier)) {
+ if (ev->button == 1) {
ArdourMeter::ResetAllPeakDisplays ();
- } else if (ev->button == 1 && Gtkmm2ext::Keyboard::modifier_state_equals (ev->state, Gtkmm2ext::Keyboard::PrimaryModifier)) {
- if (_session->master_out()) {
- ArdourMeter::ResetGroupPeakDisplays (_session->master_out()->route_group());
- }
- } else if (_session->master_out()) {
- ArdourMeter::ResetRoutePeakDisplays (_session->master_out().get());
}
return false;
}
void
ARDOUR_UI::toggle_mixer_space()
{
- Glib::RefPtr<Action> act = ActionManager::get_action ("Common", "ToggleMaximalMixer");
-
- if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- if (tact->get_active()) {
- mixer->maximise_mixer_space ();
- } else {
- mixer->restore_mixer_space ();
- }
- }
-}
-
-void
-ARDOUR_UI::toggle_mixer_list()
-{
- Glib::RefPtr<Action> act = ActionManager::get_action ("Common", "ToggleMixerList");
-
- if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- mixer->show_mixer_list (tact->get_active());
- }
-}
-
-void
-ARDOUR_UI::toggle_monitor_section_visibility ()
-{
- Glib::RefPtr<Action> act = ActionManager::get_action ("Common", "ToggleMonitorSection");
-
- if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- mixer->show_monitor_section (tact->get_active());
+ Glib::RefPtr<ToggleAction> tact = ActionManager::get_toggle_action ("Common", "ToggleMaximalMixer");
+ if (tact->get_active()) {
+ mixer->maximise_mixer_space ();
+ } else {
+ mixer->restore_mixer_space ();
}
}