2005-09-25 14:42:24 -04:00
/*
2019-08-02 17:26:43 -04:00
* Copyright ( C ) 2005 - 2006 Taybin Rutkin < taybin @ taybin . com >
* Copyright ( C ) 2005 - 2016 Tim Mayberry < mojofunk @ gmail . com >
* Copyright ( C ) 2005 - 2019 Paul Davis < paul @ linuxaudiosystems . com >
* Copyright ( C ) 2006 - 2007 Doug McLain < doug @ nostar . net >
* Copyright ( C ) 2006 - 2012 David Robillard < d @ drobilla . net >
* Copyright ( C ) 2007 - 2012 Carl Hetherington < carl @ carlh . net >
* Copyright ( C ) 2008 Hans Baier < hansfbaier @ googlemail . com >
2020-03-29 19:09:00 -04:00
* Copyright ( C ) 2013 - 2020 Robin Gareus < robin @ gareus . org >
2019-08-02 17:26:43 -04:00
* Copyright ( C ) 2014 - 2019 Ben Loftis < ben @ harrisonconsoles . com >
* Copyright ( C ) 2015 André Nusser < andre . nusser @ googlemail . 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 .
*/
2005-09-25 14:42:24 -04:00
2010-11-13 00:14:48 -05:00
# ifdef WAF_BUILD
# include "gtk2ardour-config.h"
# endif
2005-09-25 14:42:24 -04:00
/* This file contains any ARDOUR_UI methods that require knowledge of
the editor , and exists so that no compilation dependency exists
between the main ARDOUR_UI modules and the PublicEditor class . This
is to cut down on the nasty compile times for both these classes .
*/
2010-03-05 07:43:40 -05:00
# include <cmath>
2005-09-25 14:42:24 -04:00
2007-03-19 03:07:38 -04:00
# include <glibmm/miscutils.h>
2015-08-01 23:40:55 -04:00
# include <gtkmm/accelmap.h>
2008-09-10 11:03:30 -04:00
# include <gtk/gtk.h>
2006-10-21 15:01:50 -04:00
2017-07-16 22:55:52 -04:00
# include "pbd/file_utils.h"
# include "pbd/fpu.h"
# include "pbd/convert.h"
2020-03-29 18:37:49 -04:00
# include "pbd/openuri.h"
2022-10-10 15:03:07 -04:00
# include "pbd/types_convert.h"
2017-07-16 22:55:52 -04:00
2015-07-27 18:05:42 -04:00
# include "gtkmm2ext/cairo_packer.h"
2010-03-18 22:49:01 -04:00
# include "gtkmm2ext/utils.h"
# include "gtkmm2ext/window_title.h"
2017-07-16 22:55:52 -04:00
# include "widgets/tearoff.h"
2020-03-29 19:40:47 -04:00
# include "widgets/tooltips.h"
2010-03-05 07:43:40 -05:00
2024-11-07 20:09:40 -05:00
# include "application_bar.h"
2005-09-25 14:42:24 -04:00
# include "ardour_ui.h"
# include "public_editor.h"
# include "audio_clock.h"
2010-03-18 22:49:01 -04:00
# include "keyboard.h"
# include "monitor_section.h"
2007-10-11 18:07:47 -04:00
# include "engine_dialog.h"
2005-09-25 14:42:24 -04:00
# include "editor.h"
2017-01-28 12:32:59 -05:00
# include "editing.h"
2022-10-10 15:03:07 -04:00
# include "enums_convert.h"
2005-10-10 16:38:53 -04:00
# include "actions.h"
2024-05-08 09:11:36 -04:00
# include "meter_patterns.h"
2015-01-02 09:44:54 -05:00
# include "meterbridge.h"
2016-02-23 09:42:13 -05:00
# include "luawindow.h"
2008-04-11 10:06:50 -04:00
# include "mixer_ui.h"
2020-10-26 17:55:00 -04:00
# include "recorder_ui.h"
2021-11-08 20:27:38 -05:00
# include "trigger_page.h"
2013-05-04 22:02:05 -04:00
# include "window_manager.h"
2010-08-17 22:20:15 -04:00
# include "global_port_matrix.h"
2011-11-23 16:22:02 -05:00
# include "location_ui.h"
2012-05-31 19:14:03 -04:00
# include "main_clock.h"
2015-10-22 19:19:24 -04:00
# include "rc_option_editor.h"
2019-10-20 14:53:40 -04:00
# include "virtual_keyboard_window.h"
2008-02-16 17:43:18 -05:00
2010-08-16 22:48:24 -04:00
# include <gtkmm2ext/application.h>
2005-09-25 14:42:24 -04:00
2009-02-25 13:26:51 -05:00
# include "ardour/session.h"
# include "ardour/profile.h"
# include "ardour/audioengine.h"
2019-08-26 12:58:34 -04:00
# include "ardour/lv2_plugin.h"
2006-05-23 15:54:52 -04:00
2009-02-25 13:39:39 -05:00
# include "control_protocol/control_protocol.h"
2005-09-25 14:42:24 -04:00
2016-07-14 14:44:52 -04:00
# include "pbd/i18n.h"
2005-09-25 14:42:24 -04:00
2006-10-21 15:01:50 -04:00
using namespace std ;
2005-09-25 14:42:24 -04:00
using namespace ARDOUR ;
Large nasty commit in the form of a 5000 line patch chock-full of completely
unecessary changes. (Sorry, doing a "sprint" based thing, this is the end of the first one)
Achieved MIDI track and bus creation, associated Jack port and diskstream creation, and minimal GUI stuff for creating them. Should be set to start work on actually recording and playing midi to/from disk now.
Relevant (significant) changes:
- Creation of a Buffer class. Base class is type agnostic so things can point to a buffer but not care what kind it is (otherwise it'd be a template). Derived into AudioBuffer and MidiBuffer, with a type tag because checking type is necessary in parts of the code where dynamic_cast wouldn't be wise. Originally I considered this a hack, but passing around a type proved to be a very good solution to all the other problems (below). There is a 1:1 mapping between jack port data types and ardour Buffer types (with a conversion function), but that's easily removed if it ever becomes necessary. Having the type scoped in the Buffer class is maybe not the best spot for it, but whatever (this is proof of concept kinda stuff right now...)
- IO now has a "default" port type (passed to the constructor and stored as a member), used by ensure_io (and similar) to create n ports. IO::register_***_port has a type argument that defaults to the default type if not passed. Rationale: previous IO API is identical, no changes needed to existing code, but path is paved for multiple port types in one IO, which we will need for eg synth plugin inserts, among other things. This is not quite ideal (best would be to only have the two port register functions and have them take a type), but the alternative is a lot of work (namely destroying the 'ensure' functions and everything that uses them) for very little gain. (I am convinced after quite a few tries at the whiteboard that subclassing IO in any way is not a feasible option, look at it's inheritance diagram in Doxygen and you can see why)
- AudioEngine::register_audio_input_port is now register_input_port and takes a type argument. Ditto for output.
- (Most significant change) AudioDiskstream abstracted into Distream, and sibling MidiDiskstream created. Very much still a work in progress, but Diskstream is there to switch references over to (most already are), which is the important part. It is still unclear what the MIDI diskstream's relation to channels is, but I'm pretty sure they will be single channel only (so SMF Type 0) since noone can come up with a reason otherwise.
- MidiTrack creation. Same thing as AudioTrack but with a different default type basically. No big deal here.
- Random cleanups and variable renamings etc. because I have OCD and can't help myself. :)
Known broken: Loading of sessions containing MIDI tracks.
git-svn-id: svn://localhost/ardour2/branches/midi@641 d708f5d6-7413-0410-9779-e7cbd77b26cf
2006-06-26 12:01:34 -04:00
using namespace PBD ;
2005-09-25 16:33:00 -04:00
using namespace Gtkmm2ext ;
2006-10-21 15:01:50 -04:00
using namespace Gtk ;
using namespace Glib ;
2005-09-25 14:42:24 -04:00
int
ARDOUR_UI : : create_editor ( )
{
try {
2007-03-18 02:07:08 -04:00
editor = new Editor ( ) ;
2015-07-22 21:14:08 -04:00
editor - > StateChange . connect ( sigc : : mem_fun ( * this , & ARDOUR_UI : : tabbable_state_change ) ) ;
2005-09-25 14:42:24 -04:00
}
catch ( failed_constructor & err ) {
return - 1 ;
}
2016-02-22 14:42:40 -05:00
// editor->signal_event().connect (sigc::bind (sigc::ptr_fun (&Keyboard::catch_user_event_for_pre_dialog_focus), editor));
2005-09-25 14:42:24 -04:00
return 0 ;
}
2020-10-26 17:55:00 -04:00
int
ARDOUR_UI : : create_recorder ( )
{
try {
recorder = new RecorderUI ( ) ;
recorder - > StateChange . connect ( sigc : : mem_fun ( * this , & ARDOUR_UI : : tabbable_state_change ) ) ;
} catch ( failed_constructor & err ) {
return - 1 ;
}
return 0 ;
}
2021-11-08 20:27:38 -05:00
int
ARDOUR_UI : : create_trigger_page ( )
{
try {
trigger_page = new TriggerPage ( ) ;
trigger_page - > StateChange . connect ( sigc : : mem_fun ( * this , & ARDOUR_UI : : tabbable_state_change ) ) ;
} catch ( failed_constructor & err ) {
return - 1 ;
}
return 0 ;
}
2016-05-21 08:34:09 -04:00
void
ARDOUR_UI : : escape ( )
{
Escape ( ) ; /* EMIT SIGNAL */
}
2016-06-17 15:48:31 -04:00
void
ARDOUR_UI : : close_current_dialog ( )
{
Keyboard : : close_current_dialog ( ) ;
}
2005-09-25 14:42:24 -04:00
void
2005-10-10 16:38:53 -04:00
ARDOUR_UI : : install_actions ( )
2005-09-25 14:42:24 -04:00
{
2018-12-11 05:06:26 -05:00
Glib : : RefPtr < ActionGroup > main_actions = ActionManager : : create_action_group ( global_bindings , X_ ( " Main " ) ) ;
2019-02-16 15:05:41 -05:00
Glib : : RefPtr < ActionGroup > main_menu_actions = ActionManager : : create_action_group ( global_bindings , X_ ( " Main Menu " ) ) ;
2005-10-10 16:38:53 -04:00
Glib : : RefPtr < Action > act ;
2005-09-25 14:42:24 -04:00
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( main_actions , X_ ( " Escape " ) , _ ( " Escape (deselect all) " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : escape ) ) ;
2016-06-17 15:48:31 -04:00
/* This is hard-wired into the Keyboard code as "Primary-w". Maybe it
doesn ' t need to be . This action makes it possible to do this from a
control surface .
*/
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( main_actions , X_ ( " close-current-dialog " ) , _ ( " Close Current Dialog " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : close_current_dialog ) ) ;
2016-05-21 08:34:09 -04:00
2005-12-31 13:20:42 -05:00
/* menus + submenus that need action items */
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( main_menu_actions , X_ ( " Session " ) , _ ( " Session " ) ) ;
act = ActionManager : : register_action ( main_menu_actions , X_ ( " Cleanup " ) , _ ( " Clean-up " ) ) ;
2009-10-13 16:43:28 -04:00
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( main_menu_actions , X_ ( " Sync " ) , _ ( " Sync " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " TransportOptions " ) , _ ( " Options " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " WindowMenu " ) , _ ( " Window " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " MixerMenu " ) , _ ( " Mixer " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " EditorMenu " ) , _ ( " Editor " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " PrefsMenu " ) , _ ( " Preferences " ) ) ;
2020-10-26 17:55:00 -04:00
ActionManager : : register_action ( main_menu_actions , X_ ( " RecorderMenu " ) , _ ( " Recorder " ) ) ;
2022-01-25 18:54:52 -05:00
ActionManager : : register_action ( main_menu_actions , X_ ( " TriggerMenu " ) , _ ( " Cue Grid " ) ) ;
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( main_menu_actions , X_ ( " DetachMenu " ) , _ ( " Detach " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " Help " ) , _ ( " Help " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " KeyMouseActions " ) , _ ( " Misc. Shortcuts " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " AudioFileFormat " ) , _ ( " Audio File Format " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " AudioFileFormatHeader " ) , _ ( " File Type " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " AudioFileFormatData " ) , _ ( " Sample Format " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " ControlSurfaces " ) , _ ( " Control Surfaces " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " Plugins " ) , _ ( " Plugins " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " Metering " ) , _ ( " Metering " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " MeteringFallOffRate " ) , _ ( " Fall Off Rate " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " MeteringHoldTime " ) , _ ( " Hold Time " ) ) ;
ActionManager : : register_action ( main_menu_actions , X_ ( " Denormals " ) , _ ( " Denormal Handling " ) ) ;
2006-03-28 14:22:29 -05:00
2005-12-31 13:20:42 -05:00
/* the real actions */
2005-11-28 22:53:24 -05:00
2019-11-01 17:48:16 -04:00
act = ActionManager : : register_action ( main_actions , X_ ( " New " ) , _ ( " New... " ) , hide_return ( sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : start_session_load ) , true ) ) ) ;
2005-11-28 17:36:26 -05:00
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( main_actions , X_ ( " Open " ) , _ ( " Open... " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : open_session ) ) ;
ActionManager : : register_action ( main_actions , X_ ( " Recent " ) , _ ( " Recent... " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : open_recent_session ) ) ;
act = ActionManager : : register_action ( main_actions , X_ ( " Close " ) , _ ( " Close " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : close_session ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-09-25 14:42:24 -04:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " AddTrackBus " ) , _ ( " Add Track, Bus or VCA... " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : add_route ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2009-10-13 16:43:28 -04:00
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2016-09-06 16:56:46 -04:00
ActionManager : : rec_sensitive_actions . push_back ( act ) ;
2008-08-04 18:37:24 -04:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " duplicate-routes " ) , _ ( " Duplicate Tracks/Busses... " ) ,
2015-11-14 10:29:50 -05:00
sigc : : mem_fun ( * this , & ARDOUR_UI : : start_duplicate_routes ) ) ;
2015-11-13 16:14:42 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2017-08-07 11:34:03 -04:00
ActionManager : : route_selection_sensitive_actions . push_back ( act ) ;
2015-10-02 07:32:49 -04:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " cancel-solo " ) , _ ( " Cancel Solo " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : cancel_solo ) ) ;
2015-10-02 07:32:49 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " Scripting " ) , S_ ( " Session|Scripting " ) ) ;
2016-02-22 17:10:55 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " OpenVideo " ) , _ ( " Open Video... " ) ,
2017-07-01 12:42:24 -04:00
sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : add_video ) , ( Gtk : : Window * ) 0 ) ) ;
2013-03-12 17:00:09 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " CloseVideo " ) , _ ( " Remove Video " ) ,
2017-07-01 12:42:24 -04:00
sigc : : mem_fun ( * this , & ARDOUR_UI : : remove_video ) ) ;
2013-06-12 18:54:43 -04:00
act - > set_sensitive ( false ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " ExportVideo " ) , _ ( " Export to Video File... " ) ,
2015-08-01 23:40:55 -04:00
hide_return ( sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : export_video ) , false ) ) ) ;
2013-03-12 17:00:09 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " SnapshotStay " ) , _ ( " Snapshot (& keep working on current version) ... " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : snapshot_session ) , false ) ) ;
2010-04-20 22:24:38 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " SnapshotSwitch " ) , _ ( " Snapshot (& switch to new version) ... " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : snapshot_session ) , true ) ) ;
2015-01-11 12:15:46 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " QuickSnapshotStay " ) , _ ( " Quick Snapshot (& keep working on current version) ... " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : quick_snapshot_session ) , false ) ) ;
2016-01-16 13:33:49 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " QuickSnapshotSwitch " ) , _ ( " Quick Snapshot (& switch to new version) ... " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : quick_snapshot_session ) , true ) ) ;
2016-01-16 13:33:49 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " SaveAs " ) , _ ( " Save As... " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : save_session_as ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2016-09-20 13:46:49 -04:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " Archive " ) , _ ( " Archive... " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : archive_session ) ) ;
2016-09-20 13:46:49 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-09-25 14:42:24 -04:00
2020-03-24 16:10:26 -04:00
act = ActionManager : : register_action ( main_actions , X_ ( " Rename " ) , _ ( " Rename... " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : rename_session ) , false ) ) ;
2011-07-14 13:41:06 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " SaveTemplate " ) , _ ( " Save Template... " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : save_template ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-09-25 14:42:24 -04:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " ManageTemplates " ) , _ ( " Templates " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : manage_templates ) ) ;
2017-07-03 06:27:25 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " Metadata " ) , _ ( " Metadata " ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-09-25 14:42:24 -04:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " EditMetadata " ) , _ ( " Edit Metadata... " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : edit_metadata ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2006-03-05 14:39:16 -05:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " ImportMetadata " ) , _ ( " Import Metadata... " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : import_metadata ) ) ;
2008-09-17 04:44:51 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " Export " ) , _ ( " Export " ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-09-25 14:42:24 -04:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " FlushWastebasket " ) , _ ( " Flush Wastebasket " ) , sigc : : mem_fun ( * ( ARDOUR_UI : : instance ( ) ) , & ARDOUR_UI : : flush_trash ) ) ;
2015-08-01 23:40:55 -04:00
2009-10-13 16:43:28 -04:00
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2008-08-04 18:37:24 -04:00
2005-11-17 16:31:37 -05:00
/* these actions are intended to be shared across all windows */
2008-08-04 18:37:24 -04:00
2018-12-11 05:06:26 -05:00
common_actions = ActionManager : : create_action_group ( global_bindings , X_ ( " Common " ) ) ;
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( common_actions , X_ ( " Quit " ) , _ ( " Quit " ) , ( hide_return ( sigc : : mem_fun ( * this , & ARDOUR_UI : : finish ) ) ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " Hide " ) , _ ( " Hide " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : hide_application ) ) ;
2015-07-22 15:22:58 -04:00
2016-01-11 21:36:44 -05:00
if ( Profile - > get_mixbus ( ) ) {
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( common_actions , X_ ( " show-ui-prefs " ) , _ ( " Show more UI preferences " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : show_ui_prefs ) ) ;
2016-01-11 21:36:44 -05:00
}
2014-07-14 13:19:52 -04:00
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( common_actions , X_ ( " toggle-meterbridge " ) , S_ ( " Window|Meterbridge " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_meterbridge ) ) ;
2013-05-04 22:02:05 -04:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( common_actions , X_ ( " NewMIDITracer " ) , _ ( " MIDI Tracer " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : new_midi_tracer_window ) ) ;
2010-07-06 20:40:58 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2015-08-01 23:40:55 -04:00
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( common_actions , X_ ( " chat " ) , _ ( " Chat " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : launch_chat ) ) ;
2020-05-28 14:26:24 -04:00
ActionManager : : register_action ( common_actions , X_ ( " tutorial " ) , S_ ( " Help|Tutorial " ) , mem_fun ( * this , & ARDOUR_UI : : launch_tutorial ) ) ;
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( common_actions , X_ ( " reference " ) , S_ ( " Manual|Reference " ) , mem_fun ( * this , & ARDOUR_UI : : launch_reference ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " tracker " ) , _ ( " Report a Bug " ) , mem_fun ( * this , & ARDOUR_UI : : launch_tracker ) ) ;
2019-04-08 15:36:27 -04:00
ActionManager : : register_action ( common_actions , X_ ( " website " ) , _ ( " Website " ) , mem_fun ( * this , & ARDOUR_UI : : launch_website ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " website-dev " ) , _ ( " Development " ) , mem_fun ( * this , & ARDOUR_UI : : launch_website_dev ) ) ;
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( common_actions , X_ ( " forums " ) , _ ( " User Forums " ) , mem_fun ( * this , & ARDOUR_UI : : launch_forums ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " howto-report " ) , _ ( " How to Report a Bug " ) , mem_fun ( * this , & ARDOUR_UI : : launch_howto_report ) ) ;
2008-08-04 18:37:24 -04:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( common_actions , X_ ( " Save " ) , _ ( " Save " ) , sigc : : hide_return ( sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : save_state ) , string ( " " ) , false ) ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2017-01-12 12:22:56 -05:00
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2019-02-16 03:13:56 -05:00
/* this is used by the monitor section to create global equivalents of
* some of its " local " actions . It will be used when Monitor / . . . actions
* are created .
*/
( void ) ActionManager : : create_action_group ( global_bindings , X_ ( " Monitor Section " ) ) ;
2005-12-21 16:37:18 -05:00
2018-12-11 05:06:26 -05:00
Glib : : RefPtr < ActionGroup > transport_actions = ActionManager : : create_action_group ( global_bindings , X_ ( " Transport " ) ) ;
2005-12-21 16:37:18 -05:00
/* do-nothing action for the "transport" menu bar item */
2018-12-10 08:33:31 -05:00
ActionManager : : register_action ( transport_actions , X_ ( " Transport " ) , _ ( " Transport " ) ) ;
2005-12-21 16:37:18 -05:00
/* these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
menus and via button proxies .
*/
2008-08-04 18:37:24 -04:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " Stop " ) , _ ( " Stop " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_stop ) ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " Roll " ) , _ ( " Roll " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_roll ) ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " ToggleRoll " ) , _ ( " Start/Stop " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_roll ) , false , false ) ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " alternate-ToggleRoll " ) , _ ( " Start/Stop " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_roll ) , false , false ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " ToggleRollMaybe " ) , _ ( " Start/Continue/Stop " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_roll ) , false , true ) ) ;
2009-11-08 11:28:21 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " ToggleRollForgetCapture " ) , _ ( " Stop and Forget Capture " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_roll ) , true , false ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2007-01-28 12:44:13 -05:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " Loop " ) , _ ( " Play Loop Range " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_session_auto_loop ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " PlaySelection " ) , _ ( " Play Selection " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_play_selection ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " PlayPreroll " ) , _ ( " Play w/Preroll " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_play_preroll ) ) ;
2012-11-20 14:43:43 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-02-11 10:39:45 -05:00
2005-12-21 16:37:18 -05:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " RecordPreroll " ) , _ ( " Record w/Preroll " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_rec_preroll ) ) ;
2017-01-18 09:16:05 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " RecordCountIn " ) , _ ( " Record w/Count-In " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_rec_count_in ) ) ;
2017-02-13 16:59:51 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " Record " ) , _ ( " Enable Record " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_record ) , false ) ) ;
2008-01-10 16:20:59 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2009-10-13 16:43:28 -04:00
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " record-roll " ) , _ ( " Start Recording " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_record ) , true ) ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2009-10-13 16:43:28 -04:00
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " alternate-record-roll " ) , _ ( " Start Recording " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_record ) , true ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : write_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2021-05-04 18:56:19 -04:00
act = ActionManager : : register_action ( transport_actions , X_ ( " Rewind " ) , _ ( " Rewind " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_rewind ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2021-05-04 18:56:19 -04:00
act = ActionManager : : register_action ( transport_actions , X_ ( " RewindSlow " ) , _ ( " Rewind (Slow) " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_rewind ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2021-05-04 18:56:19 -04:00
act = ActionManager : : register_action ( transport_actions , X_ ( " RewindFast " ) , _ ( " Rewind (Fast) " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_rewind ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2021-05-04 18:56:19 -04:00
act = ActionManager : : register_action ( transport_actions , X_ ( " Forward " ) , _ ( " Forward " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_forward ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2021-05-04 18:56:19 -04:00
act = ActionManager : : register_action ( transport_actions , X_ ( " ForwardSlow " ) , _ ( " Forward (Slow) " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_forward ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2021-05-04 18:56:19 -04:00
act = ActionManager : : register_action ( transport_actions , X_ ( " ForwardFast " ) , _ ( " Forward (Fast) " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_forward ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " GotoZero " ) , _ ( " Go to Zero " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_goto_zero ) ) ;
2006-03-11 11:01:06 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " GotoStart " ) , _ ( " Go to Start " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_goto_start ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " alternate-GotoStart " ) , _ ( " Go to Start " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_goto_start ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " GotoEnd " ) , _ ( " Go to End " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_goto_end ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " GotoWallClock " ) , _ ( " Go to Wall Clock " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : transport_goto_wallclock ) ) ;
2008-09-10 11:03:30 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
2014-07-03 18:50:14 -04:00
//these actions handle the numpad events, ProTools style
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " numpad-decimal " ) , _ ( " Numpad Decimal " ) , mem_fun ( * this , & ARDOUR_UI : : transport_numpad_decimal ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " alternate-numpad-decimal " ) , _ ( " Numpad Decimal " ) , mem_fun ( * this , & ARDOUR_UI : : transport_numpad_decimal ) ) ;
2014-10-21 17:36:15 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " numpad-0 " ) , _ ( " Numpad 0 " ) , bind ( mem_fun ( * this , & ARDOUR_UI : : transport_numpad_event ) , 0 ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " numpad-1 " ) , _ ( " Numpad 1 " ) , bind ( mem_fun ( * this , & ARDOUR_UI : : transport_numpad_event ) , 1 ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " numpad-2 " ) , _ ( " Numpad 2 " ) , bind ( mem_fun ( * this , & ARDOUR_UI : : transport_numpad_event ) , 2 ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " numpad-3 " ) , _ ( " Numpad 3 " ) , bind ( mem_fun ( * this , & ARDOUR_UI : : transport_numpad_event ) , 3 ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " numpad-4 " ) , _ ( " Numpad 4 " ) , bind ( mem_fun ( * this , & ARDOUR_UI : : transport_numpad_event ) , 4 ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " numpad-5 " ) , _ ( " Numpad 5 " ) , bind ( mem_fun ( * this , & ARDOUR_UI : : transport_numpad_event ) , 5 ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " numpad-6 " ) , _ ( " Numpad 6 " ) , bind ( mem_fun ( * this , & ARDOUR_UI : : transport_numpad_event ) , 6 ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " numpad-7 " ) , _ ( " Numpad 7 " ) , bind ( mem_fun ( * this , & ARDOUR_UI : : transport_numpad_event ) , 7 ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " numpad-8 " ) , _ ( " Numpad 8 " ) , bind ( mem_fun ( * this , & ARDOUR_UI : : transport_numpad_event ) , 8 ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " numpad-9 " ) , _ ( " Numpad 9 " ) , bind ( mem_fun ( * this , & ARDOUR_UI : : transport_numpad_event ) , 9 ) ) ;
2014-07-03 18:50:14 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " focus-on-clock " ) , _ ( " Focus On Clock " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : focus_on_clock ) ) ;
2008-01-10 16:20:59 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2022-11-18 09:29:34 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " primary-clock-timecode " ) , _ ( " Timecode " ) , sigc : : bind ( sigc : : mem_fun ( primary_clock , & AudioClock : : set_mode ) , AudioClock : : Timecode ) ) ;
2011-06-07 19:07:08 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2022-11-18 09:29:34 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " primary-clock-bbt " ) , _ ( " Bars & Beats " ) , sigc : : bind ( sigc : : mem_fun ( primary_clock , & AudioClock : : set_mode ) , AudioClock : : BBT ) ) ;
2008-02-19 17:10:27 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2022-11-18 09:29:34 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " primary-clock-minsec " ) , _ ( " Minutes & Seconds " ) , sigc : : bind ( sigc : : mem_fun ( primary_clock , & AudioClock : : set_mode ) , AudioClock : : MinSec ) ) ;
2008-02-19 17:10:27 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2022-11-18 09:29:34 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " primary-clock-seconds " ) , _ ( " Seconds " ) , sigc : : bind ( sigc : : mem_fun ( primary_clock , & AudioClock : : set_mode ) , AudioClock : : Seconds ) ) ;
2017-11-22 14:36:28 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2022-11-18 09:29:34 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " primary-clock-samples " ) , _ ( " Samples " ) , sigc : : bind ( sigc : : mem_fun ( primary_clock , & AudioClock : : set_mode ) , AudioClock : : Samples ) ) ;
2008-02-19 17:10:27 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2022-11-18 09:29:34 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " secondary-clock-timecode " ) , _ ( " Timecode " ) , sigc : : bind ( sigc : : mem_fun ( secondary_clock , & AudioClock : : set_mode ) , AudioClock : : Timecode ) ) ;
2011-06-07 19:07:08 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2022-11-18 09:29:34 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " secondary-clock-bbt " ) , _ ( " Bars & Beats " ) , sigc : : bind ( sigc : : mem_fun ( secondary_clock , & AudioClock : : set_mode ) , AudioClock : : BBT ) ) ;
2008-02-19 17:10:27 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2022-11-18 09:29:34 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " secondary-clock-minsec " ) , _ ( " Minutes & Seconds " ) , sigc : : bind ( sigc : : mem_fun ( secondary_clock , & AudioClock : : set_mode ) , AudioClock : : MinSec ) ) ;
2008-02-19 17:10:27 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2022-11-18 09:29:34 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " secondary-clock-seconds " ) , _ ( " Seconds " ) , sigc : : bind ( sigc : : mem_fun ( secondary_clock , & AudioClock : : set_mode ) , AudioClock : : Seconds ) ) ;
2017-11-22 14:36:28 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2022-11-18 09:29:34 -05:00
act = ActionManager : : register_action ( transport_actions , X_ ( " secondary-clock-samples " ) , _ ( " Samples " ) , sigc : : bind ( sigc : : mem_fun ( secondary_clock , & AudioClock : : set_mode ) , AudioClock : : Samples ) ) ;
2008-02-19 17:10:27 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " SessionMonitorIn " ) , _ ( " All Input " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_session_monitoring_in ) ) ;
2017-01-16 13:54:20 -05:00
act - > set_short_label ( _ ( " All In " ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " SessionMonitorDisk " ) , _ ( " All Disk " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_session_monitoring_disk ) ) ;
2017-01-16 13:54:20 -05:00
act - > set_short_label ( _ ( " All Disk " ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " TogglePunchIn " ) , _ ( " Punch In " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_punch_in ) ) ;
2023-10-28 08:45:33 -04:00
act - > set_short_label ( S_ ( " Punch|In " ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " TogglePunchOut " ) , _ ( " Punch Out " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_punch_out ) ) ;
2023-10-28 08:45:33 -04:00
act - > set_short_label ( S_ ( " Punch|Out " ) ) ;
2006-01-08 00:19:38 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " TogglePunch " ) , _ ( " Punch In/Out " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_punch ) ) ;
2011-06-08 15:48:57 -04:00
act - > set_short_label ( _ ( " In/Out " ) ) ;
2008-03-17 16:54:03 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " ToggleClick " ) , _ ( " Click " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_click ) ) ;
2006-01-08 00:19:38 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " ToggleAutoInput " ) , _ ( " Auto Input " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_auto_input ) ) ;
2006-01-08 00:19:38 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " ToggleAutoPlay " ) , _ ( " Auto Play " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_auto_play ) ) ;
2006-01-08 00:19:38 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " ToggleAutoReturn " ) , _ ( " Auto Return " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_auto_return ) ) ;
2005-11-22 23:13:32 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-21 16:37:18 -05:00
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " ToggleFollowEdits " ) , _ ( " Follow Range " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_follow_edits ) ) ;
2012-11-20 14:43:43 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2019-09-28 19:23:48 -04:00
act = ActionManager : : register_toggle_action ( main_actions , X_ ( " ToggleLatencyCompensation " ) , _ ( " Disable Latency Compensation " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_latency_switch ) ) ;
2019-12-13 10:33:12 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2019-09-28 19:23:48 -04:00
2024-05-08 11:08:38 -04:00
act = ActionManager : : register_toggle_action ( main_actions , X_ ( " ResetAllPeakDisplays " ) , _ ( " Reset Mixer Meter Peaks " ) , [ ] ( ) { ArdourMeter : : ResetAllPeakDisplays ( ) ; } ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_toggle_action ( main_actions , X_ ( " ResetMeterPeakHold " ) , _ ( " Reset All Meter Peak Hold " ) , [ ] ( ) { ArdourMeter : : ResetAllPeakDisplays ( ) ; ActionManager : : get_action ( " Recorder " , " reset-input-peak-hold " ) - > activate ( ) ; } ) ;
2024-05-08 09:11:36 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-11 12:22:51 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " MonitorMenu " ) , _ ( " Monitor Section " ) ) ; /* just the submenu item */
2018-12-03 19:55:52 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " ToggleVideoSync " ) , _ ( " Sync Startup to Video " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_video_sync ) ) ;
2009-11-09 23:30:08 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " ToggleTimeMaster " ) , _ ( " Time Master " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_time_master ) ) ;
2005-12-31 13:20:42 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( transport_actions , X_ ( " ToggleExternalSync " ) , _ ( " Use External Positional Sync Source " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_external_sync ) ) ;
2009-11-09 23:30:08 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2005-12-31 13:20:42 -05:00
2010-01-13 20:04:27 -05:00
for ( int i = 1 ; i < = 32 ; + + i ) {
string const a = string_compose ( X_ ( " ToggleRecordEnableTrack%1 " ) , i ) ;
string const n = string_compose ( _ ( " Toggle Record Enable Track %1 " ) , i ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( common_actions , a . c_str ( ) , n . c_str ( ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_record_enable ) , i - 1 ) ) ;
2010-01-13 20:04:27 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
}
2005-11-28 10:29:49 -05:00
2018-12-11 05:06:26 -05:00
Glib : : RefPtr < ActionGroup > shuttle_actions = ActionManager : : create_action_group ( global_bindings , " ShuttleActions " ) ;
2008-08-04 18:37:24 -04:00
2009-12-11 18:29:48 -05:00
shuttle_actions - > add ( Action : : create ( X_ ( " SetShuttleUnitsPercentage " ) , _ ( " Percentage " ) ) , hide_return ( sigc : : bind ( sigc : : mem_fun ( * Config , & RCConfiguration : : set_shuttle_units ) , Percentage ) ) ) ;
shuttle_actions - > add ( Action : : create ( X_ ( " SetShuttleUnitsSemitones " ) , _ ( " Semitones " ) ) , hide_return ( sigc : : bind ( sigc : : mem_fun ( * Config , & RCConfiguration : : set_shuttle_units ) , Semitones ) ) ) ;
2005-12-31 13:20:42 -05:00
2018-12-11 05:06:26 -05:00
Glib : : RefPtr < ActionGroup > option_actions = ActionManager : : create_action_group ( global_bindings , " Options " ) ;
2005-12-31 13:20:42 -05:00
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( option_actions , X_ ( " SendMTC " ) , _ ( " Send MTC " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_send_mtc ) ) ;
2005-12-31 13:20:42 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( option_actions , X_ ( " SendMMC " ) , _ ( " Send MMC " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_send_mmc ) ) ;
2005-12-31 13:20:42 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( option_actions , X_ ( " UseMMC " ) , _ ( " Use MMC " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_use_mmc ) ) ;
2005-12-31 13:20:42 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_toggle_action ( option_actions , X_ ( " SendMidiClock " ) , _ ( " Send MIDI Clock " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_send_midi_clock ) ) ;
2008-11-26 18:32:55 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2008-04-11 10:06:50 -04:00
2011-11-10 13:04:34 -05:00
/* MIDI */
2018-12-11 05:06:26 -05:00
Glib : : RefPtr < ActionGroup > midi_actions = ActionManager : : create_action_group ( global_bindings , X_ ( " MIDI " ) ) ;
2018-12-10 08:33:31 -05:00
act = ActionManager : : register_action ( midi_actions , X_ ( " panic " ) , _ ( " Panic (Send MIDI all-notes-off) " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : midi_panic ) ) ;
2017-12-23 09:45:57 -05:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
2005-10-10 16:38:53 -04:00
}
2019-01-13 13:01:18 -05:00
void
ARDOUR_UI : : install_dependent_actions ( )
{
using namespace Glib ;
using namespace Gtk ;
RefPtr < ActionGroup > main_actions = ActionManager : : get_action_group ( X_ ( " Main " ) ) ;
assert ( main_actions ) ;
RefPtr < ActionGroup > common_actions = ActionManager : : get_action_group ( X_ ( " Common " ) ) ;
assert ( common_actions ) ;
RefPtr < ActionGroup > transport_actions = ActionManager : : get_action_group ( X_ ( " Transport " ) ) ;
assert ( transport_actions ) ;
RefPtr < Action > act ;
/* these two behave as follows:
- if transport speed ! = 1.0 or ! = - 1.0 , change speed to 1.0 or - 1.0 ( respectively )
- otherwise do nothing
*/
act = ActionManager : : register_action ( transport_actions , X_ ( " TransitionToRoll " ) , _ ( " Transition to Roll " ) , sigc : : bind ( sigc : : mem_fun ( * editor , & PublicEditor : : transition_to_rolling ) , true ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( transport_actions , X_ ( " TransitionToReverse " ) , _ ( " Transition to Reverse " ) , sigc : : bind ( sigc : : mem_fun ( * editor , & PublicEditor : : transition_to_rolling ) , false ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " jump-backward-to-mark " , _ ( " Jump to Previous Mark " ) , sigc : : mem_fun ( * editor , & PublicEditor : : jump_backward_to_mark ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " jump-forward-to-mark " , _ ( " Jump to Next Mark " ) , sigc : : mem_fun ( * editor , & PublicEditor : : jump_forward_to_mark ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2024-05-29 00:07:35 -04:00
act = ActionManager : : register_action ( common_actions , " jump-backward-to-location-mark " , _ ( " Jump to Previous Location Mark " ) ,
sigc : : bind ( sigc : : mem_fun ( * editor , & PublicEditor : : jump_backward_to_mark_flagged ) , Location : : Flags ( 0 ) , Location : : Flags ( 0 ) , Location : : IsMark ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " jump-forward-to-location-mark " , _ ( " Jump to Next Location Mark " ) ,
sigc : : bind ( sigc : : mem_fun ( * editor , & PublicEditor : : jump_forward_to_mark_flagged ) , Location : : Flags ( 0 ) , Location : : Flags ( 0 ) , Location : : IsMark ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2020-06-18 16:16:32 -04:00
for ( int i = 1 ; i < = 9 ; + + i ) {
string const a = string_compose ( X_ ( " goto-mark-%1 " ) , i ) ;
string const n = string_compose ( _ ( " Locate to Mark %1 " ) , i ) ;
act = ActionManager : : register_action ( transport_actions , a . c_str ( ) , n . c_str ( ) , sigc : : bind ( sigc : : mem_fun ( * editor , & PublicEditor : : goto_nth_marker ) , i - 1 ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
}
2022-09-07 13:13:55 -04:00
act = ActionManager : : register_action ( common_actions , " jump-to-loop-start " , _ ( " Jump to Loop Start " ) , sigc : : bind ( sigc : : mem_fun ( * editor , & PublicEditor : : jump_to_loop_marker ) , true ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " jump-to-loop-end " , _ ( " Jump to Loop End " ) , sigc : : bind ( sigc : : mem_fun ( * editor , & PublicEditor : : jump_to_loop_marker ) , false ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2019-01-13 13:01:18 -05:00
act = ActionManager : : register_action ( common_actions , X_ ( " addExistingAudioFiles " ) , _ ( " Import " ) , sigc : : mem_fun ( * editor , & PublicEditor : : external_audio_dialog ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : write_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( main_actions , X_ ( " StemExport " ) , _ ( " Stem export... " ) , sigc : : mem_fun ( * editor , & PublicEditor : : stem_export ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2022-10-18 10:53:04 -04:00
act = ActionManager : : register_action ( main_actions , X_ ( " QuickExport " ) , _ ( " Quick Audio Export... " ) , sigc : : mem_fun ( * editor , & PublicEditor : : quick_export ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2023-12-07 11:43:26 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " SurroundExport " ) , _ ( " Export Surround Master... " ) , sigc : : mem_fun ( * editor , & PublicEditor : : surround_export ) ) ;
act - > set_sensitive ( false ) ;
2019-01-13 13:01:18 -05:00
act = ActionManager : : register_action ( main_actions , X_ ( " ExportAudio " ) , _ ( " Export to Audio File(s)... " ) , sigc : : mem_fun ( * editor , & PublicEditor : : export_audio ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2019-05-29 17:18:23 -04:00
act = ActionManager : : register_action ( main_actions , X_ ( " CleanupUnusedSources " ) , _ ( " Clean-up Unused Sources... " ) , sigc : : mem_fun ( * ( ARDOUR_UI : : instance ( ) ) , & ARDOUR_UI : : cleanup ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : write_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( main_actions , X_ ( " CleanupUnusedRegions " ) , _ ( " Clean-up Unused Regions... " ) , sigc : : mem_fun ( * editor , & PublicEditor : : cleanup_regions ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2020-03-30 12:51:08 -04:00
act = ActionManager : : register_action ( main_actions , X_ ( " CleanupPeakFiles " ) , _ ( " Rebuild Peak Files " ) , sigc : : mem_fun ( * ( ARDOUR_UI : : instance ( ) ) , & ARDOUR_UI : : cleanup_peakfiles ) ) ;
2019-05-29 17:18:23 -04:00
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : write_sensitive_actions . push_back ( act ) ;
2019-01-13 13:01:18 -05:00
/* these actions are all currently implemented by the Editor, but need
* to be accessible from anywhere as actions .
*/
act = ActionManager : : register_action ( common_actions , " alternate-jump-forward-to-mark " , _ ( " Jump to Next Mark " ) , sigc : : mem_fun ( editor , & PublicEditor : : jump_forward_to_mark ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " alternate-jump-backward-to-mark " , _ ( " Jump to Previous Mark " ) , sigc : : mem_fun ( editor , & PublicEditor : : jump_backward_to_mark ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " set-session-start-from-playhead " , _ ( " Set Session Start from Playhead " ) , sigc : : mem_fun ( editor , & PublicEditor : : set_session_start_from_playhead ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " set-session-end-from-playhead " , _ ( " Set Session End from Playhead " ) , sigc : : mem_fun ( editor , & PublicEditor : : set_session_end_from_playhead ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " toggle-location-at-playhead " , _ ( " Toggle Mark at Playhead " ) , sigc : : mem_fun ( editor , & PublicEditor : : toggle_location_at_playhead_cursor ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " add-location-from-playhead " , _ ( " Add Mark from Playhead " ) , sigc : : mem_fun ( editor , & PublicEditor : : add_location_from_playhead_cursor ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " alternate-add-location-from-playhead " , _ ( " Add Mark from Playhead " ) , sigc : : mem_fun ( editor , & PublicEditor : : add_location_from_playhead_cursor ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " remove-location-from-playhead " , _ ( " Remove Mark at Playhead " ) , sigc : : mem_fun ( editor , & PublicEditor : : remove_location_at_playhead_cursor ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " alternate-remove-location-from-playhead " , _ ( " Remove Mark at Playhead " ) , sigc : : mem_fun ( editor , & PublicEditor : : remove_location_at_playhead_cursor ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2022-12-02 15:31:56 -05:00
act = ActionManager : : register_action ( common_actions , " add-bbt-from-playhead " , _ ( " Add BBT Marker from Playhead " ) , sigc : : mem_fun ( editor , & PublicEditor : : add_bbt_marker_at_playhead_cursor ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2019-01-13 13:01:18 -05:00
act = ActionManager : : register_action ( common_actions , " nudge-next-forward " , _ ( " Nudge Next Later " ) , sigc : : bind ( sigc : : mem_fun ( editor , & PublicEditor : : nudge_forward ) , true , false ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " nudge-next-backward " , _ ( " Nudge Next Earlier " ) , sigc : : bind ( sigc : : mem_fun ( editor , & PublicEditor : : nudge_backward ) , true , false ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " nudge-playhead-forward " , _ ( " Nudge Playhead Forward " ) , sigc : : bind ( sigc : : mem_fun ( editor , & PublicEditor : : nudge_forward ) , false , true ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " nudge-playhead-backward " , _ ( " Nudge Playhead Backward " ) , sigc : : bind ( sigc : : mem_fun ( editor , & PublicEditor : : nudge_backward ) , false , true ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " playhead-forward-to-grid " , _ ( " Playhead to Next Grid " ) , sigc : : mem_fun ( editor , & PublicEditor : : playhead_forward_to_grid ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " playhead-backward-to-grid " , _ ( " Playhead to Previous Grid " ) , sigc : : mem_fun ( editor , & PublicEditor : : playhead_backward_to_grid ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " start-range-from-playhead " , _ ( " Start Range from Playhead " ) , sigc : : bind ( sigc : : mem_fun ( editor , & PublicEditor : : keyboard_selection_begin ) , Editing : : EDIT_IGNORE_MOUSE ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " finish-range-from-playhead " , _ ( " Finish Range from Playhead " ) , sigc : : bind ( sigc : : mem_fun ( editor , & PublicEditor : : keyboard_selection_finish ) , false , Editing : : EDIT_IGNORE_MOUSE ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " start-range " , _ ( " Start Range " ) , sigc : : bind ( sigc : : mem_fun ( editor , & PublicEditor : : keyboard_selection_begin ) , Editing : : EDIT_IGNORE_NONE ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " finish-range " , _ ( " Finish Range " ) , sigc : : bind ( sigc : : mem_fun ( editor , & PublicEditor : : keyboard_selection_finish ) , false , Editing : : EDIT_IGNORE_NONE ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " start-punch-range " , _ ( " Start Punch Range " ) , sigc : : mem_fun ( editor , & PublicEditor : : set_punch_start_from_edit_point ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " finish-punch-range " , _ ( " Finish Punch Range " ) , sigc : : mem_fun ( editor , & PublicEditor : : set_punch_end_from_edit_point ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " start-loop-range " , _ ( " Start Loop Range " ) , sigc : : mem_fun ( editor , & PublicEditor : : set_loop_start_from_edit_point ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " finish-loop-range " , _ ( " Finish Loop Range " ) , sigc : : mem_fun ( editor , & PublicEditor : : set_loop_end_from_edit_point ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " alt-start-range " , _ ( " Start Range " ) , sigc : : bind ( sigc : : mem_fun ( editor , & PublicEditor : : keyboard_selection_begin ) , Editing : : EDIT_IGNORE_NONE ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " alt-finish-range " , _ ( " Finish Range " ) , sigc : : bind ( sigc : : mem_fun ( editor , & PublicEditor : : keyboard_selection_finish ) , false , Editing : : EDIT_IGNORE_NONE ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2020-01-22 11:30:05 -05:00
act = ActionManager : : register_action ( common_actions , " select-all-visible-lanes " , _ ( " Select All Visible Lanes " ) , sigc : : mem_fun ( editor , & PublicEditor : : select_all_visible_lanes ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
2019-01-13 13:01:18 -05:00
act = ActionManager : : register_action ( common_actions , " select-all-tracks " , _ ( " Select All Tracks " ) , sigc : : mem_fun ( editor , & PublicEditor : : select_all_tracks ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " deselect-all " , _ ( " Deselect All " ) , sigc : : mem_fun ( editor , & PublicEditor : : deselect_all ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( common_actions , " invert-selection " , _ ( " Invert Selection " ) , sigc : : mem_fun ( editor , & PublicEditor : : invert_selection ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
act = ActionManager : : register_action ( transport_actions , X_ ( " solo-selection " ) , _ ( " Solo Selection " ) , sigc : : bind ( sigc : : mem_fun ( * editor , & PublicEditor : : play_solo_selection ) , true ) ) ;
ActionManager : : session_sensitive_actions . push_back ( act ) ;
ActionManager : : transport_sensitive_actions . push_back ( act ) ;
/* XXX */
ActionManager : : register_action ( common_actions , X_ ( " menu-show-preferences " ) , _ ( " Preferences " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : show_tabbable ) , rc_option_editor ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " hide-editor " ) , _ ( " Hide " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : hide_tabbable ) , editor ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " hide-mixer " ) , _ ( " Hide " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : hide_tabbable ) , mixer ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " hide-preferences " ) , _ ( " Hide " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : hide_tabbable ) , rc_option_editor ) ) ;
2020-10-26 17:55:00 -04:00
ActionManager : : register_action ( common_actions , X_ ( " hide-recorder " ) , _ ( " Hide " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : hide_tabbable ) , recorder ) ) ;
2021-11-08 20:27:38 -05:00
ActionManager : : register_action ( common_actions , X_ ( " hide-trigger " ) , _ ( " Hide " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : hide_tabbable ) , trigger_page ) ) ;
2019-01-13 13:01:18 -05:00
ActionManager : : register_action ( common_actions , X_ ( " attach-editor " ) , _ ( " Attach " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : attach_tabbable ) , editor ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " attach-mixer " ) , _ ( " Attach " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : attach_tabbable ) , mixer ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " attach-preferences " ) , _ ( " Attach " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : attach_tabbable ) , rc_option_editor ) ) ;
2020-10-26 17:55:00 -04:00
ActionManager : : register_action ( common_actions , X_ ( " attach-recorder " ) , _ ( " Attach " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : attach_tabbable ) , recorder ) ) ;
2021-11-08 20:27:38 -05:00
ActionManager : : register_action ( common_actions , X_ ( " attach-trigger " ) , _ ( " Attach " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : attach_tabbable ) , trigger_page ) ) ;
2019-01-13 13:01:18 -05:00
ActionManager : : register_action ( common_actions , X_ ( " detach-editor " ) , _ ( " Detach " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : detach_tabbable ) , editor ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " detach-mixer " ) , _ ( " Detach " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : detach_tabbable ) , mixer ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " detach-preferences " ) , _ ( " Detach " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : detach_tabbable ) , rc_option_editor ) ) ;
2020-10-26 17:55:00 -04:00
ActionManager : : register_action ( common_actions , X_ ( " detach-recorder " ) , _ ( " Detach " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : detach_tabbable ) , recorder ) ) ;
2021-11-08 20:27:38 -05:00
ActionManager : : register_action ( common_actions , X_ ( " detach-trigger " ) , _ ( " Detach " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : detach_tabbable ) , trigger_page ) ) ;
2019-01-13 13:01:18 -05:00
ActionManager : : register_action ( common_actions , X_ ( " show-editor " ) , _ ( " Show Editor " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : show_tabbable ) , editor ) ) ;
2020-10-26 17:55:00 -04:00
ActionManager : : register_action ( common_actions , X_ ( " show-mixer " ) , _ ( " Show Mixer " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : show_tabbable ) , mixer ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " show-preferences " ) , _ ( " Show " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : show_tabbable ) , rc_option_editor ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " show-recorder " ) , _ ( " Show Recorder " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : show_tabbable ) , recorder ) ) ;
2022-01-31 21:14:33 -05:00
ActionManager : : register_action ( common_actions , X_ ( " show-trigger " ) , _ ( " Show Cues " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : show_tabbable ) , trigger_page ) ) ;
2019-01-13 13:01:18 -05:00
/* These "change" actions are not intended to be used inside menus, but
are for the tab / window control buttons , which have somewhat odd
semantics .
*/
ActionManager : : register_action ( common_actions , X_ ( " change-editor-visibility " ) , _ ( " Change " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : button_change_tabbable_visibility ) , editor ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " change-mixer-visibility " ) , _ ( " Change " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : button_change_tabbable_visibility ) , mixer ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " change-preferences-visibility " ) , _ ( " Change " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : button_change_tabbable_visibility ) , rc_option_editor ) ) ;
2020-10-26 17:55:00 -04:00
ActionManager : : register_action ( common_actions , X_ ( " change-recorder-visibility " ) , _ ( " Change " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : button_change_tabbable_visibility ) , recorder ) ) ;
2021-11-08 20:27:38 -05:00
ActionManager : : register_action ( common_actions , X_ ( " change-trigger-visibility " ) , _ ( " Change " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : button_change_tabbable_visibility ) , trigger_page ) ) ;
2019-01-13 13:01:18 -05:00
/* These "change" actions are not intended to be used inside menus, but
are for the tab / window control key bindings , which have somewhat odd
semantics .
*/
ActionManager : : register_action ( common_actions , X_ ( " key-change-editor-visibility " ) , _ ( " Change " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : key_change_tabbable_visibility ) , editor ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " key-change-mixer-visibility " ) , _ ( " Change " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : key_change_tabbable_visibility ) , mixer ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " key-change-preferences-visibility " ) , _ ( " Change " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : key_change_tabbable_visibility ) , rc_option_editor ) ) ;
2020-10-26 17:55:00 -04:00
ActionManager : : register_action ( common_actions , X_ ( " key-change-recorder-visibility " ) , _ ( " Change " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : key_change_tabbable_visibility ) , recorder ) ) ;
2021-11-08 20:27:38 -05:00
ActionManager : : register_action ( common_actions , X_ ( " key-change-trigger-visibility " ) , _ ( " Change " ) , sigc : : bind ( sigc : : mem_fun ( * this , & ARDOUR_UI : : key_change_tabbable_visibility ) , trigger_page ) ) ;
2019-01-13 13:01:18 -05:00
ActionManager : : register_action ( common_actions , X_ ( " previous-tab " ) , _ ( " Previous Tab " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : step_up_through_tabs ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " next-tab " ) , _ ( " Next Tab " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : step_down_through_tabs ) ) ;
ActionManager : : register_action ( common_actions , X_ ( " toggle-editor-and-mixer " ) , _ ( " Toggle Editor & Mixer " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_editor_and_mixer ) ) ;
/* windows visibility actions */
ActionManager : : register_toggle_action ( common_actions , X_ ( " ToggleMaximalEditor " ) , _ ( " Maximise Editor Space " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_editing_space ) ) ;
ActionManager : : register_toggle_action ( common_actions , X_ ( " ToggleMaximalMixer " ) , _ ( " Maximise Mixer Space " ) , sigc : : mem_fun ( * this , & ARDOUR_UI : : toggle_mixer_space ) ) ;
}
2005-10-10 16:38:53 -04:00
void
ARDOUR_UI : : build_menu_bar ( )
{
2005-11-25 19:06:46 -05:00
menu_bar = dynamic_cast < MenuBar * > ( ActionManager : : get_widget ( X_ ( " /Main " ) ) ) ;
2018-02-16 17:50:49 -05:00
menu_bar - > set_name ( " MainMenuBar " ) ;
2005-09-25 14:42:24 -04:00
2011-10-23 17:31:28 -04:00
EventBox * ev = manage ( new EventBox ) ;
2018-02-19 10:50:30 -05:00
ev - > set_name ( " MainMenuBar " ) ;
2011-10-23 17:31:28 -04:00
ev - > show ( ) ;
2018-02-19 09:05:55 -05:00
2020-03-29 18:37:49 -04:00
EventBox * ev_dsp = manage ( new EventBox ) ;
EventBox * ev_path = manage ( new EventBox ) ;
2020-11-11 10:29:29 -05:00
EventBox * ev_name = manage ( new EventBox ) ;
2020-03-29 19:40:47 -04:00
EventBox * ev_audio = manage ( new EventBox ) ;
2020-03-29 19:09:00 -04:00
EventBox * ev_format = manage ( new EventBox ) ;
EventBox * ev_timecode = manage ( new EventBox ) ;
2020-03-29 18:37:49 -04:00
2021-03-08 19:37:54 -05:00
ev_dsp - > set_name ( " MainMenuBar " ) ;
ev_path - > set_name ( " MainMenuBar " ) ;
ev_name - > set_name ( " MainMenuBar " ) ;
ev_audio - > set_name ( " MainMenuBar " ) ;
ev_format - > set_name ( " MainMenuBar " ) ;
ev_timecode - > set_name ( " MainMenuBar " ) ;
2018-02-19 09:05:55 -05:00
Gtk : : HBox * hbox = manage ( new Gtk : : HBox ) ;
2011-10-23 17:31:28 -04:00
hbox - > show ( ) ;
2018-02-15 18:31:37 -05:00
hbox - > set_border_width ( 2 ) ;
ev - > add ( * hbox ) ;
2011-10-23 17:31:28 -04:00
2005-09-25 14:42:24 -04:00
wall_clock_label . set_name ( " WallClock " ) ;
2011-12-07 08:57:45 -05:00
wall_clock_label . set_use_markup ( ) ;
2024-03-07 08:29:22 -05:00
timecode_format_label . set_name ( " Timecode " ) ;
2012-10-12 12:25:57 -04:00
timecode_format_label . set_use_markup ( ) ;
2015-09-15 11:46:48 -04:00
peak_thread_work_label . set_name ( " PeakThreadWork " ) ;
peak_thread_work_label . set_use_markup ( ) ;
2005-09-25 14:42:24 -04:00
sample_rate_label . set_name ( " SampleRate " ) ;
2011-10-22 20:15:35 -04:00
sample_rate_label . set_use_markup ( ) ;
2011-07-02 20:45:15 -04:00
format_label . set_name ( " Format " ) ;
2020-03-29 18:14:25 -04:00
session_path_label . set_name ( " Path " ) ;
2020-10-01 12:27:59 -04:00
snapshot_name_label . set_name ( " Name " ) ;
2011-10-22 20:15:35 -04:00
format_label . set_use_markup ( ) ;
2011-07-02 20:45:15 -04:00
2020-03-29 18:37:49 -04:00
ev_dsp - > add ( dsp_load_label ) ;
ev_path - > add ( session_path_label ) ;
2020-11-11 10:29:29 -05:00
ev_name - > add ( snapshot_name_label ) ;
2020-03-29 19:40:47 -04:00
ev_audio - > add ( sample_rate_label ) ;
2020-03-29 19:09:00 -04:00
ev_format - > add ( format_label ) ;
ev_timecode - > add ( timecode_format_label ) ;
ev_dsp - > show ( ) ;
ev_path - > show ( ) ;
2020-03-29 19:40:47 -04:00
ev_audio - > show ( ) ;
2020-03-29 19:09:00 -04:00
ev_format - > show ( ) ;
ev_timecode - > show ( ) ;
2020-03-29 18:37:49 -04:00
2018-02-15 17:32:37 -05:00
# ifdef __APPLE__
2007-10-11 18:07:47 -04:00
use_menubar_as_top_menubar ( ) ;
2018-02-14 16:42:36 -05:00
# else
menu_hbox . pack_start ( * menu_bar , false , false ) ;
2007-10-11 18:07:47 -04:00
# endif
2015-03-14 12:28:20 -04:00
hbox - > pack_end ( error_alert_button , false , false , 2 ) ;
2020-03-29 17:54:56 -04:00
hbox - > pack_end ( wall_clock_label , false , false , 10 ) ;
2020-03-29 12:56:08 -04:00
2020-03-29 18:37:49 -04:00
hbox - > pack_end ( * ev_dsp , false , false , 6 ) ;
2020-03-29 12:56:08 -04:00
hbox - > pack_end ( disk_space_label , false , false , 6 ) ;
2020-03-29 19:40:47 -04:00
hbox - > pack_end ( * ev_audio , false , false , 6 ) ;
2020-03-29 19:09:00 -04:00
hbox - > pack_end ( * ev_timecode , false , false , 6 ) ;
hbox - > pack_end ( * ev_format , false , false , 6 ) ;
2020-03-29 12:56:08 -04:00
hbox - > pack_end ( peak_thread_work_label , false , false , 6 ) ;
2020-11-11 10:29:29 -05:00
hbox - > pack_end ( * ev_name , false , false , 6 ) ;
2020-03-29 18:37:49 -04:00
hbox - > pack_end ( * ev_path , false , false , 6 ) ;
2007-10-11 18:07:47 -04:00
2018-02-19 09:05:55 -05:00
menu_hbox . pack_end ( * ev , true , true , 2 ) ;
2005-09-25 14:42:24 -04:00
2018-02-16 17:50:49 -05:00
menu_bar_base . set_name ( " MainMenuBar " ) ;
2005-09-25 14:42:24 -04:00
menu_bar_base . add ( menu_hbox ) ;
2011-10-23 17:31:28 -04:00
2020-03-29 18:14:25 -04:00
_status_bar_visibility . add ( & session_path_label , X_ ( " Path " ) , _ ( " Path to Session " ) , false ) ;
2020-10-01 12:27:59 -04:00
_status_bar_visibility . add ( & snapshot_name_label , X_ ( " Name " ) , _ ( " Snapshot Name and Modified Indicator " ) , false ) ;
2015-09-15 11:46:48 -04:00
_status_bar_visibility . add ( & peak_thread_work_label , X_ ( " Peakfile " ) , _ ( " Active Peak-file Work " ) , false ) ;
2018-02-16 16:09:28 -05:00
_status_bar_visibility . add ( & format_label , X_ ( " Format " ) , _ ( " File Format " ) , false ) ;
_status_bar_visibility . add ( & timecode_format_label , X_ ( " TCFormat " ) , _ ( " Timecode Format " ) , false ) ;
2013-09-17 22:25:21 -04:00
_status_bar_visibility . add ( & sample_rate_label , X_ ( " Audio " ) , _ ( " Audio " ) , true ) ;
2018-02-20 06:15:29 -05:00
_status_bar_visibility . add ( & disk_space_label , X_ ( " Disk " ) , _ ( " Disk Space " ) , ! Profile - > get_small_screen ( ) ) ;
_status_bar_visibility . add ( & dsp_load_label , X_ ( " DSP " ) , _ ( " DSP " ) , true ) ;
2020-03-29 13:06:18 -04:00
# ifndef __APPLE__
// OSX provides its own wallclock, thank you very much
_status_bar_visibility . add ( & wall_clock_label , X_ ( " WallClock " ) , _ ( " Wall Clock " ) , false ) ;
# endif
2011-10-23 17:31:28 -04:00
2011-10-29 16:07:00 -04:00
ev - > signal_button_press_event ( ) . connect ( sigc : : mem_fun ( _status_bar_visibility , & VisibilityGroup : : button_press_event ) ) ;
2020-03-29 18:37:49 -04:00
2020-03-29 21:53:09 -04:00
ev_dsp - > signal_button_press_event ( ) . connect ( sigc : : mem_fun ( * this , & ARDOUR_UI : : xrun_button_press ) ) ;
2020-03-29 18:37:49 -04:00
ev_dsp - > signal_button_release_event ( ) . connect ( sigc : : mem_fun ( * this , & ARDOUR_UI : : xrun_button_release ) ) ;
ev_path - > signal_button_press_event ( ) . connect ( sigc : : mem_fun ( * this , & ARDOUR_UI : : path_button_press ) ) ;
2020-11-11 10:29:29 -05:00
ev_name - > signal_button_press_event ( ) . connect ( sigc : : mem_fun ( * this , & ARDOUR_UI : : path_button_press ) ) ;
2020-03-29 19:40:47 -04:00
ev_audio - > signal_button_press_event ( ) . connect ( sigc : : mem_fun ( * this , & ARDOUR_UI : : audio_button_press ) ) ;
2020-03-29 19:09:00 -04:00
ev_format - > signal_button_press_event ( ) . connect ( sigc : : mem_fun ( * this , & ARDOUR_UI : : format_button_press ) ) ;
ev_timecode - > signal_button_press_event ( ) . connect ( sigc : : mem_fun ( * this , & ARDOUR_UI : : timecode_button_press ) ) ;
2020-03-29 19:40:47 -04:00
ArdourWidgets : : set_tooltip ( session_path_label , _ ( " Double click to open session folder. " ) ) ;
2020-03-29 21:52:20 -04:00
ArdourWidgets : : set_tooltip ( format_label , _ ( " Double click to edit audio file format. " ) ) ;
2020-03-29 19:40:47 -04:00
ArdourWidgets : : set_tooltip ( timecode_format_label , _ ( " Double click to change timecode settings. " ) ) ;
ArdourWidgets : : set_tooltip ( sample_rate_label , _ ( " Double click to show audio/midi setup. " ) ) ;
2005-09-25 14:42:24 -04:00
}
2006-10-21 15:01:50 -04:00
2007-10-11 18:07:47 -04:00
void
ARDOUR_UI : : use_menubar_as_top_menubar ( )
{
2010-08-20 18:36:35 -04:00
Gtk : : Widget * widget ;
Application * app = Application : : instance ( ) ;
2017-07-01 12:42:24 -04:00
/* the addresses ("/ui/Main...") used below are based on the menu definitions in the menus file
*/
2013-05-08 11:43:33 -04:00
/* Quit will be taken care of separately */
2010-08-20 18:36:35 -04:00
if ( ( widget = ActionManager : : get_widget ( " /ui/Main/Session/Quit " ) ) ) {
widget - > hide ( ) ;
}
2013-05-08 10:47:45 -04:00
/* Put items for About and Preferences into App menu (the
* ardour . menus . in file does not list them for OS X )
*/
2010-08-20 18:36:35 -04:00
GtkApplicationMenuGroup * group = app - > add_app_menu_group ( ) ;
2013-05-08 11:43:33 -04:00
if ( ( widget = ActionManager : : get_widget ( " /ui/Main/Session/toggle-about " ) ) ) {
2010-08-20 18:36:35 -04:00
app - > add_app_menu_item ( group , dynamic_cast < MenuItem * > ( widget ) ) ;
2017-07-01 12:42:24 -04:00
}
2010-08-20 18:36:35 -04:00
2016-04-13 12:34:21 -04:00
if ( ( widget = ActionManager : : get_widget ( " /ui/Main/Edit/menu-show-preferences " ) ) ) {
2010-08-20 18:36:35 -04:00
app - > add_app_menu_item ( group , dynamic_cast < MenuItem * > ( widget ) ) ;
2017-07-01 12:42:24 -04:00
}
2010-08-20 18:36:35 -04:00
app - > set_menu_bar ( * menu_bar ) ;
2007-10-11 18:07:47 -04:00
}
2010-03-18 22:49:01 -04:00
void
ARDOUR_UI : : save_ardour_state ( )
{
2013-07-01 14:42:26 -04:00
if ( ! keyboard | | ! mixer | | ! editor | | ! meterbridge ) {
2010-03-18 22:49:01 -04:00
return ;
}
/* XXX this is all a bit dubious. add_extra_xml() uses
a different lifetime model from add_instant_xml ( ) .
*/
XMLNode * node = new XMLNode ( keyboard - > get_state ( ) ) ;
Config - > add_extra_xml ( * node ) ;
2010-11-25 15:37:39 -05:00
XMLNode * window_node = new XMLNode ( X_ ( " UI " ) ) ;
2016-08-28 19:12:35 -04:00
window_node - > set_property ( _status_bar_visibility . get_state_name ( ) . c_str ( ) , _status_bar_visibility . get_state_value ( ) ) ;
2010-03-18 22:49:01 -04:00
2015-07-09 19:22:06 -04:00
/* main window */
gint mx , my , mw , mh ;
_main_window . get_position ( mx , my ) ;
_main_window . get_size ( mw , mh ) ;
XMLNode main_window_node ( X_ ( " Main " ) ) ;
2016-08-28 19:12:35 -04:00
main_window_node . set_property ( X_ ( " x " ) , mx ) ;
main_window_node . set_property ( X_ ( " y " ) , my ) ;
main_window_node . set_property ( X_ ( " w " ) , mw ) ;
main_window_node . set_property ( X_ ( " h " ) , mh ) ;
2015-07-09 19:22:06 -04:00
2015-07-27 17:12:35 -04:00
string current_tab ;
int current_page_number = _tabs . get_current_page ( ) ;
2016-02-28 06:17:57 -05:00
if ( current_page_number = = _tabs . page_num ( editor - > contents ( ) ) ) {
2015-07-27 17:12:35 -04:00
current_tab = " editor " ;
2016-02-28 06:17:57 -05:00
} else if ( current_page_number = = _tabs . page_num ( mixer - > contents ( ) ) ) {
2015-07-27 17:12:35 -04:00
current_tab = " mixer " ;
2020-10-26 17:55:00 -04:00
} else if ( current_page_number = = _tabs . page_num ( recorder - > contents ( ) ) ) {
current_tab = " recorder " ;
2021-11-08 20:27:38 -05:00
} else if ( current_page_number = = _tabs . page_num ( trigger_page - > contents ( ) ) ) {
current_tab = " trigger " ;
2016-02-28 06:17:57 -05:00
} else if ( current_page_number = = _tabs . page_num ( rc_option_editor - > contents ( ) ) ) {
2016-05-15 08:45:34 -04:00
current_tab = " preferences " ;
2015-07-27 17:12:35 -04:00
}
2016-08-28 19:12:35 -04:00
main_window_node . set_property ( X_ ( " current-tab " ) , current_tab ) ;
2015-10-26 14:35:06 -04:00
2013-05-04 22:02:05 -04:00
/* Windows */
2013-05-07 22:09:16 -04:00
WM : : Manager : : instance ( ) . add_state ( * window_node ) ;
2011-06-01 13:00:29 -04:00
2010-11-25 15:37:39 -05:00
XMLNode * tearoff_node = new XMLNode ( X_ ( " Tearoffs " ) ) ;
2018-12-11 10:28:47 -05:00
XMLNode * t = new XMLNode ( X_ ( " monitor-section " ) ) ;
mixer - > monitor_section ( ) . tearoff ( ) . add_state ( * t ) ;
tearoff_node - > add_child_nocopy ( * t ) ;
2010-11-25 15:37:39 -05:00
window_node - > add_child_nocopy ( * tearoff_node ) ;
2010-03-18 22:49:01 -04:00
2015-07-09 12:40:51 -04:00
XMLNode & enode ( editor - > get_state ( ) ) ;
XMLNode & mnode ( mixer - > get_state ( ) ) ;
XMLNode & bnode ( meterbridge - > get_state ( ) ) ;
2016-07-13 16:38:08 -04:00
XMLNode & pnode ( rc_option_editor - > get_state ( ) ) ;
2020-10-26 17:55:00 -04:00
XMLNode & rnode ( recorder - > get_state ( ) ) ;
2021-11-08 20:27:38 -05:00
XMLNode & tnode ( trigger_page - > get_state ( ) ) ;
2015-07-09 12:40:51 -04:00
2022-10-10 15:03:07 -04:00
/* store clock modes */
XMLNode * cnode = new XMLNode ( X_ ( " ClockModes " ) ) ;
for ( auto const & i : AudioClock : : clocks ) {
XMLNode * child = new XMLNode ( X_ ( " Clock " ) ) ;
child - > set_property ( X_ ( " name " ) , i - > name ( ) ) ;
child - > set_property ( X_ ( " mode " ) , i - > mode ( ) ) ;
child - > set_property ( X_ ( " on " ) , i - > on ( ) ) ;
cnode - > add_child_nocopy ( * child ) ;
}
2010-11-25 15:37:39 -05:00
Config - > add_extra_xml ( * window_node ) ;
2013-09-22 19:22:56 -04:00
Config - > add_extra_xml ( audio_midi_setup - > get_state ( ) ) ;
2010-03-18 22:49:01 -04:00
Config - > save_state ( ) ;
2013-09-05 14:21:25 -04:00
2018-05-08 14:25:54 -04:00
mixer - > save_plugin_order_file ( ) ;
2015-01-02 09:44:54 -05:00
UIConfiguration : : instance ( ) . save_state ( ) ;
2010-03-18 22:49:01 -04:00
if ( _session ) {
2015-07-09 19:22:06 -04:00
_session - > add_instant_xml ( main_window_node ) ;
2010-03-18 22:49:01 -04:00
_session - > add_instant_xml ( enode ) ;
_session - > add_instant_xml ( mnode ) ;
2016-07-13 16:38:08 -04:00
_session - > add_instant_xml ( pnode ) ;
2013-06-23 10:05:52 -04:00
_session - > add_instant_xml ( bnode ) ;
2020-10-26 17:55:00 -04:00
_session - > add_instant_xml ( rnode ) ;
2021-11-08 20:27:38 -05:00
_session - > add_instant_xml ( tnode ) ;
2022-10-10 15:03:07 -04:00
_session - > add_instant_xml ( * cnode ) ;
2013-05-04 22:02:05 -04:00
if ( location_ui ) {
_session - > add_instant_xml ( location_ui - > ui ( ) . get_state ( ) ) ;
2011-11-23 19:05:00 -05:00
}
2019-10-20 14:53:40 -04:00
if ( virtual_keyboard_window ) {
2019-11-24 12:20:49 -05:00
XMLNode & vkstate ( virtual_keyboard_window - > get_state ( ) ) ;
vkstate . add_child_nocopy ( virtual_keyboard_window . get_state ( ) ) ;
_session - > add_instant_xml ( vkstate ) ;
2019-10-20 14:53:40 -04:00
}
2022-09-03 11:39:24 -04:00
}
/* save current Window settings and sizes for new sessions */
{
2015-07-09 19:22:06 -04:00
Config - > add_instant_xml ( main_window_node ) ;
2010-03-18 22:49:01 -04:00
Config - > add_instant_xml ( enode ) ;
Config - > add_instant_xml ( mnode ) ;
2016-07-13 16:38:08 -04:00
Config - > add_instant_xml ( pnode ) ;
2015-07-09 12:40:51 -04:00
Config - > add_instant_xml ( bnode ) ;
2020-10-26 17:55:00 -04:00
Config - > add_instant_xml ( rnode ) ;
2021-11-08 20:27:38 -05:00
Config - > add_instant_xml ( tnode ) ;
2022-10-10 15:03:07 -04:00
Config - > add_instant_xml ( * cnode ) ;
2013-05-04 22:02:05 -04:00
if ( location_ui ) {
Config - > add_instant_xml ( location_ui - > ui ( ) . get_state ( ) ) ;
2011-11-23 19:05:00 -05:00
}
2019-10-20 14:53:40 -04:00
if ( virtual_keyboard_window ) {
2019-11-24 12:20:49 -05:00
XMLNode & vkstate ( virtual_keyboard_window - > get_state ( ) ) ;
vkstate . add_child_nocopy ( virtual_keyboard_window . get_state ( ) ) ;
2021-09-08 16:07:37 -04:00
Config - > add_instant_xml ( vkstate ) ;
2019-10-20 14:53:40 -04:00
}
2010-03-18 22:49:01 -04:00
}
2016-07-13 16:38:08 -04:00
2014-09-10 20:34:09 -04:00
delete & enode ;
2016-07-13 16:38:08 -04:00
delete & mnode ;
delete & bnode ;
delete & pnode ;
2020-10-26 17:55:00 -04:00
delete & rnode ;
2021-11-08 20:27:38 -05:00
delete & tnode ;
2022-10-10 15:03:07 -04:00
delete cnode ;
2010-03-18 22:49:01 -04:00
Keyboard : : save_keybindings ( ) ;
}
2011-11-14 06:31:27 -05:00
void
2019-08-26 12:58:34 -04:00
ARDOUR_UI : : on_theme_changed ( )
2011-11-14 06:31:27 -05:00
{
2021-12-24 15:55:00 -05:00
ARDOUR : : set_global_ui_scale_factor ( UIConfiguration : : instance ( ) . get_ui_scale ( ) ) ;
2019-08-26 12:58:34 -04:00
LV2Plugin : : set_global_ui_background_color ( UIConfiguration : : instance ( ) . color ( " gtk_background " ) ) ;
LV2Plugin : : set_global_ui_foreground_color ( UIConfiguration : : instance ( ) . color ( " gtk_foreground " ) ) ;
2020-06-30 10:46:06 -04:00
LV2Plugin : : set_global_ui_contrasting_color ( UIConfiguration : : instance ( ) . color ( " theme:contrasting clock " ) ) ; // more contrast that "theme:contrasting"
2020-07-05 16:22:43 -04:00
LV2Plugin : : set_global_ui_style_boxy ( UIConfiguration : : instance ( ) . get_boxy_buttons ( ) ) ;
LV2Plugin : : set_global_ui_style_flat ( UIConfiguration : : instance ( ) . get_flat_buttons ( ) ) ;
2011-11-14 06:31:27 -05:00
}
2011-11-20 11:38:51 -05:00
void
ARDOUR_UI : : focus_on_clock ( )
{
2024-10-30 09:55:04 -04:00
// TODO: how do we handle detached windows? Use WindowManager?
if ( editor - > tabbed ( ) & & _tabs . get_current_page ( ) = = _tabs . page_num ( editor - > contents ( ) ) ) {
editor - > focus_on_clock ( ) ;
}
if ( mixer - > tabbed ( ) & & _tabs . get_current_page ( ) = = _tabs . page_num ( mixer - > contents ( ) ) ) {
mixer - > focus_on_clock ( ) ;
}
if ( recorder - > tabbed ( ) & & _tabs . get_current_page ( ) = = _tabs . page_num ( recorder - > contents ( ) ) ) {
recorder - > focus_on_clock ( ) ;
}
if ( trigger_page - > tabbed ( ) & & _tabs . get_current_page ( ) = = _tabs . page_num ( trigger_page - > contents ( ) ) ) {
trigger_page - > focus_on_clock ( ) ;
}
2011-11-20 11:38:51 -05:00
}
2015-04-29 09:45:04 -04:00
2020-03-29 21:53:09 -04:00
bool
ARDOUR_UI : : xrun_button_press ( GdkEventButton * ev )
{
if ( ev - > button ! = 1 | | ev - > type ! = GDK_2BUTTON_PRESS ) {
return false ;
}
if ( _session ) {
_session - > reset_xrun_count ( ) ;
update_cpu_load ( ) ;
}
return true ;
}
2015-04-29 09:45:04 -04:00
bool
ARDOUR_UI : : xrun_button_release ( GdkEventButton * ev )
{
2020-03-29 21:53:09 -04:00
if ( ev - > button ! = 1 | | ! Keyboard : : modifier_state_equals ( ev - > state , Keyboard : : TertiaryModifier ) ) {
2015-04-29 09:45:04 -04:00
return false ;
}
if ( _session ) {
_session - > reset_xrun_count ( ) ;
2018-02-20 06:15:29 -05:00
update_cpu_load ( ) ;
2015-04-29 09:45:04 -04:00
}
return true ;
}
2015-04-21 15:10:49 -04:00
2020-03-29 19:40:47 -04:00
bool
ARDOUR_UI : : audio_button_press ( GdkEventButton * ev )
{
if ( ev - > button ! = 1 | | ev - > type ! = GDK_2BUTTON_PRESS ) {
return false ;
}
audio_midi_setup - > present ( ) ;
return true ;
}
2020-03-29 18:37:49 -04:00
bool
ARDOUR_UI : : path_button_press ( GdkEventButton * ev )
{
if ( ev - > button ! = 1 | | ev - > type ! = GDK_2BUTTON_PRESS ) {
return false ;
}
if ( _session ) {
PBD : : open_folder ( _session - > path ( ) ) ;
}
return true ;
}
2015-04-21 15:10:49 -04:00
Gtk : : Notebook &
ARDOUR_UI : : tabs ( )
{
2015-07-07 22:12:21 -04:00
return _tabs ;
2015-04-21 15:10:49 -04:00
}
2015-11-24 10:12:07 -05:00
bool
ARDOUR_UI : : tabbable_visibility_button_press ( GdkEventButton * ev , string const & tabbable_name )
{
if ( ev - > button ! = 3 ) {
return false ;
}
/* context menu is defined in *.menus.in
*/
string menu_name = string ( " /ui/ " ) + tabbable_name + X_ ( " TabbableButtonMenu " ) ;
Gtk : : Menu * menu = dynamic_cast < Gtk : : Menu * > ( ActionManager : : get_widget ( menu_name . c_str ( ) ) ) ;
if ( menu ) {
2023-10-31 15:10:49 -04:00
menu - > popup ( ev - > button , ev - > time ) ;
2015-11-24 10:12:07 -05:00
}
return true ;
}