31 #include "control_protocol/control_protocol.h"
78 session_option_editor.drop_window ();
80 add_video_dialog.drop_window ();
84 const XMLNode* node = _session->extra_xml (
X_(
"UI"));
88 for (XMLNodeList::const_iterator i = children.begin(); i != children.end(); ++i) {
90 gui_object_state->load (**i);
101 shuttle_box->set_session (s);
104 primary_clock->set_session (s);
105 secondary_clock->set_session (s);
106 big_clock->set_session (s);
107 time_info_box->set_session (s);
108 video_timeline->set_session (s);
115 if (_session->locations()->num_range_markers()) {
121 if (!_session->monitor_out()) {
124 act->set_sensitive (
false);
132 act->set_sensitive (
true);
143 rec_button.set_sensitive (
true);
145 solo_alert_button.set_active (_session->soloing());
147 setup_session_options ();
167 connect_dependents_to_session (s);
180 map_transport_state ();
185 set_fps_timeout_connection();
189 if (meter_box.get_parent()) {
190 transport_tearoff_hbox.remove (meter_box);
191 transport_tearoff_hbox.remove (editor_meter_peak_display);
195 meter_box.remove(*editor_meter);
198 editor_meter_peak_display.hide();
201 if (meter_box.get_parent()) {
202 transport_tearoff_hbox.remove (meter_box);
203 transport_tearoff_hbox.remove (editor_meter_peak_display);
207 _session->master_out() &&
212 editor_meter->set_meter (_session->master_out()->shared_peak_meter().get());
213 editor_meter->clear_meters();
214 editor_meter->set_type (_session->master_out()->meter_type());
215 editor_meter->setup_meters (30, 12, 6);
216 editor_meter->show();
217 meter_box.pack_start(*editor_meter);
224 editor_meter_peak_display.set_name (
"meterbridge peakindicator");
225 editor_meter_peak_display.unset_flags (Gtk::CAN_FOCUS);
226 editor_meter_peak_display.set_size_request (std::max(9.
f, rintf(8.
f * ui_scale)), -1);
227 editor_meter_peak_display.set_corner_radius (3.0);
229 editor_meter_max_peak = -INFINITY;
233 transport_tearoff_hbox.pack_start (meter_box,
false,
false);
234 transport_tearoff_hbox.pack_start (editor_meter_peak_display,
false,
false);
236 editor_meter_peak_display.show();
248 if (_session && _session->dirty()) {
249 std::vector<std::string> actions;
250 actions.push_back (
_(
"Don't close"));
251 actions.push_back (
_(
"Just close"));
252 actions.push_back (
_(
"Save and close"));
253 switch (ask_about_saving_session (actions)) {
259 _session->save_state (
"");
268 if (*i && (*i)->protocol && (*i)->protocol->has_editor ()) {
269 (*i)->protocol->tear_down_gui ();
277 meterbridge->hide ();
278 audio_port_matrix->hide();
279 midi_port_matrix->hide();
280 route_params->hide();
283 second_connection.disconnect ();
284 point_one_second_connection.disconnect ();
285 point_zero_something_second_connection.disconnect();
286 fps_connection.disconnect();
289 meter_box.remove(*editor_meter);
292 editor_meter_peak_display.hide();
297 rec_button.set_sensitive (
false);
309 blink_connection.disconnect ();
314 session_loaded =
false;
316 update_buffer_load ();
331 if (splash && splash->is_visible()) {
333 Glib::signal_timeout().connect (sigc::bind (sigc::ptr_fun (
_hide_splash),
this), 2000);
336 editor->show_window ();
342 _mixer_on_top =
false;
348 Glib::RefPtr<Gdk::Window> win;
349 Glib::RefPtr<Gdk::Screen> screen;
352 win = editor->get_window ();
356 screen = win->get_screen();
358 screen = Gdk::Screen::get_default();
361 if (g_getenv (
"ARDOUR_LOVES_STUPID_TINY_SCREENS") == 0 && screen && screen->get_height() < 700) {
362 Gtk::MessageDialog msg (
_(
"This screen is not tall enough to display the mixer window"));
367 mixer->show_window ();
373 _mixer_on_top =
true;
384 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
386 if (tact->get_active()) {
387 goto_mixer_window ();
401 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
403 if (tact->get_active()) {
404 meterbridge->show_window ();
406 meterbridge->hide_window (NULL);
413 bool obscuring =
false;
420 bool same_screen =
true;
422 if (editor && mixer) {
428 if (editor->get_screen() != mixer->get_screen() && (mixer->get_screen() != 0) && (editor->get_screen() != 0)) {
437 editor->get_position (ex, ey);
438 editor->get_size (ew, eh);
440 mixer->get_position (mx, my);
441 mixer->get_size (mw, mh);
457 if (gdk_rectangle_intersect (&e, &m, &r)) {
463 if (mixer && !mixer->not_visible() && mixer->property_has_toplevel_focus()) {
464 if (obscuring && same_screen) {
465 goto_editor_window();
467 }
else if (editor && !editor->not_visible() && editor->property_has_toplevel_focus()) {
468 if (obscuring && same_screen) {
471 }
else if (mixer && mixer->not_visible()) {
472 if (obscuring && same_screen) {
473 goto_mixer_window ();
475 }
else if (editor && editor->not_visible()) {
476 if (obscuring && same_screen) {
477 goto_editor_window ();
479 }
else if (obscuring && same_screen) {
482 goto_editor_window ();
484 goto_mixer_window ();
497 std::list<MidiTracer*>::iterator i = _midi_tracer_windows.begin ();
498 while (i != _midi_tracer_windows.end() && (*i)->get_visible() ==
true) {
502 if (i == _midi_tracer_windows.end()) {
506 _midi_tracer_windows.push_back (t);
541 if (_session->locations()->num_range_markers()) {
552 if (window_was_editor) {
554 if ((ev->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) &&
555 (ev->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)) {
556 if (big_clock_window) {
557 big_clock_window->set_transient_for (*editor);
563 if ((ev->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) &&
564 (ev->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)) {
565 if (big_clock_window) {
566 big_clock_window->set_transient_for (*mixer);
580 if (_session->master_out()) {
583 }
else if (_session->master_out()) {
595 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
596 if (tact->get_active()) {
597 mixer->maximise_mixer_space ();
599 mixer->restore_mixer_space ();
SessionOptionEditor * create_session_option_editor()
void toggle_mixer_window()
void goto_editor_window()
std::vector< Glib::RefPtr< Gtk::Action > > track_selection_sensitive_actions
AddVideoDialog * create_add_video_dialog()
static bool _hide_splash(gpointer arg)
void session_parameter_changed(std::string)
sigc::connection super_rapid_connect(const sigc::slot< void > &slot)
void xrun_handler(framepos_t)
int unload_session(bool hide_stuff=false)
void reset_peak_display()
void step_edit_status_change(bool)
static AutomationWatch & instance()
static ARDOUR_UI * instance()
std::vector< Glib::RefPtr< Gtk::Action > > time_selection_sensitive_actions
void set_session(ARDOUR::Session *)
static Manager & instance()
LIBGTKMM2EXT_API Glib::RefPtr< Gtk::Action > get_action(const char *group, const char *name)
static ControlProtocolManager & instance()
const XMLNodeList & children(const std::string &str=std::string()) const
std::list< ControlProtocolInfo * > control_protocol_info
std::vector< Glib::RefPtr< Gtk::Action > > line_selection_sensitive_actions
std::vector< Glib::RefPtr< Gtk::Action > > range_sensitive_actions
void map_transport_state()
void reset_group_peak_display(ARDOUR::RouteGroup *)
std::vector< Glib::RefPtr< Gtk::Action > > point_selection_sensitive_actions
sigc::signal< void, ARDOUR::Route * > ResetRoutePeakDisplays
void every_point_one_seconds()
std::list< XMLNode * > XMLNodeList
static uint32_t TertiaryModifier
void record_state_changed()
LIBGTKMM2EXT_API void set_sensitive(std::vector< Glib::RefPtr< Gtk::Action > > &actions, bool)
void save_session_at_its_request(std::string)
void new_midi_tracer_window()
static const std::string xml_node_name
void sync_session_state()
BundleManager * create_bundle_manager()
void soloing_changed(bool)
static uint32_t PrimaryModifier
VideoTimeLine * video_timeline
void auditioning_changed(bool)
void set_session(ARDOUR::Session *)
void set_transient_for(Gtk::Window *)
void toggle_meterbridge()
std::vector< Glib::RefPtr< Gtk::Action > > write_sensitive_actions
std::vector< Glib::RefPtr< Gtk::Action > > session_sensitive_actions
sigc::signal< void > ResetAllPeakDisplays
void toggle_editor_mixer()
LIBARDOUR_API RuntimeProfile * Profile
sigc::connection blink_connect(const sigc::slot< void, bool > &slot)
bool editor_meter_peak_button_release(GdkEventButton *)
sigc::connection second_connect(const sigc::slot< void > &slot)
static sigc::signal< void > ModeChanged
void handle_locations_change(ARDOUR::Location *)
static UIConfiguration * config()
sigc::signal< void, ARDOUR::RouteGroup * > ResetGroupPeakDisplays
void set_session(ARDOUR::Session *)
std::vector< Glib::RefPtr< Gtk::Action > > playlist_selection_sensitive_actions
BigClockWindow * create_big_clock_window()
void every_point_zero_something_seconds()
virtual void set_session(ARDOUR::Session *)
static bool modifier_state_equals(guint state, ModifierMask)
#define MISSING_INVALIDATOR
sigc::connection rapid_connect(const sigc::slot< void > &slot)
Editing of options which are obtained from and written back to one of the .rc files.
void reset_route_peak_display(ARDOUR::Route *)
void toggle_mixer_space()
bool main_window_state_event_handler(GdkEventWindowState *, bool window_was_editor)