summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-01-09 23:24:54 +0000
committerDavid Robillard <d@drobilla.net>2007-01-09 23:24:54 +0000
commit532f6aad4ac79ca15d69deccd18fca90e444c437 (patch)
tree0d4ca5449af8eb48ad56e163efcab42c4656e8de /gtk2_ardour
parentef6b25432d9c46d71b08c0f7d5f2686df428c4e8 (diff)
Merged with trunk R1283.
NOTE: Compiles, but broken (crash on adding MIDI track). git-svn-id: svn://localhost/ardour2/branches/midi@1292 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/SConscript24
-rw-r--r--gtk2_ardour/about.cc2
-rw-r--r--gtk2_ardour/analysis_window.cc8
-rwxr-xr-xgtk2_ardour/ardbg2
-rwxr-xr-xgtk2_ardour/ardev2
-rwxr-xr-xgtk2_ardour/ardev_common.sh1
-rw-r--r--gtk2_ardour/ardev_common.sh.in16
-rw-r--r--gtk2_ardour/ardour.bindings405
-rw-r--r--gtk2_ardour/ardour.menus42
-rw-r--r--gtk2_ardour/ardour.sh.in6
-rw-r--r--gtk2_ardour/ardour2_ui.rc140
-rw-r--r--gtk2_ardour/ardour_ui.cc154
-rw-r--r--gtk2_ardour/ardour_ui.h27
-rw-r--r--gtk2_ardour/ardour_ui2.cc4
-rw-r--r--gtk2_ardour/ardour_ui_dependents.cc29
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc35
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc20
-rw-r--r--gtk2_ardour/ardour_ui_options.cc18
-rwxr-xr-xgtk2_ardour/arprof4
-rwxr-xr-xgtk2_ardour/arval2
-rw-r--r--gtk2_ardour/audio_clock.cc247
-rw-r--r--gtk2_ardour/audio_clock.h28
-rw-r--r--gtk2_ardour/audio_region_editor.cc18
-rw-r--r--gtk2_ardour/audio_region_view.cc41
-rw-r--r--gtk2_ardour/audio_region_view.h5
-rw-r--r--gtk2_ardour/audio_streamview.cc51
-rw-r--r--gtk2_ardour/audio_streamview.h6
-rw-r--r--gtk2_ardour/audio_time_axis.cc45
-rw-r--r--gtk2_ardour/audio_time_axis.h3
-rw-r--r--gtk2_ardour/automation_line.cc257
-rw-r--r--gtk2_ardour/automation_line.h12
-rw-r--r--gtk2_ardour/automation_time_axis.cc36
-rw-r--r--gtk2_ardour/automation_time_axis.h3
-rw-r--r--gtk2_ardour/canvas-waveview.c49
-rw-r--r--gtk2_ardour/canvas-waveview.h3
-rw-r--r--gtk2_ardour/crossfade_edit.cc4
-rw-r--r--gtk2_ardour/crossfade_view.cc4
-rw-r--r--gtk2_ardour/editor.cc248
-rw-r--r--gtk2_ardour/editor.h32
-rw-r--r--gtk2_ardour/editor_actions.cc204
-rw-r--r--gtk2_ardour/editor_audio_import.cc278
-rw-r--r--gtk2_ardour/editor_canvas.cc26
-rw-r--r--gtk2_ardour/editor_canvas_events.cc8
-rw-r--r--gtk2_ardour/editor_edit_groups.cc2
-rw-r--r--gtk2_ardour/editor_export_audio.cc2
-rw-r--r--gtk2_ardour/editor_imageframe.cc12
-rw-r--r--gtk2_ardour/editor_markers.cc124
-rw-r--r--gtk2_ardour/editor_mixer.cc7
-rw-r--r--gtk2_ardour/editor_mouse.cc122
-rw-r--r--gtk2_ardour/editor_ops.cc124
-rw-r--r--gtk2_ardour/editor_region_list.cc32
-rw-r--r--gtk2_ardour/editor_route_list.cc2
-rw-r--r--gtk2_ardour/editor_rulers.cc8
-rw-r--r--gtk2_ardour/editor_selection_list.cc8
-rw-r--r--gtk2_ardour/editor_timefx.cc2
-rw-r--r--gtk2_ardour/editor_xpms52
-rw-r--r--gtk2_ardour/enums.cc29
-rw-r--r--gtk2_ardour/enums.h7
-rw-r--r--gtk2_ardour/export_dialog.cc2
-rw-r--r--gtk2_ardour/fft_graph.cc4
-rw-r--r--gtk2_ardour/gain_meter.cc189
-rw-r--r--gtk2_ardour/gain_meter.h19
-rw-r--r--gtk2_ardour/icons/ardour_icon_16px.pngbin0 -> 630 bytes
-rw-r--r--gtk2_ardour/icons/ardour_icon_22px.pngbin0 -> 1025 bytes
-rw-r--r--gtk2_ardour/icons/ardour_icon_32px.pngbin0 -> 1759 bytes
-rw-r--r--gtk2_ardour/icons/ardour_icon_48px.pngbin0 -> 3135 bytes
-rw-r--r--gtk2_ardour/icons/fader_belt.pngbin0 -> 3854 bytes
-rw-r--r--gtk2_ardour/io_selector.cc5
-rw-r--r--gtk2_ardour/ladspa_pluginui.cc2
-rw-r--r--gtk2_ardour/location_ui.cc21
-rw-r--r--gtk2_ardour/logmeter.h4
-rw-r--r--gtk2_ardour/main.cc50
-rw-r--r--gtk2_ardour/meter_bridge.cc2
-rw-r--r--gtk2_ardour/mixer_strip.cc9
-rw-r--r--gtk2_ardour/mixer_strip.h1
-rw-r--r--gtk2_ardour/mixer_ui.cc13
-rw-r--r--gtk2_ardour/new_session_dialog.cc18
-rw-r--r--gtk2_ardour/option_editor.cc64
-rw-r--r--gtk2_ardour/option_editor.h5
-rw-r--r--gtk2_ardour/opts.cc12
-rw-r--r--gtk2_ardour/opts.h1
-rw-r--r--gtk2_ardour/panner.cc104
-rw-r--r--gtk2_ardour/panner.h18
-rw-r--r--gtk2_ardour/panner2d.cc2
-rw-r--r--gtk2_ardour/panner_ui.cc63
-rw-r--r--gtk2_ardour/panner_ui.h6
-rw-r--r--gtk2_ardour/pixmaps/SConscript2
-rw-r--r--gtk2_ardour/playlist_selection.h3
-rw-r--r--gtk2_ardour/playlist_selector.cc45
-rw-r--r--gtk2_ardour/playlist_selector.h11
-rw-r--r--gtk2_ardour/plugin_ui.cc1
-rw-r--r--gtk2_ardour/po/de_DE.po6009
-rw-r--r--gtk2_ardour/po/sv_SE.po119
-rw-r--r--gtk2_ardour/public_editor.h5
-rw-r--r--gtk2_ardour/redirect_box.cc156
-rw-r--r--gtk2_ardour/redirect_box.h24
-rw-r--r--gtk2_ardour/region_gain_line.cc4
-rw-r--r--gtk2_ardour/region_gain_line.h2
-rw-r--r--gtk2_ardour/region_view.cc2
-rw-r--r--gtk2_ardour/route_params_ui.cc4
-rw-r--r--gtk2_ardour/route_time_axis.cc133
-rw-r--r--gtk2_ardour/route_time_axis.h8
-rw-r--r--gtk2_ardour/route_ui.cc2
-rw-r--r--gtk2_ardour/selection.cc30
-rw-r--r--gtk2_ardour/selection.h16
-rw-r--r--gtk2_ardour/sfdb_ui.cc324
-rw-r--r--gtk2_ardour/sfdb_ui.h185
-rw-r--r--gtk2_ardour/time_axis_view.cc24
-rw-r--r--gtk2_ardour/time_axis_view.h17
-rw-r--r--gtk2_ardour/time_axis_view_item.cc2
-rw-r--r--gtk2_ardour/utils.cc127
-rw-r--r--gtk2_ardour/utils.h4
-rw-r--r--gtk2_ardour/visual_time_axis.cc6
-rw-r--r--gtk2_ardour/waveview.cc8
-rw-r--r--gtk2_ardour/waveview.h2
115 files changed, 6206 insertions, 4765 deletions
diff --git a/gtk2_ardour/SConscript b/gtk2_ardour/SConscript
index bf8e4f560e..dfd94ea5af 100644
--- a/gtk2_ardour/SConscript
+++ b/gtk2_ardour/SConscript
@@ -4,7 +4,7 @@ import os
import os.path
import glob
-Import('env install_prefix final_prefix config_prefix libraries i18n version')
+Import('env install_prefix final_prefix config_prefix libraries i18n ardour_version')
gtkardour = env.Copy()
gtkmmtests = env.Copy()
@@ -112,6 +112,7 @@ color_manager.cc
crossfade_edit.cc
crossfade_view.cc
curvetest.cc
+enums.cc
editing.cc
editor.cc
editor_actions.cc
@@ -169,6 +170,7 @@ new_session_dialog.cc
option_editor.cc
opts.cc
pan_automation_time_axis.cc
+panner.cc
panner2d.cc
panner_ui.cc
playlist_selector.cc
@@ -262,7 +264,7 @@ versionflag = '-DVERSIONSTRING=\\\"' + env['VERSION'] + '\\\"'
gtkardour.Append(CXXFLAGS=versionflag)
-executable = 'ardour.bin'
+executable = 'ardour-' + ardour_version
ardour = gtkardour.Program(target = executable, source = gtkardour_files + extra_sources)
ardourlib = gtkardour.SharedLibrary(target = 'ardourgtk', source = gtkardour_files + extra_sources)
@@ -274,14 +276,22 @@ tt = gtkmmtests.Program(target = 'tt', source = tt_files)
my_subst_dict = { }
my_subst_dict['%INSTALL_PREFIX%'] = final_prefix
+my_subst_dict['%LIBDIR%'] = env['LIBDIR']
+my_subst_dict['%VERSION%'] = ardour_version
ardoursh = env.SubstInFile ('ardour.sh','ardour.sh.in', SUBST_DICT = my_subst_dict);
env.AddPostAction (ardoursh, Chmod ('$TARGET', 0755))
+ardourdev = env.SubstInFile ('ardev_common.sh','ardev_common.sh.in', SUBST_DICT = my_subst_dict);
+env.AddPostAction (ardourdev, Chmod ('$TARGET', 0755))
+
+Default(ardourdev)
+Default(ardoursh)
+
if env['VST']:
Default(ardourlib)
# the library - into the library dir
- env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), ardourlib))
+ env.Alias('install', env.Install(os.path.join(install_prefix, env['LIBDIR'], 'ardour2'), ardourlib))
else:
if env['VERSIONED']:
@@ -292,7 +302,7 @@ else:
#install
# the executable - into the library dir
- env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), ardour))
+ env.Alias('install', env.Install(os.path.join(install_prefix, env['LIBDIR'], 'ardour2'), ardour))
# the script - into the bin dir
env.Alias('install', env.InstallAs(os.path.join(install_prefix, 'bin')+'/ardour2', ardoursh))
@@ -305,9 +315,9 @@ env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour.bindings'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour.colors'))
# data files
-env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour2'), 'splash.png'))
-env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour2/pixmaps'), pixmap_files))
-env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour2/icons'), icon_files))
+env.Alias('install', env.Install(os.path.join(install_prefix, 'share', 'ardour2'), 'splash.png'))
+env.Alias('install', env.Install(os.path.join(install_prefix, 'share', 'ardour2', 'pixmaps'), pixmap_files))
+env.Alias('install', env.Install(os.path.join(install_prefix, 'share', 'ardour2', 'icons'), icon_files))
env.Alias ('version', gtkardour.VersionBuild(['version.cc','version.h'], []))
diff --git a/gtk2_ardour/about.cc b/gtk2_ardour/about.cc
index 959830725e..34bb98199c 100644
--- a/gtk2_ardour/about.cc
+++ b/gtk2_ardour/about.cc
@@ -145,6 +145,8 @@ static const char* authors[] = {
N_("Stefan Kersten"),
N_("Christopher George"),
N_("Robert Jordens"),
+ N_("Brian Ahr"),
+ N_("Nimal Ratnayake"),
0
};
diff --git a/gtk2_ardour/analysis_window.cc b/gtk2_ardour/analysis_window.cc
index 163ac981b9..3752726c04 100644
--- a/gtk2_ardour/analysis_window.cc
+++ b/gtk2_ardour/analysis_window.cc
@@ -61,7 +61,7 @@ AnalysisWindow::AnalysisWindow()
tlmodel = Gtk::ListStore::create(tlcols);
track_list.set_model (tlmodel);
track_list.append_column(_("Track"), tlcols.trackname);
- track_list.append_column_editable(_("Visible"), tlcols.visible);
+ track_list.append_column_editable(_("Show"), tlcols.visible);
track_list.set_headers_visible(true);
track_list.set_reorderable(false);
track_list.get_selection()->set_mode (Gtk::SELECTION_NONE);
@@ -228,8 +228,8 @@ AnalysisWindow::analyze_data (Gtk::Button *button)
for (TrackSelection::iterator i = s.tracks.begin(); i != s.tracks.end(); ++i) {
- ARDOUR::AudioPlaylist *pl
- = dynamic_cast<ARDOUR::AudioPlaylist*>((*i)->playlist());
+ boost::shared_ptr<AudioPlaylist> pl
+ = boost::dynamic_pointer_cast<AudioPlaylist>((*i)->playlist());
if (!pl)
continue;
@@ -246,7 +246,7 @@ AnalysisWindow::analyze_data (Gtk::Button *button)
if (source_selection_ranges_rb.get_active()) {
// cerr << "Analyzing ranges on track " << *&rui->route().name() << endl;
- for (std::list<ARDOUR::AudioRange>::iterator j = ts.begin(); j != ts.end(); ++j) {
+ for (std::list<AudioRange>::iterator j = ts.begin(); j != ts.end(); ++j) {
nframes_t i = 0;
int n;
diff --git a/gtk2_ardour/ardbg b/gtk2_ardour/ardbg
index 933b5ba720..95466a42b8 100755
--- a/gtk2_ardour/ardbg
+++ b/gtk2_ardour/ardbg
@@ -1,4 +1,4 @@
#!/bin/sh
dir=`dirname "$0"`
. $dir/ardev_common.sh
-exec gdb gtk2_ardour/ardour.bin $*
+exec gdb $EXECUTABLE $*
diff --git a/gtk2_ardour/ardev b/gtk2_ardour/ardev
index 04719908b4..3b65b2ec79 100755
--- a/gtk2_ardour/ardev
+++ b/gtk2_ardour/ardev
@@ -1,3 +1,3 @@
#!/bin/sh
. `dirname "$0"`/ardev_common.sh
-exec gtk2_ardour/ardour.bin --novst $*
+exec $EXECUTABLE "$*"
diff --git a/gtk2_ardour/ardev_common.sh b/gtk2_ardour/ardev_common.sh
index d4109de8bb..3cef2254d2 100755
--- a/gtk2_ardour/ardev_common.sh
+++ b/gtk2_ardour/ardev_common.sh
@@ -13,3 +13,4 @@ export DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH
# For the internal clearlooks engine
export GTK_PATH=$PWD/libs/clearlooks:~/.ardour2
+EXECUTABLE=gtk2_ardour/ardour-2.0beta10
diff --git a/gtk2_ardour/ardev_common.sh.in b/gtk2_ardour/ardev_common.sh.in
new file mode 100644
index 0000000000..6017dcdba4
--- /dev/null
+++ b/gtk2_ardour/ardev_common.sh.in
@@ -0,0 +1,16 @@
+cd `dirname "$0"`/..
+
+#export G_DEBUG=fatal_criticals
+
+export ARDOUR_PATH=gtk2_ardour/icons:gtk2_ardour/pixmaps:gtk2_ardour
+export GTK_PATH=libs/clearlooks
+
+
+export LD_LIBRARY_PATH=libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/soundtouch:libs/gtkmm2ext:libs/sigc++2:libs/glibmm2:libs/gtkmm2/atk:libs/gtkmm2/pango:libs/gtkmm2/gdk:libs/gtkmm2/gtk:libs/libgnomecanvasmm:libs/libsndfile:libs/appleutility:$LD_LIBRARY_PATH
+
+# DYLD_LIBRARY_PATH is for darwin.
+export DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH
+# For the internal clearlooks engine
+export GTK_PATH=$PWD/libs/clearlooks:~/.ardour2
+
+EXECUTABLE=gtk2_ardour/ardour-%VERSION%
diff --git a/gtk2_ardour/ardour.bindings b/gtk2_ardour/ardour.bindings
index 5a0eb469b7..8d280b536d 100644
--- a/gtk2_ardour/ardour.bindings
+++ b/gtk2_ardour/ardour.bindings
@@ -1,114 +1,311 @@
-; this file is NOT an automated accelerator map dump
-
-(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
-(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<control>space")
-(gtk_accel_path "<Actions>/Transport/Forward" "<control>Right")
-(gtk_accel_path "<Actions>/Transport/Rewind" "<control>Left")
-(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
-(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
-(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
-
-(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "a")
-(gtk_accel_path "<Actions>/Editor/crop" "c")
-(gtk_accel_path "<Actions>/Editor/duplicate-region" "d")
-(gtk_accel_path "<Actions>/Editor/set-edit-cursor" "e")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
-(gtk_accel_path "<Actions>/Editor/split-region" "s")
-(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "v")
-(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
-(gtk_accel_path "<Actions>/Editor/insert-region" "i")
-(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")
-(gtk_accel_path "<Actions>/Transport/loop" "l")
-(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
+; ardour-2.0beta10 GtkAccelMap rc-file -*- scheme -*-
+; this file is an automated accelerator map dump
+;
+; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
+(gtk_accel_path "<Actions>/Common/Quit" "<Control>q")
+(gtk_accel_path "<Actions>/Common/Save" "<Control>s")
+; (gtk_accel_path "<Actions>/Editor/Pullup" "")
+; (gtk_accel_path "<Actions>/Editor/zoom-to-session" "")
+; (gtk_accel_path "<Actions>/JACK/JACKReconnect" "")
+; (gtk_accel_path "<Actions>/Editor/Autoconnect" "")
+; (gtk_accel_path "<Actions>/Editor/Edit" "")
+(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-end" "<Control>grave")
+; (gtk_accel_path "<Actions>/redirectmenu/copy" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffFaster" "")
+(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<Control>space")
+(gtk_accel_path "<Actions>/Transport/Record" "<Shift>r")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionLength" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffSlowest" "")
+; (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "")
+; (gtk_accel_path "<Actions>/redirectmenu/deactivate_all" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionPosition" "")
+; (gtk_accel_path "<Actions>/Editor/ZoomFocus" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffSlow" "")
+; (gtk_accel_path "<Actions>/RegionList/rlHide" "")
+; (gtk_accel_path "<Actions>/Main/Metering" "")
+(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-end" "<Control>Tab")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-playhead" "")
+; (gtk_accel_path "<Actions>/Editor/center-edit-cursor" "")
+; (gtk_accel_path "<Actions>/Editor/Monitoring" "")
+; (gtk_accel_path "<Actions>/redirectmenu/deactivate" "")
+; (gtk_accel_path "<Actions>/options/LatchedRecordEnable" "")
+; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
+; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsPercentage" "")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-start" "bracketleft")
+; (gtk_accel_path "<Actions>/Main/Close" "")
+; (gtk_accel_path "<Actions>/Main/New" "")
+(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<Control>KP_Subtract")
+; (gtk_accel_path "<Actions>/Editor/EditSelectRangeOptions" "")
+; (gtk_accel_path "<Actions>/Transport/ToggleTimeMaster" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-thirds" "")
+(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<Shift>a")
+; (gtk_accel_path "<Actions>/Main/Export" "")
+(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<Control>KP_Right")
+; (gtk_accel_path "<Actions>/Editor/Smpte30" "")
+; (gtk_accel_path "<Actions>/Editor/playhead-to-range-start" "")
+; (gtk_accel_path "<Actions>/Editor/Subframes" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte2997drop" "")
+; (gtk_accel_path "<Actions>/Main/AddTrackBus" "")
+(gtk_accel_path "<Actions>/Editor/align-regions-end" "<Control><Mod2>a")
+; (gtk_accel_path "<Actions>/JACK/JACKDisconnect" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffFast" "")
+; (gtk_accel_path "<Actions>/options/FileDataFormatFloat" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-region-end" "")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
+; (gtk_accel_path "<Actions>/options/StopRecordingOnXrun" "")
+; (gtk_accel_path "<Actions>/Editor/addExternalAudioToRegionList" "")
+; (gtk_accel_path "<Actions>/RegionList/SortDescending" "")
+; (gtk_accel_path "<Actions>/options/DoNotRunPluginsWhileRecording" "")
+; (gtk_accel_path "<Actions>/Editor/PullupNone" "")
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-range" "r")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-timefx" "t")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-zoom" "z")
-
-(gtk_accel_path "<Actions>/Transport/Record" "<shift>r")
-
-
+(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<Control>KP_Left")
+; (gtk_accel_path "<Actions>/Main/AudioFileFormatData" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffFastest" "")
+(gtk_accel_path "<Actions>/Editor/audition-at-mouse" "period")
+(gtk_accel_path "<Actions>/Transport/Forward" "<Control>Right")
+; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-seconds" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-frame" "")
+; (gtk_accel_path "<Actions>/Main/ExportSelection" "")
+; (gtk_accel_path "<Actions>/options/StopPluginsWithTransport" "")
+(gtk_accel_path "<Actions>/Editor/editor-paste" "<Control>v")
+(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
+; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-minutes" "")
+(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
(gtk_accel_path "<Actions>/Editor/nudge-forward" "KP_Add")
-(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<control>KP_Add")
+; (gtk_accel_path "<Actions>/Main/FlushWastebasket" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionEndinFile" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleMeasureVisibility" "")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-center" "")
(gtk_accel_path "<Actions>/Editor/nudge-backward" "KP_Subtract")
-(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<control>KP_Subtract")
-
-(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<shift>e")
-
-(gtk_accel_path "<Actions>/Common/goto-editor" "<alt>e")
-(gtk_accel_path "<Actions>/Common/goto-mixer" "<alt>m")
-(gtk_accel_path "<Actions>/Common/ToggleSoundFileBrowser" "<alt>f")
-(gtk_accel_path "<Actions>/Common/ToggleLocations" "<alt>l")
-(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<alt>b")
-(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<alt>c")
-
-(gtk_accel_path "<Actions>/Editor/editor-copy" "<control>c")
-(gtk_accel_path "<Actions>/Common/Quit" "<control>q")
-(gtk_accel_path "<Actions>/Editor/redo" "<control>r")
-(gtk_accel_path "<Actions>/Common/Save" "<control>s")
-(gtk_accel_path "<Actions>/Editor/editor-paste" "<control>v")
-(gtk_accel_path "<Actions>/Editor/editor-cut" "<control>x")
-(gtk_accel_path "<Actions>/Editor/editor-delete" "Delete")
-(gtk_accel_path "<Actions>/Editor/undo" "<control>z")
-
-(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
+; (gtk_accel_path "<Actions>/options/LatchedSolo" "")
+; (gtk_accel_path "<Actions>/options/MeterHoldOff" "")
+; (gtk_accel_path "<Actions>/options/OutputAutoConnectMaster" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency64" "")
+(gtk_accel_path "<Actions>/Editor/undo" "<Control>z")
+(gtk_accel_path "<Actions>/Editor/insert-region" "i")
+; (gtk_accel_path "<Actions>/Editor/center-playhead" "")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-start" "bracketright")
+; (gtk_accel_path "<Actions>/Snap/snap-to-region-start" "")
+; (gtk_accel_path "<Actions>/Editor/View" "")
+; (gtk_accel_path "<Actions>/Editor/Layering" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency4096" "")
(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
-(gtk_accel_path "<Actions>/Editor/scroll-backward" "leftarrow")
-(gtk_accel_path "<Actions>/Editor/scroll-forward" "rightarrow")
+(gtk_accel_path "<Actions>/Editor/set-edit-cursor" "e")
+; (gtk_accel_path "<Actions>/Editor/Smpte30drop" "")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-edit" "")
+(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-start" "grave")
+; (gtk_accel_path "<Actions>/Editor/EditCursorMovementOptions" "")
+; (gtk_accel_path "<Actions>/redirectmenu/activate_all" "")
+; (gtk_accel_path "<Actions>/Editor/addExternalAudioAsTapeTrack" "")
+; (gtk_accel_path "<Actions>/redirectmenu/paste" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte25" "")
+; (gtk_accel_path "<Actions>/Main/MeteringFallOffRate" "")
+; (gtk_accel_path "<Actions>/options/UseHardwareMonitoring" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte24" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-mark" "")
+; (gtk_accel_path "<Actions>/Editor/CrossfadesShort" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte5994" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency8192" "")
(gtk_accel_path "<Actions>/Editor/step-tracks-down" "downarrow")
-(gtk_accel_path "<Actions>/Editor/step-tracks-up" "uparrow")
-(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
+; (gtk_accel_path "<Actions>/Editor/toggle-xfades-visible" "")
+(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
+(gtk_accel_path "<Actions>/Editor/scroll-backward" "leftarrow")
+(gtk_accel_path "<Actions>/Editor/start-range" "<Control>KP_Down")
+; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsSemitones" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency128" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-beat" "")
+; (gtk_accel_path "<Actions>/Editor/RegionEditOps" "")
+; (gtk_accel_path "<Actions>/Editor/snap-magnetic" "")
+; (gtk_accel_path "<Actions>/Editor/playhead-to-range-end" "")
+(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "a")
+; (gtk_accel_path "<Actions>/Editor/EditSelectRegionOptions" "")
+(gtk_accel_path "<Actions>/Editor/crop" "c")
+; (gtk_accel_path "<Actions>/redirectmenu/newsend" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceSubMenu" "")
+; (gtk_accel_path "<Actions>/Editor/MeterFalloff" "")
+; (gtk_accel_path "<Actions>/RegionList/rlRemove" "")
+(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
+(gtk_accel_path "<Actions>/Editor/split-region" "s")
+; (gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-thirtyseconds" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-minutes" "")
+(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<Mod2>a")
+; (gtk_accel_path "<Actions>/Main/Windows" "")
+; (gtk_accel_path "<Actions>/Main/CleanupUnused" "")
+; (gtk_accel_path "<Actions>/redirectmenu/deselectall" "")
+; (gtk_accel_path "<Actions>/options/SoloViaBus" "")
+(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-zoom" "z")
+; (gtk_accel_path "<Actions>/RegionList/rlAudition" "")
+(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "v")
+; (gtk_accel_path "<Actions>/Editor/PullupPlus4Plus1" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-region-boundary" "")
+; (gtk_accel_path "<Actions>/JACK/JACK" "")
+(gtk_accel_path "<Actions>/Editor/editor-cut" "<Control>x")
+; (gtk_accel_path "<Actions>/RegionList/SortAscending" "")
+; (gtk_accel_path "<Actions>/Main/Help" "")
+; (gtk_accel_path "<Actions>/options/UseExternalMonitoring" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte23976" "")
+(gtk_accel_path "<Actions>/Common/goto-editor" "<Alt>e")
+(gtk_accel_path "<Actions>/Editor/select-all" "<Control>a")
+(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<Control>KP_Add")
+; (gtk_accel_path "<Actions>/Snap/snap-to-eighths" "")
+(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<Shift><Control>p")
+(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F11")
+; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileLength" "")
+; (gtk_accel_path "<Actions>/Editor/Timecode" "")
+; (gtk_accel_path "<Actions>/Transport/PlaySelection" "")
+; (gtk_accel_path "<Actions>/Editor/PullupMinus4Minus1" "")
+(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<Shift><Control>e")
+; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileName" "")
+(gtk_accel_path "<Actions>/Editor/finish-range" "<Control>KP_Up")
+(gtk_accel_path "<Actions>/Transport/Loop" "l")
+; (gtk_accel_path "<Actions>/Editor/CrossfadesFull" "")
+(gtk_accel_path "<Actions>/Editor/finish-add-range" "<Shift><Control>KP_Up")
+; (gtk_accel_path "<Actions>/Transport/ToggleClick" "")
+; (gtk_accel_path "<Actions>/options/SendMTC" "")
+; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
+(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<Control>l")
+(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<Shift>e")
+; (gtk_accel_path "<Actions>/options/SoloInPlace" "")
+; (gtk_accel_path "<Actions>/Main/Options" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffMedium" "")
+(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
+; (gtk_accel_path "<Actions>/Main/SaveTemplate" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionStartinFile" "")
+; (gtk_accel_path "<Actions>/options/GainReduceFastTransport" "")
+; (gtk_accel_path "<Actions>/Common/ToggleInspector" "")
+; (gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "")
+; (gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "")
(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<Alt>Return")
-
+; (gtk_accel_path "<Actions>/Editor/LayerMoveAddHigher" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte60" "")
+; (gtk_accel_path "<Actions>/Main/Open" "")
+(gtk_accel_path "<Actions>/Editor/scroll-forward" "rightarrow")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-left" "")
+; (gtk_accel_path "<Actions>/Main/TransportOptions" "")
+; (gtk_accel_path "<Actions>/Main/ControlSurfaces" "")
+; (gtk_accel_path "<Actions>/options/FileHeaderFormatBWF" "")
+; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte2997" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleWaveformVisibility" "")
+(gtk_accel_path "<Actions>/Editor/redo" "<Control>r")
+; (gtk_accel_path "<Actions>/Editor/addExternalAudioAsRegion" "")
+; (gtk_accel_path "<Actions>/Main/ExportSession" "")
+; (gtk_accel_path "<Actions>/options/InputAutoConnectPhysical" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-edit-cursor" "")
(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "minus")
-(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "equal")
-
-(gtk_accel_path "<Actions>/Editor/select-all" "<control>a")
-(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<shift><Control>e")
-(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<control>e")
-(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<shift><Control>p")
-(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<control>p")
-(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "u")
-(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<Control>d")
-(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<Control>l")
-
+; (gtk_accel_path "<Actions>/JACK/Latency" "")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "F2")
+; (gtk_accel_path "<Actions>/redirectmenu/rename" "")
+; (gtk_accel_path "<Actions>/RegionList/rlShowAuto" "")
+(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<Control>p")
+; (gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "")
+; (gtk_accel_path "<Actions>/Main/Session" "")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "F1")
+; (gtk_accel_path "<Actions>/Main/AudioFileFormat" "")
+(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-timefx" "t")
+; (gtk_accel_path "<Actions>/Transport/Transport" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionName" "")
+; (gtk_accel_path "<Actions>/Main/KeyMouse Actions" "")
+(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
+; (gtk_accel_path "<Actions>/Snap/snap-to-frame" "")
+; (gtk_accel_path "<Actions>/Editor/SnapTo" "")
+; (gtk_accel_path "<Actions>/Editor/Crossfades" "")
+; (gtk_accel_path "<Actions>/Editor/PullupPlus4" "")
+(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "KP_Enter")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-end" "<Control>bracketleft")
+; (gtk_accel_path "<Actions>/Main/MeteringHoldTime" "")
+; (gtk_accel_path "<Actions>/Editor/PullupPlus1" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte24976" "")
+; (gtk_accel_path "<Actions>/options/FileDataFormat24bit" "")
+; (gtk_accel_path "<Actions>/Editor/SnapMode" "")
+(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<Control>o")
+; (gtk_accel_path "<Actions>/Editor/PullupMinus4" "")
+(gtk_accel_path "<Actions>/Common/goto-mixer" "<Alt>m")
+; (gtk_accel_path "<Actions>/Editor/addExternalAudioToTrack" "")
+; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileCreationDate" "")
+; (gtk_accel_path "<Actions>/redirectmenu/activate" "")
(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
-(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
-
-(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<mod2>a")
-(gtk_accel_path "<Actions>/Editor/align-regions-end" "<mod2><control>a")
-(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<shift>a")
-
-(gtk_accel_path "<Actions>/Editor/brush-at-mouse" "<control>b")
-(gtk_accel_path "<Actions>/Editor/audition-at-mouse" "period")
-
+; (gtk_accel_path "<Actions>/Editor/PullupMinus1" "")
+; (gtk_accel_path "<Actions>/Editor/snap-normal" "")
+; (gtk_accel_path "<Actions>/Editor/addExternalAudioAsTrack" "")
+(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<Alt>b")
+; (gtk_accel_path "<Actions>/Snap/snap-to-asixteenthbeat" "")
+(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<Control>d")
+; (gtk_accel_path "<Actions>/redirectmenu/edit" "")
+(gtk_accel_path "<Actions>/Editor/duplicate-region" "d")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency2048" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleWaveformsWhileRecording" "")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-right" "")
+(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<Control>Delete")
+; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE" "")
+(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
+(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
+; (gtk_accel_path "<Actions>/redirectmenu/cut" "")
+; (gtk_accel_path "<Actions>/redirectmenu/newinsert" "")
+; (gtk_accel_path "<Actions>/options/UseMMC" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffOff" "")
+(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")
+; (gtk_accel_path "<Actions>/Editor/PullupMinus4Plus1" "")
+; (gtk_accel_path "<Actions>/Editor/MeterHold" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-cd-frame" "")
+; (gtk_accel_path "<Actions>/options/StopTransportAtEndOfSession" "")
+; (gtk_accel_path "<Actions>/Main/Cleanup" "")
+; (gtk_accel_path "<Actions>/Main/Snapshot" "")
+; (gtk_accel_path "<Actions>/Transport/ToggleVideoSync" "")
+(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
+; (gtk_accel_path "<Actions>/RegionList/SortBySourceFilesystem" "")
+(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<Alt>c")
+; (gtk_accel_path "<Actions>/Common/About" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency32" "")
+(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
+; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE64" "")
+(gtk_accel_path "<Actions>/Editor/brush-at-mouse" "<Control>b")
+; (gtk_accel_path "<Actions>/RegionList/rlShowAll" "")
+(gtk_accel_path "<Actions>/Transport/Rewind" "<Control>Left")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionTimestamp" "")
+; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
+; (gtk_accel_path "<Actions>/options/OutputAutoConnectPhysical" "")
+(gtk_accel_path "<Actions>/Editor/step-tracks-up" "uparrow")
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-start" "Tab")
-(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-end" "<Control>Tab")
-
-(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-start" "grave")
-(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-end" "<control>grave")
-
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-start" "bracketleft")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-end" "<Control>bracketleft")
-
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-start" "bracketright")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-end" "<Control>bracketright")
-
+; (gtk_accel_path "<Actions>/options/SendMMC" "")
+; (gtk_accel_path "<Actions>/Editor/toggle-auto-xfades" "")
+; (gtk_accel_path "<Actions>/Main/AudioFileFormatHeader" "")
+; (gtk_accel_path "<Actions>/options/MeterHoldShort" "")
+; (gtk_accel_path "<Actions>/options/MeterHoldMedium" "")
+(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<Control>e")
+; (gtk_accel_path "<Actions>/Editor/Subframes80" "")
+; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
+(gtk_accel_path "<Actions>/Common/ToggleLocations" "<Alt>l")
+; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurface" "")
+(gtk_accel_path "<Actions>/Editor/editor-delete" "Delete")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
+(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "u")
+; (gtk_accel_path "<Actions>/Editor/LayerAddHigher" "")
+; (gtk_accel_path "<Actions>/Editor/Solo" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency1024" "")
+; (gtk_accel_path "<Actions>/Main/ExportRangeMarkers" "")
+(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
+; (gtk_accel_path "<Actions>/Editor/toggle-xfades-active" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-bar" "")
+; (gtk_accel_path "<Actions>/Editor/LayerLaterHigher" "")
+; (gtk_accel_path "<Actions>/redirectmenu/selectall" "")
+(gtk_accel_path "<Actions>/Editor/editor-copy" "<Control>c")
+; (gtk_accel_path "<Actions>/Snap/snap-to-quarters" "")
+(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "equal")
+; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
+; (gtk_accel_path "<Actions>/Editor/Subframes100" "")
+(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
+; (gtk_accel_path "<Actions>/options/OutputAutoConnectManual" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-region-sync" "")
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
-
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "F1")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "F2")
-(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F11")
-
-(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<control>KP_Right")
-(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<control>KP_Left")
-
-(gtk_accel_path "<Actions>/Editor/start-range" "<control>KP_Down")
-(gtk_accel_path "<Actions>/Editor/finish-range" "<control>KP_Up")
-(gtk_accel_path "<Actions>/Editor/finish-add-range" "<shift><control>KP_Up")
-
-
-(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "KP_Enter")
-
-
+; (gtk_accel_path "<Actions>/redirectmenu/clear" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceFeedback" "")
+; (gtk_accel_path "<Actions>/Editor/PullupPlus4Minus1" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency512" "")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-end" "<Control>bracketright")
+; (gtk_accel_path "<Actions>/Main/Recent" "")
+; (gtk_accel_path "<Actions>/redirectmenu/newplugin" "")
+; (gtk_accel_path "<Actions>/options/InputAutoConnectManual" "")
+; (gtk_accel_path "<Actions>/options/MeterHoldLong" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-seconds" "")
diff --git a/gtk2_ardour/ardour.menus b/gtk2_ardour/ardour.menus
index 97441e5023..cf56e2ad9f 100644
--- a/gtk2_ardour/ardour.menus
+++ b/gtk2_ardour/ardour.menus
@@ -81,6 +81,7 @@
<menuitem action='editor-delete'/>
<menuitem action='editor-copy'/>
<menuitem action='editor-paste'/>
+ <menuitem action='remove-last-capture'/>
<separator/>
<menu action="EditSelectRangeOptions">
<menuitem action='extend-range-to-start-of-region'/>
@@ -122,6 +123,21 @@
<menuitem action="nudge-backward"/>
<menuitem action="nudge-next-backward"/>
</menu>
+ <menu name='KeyMouse Actions' action='KeyMouse Actions'>
+ <menuitem action='audition-at-mouse'/>
+ <menuitem action='brush-at-mouse'/>
+ <menuitem action='set-edit-cursor'/>
+ <menuitem action='mute-unmute-region'/>
+ <menuitem action='set-playhead'/>
+ <menuitem action='split-region'/>
+ <menuitem action='set-region-sync-position'/>
+ <separator/>
+ <menuitem action='set-mouse-mode-object'/>
+ <menuitem action='set-mouse-mode-range'/>
+ <menuitem action='set-mouse-mode-gain'/>
+ <menuitem action='set-mouse-mode-zoom'/>
+ <menuitem action='set-mouse-mode-timefx'/>
+ </menu>
</menu>
<menu name='View' action = 'View'>
<menu name='ZoomFocus' action='ZoomFocus'>
@@ -214,13 +230,11 @@
<menuitem action='goto-editor'/>
<menuitem action='goto-mixer'/>
<menuitem action='ToggleOptionsEditor'/>
- <menuitem action='ToggleSoundFileBrowser'/>
<menuitem action='ToggleInspector'/>
<menuitem action='ToggleLocations'/>
<menuitem action='ToggleColorManager'/>
<menuitem action='ToggleBigClock'/>
<separator/>
- <menuitem action='About'/>
</menu>
<menu name='Options' action='Options'>
<menu action='AudioFileFormat'>
@@ -240,10 +254,10 @@
<menuitem action='Smpte24'/>
<menuitem action='Smpte24976'/>
<menuitem action='Smpte25'/>
- <menuitem action='Smpte2997drop'/>
<menuitem action='Smpte2997'/>
- <menuitem action='Smpte30drop'/>
+ <menuitem action='Smpte2997drop'/>
<menuitem action='Smpte30'/>
+ <menuitem action='Smpte30drop'/>
<menuitem action='Smpte5994'/>
<menuitem action='Smpte60'/>
</menu>
@@ -258,6 +272,10 @@
<menuitem action='PullupMinus4'/>
<menuitem action='PullupMinus4Minus1'/>
</menu>
+ <menu action='Subframes'>
+ <menuitem action='Subframes80'/>
+ <menuitem action='Subframes100'/>
+ </menu>
<separator/>
<menu action='Autoconnect'>
<menuitem action='InputAutoConnectPhysical'/>
@@ -324,21 +342,7 @@
<separator/>
</menu>
<menu name='Help' action='Help'>
- <menu name='KeyMouse Actions' action='KeyMouse Actions'>
- <menuitem action='audition-at-mouse'/>
- <menuitem action='brush-at-mouse'/>
- <menuitem action='set-edit-cursor'/>
- <menuitem action='mute-unmute-region'/>
- <menuitem action='set-playhead'/>
- <menuitem action='split-region'/>
- <menuitem action='set-region-sync-position'/>
- <separator/>
- <menuitem action='set-mouse-mode-object'/>
- <menuitem action='set-mouse-mode-range'/>
- <menuitem action='set-mouse-mode-gain'/>
- <menuitem action='set-mouse-mode-zoom'/>
- <menuitem action='set-mouse-mode-timefx'/>
- </menu>
+ <menuitem action='About'/>
</menu>
</menubar>
diff --git a/gtk2_ardour/ardour.sh.in b/gtk2_ardour/ardour.sh.in
index 107321024b..1bf1ffa94b 100644
--- a/gtk2_ardour/ardour.sh.in
+++ b/gtk2_ardour/ardour.sh.in
@@ -1,11 +1,11 @@
#!/bin/sh
-export GTK_PATH=%INSTALL_PREFIX%/lib/ardour2:$GTK_PATH
+export GTK_PATH=%INSTALL_PREFIX%/%LIBDIR%/ardour2:$GTK_PATH
-export LD_LIBRARY_PATH=%INSTALL_PREFIX%/lib/ardour2:$LD_LIBRARY_PATH
+export LD_LIBRARY_PATH=%INSTALL_PREFIX%/%LIBDIR%/ardour2:$LD_LIBRARY_PATH
# DYLD_LIBRARY_PATH is for Darwin
export DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH
-exec %INSTALL_PREFIX%/lib/ardour2/ardour.bin $*
+exec %INSTALL_PREFIX%/%LIBDIR%/ardour2/ardour-%VERSION% $*
diff --git a/gtk2_ardour/ardour2_ui.rc b/gtk2_ardour/ardour2_ui.rc
index d015340868..249edddbf4 100644
--- a/gtk2_ardour/ardour2_ui.rc
+++ b/gtk2_ardour/ardour2_ui.rc
@@ -58,6 +58,11 @@ style "plugin_maker_text"
fg[NORMAL] = { 0.80, 0.80, 0.80 }
}
+style "automation_track_name"
+{
+ font_name = "sans italic 8"
+}
+
style "first_action_message"
{
font_name = "sans medium 34"
@@ -75,7 +80,7 @@ style "marker_text"
style "time_axis_view_item_name"
{
- font_name = "sans medium 8"
+ font_name = "sans 6"
}
style "default_base" = "medium_text"
@@ -137,8 +142,9 @@ style "transport_base" = "medium_bold_text"
bg[SELECTED] = { 0, 0, 0 }
}
/*
-style "black_mackie_menu_bar" = "medium_bold_text"
+style "black_mackie_menu_bar"
{
+ font_name = "sans bold 9"
fg[NORMAL] = { 1.0, 1.0, 1.0 }
bg[NORMAL] = { 0, 0, 0 }
}
@@ -190,6 +196,12 @@ style "track_rec_enable_button" = "small_button"
bg[PRELIGHT] = { 1.0, 0.0, 0.0 }
}
+style "gain_fader"
+{
+ bg[NORMAL] = { 0.269, 0.269, 0.300}
+ bg[ACTIVE] = { 0.152, 0.152, 0.168 }
+}
+
style "mixer_rec_enable_button" = "track_rec_enable_button"
{
font_name = "sans 7"
@@ -442,12 +454,17 @@ style "medium_bold_entry" = "medium_bold_text"
base[SELECTED] = { 0, 0, 0 }
}
-
style "small_entry" = "small_text"
{
fg[NORMAL] = { 0.70, 0.70, 0.70 }
- fg[ACTIVE] = { 0.70, 0.70, 0.70 }
+ fg[ACTIVE] = { 0, 1.0, 0 }
+ fg[SELECTED] = { 0, 1.0, 0 }
+ text[NORMAL] = { 0.70, 0.70, 0.70 }
+ text[ACTIVE] = { 0, 1.0, 0 }
+ text[SELECTED] = { 0, 1.0, 0 }
bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[SELECTED] = { 0.0, 0.0, 0.0 }
+ bg[SELECTED] = { 0.0, 0.0, 0.0 }
base[NORMAL] = { 0, 0, 0 }
base[ACTIVE] = { 0, 0, 0 }
base[SELECTED] = { 0, 0, 0 }
@@ -481,9 +498,25 @@ style "small_red_on_black_entry" = "small_bold_text"
bg[ACTIVE] = { 0.0, 0.0, 0.0 }
}
-style "big_clock_display" = "medium_entry"
+style "non_recording_big_clock_display" = "medium_entry"
+{
+ font_name = "sans 60"
+
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ fg[PRELIGHT] = { 1.0, 0, 0.0 }
+ fg[INSENSITIVE] = { 1.0, 0, 0.0 }
+
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.7, 0.0, 0.0 }
+}
+
+style "recording_big_clock_display" = "non_recording_big_clock_display"
{
- font_name = "courier bold 34"
+ fg[NORMAL] = { 1.0, 0, 0 }
}
style "transport_clock_display"
@@ -504,7 +537,7 @@ style "transport_clock_display"
style "tempo_meter_clock_display"
{
- font_name = "sans 8"
+ font_name = "sans 7"
fg[NORMAL] = { 1.0, 1.0, 1.0 }
fg[ACTIVE] = { 1.0, 1.0, 0.0 }
fg[SELECTED] = { 1.0, 0, 0 }
@@ -836,16 +869,16 @@ style "flashing_alert" = "very_small_text"
style "selected_io_selector_port_list" = "medium_bold_text"
{
- GtkTreeView::even-row-color = { 0.64, 0.68, 0.54 }
- GtkTreeView::odd-row-color = { 0.64, 0.68, 0.54 }
+ GtkTreeView::even-row-color = { 0, 0, 0 }
+ GtkTreeView::odd-row-color = { 0, 0, 0 }
# fg is used to color the fg (text) of the column header button
- fg[NORMAL] = { 0.80, 0.80, 0.70 }
- fg[SELECTED] = { 0.80, 0.80, 0.70 }
- fg[ACTIVE] = { 0.80, 0.80, 0.70 }
- fg[PRELIGHT] = { 0.80, 0.80, 0.70 }
- fg[INSENSITIVE] = { 0.80, 0.80, 0.70 }
+ fg[NORMAL] = { 0.85, 0.85, 0.85 }
+ fg[SELECTED] = { 0.85, 0.85, 0.85 }
+ fg[ACTIVE] = { 0.85, 0.85, 0.85 }
+ fg[PRELIGHT] = { 0.85, 0.85, 0.85 }
+ fg[INSENSITIVE] = { 0.85, 0.85, 0.85 }
# bg is used used to color the background of the column header button
@@ -857,29 +890,30 @@ style "selected_io_selector_port_list" = "medium_bold_text"
# text is used to color the treeview row text
- text[NORMAL] = { 0.80, 0.80, 0.70 }
- text[SELECTED] = { 0.80, 0.80, 0.70 }
+ text[NORMAL] = { 0.85, 0.85, 0.85 }
+ text[SELECTED] = { 0.85, 0.85, 0.85 }
# base is used to color a treeview with no rows
- base[NORMAL] = { 0.64, 0.68, 0.54 }
- base[ACTIVE] = { 0.64, 0.68, 0.54 }
- base[PRELIGHT] = { 0.64, 0.68, 0.54 }
- base[INSENSITIVE] = { 0.64, 0.68, 0.54 }
- base[SELECTED] = { 0.64, 0.68, 0.54 }
+ base[NORMAL] = { 0.20, 0.20, 0.25 }
+ base[ACTIVE] = { 0.20, 0.20, 0.25 }
+ base[PRELIGHT] = { 0.20, 0.20, 0.25 }
+ base[INSENSITIVE] = { 0.20, 0.20, 0.25 }
+ base[SELECTED] = { 0.20, 0.20, 0.25 }
}
style "io_selector_port_list" = "medium_text"
{
-
+ GtkTreeView::even-row-color = { 0.20, 0.20, 0.25 }
+ GtkTreeView::odd-row-color = { 0.20, 0.20, 0.25 }
# fg is used to color the fg (text) of the column header button
- fg[NORMAL] = { 0.80, 0.80, 0.70 }
- fg[SELECTED] = { 0.80, 0.80, 0.70 }
- fg[ACTIVE] = { 0.80, 0.80, 0.70 }
- fg[PRELIGHT] = { 0.80, 0.80, 0.70 }
- fg[INSENSITIVE] = { 0.80, 0.80, 0.70 }
+ fg[NORMAL] = { 0.70, 0.70, 0.70 }
+ fg[SELECTED] = { 0.70, 0.70, 0.70 }
+ fg[ACTIVE] = { 0.70, 0.70, 0.70 }
+ fg[PRELIGHT] = { 0.70, 0.70, 0.70 }
+ fg[INSENSITIVE] = { 0.70, 0.70, 0.70 }
# bg is used used to color the background of the column header button
@@ -891,16 +925,16 @@ style "io_selector_port_list" = "medium_text"
# text is used to color the treeview row text
- text[NORMAL] = { 0.80, 0.80, 0.70 }
- text[SELECTED] = { 0.80, 0.80, 0.70 }
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[SELECTED] = { 0.80, 0.80, 0.80 }
# base is used to color a treeview with no rows
- base[NORMAL] = { 0, 0, 0 }
- base[ACTIVE] = { 0, 0, 0 }
- base[PRELIGHT] = { 0, 0, 0 }
- base[INSENSITIVE] = { 0, 0, 0 }
- base[SELECTED] = { 0, 0, 0 }
+ base[NORMAL] = { 0.20, 0.20, 0.25 }
+ base[ACTIVE] = { 0.20, 0.20, 0.25 }
+ base[PRELIGHT] = { 0.20, 0.20, 0.25 }
+ base[INSENSITIVE] = { 0.20, 0.20, 0.25 }
+ base[SELECTED] = { 0.20, 0.20, 0.25 }
}
style "io_selector_notebook" = "default_base"
@@ -937,15 +971,15 @@ style "pan_slider"
{
font_name = "sans 8"
- fg[NORMAL] = { 0.67, 0.23, 0.22 }
- fg[ACTIVE] = { 0.67, 0.23, 0.22 }
- fg[INSENSITIVE] = {0.32, 0.39, 0.45 } # matches default_base
+ fg[NORMAL] = { 0.22, 0.73, 0.22 }
+ fg[ACTIVE] = { 0.22, 0.73, 0.22 }
+ fg[INSENSITIVE] = {0.22, 0.53, 0.22 }
fg[SELECTED] = { 0.67, 0.23, 0.22 }
fg[PRELIGHT] = { 0.67, 0.23, 0.22 }
- bg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.05, 0.05, 0.05 }
bg[ACTIVE] = { 0, 0, 0 }
- bg[INSENSITIVE] = {0.32, 0.39, 0.45 } # matches default_base
+ bg[INSENSITIVE] = {0.12, 0.19, 0.25 }
bg[SELECTED] = { 0, 0, 0 }
bg[PRELIGHT] = { 0, 0, 0 }
@@ -954,6 +988,15 @@ style "pan_slider"
text[INSENSITIVE] = { 0.70, 0.70, 0.70 }
text[SELECTED] = { 0.70, 0.70, 0.70 }
text[PRELIGHT] = { 0.70, 0.70, 0.70 }
+
+ # used to draw the triangular indicators
+
+ base[NORMAL] = { 0.80, 0.80, 0.80 }
+ base[ACTIVE] = { 0.80, 0.80, 0.80 }
+ base[INSENSITIVE] = {0.6, 0.6, 0.6 }
+ base[SELECTED] = { 0.80, 0.80, 0.80 }
+ base[PRELIGHT] = { 0.80, 0.80, 0.80 }
+
}
style "region_list_whole_file"
@@ -971,7 +1014,7 @@ style "ardour_button" ="default_buttons_menus"
widget "*FirstActionMessage" style "first_action_message"
widget "*VerboseCanvasCursor" style "verbose_canvas_cursor"
widget "*MarkerText" style "marker_text"
-widget "*TimeAxisViewItemName" style "time_axis_view_item_name"
+widget "*TimeAxisViewItemName*" style "time_axis_view_item_name"
#widget "*ExportProgress" style "default_buttons_menus"
widget "*ExportFileLabel" style "small_bold_text"
widget "*ExportFormatLabel" style "medium_bold_text"
@@ -1073,11 +1116,16 @@ widget "*ErrorMessage" style "error_message"
widget "*FatalMessage" style "fatal_message"
widget "*InfoMessage" style "info_message"
widget "*WarningMessage" style "warning_message"
-widget "*BigClockDisplay" style "big_clock_display"
+widget "*BigClockNonRecording" style "non_recording_big_clock_display"
+widget "*BigClockRecording" style "recording_big_clock_display"
widget "*TransportClockDisplay" style "transport_clock_display"
widget "*SecondaryClockDisplay" style "transport_clock_display"
-widget "*BBTTempoLabel" style "tempo_meter_clock_display"
-widget "*BBTMeterLabel" style "tempo_meter_clock_display"
+widget "*AudioClockFramesUpperInfo" style "tempo_meter_clock_display"
+widget "*AudioClockFramesLowerInfo" style "tempo_meter_clock_display"
+widget "*AudioClockSMPTEUpperInfo" style "tempo_meter_clock_display"
+widget "*AudioClockSMPTELowerInfo" style "tempo_meter_clock_display"
+widget "*AudioClockBBTUpperInfo" style "tempo_meter_clock_display"
+widget "*AudioClockBBTLowerInfo" style "tempo_meter_clock_display"
widget "*SelectionStartClock" style "default_clock_display"
widget "*SelectionEndClock" style "default_clock_display"
widget "*EditCursorClock" style "default_clock_display"
@@ -1115,9 +1163,9 @@ widget "*AudioBusControlsBaseSelected" style "edit_controls_base_selected"
widget "*AudioTimeAxisViewControlsBaseUnselected" style "audio_track_base"
widget "*AudioTrackStripBase" style "audio_track_base"
widget "*AudioTrackControlsBaseUnselected" style "audio_track_base"
-widget "*AudioTrackFader" style "audio_track_base"
+widget "*AudioTrackFader" style "gain_fader"
widget "*AudioBusStripBase" style "audio_bus_base"
-widget "*AudioBusFader" style "audio_bus_base"
+widget "*AudioBusFader" style "gain_fader"
widget "*MidiBusControlsBaseUnselected" style "midi_bus_base"
widget "*MidiBusControlsBaseInactiveUnselected" style "track_controls_inactive"
widget "*MidiBusControlsBaseInactiveSelected" style "track_controls_inactive"
@@ -1153,6 +1201,7 @@ widget "*MouseModeButton*" style "default_buttons_menus"
widget "*EditorMainCanvas" style "main_canvas_area"
widget "*AudioTrackControlsBaseInactiveUnselected" style "track_controls_inactive"
widget "*AutomationTrackControlsBaseInactiveUnselected" style "track_controls_inactive"
+widget "*AutomationTrackName" style "automation_track_name"
widget "*AudioTrackControlsBaseInactiveSelected" style "track_controls_inactive"
widget "*AutomationTrackControlsBaseInactiveSelected" style "track_controls_inactive"
widget "*AudioTrackStripBaseInactive" style "track_controls_inactive"
@@ -1196,6 +1245,7 @@ widget "*MixerStripSpeedBase*" style "small_entry"
widget "*MixerStripSpeedBaseNotOne" style "small_red_on_black_entry"
widget "*MixerStripSpeedBaseNotOne*" style "small_red_on_black_entry"
widget "*MixerStripGainDisplay" style "small_entry"
+widget "*MixerStripGainDisplay*" style "small_entry"
widget "*MixerStripGainUnitButton" style "very_small_button"
widget "*MixerStripGainUnitButton*" style "very_small_button"
widget "*MixerStripMeterPreButton" style "very_small_button"
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 58e60f7627..b85278b8b5 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -38,6 +38,7 @@
#include <pbd/compose.h>
#include <pbd/pathscanner.h>
#include <pbd/failed_constructor.h>
+#include <pbd/enumwriter.h>
#include <gtkmm2ext/gtk_ui.h>
#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/click_box.h>
@@ -96,10 +97,10 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
: Gtkmm2ext::UI ("ardour", argcp, argvp, rcfile),
- primary_clock (X_("TransportClockDisplay"), true, false, true),
- secondary_clock (X_("SecondaryClockDisplay"), true, false, true),
- preroll_clock (X_("PreRollClock"), true, true),
- postroll_clock (X_("PostRollClock"), true, true),
+ primary_clock (X_("primary"), false, X_("TransportClockDisplay"), true, false, true),
+ secondary_clock (X_("secondary"), false, X_("SecondaryClockDisplay"), true, false, true),
+ preroll_clock (X_("preroll"), false, X_("PreRollClock"), true, true),
+ postroll_clock (X_("postroll"), false, X_("PostRollClock"), true, true),
/* adjuster table */
@@ -112,7 +113,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
/* big clock */
- big_clock ("BigClockDisplay", true),
+ big_clock (X_("bigclock"), false, "BigClockNonRecording", true, false, true),
/* transport */
@@ -145,7 +146,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
color_manager = new ColorManager();
std::string color_file = ARDOUR::find_config_file("ardour.colors");
-
+
color_manager->load (color_file);
editor = 0;
@@ -160,7 +161,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
route_params = 0;
option_editor = 0;
location_ui = 0;
- sfdb = 0;
open_session_selector = 0;
have_configure_timeout = false;
have_disk_overrun_displayed = false;
@@ -168,6 +168,10 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
_will_create_new_session_automatically = false;
session_loaded = false;
last_speed_displayed = -1.0f;
+ keybindings_path = ARDOUR::find_config_file ("ardour.bindings");
+
+ can_save_keybindings = false;
+ Glib::signal_idle().connect (mem_fun (*this, &ARDOUR_UI::first_idle));
last_configure_time.tv_sec = 0;
last_configure_time.tv_usec = 0;
@@ -248,6 +252,10 @@ ARDOUR_UI::set_engine (AudioEngine& e)
throw failed_constructor();
}
+ /* listen to clock mode changes */
+
+ AudioClock::ModeChanged.connect (mem_fun (*this, &ARDOUR_UI::store_clock_modes));
+
/* start the time-of-day-clock */
update_wall_clock ();
@@ -349,22 +357,13 @@ ARDOUR_UI::save_ardour_state ()
Config->add_instant_xml (mnode, get_user_ardour_path());
}
- /* keybindings */
-
- AccelMap::save ("ardour.saved_bindings");
+ save_keybindings ();
}
void
ARDOUR_UI::startup ()
{
- /* Once the UI is up and running, start the audio engine. Doing
- this before the UI is up and running can cause problems
- when not running with SCHED_FIFO, because the amount of
- CPU and disk work needed to get the UI started can interfere
- with the scheduling of the audio thread.
- */
-
- Glib::signal_idle().connect (mem_fun(*this, &ARDOUR_UI::start_engine));
+ // relax
}
void
@@ -392,6 +391,11 @@ If you still wish to quit, please use the\n\n\
break;
}
}
+
+ if (session) {
+ session->set_deletion_in_progress ();
+ }
+ engine->stop (true);
Config->save_state();
quit ();
}
@@ -448,7 +452,8 @@ ARDOUR_UI::ask_about_saving_session (const string & what)
save_the_session = 0;
- editor->ensure_float (window);
+ window.set_keep_above (true);
+ window.present ();
ResponseType r = (ResponseType) window.run();
@@ -1303,14 +1308,6 @@ ARDOUR_UI::do_engine_start ()
engine->start();
}
- catch (AudioEngine::PortRegistrationFailure& err) {
- engine->stop ();
- error << _("Unable to create all required ports")
- << endmsg;
- unload_session ();
- return -1;
- }
-
catch (...) {
engine->stop ();
error << _("Unable to start the session running")
@@ -1332,14 +1329,6 @@ ARDOUR_UI::start_engine ()
*/
session->save_state ("");
}
-
- /* there is too much going on, in too many threads, for us to
- end up with a clean session. So wait 1 second after loading,
- and fix it up. its ugly, but until i come across a better
- solution, its what we have.
- */
-
- Glib::signal_timeout().connect (mem_fun(*this, &ARDOUR_UI::make_session_clean), 1000);
}
return FALSE;
@@ -1348,7 +1337,9 @@ ARDOUR_UI::start_engine ()
void
ARDOUR_UI::update_clocks ()
{
- Clock (session->audible_frame()); /* EMIT_SIGNAL */
+ if (!editor || !editor->dragging_playhead()) {
+ Clock (session->audible_frame()); /* EMIT_SIGNAL */
+ }
}
void
@@ -1635,7 +1626,7 @@ ARDOUR_UI::save_template ()
}
void
-ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
+ARDOUR_UI::new_session (std::string predetermined_path)
{
string session_name;
string session_path;
@@ -1748,7 +1739,7 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
msg.set_name (X_("CleanupDialog"));
- msg.set_wmclass (_("existing_session"), "Ardour");
+ msg.set_wmclass (X_("existing_session"), "Ardour");
msg.set_position (Gtk::WIN_POS_MOUSE);
switch (msg.run()) {
@@ -1854,9 +1845,8 @@ ARDOUR_UI::load_session (const string & path, const string & snap_name, string*
/* if it already exists, we must have write access */
if (::access (path.c_str(), F_OK) == 0 && ::access (path.c_str(), W_OK)) {
- MessageDialog msg (*editor, _("\
-You do not have write access to this session.\n\
-This prevents the session from being loaded."));
+ MessageDialog msg (*editor, _("You do not have write access to this session.\n"
+ "This prevents the session from being loaded."));
msg.run ();
return -1;
}
@@ -1876,22 +1866,14 @@ This prevents the session from being loaded."));
Config->set_current_owner (ConfigVariableBase::Interface);
session_loaded = true;
-
+
goto_editor_window ();
- return 0;
-}
-
-int
-ARDOUR_UI::make_session_clean ()
-{
if (session) {
session->set_clean ();
}
- show ();
-
- return FALSE;
+ return 0;
}
int
@@ -2096,7 +2078,7 @@ After cleanup, unused audio files will be moved to a \
checker.set_default_response (RESPONSE_CANCEL);
checker.set_name (_("CleanupDialog"));
- checker.set_wmclass (_("ardour_cleanup"), "Ardour");
+ checker.set_wmclass (X_("ardour_cleanup"), "Ardour");
checker.set_position (Gtk::WIN_POS_MOUSE);
switch (checker.run()) {
@@ -2396,7 +2378,7 @@ ARDOUR_UI::cmdline_new_session (string path)
path = str;
}
- new_session (false, path);
+ new_session (path);
_will_create_new_session_automatically = false; /* done it */
return FALSE; /* don't call it again */
@@ -2450,3 +2432,69 @@ ARDOUR_UI::use_config ()
ract->set_active ();
}
}
+
+void
+ARDOUR_UI::update_transport_clocks (nframes_t pos)
+{
+ primary_clock.set (pos);
+ secondary_clock.set (pos);
+
+ if (big_clock_window) {
+ big_clock.set (pos);
+ }
+}
+
+void
+ARDOUR_UI::record_state_changed ()
+{
+ if (!session || !big_clock_window) {
+ /* why bother - the clock isn't visible */
+ return;
+ }
+
+ switch (session->record_status()) {
+ case Session::Recording:
+ big_clock.set_name ("BigClockRecording");
+ break;
+ default:
+ big_clock.set_name ("BigClockNonRecording");
+ break;
+ }
+}
+
+void
+ARDOUR_UI::set_keybindings_path (string path)
+{
+ keybindings_path = path;
+}
+
+void
+ARDOUR_UI::save_keybindings ()
+{
+ if (can_save_keybindings) {
+ AccelMap::save (keybindings_path);
+ }
+}
+
+bool
+ARDOUR_UI::first_idle ()
+{
+ can_save_keybindings = true;
+ return false;
+}
+
+void
+ARDOUR_UI::store_clock_modes ()
+{
+ XMLNode* node = new XMLNode(X_("ClockModes"));
+
+ for (vector<AudioClock*>::iterator x = AudioClock::clocks.begin(); x != AudioClock::clocks.end(); ++x) {
+ node->add_property ((*x)->name().c_str(), enum_2_string ((*x)->mode()));
+ }
+
+ session->add_extra_xml (*node);
+ session->set_dirty ();
+}
+
+
+
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 60b3b309b9..92f2cc103d 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -70,7 +70,6 @@ class OptionEditor;
class Mixer_UI;
class ConnectionEditor;
class RouteParams_UI;
-class SoundFileBrowser;
class About;
class AddRouteDialog;
class NewSessionDialog;
@@ -129,7 +128,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
_will_create_new_session_automatically = yn;
}
- void new_session(bool startup = false, std::string path = string());
+ void new_session(std::string path = string());
gint cmdline_new_session (string path);
int unload_session ();
void close_session();
@@ -185,6 +184,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI
AudioClock preroll_clock;
AudioClock postroll_clock;
+ void store_clock_modes ();
+ void restore_clock_modes ();
+
void add_route ();
void session_add_audio_track (int input_channels, int32_t output_channels, ARDOUR::TrackMode mode, uint32_t how_many) {
@@ -204,6 +206,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
}*/
void set_engine (ARDOUR::AudioEngine&);
+ gint start_engine ();
gint exit_on_main_window_close (GdkEventAny *);
@@ -213,6 +216,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void set_native_file_header_format (ARDOUR::HeaderFormat sf);
void set_native_file_data_format (ARDOUR::SampleFormat sf);
+ void set_keybindings_path (std::string path);
+ void save_keybindings ();
+
protected:
friend class PublicEditor;
@@ -297,7 +303,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void queue_transport_change ();
void map_transport_state ();
int32_t do_engine_start ();
- gint start_engine ();
void engine_halted ();
void engine_stopped ();
@@ -331,6 +336,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI
Gtk::Frame big_clock_frame;
Gtk::Window* big_clock_window;
+ void update_transport_clocks (nframes_t pos);
+ void record_state_changed ();
+
/* Transport Control */
void detach_tearoff (Gtk::Box* parent, Gtk::Widget* contents);
@@ -538,6 +546,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void connect_to_session (ARDOUR::Session *);
void connect_dependents_to_session (ARDOUR::Session *);
void we_have_dependents ();
+
+ std::string keybindings_path;
+
void setup_keybindings ();
void setup_session_options ();
@@ -570,11 +581,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
/* route dialog */
AddRouteDialog *add_route_dialog;
-
- /* SoundFile Browser */
- SoundFileBrowser *sfdb;
- void toggle_sound_file_browser ();
- int create_sound_file_browser ();
/* Keyboard Handling */
@@ -669,7 +675,10 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void map_meter_falloff ();
void toggle_control_protocol (ARDOUR::ControlProtocolInfo*);
- void toggle_control_protocol_feedback (ARDOUR::ControlProtocolInfo*, const char* group_name, const char* action_name);
+ void toggle_control_protocol_feedback (ARDOUR::ControlProtocolInfo*, const char* group_name, std::string action_name);
+
+ bool can_save_keybindings;
+ bool first_idle ();
};
#endif /* __ardour_gui_h__ */
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index 25fe144233..27b852982a 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -609,7 +609,7 @@ ARDOUR_UI::show_shuttle_context_menu ()
build_shuttle_context_menu ();
}
- shuttle_context_menu->popup (1, 0);
+ shuttle_context_menu->popup (1, gtk_get_current_event_time());
}
void
@@ -815,7 +815,7 @@ ARDOUR_UI::shuttle_unit_clicked ()
if (shuttle_unit_menu == 0) {
shuttle_unit_menu = dynamic_cast<Menu*> (ActionManager::get_widget ("/ShuttleUnitPopup"));
}
- shuttle_unit_menu->popup (1, 0);
+ shuttle_unit_menu->popup (1, gtk_get_current_event_time());
}
void
diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc
index bf096f86c1..9c6daa8952 100644
--- a/gtk2_ardour/ardour_ui_dependents.cc
+++ b/gtk2_ardour/ardour_ui_dependents.cc
@@ -27,6 +27,7 @@
#include <gtkmm/accelmap.h>
#include <pbd/error.h>
+
#include "ardour_ui.h"
#include "public_editor.h"
#include "mixer_ui.h"
@@ -57,6 +58,17 @@ void
ARDOUR_UI::we_have_dependents ()
{
setup_keybindings ();
+ editor->UpdateAllTransportClocks.connect (mem_fun (*this, &ARDOUR_UI::update_transport_clocks));
+}
+
+static void
+accel_map_changed (GtkAccelMap* map,
+ gchar* path,
+ guint key,
+ GdkModifierType mod,
+ gpointer arg)
+{
+ static_cast<ARDOUR_UI*>(arg)->save_keybindings ();
}
void
@@ -65,13 +77,20 @@ ARDOUR_UI::setup_keybindings ()
install_actions ();
RedirectBox::register_actions ();
- std::string key_binding_file = ARDOUR::find_config_file("ardour.bindings");
+ cerr << "loading bindings from " << keybindings_path << endl;
try {
- AccelMap::load (key_binding_file);
+ AccelMap::load (keybindings_path);
} catch (...) {
- error << "ardour key bindings file not found" << endmsg;
+ error << string_compose (_("Ardour key bindings file not found at \"%1\" or contains errors."), keybindings_path)
+ << endmsg;
}
+
+ /* catch changes */
+
+ GtkAccelMap* accelmap = gtk_accel_map_get();
+ g_signal_connect (accelmap, "changed", (GCallback) accel_map_changed, this);
+
}
void
@@ -81,8 +100,8 @@ ARDOUR_UI::connect_dependents_to_session (ARDOUR::Session *s)
mixer->connect_to_session (s);
/* its safe to do this now */
-
- s->restore_history (s->snap_name());
+
+ s->restore_history ("");
}
void
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index fe5963c535..a9a61176a9 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -50,6 +50,7 @@ ARDOUR_UI::connect_to_session (Session *s)
session = s;
session->HaltOnXrun.connect (mem_fun(*this, &ARDOUR_UI::halt_on_xrun_message));
+ session->RecordStateChanged.connect (mem_fun (*this, &ARDOUR_UI::record_state_changed));
/* sensitize menu bar options that are now valid */
@@ -92,10 +93,6 @@ ARDOUR_UI::connect_to_session (Session *s)
option_editor->set_session (s);
}
- if (sfdb) {
- sfdb->set_session (s);
- }
-
setup_session_options ();
Blink.connect (mem_fun(*this, &ARDOUR_UI::transport_rec_enable_blink));
@@ -345,36 +342,6 @@ ARDOUR_UI::toggle_route_params_window ()
}
}
-int
-ARDOUR_UI::create_sound_file_browser ()
-{
- if (sfdb == 0) {
- sfdb = new SoundFileBrowser (_("Sound File Browser"), session);
- sfdb->signal_unmap().connect (sigc::bind(sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleSoundFileBrowser")));
- }
- return 0;
-}
-
-void
-ARDOUR_UI::toggle_sound_file_browser ()
-{
- if (create_sound_file_browser()) {
- return;
- }
-
- RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("ToggleSoundFileBrowser"));
- if (act) {
- RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
-
- if (tact->get_active()) {
- sfdb->show_all();
- sfdb->present();
- } else {
- sfdb->hide ();
- }
- }
-}
-
void
ARDOUR_UI::handle_locations_change (Location* ignored)
{
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index d1931a22d5..df2fda78c9 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -80,7 +80,7 @@ ARDOUR_UI::install_actions ()
ActionManager::register_action (main_actions, X_("Sync"), _("Sync"));
ActionManager::register_action (main_actions, X_("Options"), _("Options"));
ActionManager::register_action (main_actions, X_("TransportOptions"), _("Options"));
- ActionManager::register_action (main_actions, X_("Help"), _("Help"));
+ ActionManager::register_action (main_actions, X_("Help"), _("Help"));
ActionManager::register_action (main_actions, X_("KeyMouse Actions"), _("KeyMouse Actions"));
ActionManager::register_action (main_actions, X_("AudioFileFormat"), _("Audio File Format"));
ActionManager::register_action (main_actions, X_("AudioFileFormatHeader"), _("Header"));
@@ -92,7 +92,7 @@ ARDOUR_UI::install_actions ()
/* the real actions */
- act = ActionManager::register_action (main_actions, X_("New"), _("New"), bind (mem_fun(*this, &ARDOUR_UI::new_session), false, string ()));
+ act = ActionManager::register_action (main_actions, X_("New"), _("New"), bind (mem_fun(*this, &ARDOUR_UI::new_session), string ()));
ActionManager::register_action (main_actions, X_("Open"), _("Open"), mem_fun(*this, &ARDOUR_UI::open_session));
ActionManager::register_action (main_actions, X_("Recent"), _("Recent"), mem_fun(*this, &ARDOUR_UI::open_recent_session));
@@ -189,7 +189,6 @@ ARDOUR_UI::install_actions ()
ActionManager::register_action (common_actions, X_("goto-editor"), _("Show Editor"), mem_fun(*this, &ARDOUR_UI::goto_editor_window));
ActionManager::register_action (common_actions, X_("goto-mixer"), _("Show Mixer"), mem_fun(*this, &ARDOUR_UI::goto_mixer_window));
- ActionManager::register_toggle_action (common_actions, X_("ToggleSoundFileBrowser"), _("Sound File Browser"), mem_fun(*this, &ARDOUR_UI::toggle_sound_file_browser));
ActionManager::register_toggle_action (common_actions, X_("ToggleOptionsEditor"), _("Options Editor"), mem_fun(*this, &ARDOUR_UI::toggle_options_window));
act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Track/Bus Inspector"), mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
ActionManager::session_sensitive_actions.push_back (act);
@@ -483,7 +482,7 @@ ARDOUR_UI::toggle_control_protocol (ControlProtocolInfo* cpi)
}
void
-ARDOUR_UI::toggle_control_protocol_feedback (ControlProtocolInfo* cpi, const char* group, const char* action)
+ARDOUR_UI::toggle_control_protocol_feedback (ControlProtocolInfo* cpi, const char* group, string action)
{
if (!session) {
/* this happens when we build the menu bar when control protocol support
@@ -494,14 +493,17 @@ ARDOUR_UI::toggle_control_protocol_feedback (ControlProtocolInfo* cpi, const cha
}
if (cpi->protocol) {
- Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (group, action);
+ Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (group, action.c_str());
if (act) {
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
- bool x = tact->get_active();
- if (tact && x != cpi->protocol->get_feedback()) {
- cpi->protocol->set_feedback (!x);
+ if (tact) {
+ bool x = tact->get_active();
+
+ if (x != cpi->protocol->get_feedback()) {
+ cpi->protocol->set_feedback (x);
+ }
}
}
}
@@ -556,7 +558,7 @@ ARDOUR_UI::build_control_surface_menu ()
(bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol_feedback),
*i,
"Editor",
- action_name.c_str())));
+ action_name)));
ui += "<menu action='";
ui += submenu_name;
diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc
index 707d3109f7..d0f523481f 100644
--- a/gtk2_ardour/ardour_ui_options.cc
+++ b/gtk2_ardour/ardour_ui_options.cc
@@ -236,7 +236,7 @@ ARDOUR_UI::set_monitor_model (MonitorModel model)
break;
default:
- fatal << string_compose (_("programming error: unknown solo model in ARDOUR_UI::set_solo_model: %1"), model) << endmsg;
+ fatal << string_compose (_("programming error: unknown monitor model in ARDOUR_UI::set_monitor_model: %1"), model) << endmsg;
/*NOTREACHED*/
}
@@ -416,9 +416,9 @@ ARDOUR_UI::map_solo_model ()
const char* on;
if (Config->get_solo_model() == InverseMute) {
- on = "SoloInPlace";
+ on = X_("SoloInPlace");
} else {
- on = "SoloViaBus";
+ on = X_("SoloViaBus");
}
Glib::RefPtr<Action> act = ActionManager::get_action ("options", on);
@@ -587,10 +587,8 @@ ARDOUR_UI::map_meter_falloff ()
{
const char* action = X_("MeterFalloffMedium");
- /* XXX hack alert. Fix this. Please */
-
float val = Config->get_meter_falloff ();
- MeterFalloff code = (MeterFalloff) (int) (floor (val));
+ MeterFalloff code = meter_falloff_from_float(val);
switch (code) {
case MeterFalloffOff:
@@ -840,6 +838,14 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
map_meter_falloff ();
} else if (PARAM_IS ("verify-remove-last-capture")) {
ActionManager::map_some_state ("options", "VerifyRemoveLastCapture", &Configuration::get_verify_remove_last_capture);
+ } else if (PARAM_IS ("video-pullup") || PARAM_IS ("smpte-format")) {
+ if (session) {
+ primary_clock.set (session->audible_frame(), true);
+ secondary_clock.set (session->audible_frame(), true);
+ } else {
+ primary_clock.set (0, true);
+ secondary_clock.set (0, true);
+ }
}
#undef PARAM_IS
diff --git a/gtk2_ardour/arprof b/gtk2_ardour/arprof
index 8af65b5fe3..05a469cb17 100755
--- a/gtk2_ardour/arprof
+++ b/gtk2_ardour/arprof
@@ -5,5 +5,5 @@ if [ gprofhelper.c -nt gprofhelper.so ] ; then
gcc -shared -nostdlib -fPIC gprofhelper.c -o gprofhelper.so -lpthread -ldl || exit 1
fi
-export LD_LIBRARY_PATH=../libs/ardour/.libs
-LDPRELOAD=./gprofhelper.so ./ardev $*
+. ardev_common.sh
+LDPRELOAD=./gprofhelper.so $EXECUTABLE $*
diff --git a/gtk2_ardour/arval b/gtk2_ardour/arval
index a1dc501d3f..920e7cb1a8 100755
--- a/gtk2_ardour/arval
+++ b/gtk2_ardour/arval
@@ -1,4 +1,4 @@
#!/bin/sh
. ardev_common.sh
export ARDOUR_RUNNING_UNDER_VALGRIND=TRUE
-exec valgrind --num-callers=50 --tool=memcheck gtk2_ardour/ardour.bin --novst $*
+exec valgrind --num-callers=50 --tool=memcheck $EXECUTABLE --novst $*
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index 4ec8c1b89f..7ad7e4df65 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -22,6 +22,7 @@
#include <cmath>
#include <pbd/convert.h>
+#include <pbd/enumwriter.h>
#include <gtkmm2ext/utils.h>
@@ -40,10 +41,14 @@ using namespace ARDOUR;
using namespace PBD;
using namespace sigc;
using namespace Gtk;
+using namespace std;
using PBD::atoi;
using PBD::atof;
+sigc::signal<void> AudioClock::ModeChanged;
+vector<AudioClock*> AudioClock::clocks;
+
const uint32_t AudioClock::field_length[(int) AudioClock::AudioFrames+1] = {
2, /* SMPTE_Hours */
2, /* SMPTE_Minutes */
@@ -58,8 +63,10 @@ const uint32_t AudioClock::field_length[(int) AudioClock::AudioFrames+1] = {
10 /* Audio Frame */
};
-AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool with_tempo_and_meter)
- : is_duration (duration),
+AudioClock::AudioClock (std::string clock_name, bool transient, std::string widget_name, bool allow_edit, bool duration, bool with_info)
+ : _name (clock_name),
+ is_transient (transient),
+ is_duration (duration),
editable (allow_edit),
colon1 (":"),
colon2 (":"),
@@ -75,9 +82,51 @@ AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool
ops_menu = 0;
dragging = false;
+ if (with_info) {
+ frames_upper_info_label = manage (new Label);
+ frames_lower_info_label = manage (new Label);
+ smpte_upper_info_label = manage (new Label);
+ smpte_lower_info_label = manage (new Label);
+ bbt_upper_info_label = manage (new Label);
+ bbt_lower_info_label = manage (new Label);
+
+ frames_upper_info_label->set_name ("AudioClockFramesUpperInfo");
+ frames_lower_info_label->set_name ("AudioClockFramesLowerInfo");
+ smpte_upper_info_label->set_name ("AudioClockSMPTEUpperInfo");
+ smpte_lower_info_label->set_name ("AudioClockSMPTELowerInfo");
+ bbt_upper_info_label->set_name ("AudioClockBBTUpperInfo");
+ bbt_lower_info_label->set_name ("AudioClockBBTLowerInfo");
+
+ Gtkmm2ext::set_size_request_to_display_given_text(*smpte_upper_info_label, "23.98",0,0);
+ Gtkmm2ext::set_size_request_to_display_given_text(*smpte_lower_info_label, "NDF",0,0);
+
+ frames_info_box.pack_start (*frames_upper_info_label, true, true);
+ frames_info_box.pack_start (*frames_lower_info_label, true, true);
+ smpte_info_box.pack_start (*smpte_upper_info_label, true, true);
+ smpte_info_box.pack_start (*smpte_lower_info_label, true, true);
+ bbt_info_box.pack_start (*bbt_upper_info_label, true, true);
+ bbt_info_box.pack_start (*bbt_lower_info_label, true, true);
+
+ } else {
+ frames_upper_info_label = 0;
+ frames_lower_info_label = 0;
+ smpte_upper_info_label = 0;
+ smpte_lower_info_label = 0;
+ bbt_upper_info_label = 0;
+ bbt_lower_info_label = 0;
+ }
+
audio_frames_ebox.add (audio_frames_label);
- frames_packer_hbox.set_border_width (2);
- frames_packer_hbox.pack_start (audio_frames_ebox, false, false);
+
+ frames_packer.set_homogeneous (false);
+ frames_packer.set_border_width (2);
+ frames_packer.pack_start (audio_frames_ebox, false, false);
+
+ if (with_info) {
+ frames_packer.pack_start (frames_info_box, false, false, 5);
+ }
+
+ frames_packer_hbox.pack_start (frames_packer, true, false);
hours_ebox.add (hours_label);
minutes_ebox.add (minutes_label);
@@ -100,6 +149,10 @@ AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool
smpte_packer.pack_start (colon3, false, false);
smpte_packer.pack_start (frames_ebox, false, false);
+ if (with_info) {
+ smpte_packer.pack_start (smpte_info_box, false, false, 5);
+ }
+
smpte_packer_hbox.pack_start (smpte_packer, true, false);
bbt_packer.set_homogeneous (false);
@@ -110,20 +163,8 @@ AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool
bbt_packer.pack_start (b2, false, false);
bbt_packer.pack_start (ticks_ebox, false, false);
- if (with_tempo_and_meter) {
- meter_label = manage (new Label);
- tempo_label = manage (new Label);
-
- meter_label->set_name ("BBTMeterLabel");
- tempo_label->set_name ("BBTTempoLabel");
-
- tempo_meter_box.pack_start (*meter_label, true, true);
- tempo_meter_box.pack_start (*tempo_label, true, true);
-
- bbt_packer.pack_start (tempo_meter_box, false, false, 5);
- } else {
- meter_label = 0;
- tempo_label = 0;
+ if (with_info) {
+ bbt_packer.pack_start (bbt_info_box, false, false, 5);
}
bbt_packer_hbox.pack_start (bbt_packer, true, false);
@@ -138,7 +179,50 @@ AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool
minsec_packer_hbox.pack_start (minsec_packer, true, false);
- set_name (name);
+ clock_frame.set_shadow_type (Gtk::SHADOW_IN);
+ clock_frame.set_name ("BaseFrame");
+
+ clock_frame.add (clock_base);
+
+ set_widget_name (widget_name);
+
+ _mode = BBT; /* lie to force mode switch */
+ set_mode (SMPTE);
+
+ pack_start (clock_frame, true, true);
+
+ /* the clock base handles button releases for menu popup regardless of
+ editable status. if the clock is editable, the clock base is where
+ we pass focus to after leaving the last editable "field", which
+ will then shutdown editing till the user starts it up again.
+
+ it does this because the focus out event on the field disables
+ keyboard event handling, and we don't connect anything up to
+ notice focus in on the clock base. hence, keyboard event handling
+ stays disabled.
+ */
+
+ clock_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
+ clock_base.signal_button_release_event().connect (bind (mem_fun (*this, &AudioClock::field_button_release_event), SMPTE_Hours));
+
+ Session::SMPTEOffsetChanged.connect (mem_fun (*this, &AudioClock::smpte_offset_changed));
+
+ if (editable) {
+ setup_events ();
+ }
+
+ set (last_when, true);
+
+ if (!is_transient) {
+ clocks.push_back (this);
+ }
+}
+
+void
+AudioClock::set_widget_name (string name)
+{
+ Widget::set_name (name);
+
clock_base.set_name (name);
audio_frames_label.set_name (name);
@@ -172,37 +256,7 @@ AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool
b1.set_name (name);
b2.set_name (name);
- clock_frame.set_shadow_type (Gtk::SHADOW_IN);
- clock_frame.set_name ("BaseFrame");
-
- clock_frame.add (clock_base);
-
- _mode = BBT; /* lie to force mode switch */
- set_mode (SMPTE);
-
- pack_start (clock_frame, true, true);
-
- /* the clock base handles button releases for menu popup regardless of
- editable status. if the clock is editable, the clock base is where
- we pass focus to after leaving the last editable "field", which
- will then shutdown editing till the user starts it up again.
-
- it does this because the focus out event on the field disables
- keyboard event handling, and we don't connect anything up to
- notice focus in on the clock base. hence, keyboard event handling
- stays disabled.
- */
-
- clock_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
- clock_base.signal_button_release_event().connect (bind (mem_fun (*this, &AudioClock::field_button_release_event), SMPTE_Hours));
-
- Session::SMPTEOffsetChanged.connect (mem_fun (*this, &AudioClock::smpte_offset_changed));
-
- if (editable) {
- setup_events ();
- }
-
- set (last_when, true);
+ queue_draw ();
}
void
@@ -390,6 +444,27 @@ AudioClock::set_frames (nframes_t when, bool force)
char buf[32];
snprintf (buf, sizeof (buf), "%u", when);
audio_frames_label.set_text (buf);
+
+ if (frames_upper_info_label) {
+ nframes_t rate = session->frame_rate();
+
+ if (fmod (rate, 1000.0) == 0.000) {
+ sprintf (buf, "%uK", rate/1000);
+ } else {
+ sprintf (buf, "%.3fK", rate/1000.0f);
+ }
+
+ frames_upper_info_label->set_text (buf);
+
+ float vid_pullup = Config->get_video_pullup();
+
+ if (vid_pullup == 0.0) {
+ frames_lower_info_label->set_text(_("none"));
+ } else {
+ sprintf (buf, "%-6.4f", vid_pullup);
+ frames_lower_info_label->set_text (buf);
+ }
+ }
}
void
@@ -467,6 +542,26 @@ AudioClock::set_smpte (nframes_t when, bool force)
frames_label.set_text (buf);
last_frames = smpte.frames;
}
+
+ if (smpte_upper_info_label) {
+ double smpte_frames = session->smpte_frames_per_second();
+
+ if ( fmod(smpte_frames, 1.0) == 0.0) {
+ sprintf (buf, "%u", int (smpte_frames));
+ } else {
+ sprintf (buf, "%.2f", smpte_frames);
+ }
+
+ smpte_upper_info_label->set_text (buf);
+
+ if (session->smpte_drop_frames()) {
+ sprintf (buf, "DF");
+ } else {
+ sprintf (buf, "NDF");
+ }
+
+ smpte_lower_info_label->set_text (buf);
+ }
}
void
@@ -483,12 +578,12 @@ AudioClock::set_bbt (nframes_t when, bool force)
sprintf (buf, "%04" PRIu32, bbt.ticks);
ticks_label.set_text (buf);
- if (meter_label) {
+ if (bbt_upper_info_label) {
TempoMap::Metric m (session->tempo_map().metric_at (when));
sprintf (buf, "%-5.2f", m.tempo().beats_per_minute());
- tempo_label->set_text (buf);
+ bbt_lower_info_label->set_text (buf);
sprintf (buf, "%g|%g", m.meter().beats_per_bar(), m.meter().note_divisor());
- meter_label->set_text (buf);
+ bbt_upper_info_label->set_text (buf);
}
}
@@ -498,6 +593,18 @@ AudioClock::set_session (Session *s)
session = s;
if (s) {
+
+ XMLProperty* prop;
+ XMLNode* node = session->extra_xml (X_("ClockModes"));
+ AudioClock::Mode amode;
+
+ if (node) {
+ if ((prop = node->property (_name.c_str())) != 0) {
+ amode = AudioClock::Mode (string_2_enum (prop->value(), amode));
+ set_mode (amode);
+ }
+ }
+
set (last_when, true);
}
}
@@ -1113,7 +1220,7 @@ AudioClock::get_frames (Field field,nframes_t pos,int dir)
frames = session->frame_rate();
break;
case SMPTE_Frames:
- frames = (nframes_t) floor (session->frame_rate() / Config->get_smpte_frames_per_second());
+ frames = (nframes_t) floor (session->frame_rate() / session->smpte_frames_per_second());
break;
case AudioFrames:
@@ -1221,7 +1328,7 @@ AudioClock::smpte_sanitize_display()
seconds_label.set_text("59");
}
- switch ((long)rint(Config->get_smpte_frames_per_second())) {
+ switch ((long)rint(session->smpte_frames_per_second())) {
case 24:
if (atoi(frames_label.get_text()) > 23) {
frames_label.set_text("23");
@@ -1241,7 +1348,7 @@ AudioClock::smpte_sanitize_display()
break;
}
- if (Config->get_smpte_drop_frames()) {
+ if (session->smpte_drop_frames()) {
if ((atoi(minutes_label.get_text()) % 10) && (atoi(seconds_label.get_text()) == 0) && (atoi(frames_label.get_text()) < 2)) {
frames_label.set_text("02");
}
@@ -1262,6 +1369,8 @@ AudioClock::smpte_frame_from_display () const
smpte.minutes = atoi (minutes_label.get_text());
smpte.seconds = atoi (seconds_label.get_text());
smpte.frames = atoi (frames_label.get_text());
+ smpte.rate = session->smpte_frames_per_second();
+ smpte.drop= session->smpte_drop_frames();
session->smpte_to_sample( smpte, sample, false /* use_offset */, false /* use_subframes */ );
@@ -1775,6 +1884,10 @@ AudioClock::set_mode (Mode m)
set (last_when, true);
clock_base.show_all ();
key_entry_state = 0;
+
+ if (!is_transient) {
+ ModeChanged (); /* EMIT SIGNAL */
+ }
}
void
@@ -1784,26 +1897,26 @@ AudioClock::set_size_requests ()
switch (_mode) {
case SMPTE:
- Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 2, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 2, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 2, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-00", 5, 5);
+ Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "00", 5, 5);
+ Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "00", 5, 5);
+ Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "00", 5, 5);
break;
case BBT:
- Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 2, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 2, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-000", 5, 5);
+ Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "00", 5, 5);
+ Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "0000", 5, 5);
break;
case MinSec:
- Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "99", 2, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "99", 2, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "99.999", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "00", 5, 5);
+ Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "00", 5, 5);
+ Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "00.000", 5, 5);
break;
case Frames:
- Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "0000000000", 5, 5);
break;
case Off:
diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h
index e0431ba16e..662cb949e6 100644
--- a/gtk2_ardour/audio_clock.h
+++ b/gtk2_ardour/audio_clock.h
@@ -43,12 +43,16 @@ class AudioClock : public Gtk::HBox
Off
};
- AudioClock (const string& name, bool editable, bool is_duration = false, bool with_tempo_meter = false);
+ AudioClock (std::string clock_name, bool transient, std::string widget_name, bool editable, bool is_duration = false, bool with_info = false);
Mode mode() const { return _mode; }
void set (nframes_t, bool force = false);
void set_mode (Mode);
+
+ void set_widget_name (std::string);
+
+ std::string name() const { return _name; }
nframes_t current_time (nframes_t position = 0) const;
nframes_t current_duration (nframes_t position = 0) const;
@@ -56,10 +60,15 @@ class AudioClock : public Gtk::HBox
sigc::signal<void> ValueChanged;
+ static sigc::signal<void> ModeChanged;
+ static std::vector<AudioClock*> clocks;
+
private:
ARDOUR::Session *session;
Mode _mode;
- uint32_t key_entry_state;
+ uint32_t key_entry_state;
+ std::string _name;
+ bool is_transient;
bool is_duration;
bool editable;
@@ -75,6 +84,7 @@ class AudioClock : public Gtk::HBox
Gtk::HBox bbt_packer;
Gtk::HBox frames_packer_hbox;
+ Gtk::HBox frames_packer;
enum Field {
SMPTE_Hours,
@@ -123,10 +133,18 @@ class AudioClock : public Gtk::HBox
Gtk::Label b1;
Gtk::Label b2;
- Gtk::Label* tempo_label;
- Gtk::Label* meter_label;
+ Gtk::Label* frames_upper_info_label;
+ Gtk::Label* frames_lower_info_label;
+
+ Gtk::Label* smpte_upper_info_label;
+ Gtk::Label* smpte_lower_info_label;
+
+ Gtk::Label* bbt_upper_info_label;
+ Gtk::Label* bbt_lower_info_label;
- Gtk::VBox tempo_meter_box;
+ Gtk::VBox frames_info_box;
+ Gtk::VBox smpte_info_box;
+ Gtk::VBox bbt_info_box;
Gtk::EventBox clock_base;
Gtk::Frame clock_frame;
diff --git a/gtk2_ardour/audio_region_editor.cc b/gtk2_ardour/audio_region_editor.cc
index c5645d479c..b7106a0796 100644
--- a/gtk2_ardour/audio_region_editor.cc
+++ b/gtk2_ardour/audio_region_editor.cc
@@ -47,10 +47,10 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
name_label (_("NAME:")),
audition_button (_("play")),
time_table (3, 2),
- start_clock ("AudioRegionEditorClock", true),
- end_clock ("AudioRegionEditorClock", true),
- length_clock ("AudioRegionEditorClock", true, true),
- sync_offset_clock ("AudioRegionEditorClock", true, true)
+ start_clock (X_("regionstart"), true, X_("AudioRegionEditorClock"), true),
+ end_clock (X_("regionend"), true, X_("AudioRegionEditorClock"), true),
+ length_clock (X_("regionlength"), true, X_("AudioRegionEditorClock"), true, true),
+ sync_offset_clock (X_("regionsyncoffset"), true, X_("AudioRegionEditorClock"), true, true)
{
start_clock.set_session (&_session);
@@ -128,8 +128,6 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
name_changed ();
bounds_changed (Change (StartChanged|LengthChanged|PositionChanged));
- //XMLNode *node = _region->extra_xml ("GUI");
-
_region->StateChanged.connect (mem_fun(*this, &AudioRegionEditor::region_changed));
spin_arrow_grab = false;
@@ -203,7 +201,7 @@ AudioRegionEditor::start_clock_changed ()
{
_session.begin_reversible_command (_("change region start position"));
- Playlist* const pl = _region->playlist();
+ boost::shared_ptr<Playlist> pl = _region->playlist();
if (pl) {
XMLNode &before = pl->get_state();
@@ -220,8 +218,8 @@ AudioRegionEditor::end_clock_changed ()
{
_session.begin_reversible_command (_("change region end position"));
- Playlist* const pl = _region->playlist();
-
+ boost::shared_ptr<Playlist> pl = _region->playlist();
+
if (pl) {
XMLNode &before = pl->get_state();
_region->trim_end (end_clock.current_time(), this);
@@ -241,7 +239,7 @@ AudioRegionEditor::length_clock_changed ()
_session.begin_reversible_command (_("change region length"));
- Playlist* const pl = _region->playlist();
+ boost::shared_ptr<Playlist> pl = _region->playlist();
if (pl) {
XMLNode &before = pl->get_state();
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index 6543907bc8..e91dd529e3 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -737,8 +737,8 @@ AudioRegionView::show_region_editor ()
// trackview.editor.ensure_float (*editor);
}
- editor->show_all ();
- editor->get_window()->raise();
+ editor->present ();
+ editor->show_all();
}
void
@@ -873,6 +873,8 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct)
wave->property_amplitude_above_axis() = _amplitude_above_axis;
wave->property_wave_color() = _region->muted() ? color_map[cMutedWaveForm] : color_map[cWaveForm];
wave->property_region_start() = _region->start();
+ wave->property_rectified() = (bool) (_flags & WaveformRectified);
+ wave->property_logscaled() = (bool) (_flags & WaveformLogScaled);
if (!(_flags & WaveformVisible)) {
wave->hide();
@@ -987,6 +989,8 @@ AudioRegionView::store_flags()
node->add_property ("waveform-visible", (_flags & WaveformVisible) ? "yes" : "no");
node->add_property ("envelope-visible", (_flags & EnvelopeVisible) ? "yes" : "no");
+ node->add_property ("waveform-rectified", (_flags & WaveformRectified) ? "yes" : "no");
+ node->add_property ("waveform-logscaled", (_flags & WaveformLogScaled) ? "yes" : "no");
_region->add_extra_xml (*node);
}
@@ -1007,6 +1011,18 @@ AudioRegionView::set_flags (XMLNode* node)
_flags |= EnvelopeVisible;
}
}
+
+ if ((prop = node->property ("waveform-rectified")) != 0) {
+ if (prop->value() == "yes") {
+ _flags |= WaveformRectified;
+ }
+ }
+
+ if ((prop = node->property ("waveform-logscaled")) != 0) {
+ if (prop->value() == "yes") {
+ _flags |= WaveformLogScaled;
+ }
+ }
}
void
@@ -1046,9 +1062,30 @@ AudioRegionView::set_waveform_shape (WaveformShape shape)
} else {
_flags &= ~WaveformRectified;
}
+ store_flags ();
+ }
+}
+
+void
+AudioRegionView::set_waveform_scale (WaveformScale scale)
+{
+ bool yn = (scale == LogWaveform);
+
+ if (yn != (bool) (_flags & WaveformLogScaled)) {
+ for (vector<WaveView *>::iterator wave = waves.begin(); wave != waves.end() ; ++wave) {
+ (*wave)->property_logscaled() = yn;
+ }
+
+ if (yn) {
+ _flags |= WaveformLogScaled;
+ } else {
+ _flags &= ~WaveformLogScaled;
+ }
+ store_flags ();
}
}
+
GhostRegion*
AudioRegionView::add_ghost (AutomationTimeAxisView& atv)
{
diff --git a/gtk2_ardour/audio_region_view.h b/gtk2_ardour/audio_region_view.h
index 977c0e3aae..1d51cb7172 100644
--- a/gtk2_ardour/audio_region_view.h
+++ b/gtk2_ardour/audio_region_view.h
@@ -72,8 +72,10 @@ class AudioRegionView : public RegionView
void set_envelope_visible (bool);
void set_waveform_visible (bool yn);
void set_waveform_shape (WaveformShape);
+ void set_waveform_scale (WaveformScale);
bool waveform_rectified() const { return _flags & WaveformRectified; }
+ bool waveform_logscaled() const { return _flags & WaveformLogScaled; }
bool waveform_visible() const { return _flags & WaveformVisible; }
bool envelope_visible() const { return _flags & EnvelopeVisible; }
@@ -116,7 +118,8 @@ class AudioRegionView : public RegionView
enum Flags {
EnvelopeVisible = 0x1,
WaveformVisible = 0x4,
- WaveformRectified = 0x8
+ WaveformRectified = 0x8,
+ WaveformLogScaled = 0x10,
};
vector<ArdourCanvas::WaveView *> waves;
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index bef35c572c..14b93c7182 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -56,7 +56,9 @@ AudioStreamView::AudioStreamView (AudioTimeAxisView& tv)
: StreamView (tv)
{
crossfades_visible = true;
-
+ _waveform_scale = LinearWaveform;
+ _waveform_shape = Traditional;
+
if (tv.is_track())
stream_base_color = color_map[cAudioTrackBase];
else
@@ -143,6 +145,14 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
/* great. we already have a AudioRegionView for this Region. use it again. */
(*i)->set_valid (true);
+
+ // this might not be necessary
+ AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
+ if (arv) {
+ arv->set_waveform_scale (_waveform_scale);
+ arv->set_waveform_shape (_waveform_shape);
+ }
+
return;
}
}
@@ -161,6 +171,27 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
region_view->init (region_color, wait_for_waves);
region_view->set_amplitude_above_axis(_amplitude_above_axis);
region_views.push_front (region_view);
+
+ /* if this was the first one, then lets query the waveform scale and shape.
+ otherwise, we set it to the current value */
+
+ if (region_views.size() == 1) {
+ if (region_view->waveform_logscaled()) {
+ _waveform_scale = LogWaveform;
+ } else {
+ _waveform_scale = LinearWaveform;
+ }
+
+ if (region_view->waveform_rectified()) {
+ _waveform_shape = Rectified;
+ } else {
+ _waveform_shape = Traditional;
+ }
+ }
+ else {
+ region_view->set_waveform_scale(_waveform_scale);
+ region_view->set_waveform_shape(_waveform_shape);
+ }
/* follow global waveform setting */
@@ -237,7 +268,7 @@ AudioStreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
StreamView::playlist_changed(ds);
- AudioPlaylist* apl = dynamic_cast<AudioPlaylist*>(ds->playlist());
+ boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist>(ds->playlist());
if (apl)
playlist_connections.push_back (apl->NewCrossfade.connect (mem_fun (*this, &AudioStreamView::add_crossfade)));
}
@@ -326,7 +357,7 @@ AudioStreamView::redisplay_diskstream ()
if (_trackview.is_audio_track()) {
_trackview.get_diskstream()->playlist()->foreach_region (static_cast<StreamView*>(this), &StreamView::add_region_view);
- AudioPlaylist* apl = dynamic_cast<AudioPlaylist*>(_trackview.get_diskstream()->playlist());
+ boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist>(_trackview.get_diskstream()->playlist());
if (apl)
apl->foreach_crossfade (this, &AudioStreamView::add_crossfade);
}
@@ -380,8 +411,20 @@ AudioStreamView::set_waveform_shape (WaveformShape shape)
if (arv)
arv->set_waveform_shape (shape);
}
+ _waveform_shape = shape;
}
-
+
+void
+AudioStreamView::set_waveform_scale (WaveformScale scale)
+{
+ for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
+ AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
+ if (arv)
+ arv->set_waveform_scale (scale);
+ }
+ _waveform_scale = scale;
+}
+
void
AudioStreamView::setup_rec_box ()
{
diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h
index 79aef2c042..ba0767a5e4 100644
--- a/gtk2_ardour/audio_streamview.h
+++ b/gtk2_ardour/audio_streamview.h
@@ -59,6 +59,9 @@ class AudioStreamView : public StreamView
~AudioStreamView ();
void set_waveform_shape (WaveformShape);
+ WaveformShape get_waveform_shape () const { return _waveform_shape; }
+ void set_waveform_scale (WaveformScale);
+ WaveformScale get_waveform_scale () const { return _waveform_scale; }
int set_height (gdouble h);
int set_samples_per_unit (gdouble spp);
@@ -100,6 +103,9 @@ class AudioStreamView : public StreamView
typedef list<CrossfadeView*> CrossfadeViewList;
CrossfadeViewList crossfade_views;
bool crossfades_visible;
+
+ WaveformShape _waveform_shape;
+ WaveformScale _waveform_scale;
};
#endif /* __ardour_audio_streamview_h__ */
diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc
index 7f6bc50222..11d151fb91 100644
--- a/gtk2_ardour/audio_time_axis.cc
+++ b/gtk2_ardour/audio_time_axis.cc
@@ -30,7 +30,6 @@
#include <pbd/error.h>
#include <pbd/stl_delete.h>
-#include <pbd/whitespace.h>
#include <pbd/memento_command.h>
#include <gtkmm2ext/gtk_ui.h>
@@ -133,6 +132,8 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
controls_base_selected_name = "AudioBusControlsBaseSelected";
controls_base_unselected_name = "AudioBusControlsBaseUnselected";
}
+
+ post_construct ();
}
AudioTimeAxisView::~AudioTimeAxisView ()
@@ -260,14 +261,40 @@ AudioTimeAxisView::append_extra_display_menu_items ()
waveform_item->set_active (editor.show_waveforms());
ignore_toggle = false;
+ waveform_items.push_back (SeparatorElem());
+
RadioMenuItem::Group group;
-
+
waveform_items.push_back (RadioMenuElem (group, _("Traditional"), bind (mem_fun(*this, &AudioTimeAxisView::set_waveform_shape), Traditional)));
traditional_item = static_cast<RadioMenuItem *> (&waveform_items.back());
waveform_items.push_back (RadioMenuElem (group, _("Rectified"), bind (mem_fun(*this, &AudioTimeAxisView::set_waveform_shape), Rectified)));
rectified_item = static_cast<RadioMenuItem *> (&waveform_items.back());
+ waveform_items.push_back (SeparatorElem());
+
+ RadioMenuItem::Group group2;
+
+ waveform_items.push_back (RadioMenuElem (group2, _("Linear"), bind (mem_fun(*this, &AudioTimeAxisView::set_waveform_scale), LinearWaveform)));
+ linearscale_item = static_cast<RadioMenuItem *> (&waveform_items.back());
+
+ waveform_items.push_back (RadioMenuElem (group2, _("Logarithmic"), bind (mem_fun(*this, &AudioTimeAxisView::set_waveform_scale), LogWaveform)));
+ logscale_item = static_cast<RadioMenuItem *> (&waveform_items.back());
+
+ // setting initial item state
+ AudioStreamView* asv = audio_view();
+ if (asv) {
+ ignore_toggle = true;
+ if (asv->get_waveform_shape() == Rectified)
+ rectified_item->set_active(true);
+ else traditional_item->set_active(true);
+
+ if (asv->get_waveform_scale() == LogWaveform)
+ logscale_item->set_active(true);
+ else linearscale_item->set_active(true);
+ ignore_toggle = false;
+ }
+
items.push_back (MenuElem (_("Waveform"), *waveform_menu));
}
@@ -310,7 +337,7 @@ AudioTimeAxisView::set_waveform_shape (WaveformShape shape)
{
AudioStreamView* asv = audio_view();
- if (asv) {
+ if (asv && !ignore_toggle) {
asv->set_waveform_shape (shape);
}
@@ -318,6 +345,18 @@ AudioTimeAxisView::set_waveform_shape (WaveformShape shape)
}
void
+AudioTimeAxisView::set_waveform_scale (WaveformScale scale)
+{
+ AudioStreamView* asv = audio_view();
+
+ if (asv && !ignore_toggle) {
+ asv->set_waveform_scale (scale);
+ }
+
+ map_frozen ();
+}
+
+void
AudioTimeAxisView::add_gain_automation_child ()
{
XMLProperty* prop;
diff --git a/gtk2_ardour/audio_time_axis.h b/gtk2_ardour/audio_time_axis.h
index 2162771285..95bd8c0955 100644
--- a/gtk2_ardour/audio_time_axis.h
+++ b/gtk2_ardour/audio_time_axis.h
@@ -98,6 +98,7 @@ class AudioTimeAxisView : public RouteTimeAxisView
void toggle_show_waveforms ();
void set_waveform_shape (WaveformShape);
void toggle_waveforms ();
+ void set_waveform_scale (WaveformScale);
void show_all_automation ();
void show_existing_automation ();
@@ -125,6 +126,8 @@ class AudioTimeAxisView : public RouteTimeAxisView
Gtk::CheckMenuItem* waveform_item;
Gtk::RadioMenuItem* traditional_item;
Gtk::RadioMenuItem* rectified_item;
+ Gtk::RadioMenuItem* linearscale_item;
+ Gtk::RadioMenuItem* logscale_item;
Gtk::CheckMenuItem* gain_automation_item;
Gtk::CheckMenuItem* pan_automation_item;
};
diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc
index 44c100fd37..1dc62f1f42 100644
--- a/gtk2_ardour/automation_line.cc
+++ b/gtk2_ardour/automation_line.cc
@@ -21,6 +21,7 @@
#include <cmath>
#include <climits>
#include <vector>
+#include <fstream>
#include <pbd/stl_delete.h>
#include <pbd/memento_command.h>
@@ -348,13 +349,6 @@ AutomationLine::nth (uint32_t n)
}
void
-AutomationLine::modify_view (ControlPoint& cp, double x, double y, bool with_push)
-{
- modify_view_point (cp, x, y, with_push);
- update_line ();
-}
-
-void
AutomationLine::modify_view_point (ControlPoint& cp, double x, double y, bool with_push)
{
double delta = 0.0;
@@ -416,7 +410,7 @@ AutomationLine::modify_view_point (ControlPoint& cp, double x, double y, bool wi
ControlPoint* after;
/* find the first point that can't move */
-
+
for (uint32_t n = cp.view_index + 1; (after = nth (n)) != 0; ++n) {
if (!after->can_slide) {
x_limit = after->get_x() - 1.0;
@@ -471,14 +465,10 @@ AutomationLine::modify_view_point (ControlPoint& cp, double x, double y, bool wi
void
AutomationLine::reset_line_coords (ControlPoint& cp)
{
- line_points[cp.view_index].set_x (cp.get_x());
- line_points[cp.view_index].set_y (cp.get_y());
-}
-
-void
-AutomationLine::update_line ()
-{
- line->property_points() = line_points;
+ if (cp.view_index < line_points.size()) {
+ line_points[cp.view_index].set_x (cp.get_x());
+ line_points[cp.view_index].set_y (cp.get_y());
+ }
}
void
@@ -491,10 +481,8 @@ AutomationLine::sync_model_with_view_line (uint32_t start, uint32_t end)
for (uint32_t i = start; i <= end; ++i) {
p = nth(i);
- sync_model_with_view_point(*p);
+ sync_model_with_view_point (*p, false, 0);
}
-
-
}
void
@@ -508,7 +496,6 @@ AutomationLine::model_representation (ControlPoint& cp, ModelRepresentation& mr)
mr.xval = (nframes_t) floor (cp.get_x());
mr.yval = 1.0 - (cp.get_y() / _height);
-
/* if xval has not changed, set it directly from the model to avoid rounding errors */
if (mr.xval == trackview.editor.frame_to_unit((*cp.model)->when)) {
@@ -517,7 +504,6 @@ AutomationLine::model_representation (ControlPoint& cp, ModelRepresentation& mr)
mr.xval = trackview.editor.unit_to_frame (mr.xval);
}
-
/* virtual call: this will do the right thing
for whatever particular type of line we are.
*/
@@ -567,98 +553,6 @@ AutomationLine::model_representation (ControlPoint& cp, ModelRepresentation& mr)
}
void
-AutomationLine::sync_model_from (ControlPoint& cp)
-{
- ControlPoint* p;
- uint32_t lasti;
-
- sync_model_with_view_point (cp);
-
- /* we might have moved all points after `cp' by some amount
- if we pressed the with_push modifyer some of the time during the drag
- so all subsequent points have to be resynced
- */
-
- lasti = control_points.size() - 1;
- p = nth (lasti);
-
- update_pending = true;
-
- while (p != &cp && lasti) {
- sync_model_with_view_point (*p);
- --lasti;
- p = nth (lasti);
- }
-}
-
-void
-AutomationLine::sync_model_with_view_point (ControlPoint& cp)
-{
- ModelRepresentation mr;
- double ydelta;
-
- model_representation (cp, mr);
-
- /* part 4: how much are we changing the central point by */
-
- ydelta = mr.yval - mr.ypos;
-
- /* IMPORTANT: changing the model when the x-coordinate changes
- may invalidate the iterators that we are using. this means that we have
- to change the points before+after the one corresponding to the visual CP
- first (their x-coordinate doesn't change). then we change the
- "main" point.
-
- apply the full change to the central point, and interpolate
- in each direction to cover all model points represented
- by the control point.
- */
-
- /* part 5: change all points before the primary point */
-
- for (AutomationList::iterator i = mr.start; i != cp.model; ++i) {
-
- double delta;
-
- delta = ydelta * ((*i)->when - mr.xmin) / (mr.xpos - mr.xmin);
-
- /* x-coordinate (generally time) stays where it is,
- y-coordinate moves by a certain amount.
- */
-
- update_pending = true;
- change_model (i, (*i)->when, mr.yval + delta);
- }
-
- /* part 6: change later points */
-
- AutomationList::iterator i = cp.model;
-
- ++i;
-
- while (i != mr.end) {
-
- double delta;
-
- delta = ydelta * (mr.xmax - (*i)->when) / (mr.xmax - mr.xpos);
-
- /* x-coordinate (generally time) stays where it is,
- y-coordinate moves by a certain amount.
- */
-
- update_pending = true;
- change_model (i, (*i)->when, (*i)->value + delta);
-
- ++i;
- }
-
- /* part 7: change the primary point */
-
- update_pending = true;
- change_model (cp.model, mr.xval, mr.yval);
-}
-
-void
AutomationLine::determine_visible_control_points (ALPoints& points)
{
uint32_t view_index, pi, n;
@@ -748,7 +642,8 @@ AutomationLine::determine_visible_control_points (ALPoints& points)
if (view_index && pi != npoints && /* not the first, not the last */
(((this_rx == prev_rx) && (this_ry == prev_ry)) || /* same point */
- (((this_rx - prev_rx) < (box_size + 2)) && /* too close horizontally */
+ (this_rx == prev_rx) || /* identical x coordinate */
+ (((this_rx - prev_rx) < (box_size + 2)) && /* not identical, but still too close horizontally */
((abs ((int)(this_ry - prev_ry)) < (int) (box_size + 2)))))) { /* too close vertically */
continue;
}
@@ -810,7 +705,7 @@ AutomationLine::determine_visible_control_points (ALPoints& points)
view_index++;
}
-
+
/* discard extra CP's to avoid confusing ourselves */
while (control_points.size() > view_index) {
@@ -849,9 +744,11 @@ AutomationLine::determine_visible_control_points (ALPoints& points)
if (_visible) {
line->show ();
}
+
}
set_selected_points (trackview.editor.get_selection().points);
+
}
string
@@ -886,7 +783,7 @@ AutomationLine::invalidate_point (ALPoints& p, uint32_t index)
}
void
-AutomationLine::start_drag (ControlPoint* cp, float fraction)
+AutomationLine::start_drag (ControlPoint* cp, nframes_t x, float fraction)
{
if (trackview.editor.current_session() == 0) { /* how? */
return;
@@ -901,24 +798,43 @@ AutomationLine::start_drag (ControlPoint* cp, float fraction)
}
trackview.editor.current_session()->begin_reversible_command (str);
- trackview.editor.current_session()->add_command (new MementoCommand<AutomationLine>(*this, &get_state(), 0));
+ trackview.editor.current_session()->add_command (new MementoCommand<AutomationList>(alist, &get_state(), 0));
+ drag_x = x;
+ drag_distance = 0;
first_drag_fraction = fraction;
last_drag_fraction = fraction;
drags = 0;
+ did_push = false;
}
void
AutomationLine::point_drag (ControlPoint& cp, nframes_t x, float fraction, bool with_push)
{
- modify_view (cp, x, fraction, with_push);
+ if (x > drag_x) {
+ drag_distance += (x - drag_x);
+ } else {
+ drag_distance -= (drag_x - x);
+ }
+
+ drag_x = x;
+
+ modify_view_point (cp, x, fraction, with_push);
+
+ if (line_points.size() > 1) {
+ line->property_points() = line_points;
+ }
+
drags++;
+ did_push = with_push;
}
void
AutomationLine::line_drag (uint32_t i1, uint32_t i2, float fraction, bool with_push)
{
double ydelta = fraction - last_drag_fraction;
+
+ did_push = with_push;
last_drag_fraction = fraction;
@@ -932,7 +848,9 @@ AutomationLine::line_drag (uint32_t i1, uint32_t i2, float fraction, bool with_p
modify_view_point (*cp, trackview.editor.unit_to_frame (cp->get_x()), ((_height - cp->get_y()) /_height) + ydelta, with_push);
}
- update_line ();
+ if (line_points.size() > 1) {
+ line->property_points() = line_points;
+ }
drags++;
}
@@ -940,20 +858,95 @@ AutomationLine::line_drag (uint32_t i1, uint32_t i2, float fraction, bool with_p
void
AutomationLine::end_drag (ControlPoint* cp)
{
- if (drags) {
+ if (!drags) {
+ return;
+ }
- if (cp) {
- sync_model_from (*cp);
- } else {
- sync_model_with_view_line (line_drag_cp1, line_drag_cp2);
+ alist.freeze ();
+
+ if (cp) {
+ sync_model_with_view_point (*cp, did_push, drag_distance);
+ } else {
+ sync_model_with_view_line (line_drag_cp1, line_drag_cp2);
+ }
+
+ alist.thaw ();
+
+ update_pending = false;
+
+ trackview.editor.current_session()->add_command (new MementoCommand<AutomationList>(alist, 0, &alist.get_state()));
+ trackview.editor.current_session()->commit_reversible_command ();
+ trackview.editor.current_session()->set_dirty ();
+}
+
+
+void
+AutomationLine::sync_model_with_view_point (ControlPoint& cp, bool did_push, int64_t distance)
+{
+ ModelRepresentation mr;
+ double ydelta;
+
+ model_representation (cp, mr);
+
+ /* how much are we changing the central point by */
+
+ ydelta = mr.yval - mr.ypos;
+
+ /*
+ apply the full change to the central point, and interpolate
+ on both axes to cover all model points represented
+ by the control point.
+ */
+
+ /* change all points before the primary point */
+
+ for (AutomationList::iterator i = mr.start; i != cp.model; ++i) {
+
+ double fract = ((*i)->when - mr.xmin) / (mr.xpos - mr.xmin);
+ double y_delta = ydelta * fract;
+ double x_delta = distance * fract;
+
+ /* interpolate */
+
+ if (y_delta || x_delta) {
+ alist.modify (i, (*i)->when + x_delta, mr.ymin + y_delta);
+ }
+ }
+
+ /* change the primary point */
+
+ update_pending = true;
+ alist.modify (cp.model, mr.xval, mr.yval);
+
+
+ /* change later points */
+
+ AutomationList::iterator i = cp.model;
+
+ ++i;
+
+ while (i != mr.end) {
+
+ double delta = ydelta * (mr.xmax - (*i)->when) / (mr.xmax - mr.xpos);
+
+ /* all later points move by the same distance along the x-axis as the main point */
+
+ if (delta) {
+ alist.modify (i, (*i)->when + distance, (*i)->value + delta);
}
+
+ ++i;
+ }
+
+ if (did_push) {
- update_pending = false;
+ /* move all points after the range represented by the view by the same distance
+ as the main point moved.
+ */
- trackview.editor.current_session()->add_command (new MementoCommand<AutomationLine>(*this, 0, &get_state()));
- trackview.editor.current_session()->commit_reversible_command ();
- trackview.editor.current_session()->set_dirty ();
+ alist.slide (mr.end, drag_distance);
}
+
}
bool
@@ -1027,11 +1020,11 @@ AutomationLine::remove_point (ControlPoint& cp)
model_representation (cp, mr);
trackview.editor.current_session()->begin_reversible_command (_("remove control point"));
- XMLNode &before = get_state();
+ XMLNode &before = alist.get_state();
alist.erase (mr.start, mr.end);
- trackview.editor.current_session()->add_command(new MementoCommand<AutomationLine>(*this, &before, &get_state()));
+ trackview.editor.current_session()->add_command(new MementoCommand<AutomationList>(alist, &before, &alist.get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
@@ -1149,8 +1142,6 @@ AutomationLine::show_selection ()
{
TimeSelection& time (trackview.editor.get_selection().time);
- // cerr << "show selection\n";
-
for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
(*i)->selected = false;
@@ -1174,7 +1165,6 @@ AutomationLine::show_selection ()
void
AutomationLine::hide_selection ()
{
- // cerr << "hide selection\n";
// show_selection ();
}
@@ -1239,7 +1229,6 @@ AutomationLine::clear ()
void
AutomationLine::change_model (AutomationList::iterator i, double x, double y)
{
- alist.modify (i, (nframes_t) x, y);
}
void
diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h
index b73a1c548a..1349efac4b 100644
--- a/gtk2_ardour/automation_line.h
+++ b/gtk2_ardour/automation_line.h
@@ -117,7 +117,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulThingWithGoin
/* dragging API */
- virtual void start_drag (ControlPoint*, float fraction);
+ virtual void start_drag (ControlPoint*, nframes_t x, float fraction);
virtual void point_drag(ControlPoint&, nframes_t x, float, bool with_push);
virtual void end_drag (ControlPoint*);
virtual void line_drag(uint32_t i1, uint32_t i2, float, bool with_push);
@@ -174,7 +174,8 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulThingWithGoin
bool update_pending : 1;
bool no_draw : 1;
bool points_visible : 1;
-
+ bool did_push;
+
ArdourCanvas::Group& _parent_group;
ArdourCanvas::Group* group;
ArdourCanvas::Line* line; /* line */
@@ -193,10 +194,8 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulThingWithGoin
static bool invalid_point (ALPoints&, uint32_t index);
void determine_visible_control_points (ALPoints&);
- void sync_model_from (ControlPoint&);
- void sync_model_with_view_point (ControlPoint&);
+ void sync_model_with_view_point (ControlPoint&, bool did_push, int64_t distance);
void sync_model_with_view_line (uint32_t, uint32_t);
- void modify_view (ControlPoint&, double, double, bool with_push);
virtual void change_model (ARDOUR::AutomationList::iterator, double x, double y);
virtual void change_model_range (ARDOUR::AutomationList::iterator,ARDOUR::AutomationList::iterator, double delta, float ydelta);
@@ -212,10 +211,11 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulThingWithGoin
double last_drag_fraction;
uint32_t line_drag_cp1;
uint32_t line_drag_cp2;
+ int64_t drag_x;
+ int64_t drag_distance;
void modify_view_point(ControlPoint&, double, double, bool with_push);
void reset_line_coords (ControlPoint&);
- void update_line ();
double control_point_box_size ();
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc
index 2efb621b37..776dff37f2 100644
--- a/gtk2_ardour/automation_time_axis.cc
+++ b/gtk2_ardour/automation_time_axis.cc
@@ -21,6 +21,9 @@ using namespace PBD;
using namespace Gtk;
using namespace Editing;
+Pango::FontDescription AutomationTimeAxisView::name_font;
+bool AutomationTimeAxisView::have_name_font = false;
+
AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Route> r, PublicEditor& e, TimeAxisView& rent,
ArdourCanvas::Canvas& canvas, const string & nom,
const string & state_name, const string & nomparent)
@@ -34,6 +37,11 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
clear_button (_("clear")),
auto_button (X_("")) /* force addition of a label */
{
+ if (!have_name_font) {
+ name_font = get_font_for_style (X_("AutomationTrackName"));
+ have_name_font = true;
+ }
+
automation_menu = 0;
in_destructor = false;
auto_off_item = 0;
@@ -84,14 +92,14 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
string shortpname = _name;
bool shortened = false;
-
- if (_name.length()) {
- if (shortpname.length() > 18) {
- shortpname = shortpname.substr (0, 16);
- shortpname += "...";
- shortened = true;
- }
+
+ int ignore_width;
+ shortpname = fit_to_pixels (_name, 60, name_font, ignore_width, true);
+
+ if (shortpname != _name ){
+ shortened = true;
}
+
name_label.set_text (shortpname);
name_label.set_alignment (Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER);
@@ -99,11 +107,8 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
/* limit the plug name string */
- string pname = nomparent;
-
- if (pname.length() > 14) {
- pname = pname.substr (0, 11);
- pname += "...";
+ string pname = fit_to_pixels (nomparent, 60, name_font, ignore_width, true);
+ if (pname != nomparent) {
shortened = true;
}
@@ -150,7 +155,10 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
controls_frame.set_shadow_type (Gtk::SHADOW_ETCHED_OUT);
XMLNode* xml_node = get_parent_with_state()->get_child_xml_node (_state_name);
- set_state (*xml_node);
+
+ if (xml_node) {
+ set_state (*xml_node);
+ }
/* make sure labels etc. are correct */
@@ -186,7 +194,7 @@ AutomationTimeAxisView::auto_clicked ()
bind (mem_fun(*this, &AutomationTimeAxisView::set_automation_state), (AutoState) Touch)));
}
- automation_menu->popup (1, 0);
+ automation_menu->popup (1, gtk_get_current_event_time());
}
diff --git a/gtk2_ardour/automation_time_axis.h b/gtk2_ardour/automation_time_axis.h
index 30fa71bea9..0eb525f6c1 100644
--- a/gtk2_ardour/automation_time_axis.h
+++ b/gtk2_ardour/automation_time_axis.h
@@ -121,6 +121,9 @@ class AutomationTimeAxisView : public TimeAxisView {
void entered ();
void exited ();
+
+ static Pango::FontDescription name_font;
+ static bool have_name_font;
};
#endif /* __ardour_gtk_automation_time_axis_h__ */
diff --git a/gtk2_ardour/canvas-waveview.c b/gtk2_ardour/canvas-waveview.c
index 080f6871fa..747761ea9a 100644
--- a/gtk2_ardour/canvas-waveview.c
+++ b/gtk2_ardour/canvas-waveview.c
@@ -26,6 +26,7 @@
#include <ardour/dB.h>
+#include "logmeter.h"
#include "canvas-waveview.h"
#include "rgb_macros.h"
@@ -49,7 +50,8 @@ enum {
PROP_HEIGHT,
PROP_WAVE_COLOR,
PROP_RECTIFIED,
- PROP_REGION_START
+ PROP_REGION_START,
+ PROP_LOGSCALED,
};
static void gnome_canvas_waveview_class_init (GnomeCanvasWaveViewClass *class);
@@ -253,6 +255,13 @@ gnome_canvas_waveview_class_init (GnomeCanvasWaveViewClass *class)
g_param_spec_boolean ("rectified", NULL, NULL,
FALSE,
(G_PARAM_READABLE | G_PARAM_WRITABLE)));
+
+ g_object_class_install_property
+ (gobject_class,
+ PROP_LOGSCALED,
+ g_param_spec_boolean ("logscaled", NULL, NULL,
+ FALSE,
+ (G_PARAM_READABLE | G_PARAM_WRITABLE)));
g_object_class_install_property
(gobject_class,
@@ -308,6 +317,7 @@ gnome_canvas_waveview_init (GnomeCanvasWaveView *waveview)
waveview->gain_curve_function = NULL;
waveview->gain_src = NULL;
waveview->rectified = FALSE;
+ waveview->logscaled = FALSE;
waveview->region_start = 0;
waveview->samples_per_unit = 1.0;
waveview->amplitude_above_axis = 1.0;
@@ -577,7 +587,29 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_
free (gain);
}
+
+ /* do optional log scaling. this implementation is not particularly efficient */
+ if (waveview->logscaled) {
+ guint32 n;
+ GnomeCanvasWaveViewCacheEntry* buf = cache->data;
+
+ for (n = 0; n < cache->data_size; ++n) {
+
+ if (buf[n].max > 0.0f) {
+ buf[n].max = alt_log_meter(coefficient_to_dB(buf[n].max));
+ } else if (buf[n].max < 0.0f) {
+ buf[n].max = -alt_log_meter(coefficient_to_dB(-buf[n].max));
+ }
+
+ if (buf[n].min > 0.0f) {
+ buf[n].min = alt_log_meter(coefficient_to_dB(buf[n].min));
+ } else if (buf[n].min < 0.0f) {
+ buf[n].min = -alt_log_meter(coefficient_to_dB(-buf[n].min));
+ }
+ }
+ }
+
cache->start = ostart;
cache->end = new_cache_end;
@@ -770,6 +802,17 @@ gnome_canvas_waveview_set_property (GObject *object,
redraw = TRUE;
}
break;
+ case PROP_LOGSCALED:
+ if (waveview->logscaled != g_value_get_boolean(value)) {
+ waveview->logscaled = g_value_get_boolean(value);
+ if (waveview->cache_updater) {
+ waveview->cache->start = 0;
+ waveview->cache->end = 0;
+ }
+ redraw = TRUE;
+ calc_bounds = TRUE;
+ }
+ break;
case PROP_REGION_START:
waveview->region_start = g_value_get_uint(value);
redraw = TRUE;
@@ -869,6 +912,10 @@ gnome_canvas_waveview_get_property (GObject *object,
g_value_set_boolean (value, waveview->rectified);
break;
+ case PROP_LOGSCALED:
+ g_value_set_boolean (value, waveview->logscaled);
+ break;
+
case PROP_REGION_START:
g_value_set_uint (value, waveview->region_start);
break;
diff --git a/gtk2_ardour/canvas-waveview.h b/gtk2_ardour/canvas-waveview.h
index 75281f69eb..81cf35910e 100644
--- a/gtk2_ardour/canvas-waveview.h
+++ b/gtk2_ardour/canvas-waveview.h
@@ -101,7 +101,8 @@ struct _GnomeCanvasWaveView
uint32_t wave_color;
char rectified;
-
+ char logscaled;
+
/* These are updated by the update() routine
to optimize the render() routine, which may
be called several times after a single update().
diff --git a/gtk2_ardour/crossfade_edit.cc b/gtk2_ardour/crossfade_edit.cc
index 6032bfa561..cf1994eb06 100644
--- a/gtk2_ardour/crossfade_edit.cc
+++ b/gtk2_ardour/crossfade_edit.cc
@@ -96,7 +96,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, Crossfade& xf, double my, double m
select_in_button (_("Fade In")),
select_out_button (_("Fade Out"))
{
- set_wmclass ("ardour_automationedit", "Ardour");
+ set_wmclass (X_("ardour_automationedit"), "Ardour");
set_name ("CrossfadeEditWindow");
set_position (Gtk::WIN_POS_MOUSE);
@@ -698,8 +698,6 @@ CrossfadeEditor::redraw ()
}
- // GTK2FIX some odd math to fix up here
-
size_t last_spt = (npoints + 3) - 1;
for (size_t i = 0; i < npoints; ++i) {
diff --git a/gtk2_ardour/crossfade_view.cc b/gtk2_ardour/crossfade_view.cc
index 42a1a47227..7567b04282 100644
--- a/gtk2_ardour/crossfade_view.cc
+++ b/gtk2_ardour/crossfade_view.cc
@@ -52,7 +52,7 @@ CrossfadeView::CrossfadeView (ArdourCanvas::Group *parent,
: TimeAxisViewItem ("xfade" /*xf.name()*/, *parent, tv, spu, basic_color, xf.position(),
- xf.overlap_length(), TimeAxisViewItem::Visibility (TimeAxisViewItem::ShowFrame)),
+ xf.length(), TimeAxisViewItem::Visibility (TimeAxisViewItem::ShowFrame)),
crossfade (xf),
left_view (lview),
right_view (rview)
@@ -124,7 +124,7 @@ CrossfadeView::crossfade_changed (Change what_changed)
if (what_changed & BoundsChanged) {
set_position (crossfade.position(), this);
- set_duration (crossfade.overlap_length(), this);
+ set_duration (crossfade.length(), this);
need_redraw_curves = true;
}
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index bb87204916..3c1c89f927 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -197,8 +197,8 @@ Editor::Editor (AudioEngine& eng)
/* tool bar related */
- edit_cursor_clock (X_("EditCursorClock"), true),
- zoom_range_clock (X_("ZoomRangeClock"), true, true),
+ edit_cursor_clock (X_("editcursor"), false, X_("EditCursorClock"), true),
+ zoom_range_clock (X_("zoomrange"), false, X_("ZoomRangeClock"), true, true),
toolbar_selection_clock_table (2,3),
@@ -211,7 +211,7 @@ Editor::Editor (AudioEngine& eng)
/* nudge */
- nudge_clock (X_("NudgeClock"), true, true)
+ nudge_clock (X_("nudge"), false, X_("NudgeClock"), true, true)
{
constructed = false;
@@ -284,6 +284,7 @@ Editor::Editor (AudioEngine& eng)
route_list_menu = 0;
region_list_menu = 0;
marker_menu = 0;
+ start_end_marker_menu = 0;
range_marker_menu = 0;
marker_menu_item = 0;
tm_marker_menu = 0;
@@ -309,6 +310,7 @@ Editor::Editor (AudioEngine& eng)
playhead_cursor = 0;
button_release_can_deselect = true;
canvas_idle_queued = false;
+ _dragging_playhead = false;
location_marker_color = color_map[cLocationMarker];
location_range_color = color_map[cLocationRange];
@@ -444,6 +446,7 @@ Editor::Editor (AudioEngine& eng)
edit_packer.attach (controls_layout, 1, 2, 1, 2, FILL, FILL|EXPAND, 0, 0);
edit_packer.attach (track_canvas_event_box, 2, 3, 1, 2, FILL|EXPAND, FILL|EXPAND, 0, 0);
+ edit_packer.attach (zoom_box, 1, 2, 2, 3, FILL, FILL, 0, 0);
edit_packer.attach (edit_hscrollbar, 2, 3, 2, 3, FILL|EXPAND, FILL, 0, 0);
bottom_hbox.set_border_width (2);
@@ -451,7 +454,7 @@ Editor::Editor (AudioEngine& eng)
route_display_model = ListStore::create(route_display_columns);
route_list_display.set_model (route_display_model);
- route_list_display.append_column (_("Visible"), route_display_columns.visible);
+ route_list_display.append_column (_("Show"), route_display_columns.visible);
route_list_display.append_column (_("Name"), route_display_columns.text);
route_list_display.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(0));
route_list_display.get_column (1)->set_data (X_("colnum"), GUINT_TO_POINTER(1));
@@ -477,7 +480,7 @@ Editor::Editor (AudioEngine& eng)
edit_group_display.set_model (group_model);
edit_group_display.append_column (_("Name"), group_columns.text);
edit_group_display.append_column (_("Active"), group_columns.is_active);
- edit_group_display.append_column (_("Visible"), group_columns.is_visible);
+ edit_group_display.append_column (_("Show"), group_columns.is_visible);
edit_group_display.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(0));
edit_group_display.get_column (1)->set_data (X_("colnum"), GUINT_TO_POINTER(1));
edit_group_display.get_column (2)->set_data (X_("colnum"), GUINT_TO_POINTER(2));
@@ -597,7 +600,7 @@ Editor::Editor (AudioEngine& eng)
named_selection_display.get_selection()->set_mode (SELECTION_SINGLE);
named_selection_display.set_size_request (100, -1);
- named_selection_display.signal_button_press_event().connect (mem_fun(*this, &Editor::named_selection_display_button_press), false);
+ named_selection_display.signal_button_release_event().connect (mem_fun(*this, &Editor::named_selection_display_button_press), false);
named_selection_display.get_selection()->signal_changed().connect (mem_fun (*this, &Editor::named_selection_display_selection_changed));
/* SNAPSHOTS */
@@ -685,8 +688,29 @@ Editor::Editor (AudioEngine& eng)
fade_context_menu.set_name ("ArdourContextMenu");
+ /* icons, titles, WM stuff */
+
+ list<Glib::RefPtr<Gdk::Pixbuf> > window_icons;
+ Glib::RefPtr<Gdk::Pixbuf> icon;
+
+ if ((icon = ::get_icon ("ardour_icon_16px")) != 0) {
+ window_icons.push_back (icon);
+ }
+ if ((icon = ::get_icon ("ardour_icon_22px")) != 0) {
+ window_icons.push_back (icon);
+ }
+ if ((icon = ::get_icon ("ardour_icon_32px")) != 0) {
+ window_icons.push_back (icon);
+ }
+ if ((icon = ::get_icon ("ardour_icon_48px")) != 0) {
+ window_icons.push_back (icon);
+ }
+ if (!window_icons.empty()) {
+ set_icon_list (window_icons);
+ set_default_icon_list (window_icons);
+ }
set_title (_("ardour: editor"));
- set_wmclass (_("ardour_editor"), "Ardour");
+ set_wmclass (X_("ardour_editor"), "Ardour");
add (vpacker);
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
@@ -1516,7 +1540,7 @@ Editor::build_track_region_context_menu (nframes_t frame)
if (atv) {
boost::shared_ptr<Diskstream> ds;
- Playlist* pl;
+ boost::shared_ptr<Playlist> pl;
if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()))) {
Playlist::RegionList* regions = pl->regions_at ((nframes_t) floor ( (double)frame * ds->speed()));
@@ -1543,10 +1567,10 @@ Editor::build_track_crossfade_context_menu (nframes_t frame)
if (atv) {
boost::shared_ptr<Diskstream> ds;
- Playlist* pl;
- AudioPlaylist* apl;
+ boost::shared_ptr<Playlist> pl;
+ boost::shared_ptr<AudioPlaylist> apl;
- if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()) != 0) && ((apl = dynamic_cast<AudioPlaylist*> (pl)) != 0)) {
+ if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()) != 0) && ((apl = boost::dynamic_pointer_cast<AudioPlaylist> (pl)) != 0)) {
Playlist::RegionList* regions = pl->regions_at (frame);
AudioPlaylist::Crossfades xfades;
@@ -1860,6 +1884,7 @@ Editor::add_selection_context_items (Menu_Helpers::MenuList& edit_items)
items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Select all in range"), mem_fun(*this, &Editor::select_all_selectables_using_time_selection)));
items.push_back (SeparatorElem());
+ items.push_back (MenuElem (_("Add Range Markers"), mem_fun (*this, &Editor::add_location_from_selection)));
items.push_back (MenuElem (_("Set range to loop range"), mem_fun(*this, &Editor::set_selection_from_loop)));
items.push_back (MenuElem (_("Set range to punch range"), mem_fun(*this, &Editor::set_selection_from_punch)));
items.push_back (SeparatorElem());
@@ -2261,18 +2286,11 @@ Editor::get_state ()
TimeAxisView *
Editor::trackview_by_y_position (double y)
{
- TrackViewList::iterator iter;
- TimeAxisView *tv;
-
- for (iter = track_views.begin(); iter != track_views.end(); ++iter) {
-
- tv = *iter;
+ for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
- if (tv->hidden()) {
- continue;
- }
+ TimeAxisView *tv;
- if (tv->y_position <= y && y < ((tv->y_position + tv->height + track_spacing))) {
+ if ((tv = (*iter)->covers_y_position (y)) != 0) {
return tv;
}
}
@@ -2292,7 +2310,8 @@ Editor::snap_to (nframes_t& start, int32_t direction, bool for_mark)
const nframes_t one_second = session->frame_rate();
const nframes_t one_minute = session->frame_rate() * 60;
-
+ const nframes_t one_smpte_second = (nframes_t)(rint(session->smpte_frames_per_second()) * session->frames_per_smpte_frame());
+ nframes_t one_smpte_minute = (nframes_t)(rint(session->smpte_frames_per_second()) * session->frames_per_smpte_frame() * 60);
nframes_t presnap = start;
switch (snap_type) {
@@ -2306,8 +2325,9 @@ Editor::snap_to (nframes_t& start, int32_t direction, bool for_mark)
start = (nframes_t) floor ((double) start / (one_second / 75)) * (one_second / 75);
}
break;
+
case SnapToSMPTEFrame:
- if (direction) {
+ if (fmod((double)start, (double)session->frames_per_smpte_frame()) > (session->frames_per_smpte_frame() / 2)) {
start = (nframes_t) (ceil ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame());
} else {
start = (nframes_t) (floor ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame());
@@ -2321,10 +2341,10 @@ Editor::snap_to (nframes_t& start, int32_t direction, bool for_mark)
} else {
start -= session->smpte_offset ();
}
- if (direction > 0) {
- start = (nframes_t) ceil ((double) start / one_second) * one_second;
+ if (start % one_smpte_second > one_smpte_second / 2) {
+ start = (nframes_t) ceil ((double) start / one_smpte_second) * one_smpte_second;
} else {
- start = (nframes_t) floor ((double) start / one_second) * one_second;
+ start = (nframes_t) floor ((double) start / one_smpte_second) * one_smpte_second;
}
if (session->smpte_offset_negative())
@@ -2342,10 +2362,10 @@ Editor::snap_to (nframes_t& start, int32_t direction, bool for_mark)
} else {
start -= session->smpte_offset ();
}
- if (direction) {
- start = (nframes_t) ceil ((double) start / one_minute) * one_minute;
+ if (start % one_smpte_minute > one_smpte_minute / 2) {
+ start = (nframes_t) ceil ((double) start / one_smpte_minute) * one_smpte_minute;
} else {
- start = (nframes_t) floor ((double) start / one_minute) * one_minute;
+ start = (nframes_t) floor ((double) start / one_smpte_minute) * one_smpte_minute;
}
if (session->smpte_offset_negative())
{
@@ -2356,7 +2376,7 @@ Editor::snap_to (nframes_t& start, int32_t direction, bool for_mark)
break;
case SnapToSeconds:
- if (direction) {
+ if (start % one_second > one_second / 2) {
start = (nframes_t) ceil ((double) start / one_second) * one_second;
} else {
start = (nframes_t) floor ((double) start / one_second) * one_second;
@@ -2364,7 +2384,7 @@ Editor::snap_to (nframes_t& start, int32_t direction, bool for_mark)
break;
case SnapToMinutes:
- if (direction) {
+ if (start % one_minute > one_minute / 2) {
start = (nframes_t) ceil ((double) start / one_minute) * one_minute;
} else {
start = (nframes_t) floor ((double) start / one_minute) * one_minute;
@@ -2596,35 +2616,33 @@ Editor::setup_toolbar ()
zoom_box.set_border_width (2);
zoom_in_button.set_name ("EditorTimeButton");
+ zoom_in_button.set_size_request(-1,16);
zoom_in_button.add (*(manage (new Image (::get_icon("zoom_in")))));
zoom_in_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::temporal_zoom_step), false));
ARDOUR_UI::instance()->tooltips().set_tip (zoom_in_button, _("Zoom In"));
zoom_out_button.set_name ("EditorTimeButton");
+ zoom_out_button.set_size_request(-1,16);
zoom_out_button.add (*(manage (new Image (::get_icon("zoom_out")))));
zoom_out_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::temporal_zoom_step), true));
ARDOUR_UI::instance()->tooltips().set_tip (zoom_out_button, _("Zoom Out"));
zoom_out_full_button.set_name ("EditorTimeButton");
+ zoom_out_full_button.set_size_request(-1,16);
zoom_out_full_button.add (*(manage (new Image (::get_icon("zoom_full")))));
zoom_out_full_button.signal_clicked().connect (mem_fun(*this, &Editor::temporal_zoom_session));
ARDOUR_UI::instance()->tooltips().set_tip (zoom_out_full_button, _("Zoom to Session"));
- zoom_box.pack_start (zoom_out_button, false, false);
- zoom_box.pack_start (zoom_in_button, false, false);
- zoom_box.pack_start (zoom_range_clock, false, false);
- zoom_box.pack_start (zoom_out_full_button, false, false);
-
- ARDOUR_UI::instance()->tooltips().set_tip (zoom_range_clock, _("Current Zoom Range\n(Width of visible area)"));
-
zoom_focus_selector.set_name ("ZoomFocusSelector");
- Gtkmm2ext::set_size_request_to_display_given_text (zoom_focus_selector, "Focus Center", 2+FUDGE, 0);
+ Gtkmm2ext::set_size_request_to_display_given_text (zoom_focus_selector, "Edit Cursor", FUDGE, 0);
set_popdown_strings (zoom_focus_selector, zoom_focus_strings);
zoom_focus_selector.signal_changed().connect (mem_fun(*this, &Editor::zoom_focus_selection_done));
ARDOUR_UI::instance()->tooltips().set_tip (zoom_focus_selector, _("Zoom focus"));
- zoom_box.pack_start (zoom_focus_selector, false, false);
-
+ zoom_box.pack_start (zoom_focus_selector, true, true);
+ zoom_box.pack_start (zoom_out_button, false, false);
+ zoom_box.pack_start (zoom_in_button, false, false);
+ zoom_box.pack_start (zoom_out_full_button, false, false);
/* Edit Cursor / Snap */
@@ -2686,7 +2704,7 @@ Editor::setup_toolbar ()
hbox->pack_start (snap_box, false, false);
- hbox->pack_start (zoom_box, false, false);
+ // hbox->pack_start (zoom_box, false, false);
hbox->pack_start (*nudge_box, false, false);
hbox->show_all ();
@@ -2850,6 +2868,119 @@ Editor::commit_reversible_command ()
}
}
+struct TrackViewByPositionSorter
+{
+ bool operator() (const TimeAxisView* a, const TimeAxisView *b) {
+ return a->y_position < b->y_position;
+ }
+};
+
+bool
+Editor::extend_selection_to_track (TimeAxisView& view)
+{
+ if (selection->selected (&view)) {
+ /* already selected, do nothing */
+ return false;
+ }
+
+ if (selection->tracks.empty()) {
+
+ if (!selection->selected (&view)) {
+ selection->set (&view);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /* something is already selected, so figure out which range of things to add */
+
+ TrackViewList to_be_added;
+ TrackViewList sorted = track_views;
+ TrackViewByPositionSorter cmp;
+ bool passed_clicked = false;
+ bool forwards;
+
+ sorted.sort (cmp);
+
+ if (!selection->selected (&view)) {
+ to_be_added.push_back (&view);
+ }
+
+ /* figure out if we should go forward or backwards */
+
+ for (TrackViewList::iterator i = sorted.begin(); i != sorted.end(); ++i) {
+
+ if ((*i) == &view) {
+ passed_clicked = true;
+ }
+
+ if (selection->selected (*i)) {
+ if (passed_clicked) {
+ forwards = true;
+ } else {
+ forwards = false;
+ }
+ break;
+ }
+ }
+
+ passed_clicked = false;
+
+ if (forwards) {
+
+ for (TrackViewList::iterator i = sorted.begin(); i != sorted.end(); ++i) {
+
+ if ((*i) == &view) {
+ passed_clicked = true;
+ continue;
+ }
+
+ if (passed_clicked) {
+ if ((*i)->hidden()) {
+ continue;
+ }
+ if (selection->selected (*i)) {
+ break;
+ } else if (!(*i)->hidden()) {
+ to_be_added.push_back (*i);
+ }
+ }
+ }
+
+ } else {
+
+ for (TrackViewList::reverse_iterator r = sorted.rbegin(); r != sorted.rend(); ++r) {
+
+ if ((*r) == &view) {
+ passed_clicked = true;
+ continue;
+ }
+
+ if (passed_clicked) {
+
+ if ((*r)->hidden()) {
+ continue;
+ }
+
+ if (selection->selected (*r)) {
+ break;
+ } else if (!(*r)->hidden()) {
+ to_be_added.push_back (*r);
+ }
+ }
+ }
+ }
+
+ if (!to_be_added.empty()) {
+ selection->add (to_be_added);
+ return true;
+ }
+
+ return false;
+}
+
+
bool
Editor::set_selected_track (TimeAxisView& view, Selection::Operation op, bool no_remove)
{
@@ -2878,13 +3009,14 @@ Editor::set_selected_track (TimeAxisView& view, Selection::Operation op, bool no
case Selection::Set:
if (selection->selected (&view) && selection->tracks.size() == 1) {
/* no commit necessary */
- }
-
- selection->set (&view);
+ } else {
+ selection->set (&view);
+ commit = true;
+ }
break;
case Selection::Extend:
- /* not defined yet */
+ commit = extend_selection_to_track (view);
break;
}
@@ -2975,7 +3107,7 @@ void
Editor::mapped_set_selected_regionview_from_click (RouteTimeAxisView& tv, uint32_t ignored,
RegionView* basis, vector<RegionView*>* all_equivs)
{
- Playlist* pl;
+ boost::shared_ptr<Playlist> pl;
vector<boost::shared_ptr<Region> > results;
RegionView* marv;
boost::shared_ptr<Diskstream> ds;
@@ -2991,7 +3123,7 @@ Editor::mapped_set_selected_regionview_from_click (RouteTimeAxisView& tv, uint32
}
- if ((pl = dynamic_cast<Playlist*>(ds->playlist())) != 0) {
+ if ((pl = ds->playlist()) != 0) {
pl->get_equivalent_regions (basis->region(), results);
}
@@ -3192,7 +3324,7 @@ Editor::set_selected_regionview_from_region_list (boost::shared_ptr<Region> regi
if ((tatv = dynamic_cast<RouteTimeAxisView*> (*i)) != 0) {
- Playlist* pl;
+ boost::shared_ptr<Playlist> pl;
vector<boost::shared_ptr<Region> > results;
RegionView* marv;
boost::shared_ptr<Diskstream> ds;
@@ -3201,8 +3333,8 @@ Editor::set_selected_regionview_from_region_list (boost::shared_ptr<Region> regi
/* bus */
continue;
}
-
- if ((pl = dynamic_cast<Playlist*>(ds->playlist())) != 0) {
+
+ if ((pl = (ds->playlist())) != 0) {
pl->get_region_list_equivalent_regions (region, results);
}
@@ -3347,7 +3479,7 @@ Editor::duplicate_dialog (bool dup_region)
entry.set_text ("1");
set_size_request_to_display_given_text (entry, X_("12345678"), 20, 15);
- entry.select_region (0, entry.get_text_length());
+ entry.select_region (0, -1);
entry.grab_focus ();
@@ -3823,17 +3955,19 @@ Editor::end_location_changed (Location* location)
}
int
-Editor::playlist_deletion_dialog (Playlist* pl)
+Editor::playlist_deletion_dialog (boost::shared_ptr<Playlist> pl)
{
ArdourDialog dialog ("playlist deletion dialog");
Label label (string_compose (_("Playlist %1 is currently unused.\n"
- "If left alone, no audio files used by it will be cleaned.\n"
- "If deleted, audio files used by it alone by will cleaned."),
- pl->name()));
-
+ "If left alone, no audio files used by it will be cleaned.\n"
+ "If deleted, audio files used by it alone by will cleaned."),
+ pl->name()));
+
dialog.set_position (WIN_POS_CENTER);
dialog.get_vbox()->pack_start (label);
+ label.show ();
+
dialog.add_button (_("Delete playlist"), RESPONSE_ACCEPT);
dialog.add_button (_("Keep playlist"), RESPONSE_CANCEL);
dialog.add_button (_("Cancel"), RESPONSE_CANCEL);
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 9a18516588..63f8adaf48 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -217,6 +217,8 @@ class Editor : public PublicEditor
Selection& get_selection() const { return *selection; }
Selection& get_cut_buffer() const { return *cut_buffer; }
+ bool extend_selection_to_track (TimeAxisView&);
+
void play_selection ();
void select_all_in_track (Selection::Operation op);
void select_all (Selection::Operation op);
@@ -257,7 +259,7 @@ class Editor : public PublicEditor
void route_name_changed (TimeAxisView *);
gdouble frames_per_unit;
nframes_t leftmost_frame;
- void clear_playlist (ARDOUR::Playlist&);
+ void clear_playlist (boost::shared_ptr<ARDOUR::Playlist>);
void new_playlists ();
void copy_playlists ();
@@ -286,6 +288,7 @@ class Editor : public PublicEditor
void set_follow_playhead (bool yn);
void toggle_follow_playhead ();
bool follow_playhead() const { return _follow_playhead; }
+ bool dragging_playhead () const { return _dragging_playhead; }
void toggle_waveform_visibility ();
void toggle_waveforms_while_recording ();
@@ -293,12 +296,13 @@ class Editor : public PublicEditor
/* SMPTE timecode & video sync */
- void smpte_fps_chosen (ARDOUR::Session::SmpteFormat format);
+ void smpte_fps_chosen (ARDOUR::SmpteFormat format);
void video_pullup_chosen (ARDOUR::Session::PullupFormat pullup);
+ void subframes_per_frame_chosen (uint32_t);
void update_smpte_mode();
void update_video_pullup();
-
+ void update_subframes_per_frame ();
/* xfades */
void toggle_auto_xfade ();
@@ -652,6 +656,7 @@ class Editor : public PublicEditor
double canvas_width;
double canvas_height;
+ double full_canvas_height;
nframes_t last_canvas_frame;
bool track_canvas_map_handler (GdkEventAny*);
@@ -921,8 +926,8 @@ class Editor : public PublicEditor
void bring_in_external_audio (Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes_t& pos, bool prompt);
void do_import (vector<Glib::ustring> paths, bool split, Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes_t&, bool);
void do_embed (vector<Glib::ustring> paths, bool split, Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes_t&, bool);
- int import_sndfile (Glib::ustring path, Editing::ImportMode mode, ARDOUR::AudioTrack* track, nframes_t& pos);
- int embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode,
+ int import_sndfile (vector<Glib::ustring> paths, Editing::ImportMode mode, ARDOUR::AudioTrack* track, nframes_t& pos);
+ int embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode,
ARDOUR::AudioTrack* track, nframes_t& pos, bool prompt);
int finish_bringing_in_audio (boost::shared_ptr<ARDOUR::AudioRegion> region, uint32_t, uint32_t, ARDOUR::AudioTrack* track, nframes_t& pos, Editing::ImportMode mode);
@@ -953,7 +958,7 @@ class Editor : public PublicEditor
/* to support this ... */
void import_audio (bool as_tracks);
- void do_import (vector<string> paths, bool split, bool as_tracks);
+ void do_import (vector<Glib::ustring> paths, bool split, bool as_tracks);
void move_to_start ();
void move_to_end ();
@@ -977,6 +982,8 @@ class Editor : public PublicEditor
void clear_markers ();
void clear_ranges ();
void clear_locations ();
+ void unhide_markers ();
+ void unhide_ranges ();
void jump_forward_to_mark ();
void jump_backward_to_mark ();
void cursor_align (bool playhead_to_edit);
@@ -1036,10 +1043,12 @@ class Editor : public PublicEditor
void fade_in_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
void fade_out_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
- std::set<ARDOUR::Playlist*> motion_frozen_playlists;
+ std::set<boost::shared_ptr<ARDOUR::Playlist> > motion_frozen_playlists;
void region_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
void region_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
+ bool _dragging_playhead;
+
void cursor_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
void cursor_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
void marker_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
@@ -1198,6 +1207,7 @@ class Editor : public PublicEditor
void marker_menu_select_all_selectables_using_range ();
void marker_menu_separate_regions_using_location ();
void marker_menu_play_from ();
+ void marker_menu_play_range ();
void marker_menu_set_playhead ();
void marker_menu_set_from_playhead ();
void marker_menu_set_from_selection ();
@@ -1210,14 +1220,14 @@ class Editor : public PublicEditor
void tm_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void new_transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
- void build_range_marker_menu ();
- void build_marker_menu ();
+ void build_range_marker_menu (bool loop_or_punch);
+ void build_marker_menu (bool start_or_end);
void build_tm_marker_menu ();
- void build_transport_marker_menu ();
void build_new_transport_marker_menu ();
Gtk::Menu* tm_marker_menu;
Gtk::Menu* marker_menu;
+ Gtk::Menu* start_end_marker_menu;
Gtk::Menu* range_marker_menu;
Gtk::Menu* transport_marker_menu;
Gtk::Menu* new_transport_marker_menu;
@@ -1750,7 +1760,7 @@ class Editor : public PublicEditor
/* handling cleanup */
- int playlist_deletion_dialog (ARDOUR::Playlist*);
+ int playlist_deletion_dialog (boost::shared_ptr<ARDOUR::Playlist>);
vector<sigc::connection> session_connections;
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index a55aee6232..f99a828203 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -42,6 +42,7 @@ Editor::register_actions ()
ActionManager::register_action (editor_actions, X_("Layering"), _("Layering"));
ActionManager::register_action (editor_actions, X_("Timecode"), _("Timecode fps"));
ActionManager::register_action (editor_actions, X_("Pullup"), _("Pullup / Pulldown"));
+ ActionManager::register_action (editor_actions, X_("Subframes"), _("Subframes"));
ActionManager::register_action (editor_actions, X_("addExistingAudioFiles"), _("Add Existing Audio"));
/* add named actions for the editor */
@@ -59,7 +60,7 @@ Editor::register_actions ()
act = ActionManager::register_toggle_action (editor_actions, "toggle-xfades-active", _("Active"), mem_fun(*this, &Editor::toggle_xfades_active));
ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_toggle_action (editor_actions, "toggle-xfades-visible", _("Visible"), mem_fun(*this, &Editor::toggle_xfade_visibility));
+ act = ActionManager::register_toggle_action (editor_actions, "toggle-xfades-visible", _("Show"), mem_fun(*this, &Editor::toggle_xfade_visibility));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_toggle_action (editor_actions, "toggle-auto-xfades", _("Created Automatically"), mem_fun(*this, &Editor::toggle_auto_xfade));
ActionManager::session_sensitive_actions.push_back (act);
@@ -379,16 +380,16 @@ Editor::register_actions ()
RadioAction::Group smpte_group;
- ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte23976"), _("23.976"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), Session::smpte_23976));
- ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte24"), _("24"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), Session::smpte_24));
- ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte24976"), _("24.976"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), Session::smpte_24976));
- ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte25"), _("25"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), Session::smpte_25));
- ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte2997"), _("29.97"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), Session::smpte_2997));
- ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte2997drop"), _("29.97 drop"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), Session::smpte_2997drop));
- ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte30"), _("30"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), Session::smpte_30));
- ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte30drop"), _("30 drop"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), Session::smpte_30drop));
- ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte5994"), _("59.94"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), Session::smpte_5994));
- ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte60"), _("60"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), Session::smpte_60));
+ ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte23976"), _("23.976"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), smpte_23976));
+ ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte24"), _("24"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), smpte_24));
+ ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte24976"), _("24.976"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), smpte_24976));
+ ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte25"), _("25"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), smpte_25));
+ ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte2997"), _("29.97"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), smpte_2997));
+ ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte2997drop"), _("29.97 drop"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), smpte_2997drop));
+ ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte30"), _("30"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), smpte_30));
+ ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte30drop"), _("30 drop"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), smpte_30drop));
+ ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte5994"), _("59.94"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), smpte_5994));
+ ActionManager::register_radio_action (editor_actions, smpte_group, X_("Smpte60"), _("60"), bind (mem_fun (*this, &Editor::smpte_fps_chosen), smpte_60));
RadioAction::Group pullup_group;
@@ -402,6 +403,11 @@ Editor::register_actions ()
ActionManager::register_radio_action (editor_actions, pullup_group, X_("PullupMinus4"), _("-4.1667%"), bind (mem_fun (*this, &Editor::video_pullup_chosen), Session::pullup_Minus4));
ActionManager::register_radio_action (editor_actions, pullup_group, X_("PullupMinus4Minus1"), _("-4.1667% - 0.1%"), bind (mem_fun (*this, &Editor::video_pullup_chosen), Session::pullup_Minus4Minus1));
+ RadioAction::Group subframe_group;
+
+ ActionManager::register_radio_action (editor_actions, pullup_group, X_("Subframes80"), _("80 per frame"), bind (mem_fun (*this, &Editor::subframes_per_frame_chosen), 80));
+ ActionManager::register_radio_action (editor_actions, pullup_group, X_("Subframes100"), _("100 per frame"), bind (mem_fun (*this, &Editor::subframes_per_frame_chosen), 100));
+
ActionManager::add_action_group (rl_actions);
ActionManager::add_action_group (zoom_actions);
ActionManager::add_action_group (mouse_mode_actions);
@@ -496,33 +502,37 @@ Editor::update_smpte_mode ()
RefPtr<Action> act;
const char* action = 0;
- float frames = Config->get_smpte_frames_per_second();
- bool drop = Config->get_smpte_drop_frames();
-
- if ((frames < 23.976 * 1.0005) && !drop)
+ switch (Config->get_smpte_format()) {
+ case smpte_23976:
action = X_("Smpte23976");
- else if ((frames < 24 * 1.0005) && !drop)
+ break;
+ case smpte_24:
action = X_("Smpte24");
- else if ((frames < 24.976 * 1.0005) && !drop)
+ break;
+ case smpte_24976:
action = X_("Smpte24976");
- else if ((frames < 25 * 1.0005) && !drop)
+ break;
+ case smpte_25:
action = X_("Smpte25");
- else if ((frames < 29.97 * 1.0005) && !drop)
+ break;
+ case smpte_2997:
action = X_("Smpte2997");
- else if ((frames < 29.97 * 1.0005) && drop)
+ break;
+ case smpte_2997drop:
action = X_("Smpte2997drop");
- else if ((frames < 30 * 1.0005) && !drop)
+ break;
+ case smpte_30:
action = X_("Smpte30");
- else if ((frames < 30 * 1.0005) && drop)
+ break;
+ case smpte_30drop:
action = X_("Smpte30drop");
- else if ((frames < 59.94 * 1.0005) && !drop)
+ break;
+ case smpte_5994:
action = X_("Smpte5994");
- else if ((frames < 60 * 1.0005) && !drop)
+ break;
+ case smpte_60:
action = X_("Smpte60");
- else {
- fatal << string_compose (_("programming error: Unexpected SMPTE value (%1, drop = %2) in update_smpte_mode. Menu is probably wrong."),
- frames, drop) << endmsg;
- /*NOTREACHED*/
+ break;
}
act = ActionManager::get_action (X_("Editor"), action);
@@ -831,7 +841,7 @@ Editor::zoom_focus_chosen (ZoomFocus focus)
}
void
-Editor::smpte_fps_chosen (Session::SmpteFormat format)
+Editor::smpte_fps_chosen (SmpteFormat format)
{
/* this is driven by a toggle on a radio group, and so is invoked twice,
once for the item that became inactive and once for the one that became
@@ -840,62 +850,39 @@ Editor::smpte_fps_chosen (Session::SmpteFormat format)
if (session) {
- float fps = 10;
- bool drop = false;
-
RefPtr<Action> act;
switch (format) {
- case Session::smpte_23976: {
- fps=23.976;
- drop = false;
+ case smpte_23976:
act = ActionManager::get_action (X_("Editor"), X_("Smpte23976"));
- } break;
- case Session::smpte_24: {
- fps=24;
- drop = false;
+ break;
+ case smpte_24:
act = ActionManager::get_action (X_("Editor"), X_("Smpte24"));
- } break;
- case Session::smpte_24976: {
- fps=24.976;
- drop = false;
+ break;
+ case smpte_24976:
act = ActionManager::get_action (X_("Editor"), X_("Smpte24976"));
- } break;
- case Session::smpte_25: {
- fps=25;
- drop = false;
+ break;
+ case smpte_25:
act = ActionManager::get_action (X_("Editor"), X_("Smpte25"));
- } break;
- case Session::smpte_2997: {
- fps=29.97;
- drop = false;
+ break;
+ case smpte_2997:
act = ActionManager::get_action (X_("Editor"), X_("Smpte2997"));
- } break;
- case Session::smpte_2997drop: {
- fps=29.97;
- drop = true;
+ break;
+ case smpte_2997drop:
act = ActionManager::get_action (X_("Editor"), X_("Smpte2997drop"));
- } break;
- case Session::smpte_30: {
- fps=30;
- drop = false;
+ break;
+ case smpte_30:
act = ActionManager::get_action (X_("Editor"), X_("Smpte30"));
- } break;
- case Session::smpte_30drop: {
- fps=30;
- drop = true;
+ break;
+ case smpte_30drop:
act = ActionManager::get_action (X_("Editor"), X_("Smpte30drop"));
- } break;
- case Session::smpte_5994: {
- fps=59.94;
- drop = false;
+ break;
+ case smpte_5994:
act = ActionManager::get_action (X_("Editor"), X_("Smpte5994"));
- } break;
- case Session::smpte_60: {
- fps=60;
- drop = false;
+ break;
+ case smpte_60:
act = ActionManager::get_action (X_("Editor"), X_("Smpte60"));
- } break;
+ break;
default:
cerr << "Editor received unexpected smpte type" << endl;
}
@@ -903,7 +890,7 @@ Editor::smpte_fps_chosen (Session::SmpteFormat format)
if (act) {
RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
if (ract && ract->get_active()) {
- session->set_smpte_type (fps, drop);
+ session->set_smpte_format (format);
}
}
}
@@ -979,6 +966,70 @@ Editor::video_pullup_chosen (Session::PullupFormat pullup)
}
void
+Editor::update_subframes_per_frame ()
+{
+ ENSURE_GUI_THREAD (mem_fun(*this, &Editor::update_subframes_per_frame));
+
+ RefPtr<Action> act;
+ const char* action = 0;
+
+ uint32_t sfpf = Config->get_subframes_per_frame();
+
+ if (sfpf == 80) {
+ action = X_("Subframes80");
+ } else if (sfpf == 100) {
+ action = X_("Subframes100");
+ } else {
+ warning << string_compose (_("Configuraton is using unhandled subframes per frame value: %1"), sfpf) << endmsg;
+ /*NOTREACHED*/
+ return;
+ }
+
+ act = ActionManager::get_action (X_("Editor"), action);
+
+ if (act) {
+ RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && !ract->get_active()) {
+ ract->set_active (true);
+ }
+ }
+}
+
+void
+Editor::subframes_per_frame_chosen (uint32_t sfpf)
+{
+ /* this is driven by a toggle on a radio group, and so is invoked twice,
+ once for the item that became inactive and once for the one that became
+ active.
+ */
+
+ const char* action = 0;
+
+ RefPtr<Action> act;
+
+ if (sfpf == 80) {
+ action = X_("Subframes80");
+ } else if (sfpf == 100) {
+ action = X_("Subframes100");
+ } else {
+ fatal << string_compose (_("programming error: %1 %2"), "Session received unexpected subframes per frame value: ", sfpf) << endmsg;
+ /*NOTREACHED*/
+ }
+
+ act = ActionManager::get_action (X_("Editor"), action);
+
+ if (act) {
+ RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && ract->get_active()) {
+ Config->set_subframes_per_frame ((uint32_t) rint (sfpf));
+ }
+
+ } else {
+ error << string_compose (_("programming error: %1"), "Editor::subframes_per_frame_chosen could not find action to match value.") << endmsg;
+ }
+}
+
+void
Editor::toggle_auto_xfade ()
{
ActionManager::toggle_config_state ("Editor", "toggle-auto-xfades", &Configuration::set_auto_xfade, &Configuration::get_auto_xfade);
@@ -1011,8 +1062,8 @@ Editor::parameter_changed (const char* parameter_name)
update_punch_range_view (true);
} else if (PARAM_IS ("layer-model")) {
update_layering_model ();
- } else if (PARAM_IS ("smpte-frames-per-second") || PARAM_IS ("smpte-drop-frames")) {
- update_smpte_mode ();
+ } else if (PARAM_IS ("smpte-format")) {
+ update_smpte_mode ();
update_just_smpte ();
} else if (PARAM_IS ("video-pullup")) {
update_video_pullup ();
@@ -1026,6 +1077,9 @@ Editor::parameter_changed (const char* parameter_name)
update_crossfade_model ();
} else if (PARAM_IS ("edit-mode")) {
edit_mode_selector.set_active_text (edit_mode_to_string (Config->get_edit_mode()));
+ } else if (PARAM_IS ("subframes-per-frame")) {
+ update_subframes_per_frame ();
+ update_just_smpte ();
}
#undef PARAM_IS
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index 426ff57a2a..48edb52756 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -49,6 +49,7 @@ using namespace PBD;
using namespace sigc;
using namespace Gtk;
using namespace Editing;
+using Glib::ustring;
/* Functions supporting the incorporation of external (non-captured) audio material into ardour */
@@ -95,7 +96,7 @@ Editor::bring_in_external_audio (ImportMode mode, AudioTrack* track, nframes_t&
}
void
-Editor::do_import (vector<Glib::ustring> paths, bool split, ImportMode mode, AudioTrack* track, nframes_t& pos, bool prompt)
+Editor::do_import (vector<ustring> paths, bool split, ImportMode mode, AudioTrack* track, nframes_t& pos, bool prompt)
{
/* SFDB sets "multichan" to true to indicate "split channels"
so reverse the setting to match the way libardour
@@ -107,49 +108,119 @@ Editor::do_import (vector<Glib::ustring> paths, bool split, ImportMode mode, Aud
if (interthread_progress_window == 0) {
build_interthread_progress_window ();
}
-
- /* for each path that was selected, import it and then potentially create a new track
- containing the new region as the sole contents.
- */
- for (vector<Glib::ustring>::iterator i = paths.begin(); i != paths.end(); ++i ) {
- import_sndfile (*i, mode, track, pos);
+ vector<ustring> to_import;
+
+ for (vector<ustring>::iterator a = paths.begin(); a != paths.end(); ++a) {
+
+ to_import.clear ();
+ to_import.push_back (*a);
+
+ import_sndfile (to_import, mode, track, pos);
}
interthread_progress_window->hide_all ();
}
void
-Editor::do_embed (vector<Glib::ustring> paths, bool split, ImportMode mode, AudioTrack* track, nframes_t& pos, bool prompt)
+Editor::do_embed (vector<ustring> paths, bool split, ImportMode mode, AudioTrack* track, nframes_t& pos, bool prompt)
{
bool multiple_files = paths.size() > 1;
bool check_sample_rate = true;
- vector<Glib::ustring>::iterator i;
+ vector<ustring>::iterator a;
+
+ for (a = paths.begin(); a != paths.end(); ) {
- for (i = paths.begin(); i != paths.end(); ++i) {
- int ret = embed_sndfile (*i, split, multiple_files, check_sample_rate, mode, track, pos, prompt);
+ Glib::ustring path = *a;
+ Glib::ustring pair_base;
+ vector<ustring> to_embed;
+
+ to_embed.push_back (path);
+ a = paths.erase (a);
+
+ if (path_is_paired (path, pair_base)) {
+
+ ustring::size_type len = pair_base.length();
- if (ret < -1) {
- break;
+ for (vector<Glib::ustring>::iterator b = paths.begin(); b != paths.end(); ) {
+
+ if (((*b).substr (0, len) == pair_base) && ((*b).length() == path.length())) {
+
+ to_embed.push_back (*b);
+
+ /* don't process this one again */
+
+ b = paths.erase (b);
+ break;
+
+ } else {
+ ++b;
+ }
+ }
}
- }
- if (i == paths.end()) {
+ if (to_embed.size() > 1) {
+
+ vector<string> choices;
+
+ choices.push_back (string_compose (_("Import as a %1 region"),
+ to_embed.size() > 2 ? _("multichannel") : _("stereo")));
+ choices.push_back (_("Import as multiple regions"));
+
+ Gtkmm2ext::Choice chooser (string_compose (_("Paired files detected (%1, %2 ...).\nDo you want to:"),
+ to_embed[0],
+ to_embed[1]),
+ choices);
+
+ if (chooser.run () == 0) {
+
+ /* keep them paired */
+
+ if (embed_sndfile (to_embed, split, multiple_files, check_sample_rate, mode, track, pos, prompt) < -1) {
+ break;
+ }
+
+ } else {
+
+ /* one thing per file */
+
+ vector<ustring> foo;
+
+ for (vector<ustring>::iterator x = to_embed.begin(); x != to_embed.end(); ++x) {
+
+ foo.clear ();
+ foo.push_back (*x);
+
+ if (embed_sndfile (foo, split, multiple_files, check_sample_rate, mode, track, pos, prompt) < -1) {
+ break;
+ }
+ }
+ }
+
+ } else {
+
+ if (embed_sndfile (to_embed, split, multiple_files, check_sample_rate, mode, track, pos, prompt) < -1) {
+ break;
+ }
+ }
+ }
+
+ if (a == paths.end()) {
session->save_state ("");
}
}
int
-Editor::import_sndfile (Glib::ustring path, ImportMode mode, AudioTrack* track, nframes_t& pos)
+Editor::import_sndfile (vector<ustring> paths, ImportMode mode, AudioTrack* track, nframes_t& pos)
{
- interthread_progress_window->set_title (string_compose (_("ardour: importing %1"), path));
+ interthread_progress_window->set_title (string_compose (_("ardour: importing %1"), paths.front()));
interthread_progress_window->set_position (Gtk::WIN_POS_MOUSE);
interthread_progress_window->show_all ();
interthread_progress_bar.set_fraction (0.0f);
interthread_cancel_label.set_text (_("Cancel Import"));
current_interthread_info = &import_status;
- import_status.pathname = path;
+ import_status.paths = paths;
import_status.done = false;
import_status.cancel = false;
import_status.freeze = false;
@@ -161,8 +232,8 @@ Editor::import_sndfile (Glib::ustring path, ImportMode mode, AudioTrack* track,
track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
ARDOUR_UI::instance()->flush_pending ();
- /* start import thread for this path. this will ultimately call Session::import_audiofile()
- and if successful will add the file as a region to the session region list.
+ /* start import thread for this spec. this will ultimately call Session::import_audiofile()
+ and if successful will add the file(s) as a region to the session region list.
*/
pthread_create_and_store ("import", &import_status.thread, 0, _import_thread, this);
@@ -187,7 +258,7 @@ Editor::import_sndfile (Glib::ustring path, ImportMode mode, AudioTrack* track,
}
int
-Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool& check_sample_rate, ImportMode mode,
+Editor::embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_files, bool& check_sample_rate, ImportMode mode,
AudioTrack* track, nframes_t& pos, bool prompt)
{
boost::shared_ptr<AudioFileSource> source;
@@ -196,96 +267,104 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
string idspec;
string linked_path;
SoundFileInfo finfo;
- string region_name;
- uint32_t input_chan;
- uint32_t output_chan;
+ ustring region_name;
+ uint32_t input_chan = 0;
+ uint32_t output_chan = 0;
track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
ARDOUR_UI::instance()->flush_pending ();
- /* lets see if we can link it into the session */
-
- linked_path = session->sound_dir();
- linked_path += Glib::path_get_basename (path);
-
- if (link (path.c_str(), linked_path.c_str()) == 0) {
+ for (vector<Glib::ustring>::iterator p = paths.begin(); p != paths.end(); ++p) {
- /* there are many reasons why link(2) might have failed.
- but if it succeeds, we now have a link in the
- session sound dir that will protect against
- unlinking of the original path. nice.
- */
-
- path = linked_path;
- }
+ ustring path = *p;
- /* note that we temporarily truncated _id at the colon */
-
- string error_msg;
-
- if (!AudioFileSource::get_soundfile_info (path, finfo, error_msg)) {
- error << string_compose(_("Editor: cannot open file \"%1\", (%2)"), selection, error_msg ) << endmsg;
- return 0;
- }
-
- if (check_sample_rate && (finfo.samplerate != (int) session->frame_rate())) {
- vector<string> choices;
+ /* lets see if we can link it into the session */
- if (multiple_files) {
- choices.push_back (_("Cancel entire import"));
- choices.push_back (_("Don't embed it"));
- choices.push_back (_("Embed all without questions"));
- } else {
- choices.push_back (_("Cancel"));
+ linked_path = session->sound_dir();
+ linked_path += '/';
+ linked_path += Glib::path_get_basename (path);
+
+ if (link (path.c_str(), linked_path.c_str()) == 0) {
+
+ /* there are many reasons why link(2) might have failed.
+ but if it succeeds, we now have a link in the
+ session sound dir that will protect against
+ unlinking of the original path. nice.
+ */
+
+ path = linked_path;
}
-
- choices.push_back (_("Embed it anyway"));
- Gtkmm2ext::Choice rate_choice (
- string_compose (_("%1\nThis audiofile's sample rate doesn't match the session sample rate!"), path),
- choices, false);
+ /* note that we temporarily truncated _id at the colon */
- switch (rate_choice.run()) {
- case 0: /* stop a multi-file import */
- case 1: /* don't import this one */
- return -1;
- case 2: /* do it, and the rest without asking */
- check_sample_rate = false;
- break;
- case 3: /* do it */
- break;
- default:
- return -2;
- }
- }
-
- track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
- ARDOUR_UI::instance()->flush_pending ();
-
- /* make the proper number of channels in the region */
-
- for (int n = 0; n < finfo.channels; ++n)
- {
- idspec = path;
- idspec += string_compose(":%1", n);
+ string error_msg;
- try {
- source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable
- (DataType::AUDIO, *session, idspec,
- (mode == ImportAsTapeTrack ?
- AudioFileSource::Destructive :
- AudioFileSource::Flag (0))));
- sources.push_back(source);
- }
+ if (!AudioFileSource::get_soundfile_info (path, finfo, error_msg)) {
+ error << string_compose(_("Editor: cannot open file \"%1\", (%2)"), selection, error_msg ) << endmsg;
+ return 0;
+ }
- catch (failed_constructor& err) {
- error << string_compose(_("could not open %1"), path) << endmsg;
- goto out;
+ if (check_sample_rate && (finfo.samplerate != (int) session->frame_rate())) {
+ vector<string> choices;
+
+ if (multiple_files) {
+ choices.push_back (_("Cancel entire import"));
+ choices.push_back (_("Don't embed it"));
+ choices.push_back (_("Embed all without questions"));
+ } else {
+ choices.push_back (_("Cancel"));
+ }
+
+ choices.push_back (_("Embed it anyway"));
+
+ Gtkmm2ext::Choice rate_choice (
+ string_compose (_("%1\nThis audiofile's sample rate doesn't match the session sample rate!"), path),
+ choices, false);
+
+ switch (rate_choice.run()) {
+ case 0: /* stop a multi-file import */
+ case 1: /* don't import this one */
+ return -1;
+ case 2: /* do it, and the rest without asking */
+ check_sample_rate = false;
+ break;
+ case 3: /* do it */
+ break;
+ default:
+ return -2;
+ }
}
+ track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
ARDOUR_UI::instance()->flush_pending ();
- }
+ /* make the proper number of channels in the region */
+
+ input_chan += finfo.channels;
+
+ for (int n = 0; n < finfo.channels; ++n)
+ {
+ idspec = path;
+ idspec += string_compose(":%1", n);
+
+ try {
+ source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable
+ (DataType::AUDIO, *session, idspec,
+ (mode == ImportAsTapeTrack ?
+ AudioFileSource::Destructive :
+ AudioFileSource::Flag (0))));
+ sources.push_back(source);
+ }
+
+ catch (failed_constructor& err) {
+ error << string_compose(_("could not open %1"), path) << endmsg;
+ goto out;
+ }
+
+ ARDOUR_UI::instance()->flush_pending ();
+ }
+ }
+
if (sources.empty()) {
goto out;
}
@@ -294,20 +373,17 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
pos = sources[0]->natural_position();
}
- region_name = PBD::basename_nosuffix (path);
- region_name += "-0";
+ region_name = region_name_from_path (paths.front(), (sources.size() > 1));
region = boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (sources, 0, sources[0]->length(), region_name, 0,
Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External)));
- input_chan = finfo.channels;
-
if (Config->get_output_auto_connect() & AutoConnectMaster) {
output_chan = (session->master_out() ? session->master_out()->n_inputs().get(DataType::AUDIO) : input_chan);
} else {
output_chan = input_chan;
}
-
+
finish_bringing_in_audio (region, input_chan, output_chan, track, pos, mode);
out:
@@ -325,7 +401,7 @@ Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_
case ImportToTrack:
if (track) {
- Playlist* playlist = track->diskstream()->playlist();
+ boost::shared_ptr<Playlist> playlist = track->diskstream()->playlist();
boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
begin_reversible_command (_("insert sndfile"));
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index 07fe56573d..973598561a 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -294,7 +294,6 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
bool
Editor::track_canvas_idle ()
{
-
if (canvas_idle_queued) {
canvas_idle_queued = false;
}
@@ -302,6 +301,27 @@ Editor::track_canvas_idle ()
canvas_width = canvas_allocation.get_width();
canvas_height = canvas_allocation.get_height();
+ full_canvas_height = canvas_height;
+
+ if (session) {
+ TrackViewList::iterator i;
+ double height = 0;
+
+ for (i = track_views.begin(); i != track_views.end(); ++i) {
+ if ((*i)->control_parent) {
+ height += (*i)->effective_height;
+ height += track_spacing;
+ }
+ }
+
+ if (height) {
+ height -= track_spacing;
+ }
+
+ full_canvas_height = height;
+ }
+
+
zoom_range_clock.set ((nframes_t) floor ((canvas_width * frames_per_unit)));
edit_cursor->set_position (edit_cursor->current_frame);
playhead_cursor->set_position (playhead_cursor->current_frame);
@@ -313,7 +333,7 @@ Editor::track_canvas_idle ()
if (playhead_cursor) playhead_cursor->set_length (canvas_height);
if (marker_drag_line) {
- marker_drag_line_points.back().set_x(canvas_height);
+ marker_drag_line_points.back().set_y(canvas_height);
marker_drag_line->property_points() = marker_drag_line_points;
}
@@ -434,8 +454,6 @@ Editor::track_canvas_drag_data_received (const RefPtr<Gdk::DragContext>& context
const SelectionData& data,
guint info, guint time)
{
- cerr << "dropping, target = " << data.get_target() << endl;
-
if (data.get_target() == "regions") {
drop_regions (context, x, y, data, info, time);
} else {
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc
index 249a65ae01..4e0d6d5fe3 100644
--- a/gtk2_ardour/editor_canvas_events.cc
+++ b/gtk2_ardour/editor_canvas_events.cc
@@ -76,7 +76,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
if (!current_stepping_trackview) {
step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500);
- if (!(current_stepping_trackview = dynamic_cast<AudioTimeAxisView*> (trackview_by_y_position (ev->y)))) {
+ if (!(current_stepping_trackview = trackview_by_y_position (ev->y))) {
return false;
}
}
@@ -107,7 +107,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
if (!current_stepping_trackview) {
step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500);
- if (!(current_stepping_trackview = dynamic_cast<AudioTimeAxisView*> (trackview_by_y_position (ev->y)))) {
+ if (!(current_stepping_trackview = trackview_by_y_position (ev->y))) {
return false;
}
}
@@ -513,8 +513,8 @@ Editor::canvas_crossfade_view_event (GdkEvent* event, ArdourCanvas::Item* item,
if (atv->is_audio_track()) {
- AudioPlaylist* pl;
- if ((pl = dynamic_cast<AudioPlaylist*> (atv->get_diskstream()->playlist())) != 0) {
+ boost::shared_ptr<AudioPlaylist> pl;
+ if ((pl = boost::dynamic_pointer_cast<AudioPlaylist> (atv->get_diskstream()->playlist())) != 0) {
Playlist::RegionList* rl = pl->regions_at (event_frame (event));
diff --git a/gtk2_ardour/editor_edit_groups.cc b/gtk2_ardour/editor_edit_groups.cc
index 8df76fef25..2ee1773646 100644
--- a/gtk2_ardour/editor_edit_groups.cc
+++ b/gtk2_ardour/editor_edit_groups.cc
@@ -119,7 +119,7 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev)
if (edit_group_list_menu == 0) {
build_edit_group_list_menu ();
}
- edit_group_list_menu->popup (1, 0);
+ edit_group_list_menu->popup (1, ev->time);
return true;
}
diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc
index 4526862f79..43977f1577 100644
--- a/gtk2_ardour/editor_export_audio.cc
+++ b/gtk2_ardour/editor_export_audio.cc
@@ -290,7 +290,7 @@ Editor::write_audio_selection (TimeSelection& ts)
if (atv->is_audio_track()) {
- AudioPlaylist* playlist = dynamic_cast<AudioPlaylist*>(atv->get_diskstream()->playlist());
+ boost::shared_ptr<AudioPlaylist> playlist = boost::dynamic_pointer_cast<AudioPlaylist>(atv->get_diskstream()->playlist());
if (playlist && write_audio_range (*playlist, atv->get_diskstream()->n_channels(), ts) == 0) {
ret = -1;
diff --git a/gtk2_ardour/editor_imageframe.cc b/gtk2_ardour/editor_imageframe.cc
index adb64125fc..a2606175df 100644
--- a/gtk2_ardour/editor_imageframe.cc
+++ b/gtk2_ardour/editor_imageframe.cc
@@ -100,16 +100,14 @@ Editor::scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item)
nframes_t offset = 0;
nframes_t x_pos = 0 ;
- if(item->get_position() < offset)
- {
+
+ if (item->get_position() < offset) {
x_pos = 0 ;
- }
- else
- {
- x_pos = item->get_position() - offset + (item->get_duration() / 2) ;
+ } else {
+ x_pos = item->get_position() - offset + (item->get_duration() / 2);
}
- reposition_x_origin(x_pos) ;
+ reposition_x_origin (x_pos);
}
void
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index 6da479bafe..238a45c4d1 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -288,8 +288,10 @@ Editor::LocationMarkers::set_color_rgba (uint32_t rgba)
void
Editor::mouse_add_new_marker (nframes_t where)
{
+ string markername;
if (session) {
- Location *location = new Location (where, where, "mark", Location::IsMark);
+ session->locations()->next_available_name(markername,"mark");
+ Location *location = new Location (where, where, markername, Location::IsMark);
session->begin_reversible_command (_("add marker"));
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
@@ -313,17 +315,7 @@ Editor::remove_marker (ArdourCanvas::Item& item, GdkEvent* event)
Location* loc = find_location_from_marker (marker, is_start);
if (session && loc) {
- if (loc->is_end()) {
- /* you can't hide or delete this marker */
- return;
- }
- if (loc->is_auto_loop() || loc->is_auto_punch()) {
- // just hide them
- loc->set_hidden (true, this);
- }
- else {
- Glib::signal_idle().connect (bind (mem_fun(*this, &Editor::really_remove_marker), loc));
- }
+ Glib::signal_idle().connect (bind (mem_fun(*this, &Editor::really_remove_marker), loc));
}
}
@@ -388,16 +380,24 @@ Editor::marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item)
Location * loc = find_location_from_marker (marker, is_start);
if (loc == transport_loop_location() || loc == transport_punch_location()) {
if (transport_marker_menu == 0) {
- build_transport_marker_menu ();
+ build_range_marker_menu (true);
}
marker_menu_item = item;
transport_marker_menu->popup (1, ev->time);
} else {
if (loc->is_mark()) {
- if (marker_menu == 0) {
- build_marker_menu ();
- }
+ bool start_or_end = loc->is_start() || loc->is_end();
+ Menu *markerMenu;
+ if (start_or_end) {
+ if (start_end_marker_menu == 0)
+ build_marker_menu (true);
+ markerMenu = start_end_marker_menu;
+ } else {
+ if (marker_menu == 0)
+ build_marker_menu (false);
+ markerMenu = marker_menu;
+ }
// GTK2FIX use action group sensitivity
@@ -415,12 +415,12 @@ Editor::marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item)
}
#endif
marker_menu_item = item;
- marker_menu->popup (1, ev->time);
+ markerMenu->popup (1, ev->time);
}
if (loc->is_range_marker()) {
if (range_marker_menu == 0){
- build_range_marker_menu ();
+ build_range_marker_menu (false);
}
marker_menu_item = item;
range_marker_menu->popup (1, ev->time);
@@ -443,20 +443,25 @@ void
Editor::transport_marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item)
{
if (transport_marker_menu == 0) {
- build_transport_marker_menu ();
+ build_range_marker_menu (true);
}
transport_marker_menu->popup (1, ev->time);
}
void
-Editor::build_marker_menu ()
+Editor::build_marker_menu (bool start_or_end)
{
using namespace Menu_Helpers;
- marker_menu = new Menu;
- MenuList& items = marker_menu->items();
- marker_menu->set_name ("ArdourContextMenu");
+ Menu *markerMenu = new Menu;
+ if (start_or_end) {
+ start_end_marker_menu = markerMenu;
+ } else {
+ marker_menu = markerMenu;
+ }
+ MenuList& items = markerMenu->items();
+ markerMenu->set_name ("ArdourContextMenu");
items.push_back (MenuElem (_("Locate to Mark"), mem_fun(*this, &Editor::marker_menu_set_playhead)));
items.push_back (MenuElem (_("Play from Mark"), mem_fun(*this, &Editor::marker_menu_play_from)));
@@ -464,32 +469,43 @@ Editor::build_marker_menu ()
items.push_back (SeparatorElem());
- items.push_back (MenuElem (_("Rename Mark"), mem_fun(*this, &Editor::marker_menu_rename)));
items.push_back (MenuElem (_("Hide Mark"), mem_fun(*this, &Editor::marker_menu_hide)));
+ if (start_or_end) return;
+ items.push_back (MenuElem (_("Rename Mark"), mem_fun(*this, &Editor::marker_menu_rename)));
items.push_back (MenuElem (_("Remove Mark"), mem_fun(*this, &Editor::marker_menu_remove)));
}
void
-Editor::build_range_marker_menu ()
+Editor::build_range_marker_menu (bool loop_or_punch)
{
using namespace Menu_Helpers;
- range_marker_menu = new Menu;
- MenuList& items = range_marker_menu->items();
- range_marker_menu->set_name ("ArdourContextMenu");
+ Menu *markerMenu = new Menu;
+ if (loop_or_punch) {
+ transport_marker_menu = markerMenu;
+ } else {
+ range_marker_menu = markerMenu;
+ }
+ MenuList& items = markerMenu->items();
+ markerMenu->set_name ("ArdourContextMenu");
items.push_back (MenuElem (_("Locate to Range Mark"), mem_fun(*this, &Editor::marker_menu_set_playhead)));
items.push_back (MenuElem (_("Play from Range Mark"), mem_fun(*this, &Editor::marker_menu_play_from)));
- items.push_back (MenuElem (_("Loop Range"), mem_fun(*this, &Editor::marker_menu_loop_range)));
+ if (! loop_or_punch) {
+ items.push_back (MenuElem (_("Play Range"), mem_fun(*this, &Editor::marker_menu_play_range)));
+ items.push_back (MenuElem (_("Loop Range"), mem_fun(*this, &Editor::marker_menu_loop_range)));
+ }
items.push_back (MenuElem (_("Set Range Mark from Playhead"), mem_fun(*this, &Editor::marker_menu_set_from_playhead)));
items.push_back (MenuElem (_("Set Range from Range Selection"), mem_fun(*this, &Editor::marker_menu_set_from_selection)));
items.push_back (SeparatorElem());
- items.push_back (MenuElem (_("Rename Range"), mem_fun(*this, &Editor::marker_menu_rename)));
items.push_back (MenuElem (_("Hide Range"), mem_fun(*this, &Editor::marker_menu_hide)));
- items.push_back (MenuElem (_("Remove Range"), mem_fun(*this, &Editor::marker_menu_remove)));
+ if (! loop_or_punch) {
+ items.push_back (MenuElem (_("Rename Range"), mem_fun(*this, &Editor::marker_menu_rename)));
+ items.push_back (MenuElem (_("Remove Range"), mem_fun(*this, &Editor::marker_menu_remove)));
+ }
items.push_back (SeparatorElem());
@@ -527,26 +543,6 @@ Editor::build_new_transport_marker_menu ()
}
void
-Editor::build_transport_marker_menu ()
-{
- using namespace Menu_Helpers;
-
- transport_marker_menu = new Menu;
- MenuList& items = transport_marker_menu->items();
- transport_marker_menu->set_name ("ArdourContextMenu");
-
- items.push_back (MenuElem (_("Locate to Range Mark"), mem_fun(*this, &Editor::marker_menu_set_playhead)));
- items.push_back (MenuElem (_("Play from Range Mark"), mem_fun(*this, &Editor::marker_menu_play_from)));
- items.push_back (MenuElem (_("Set Range Mark from Playhead"), mem_fun(*this, &Editor::marker_menu_set_from_playhead)));
- items.push_back (MenuElem (_("Set Range from Range Selection"), mem_fun(*this, &Editor::marker_menu_set_from_selection)));
- items.push_back (SeparatorElem());
- items.push_back (MenuElem (_("Hide Range"), mem_fun(*this, &Editor::marker_menu_hide)));
- items.push_back (SeparatorElem());
- items.push_back (MenuElem (_("Separate Regions in Range"), mem_fun(*this, &Editor::marker_menu_separate_regions_using_location)));
- items.push_back (MenuElem (_("Select All in Range"), mem_fun(*this, &Editor::marker_menu_select_all_selectables_using_range)));
-}
-
-void
Editor::marker_menu_hide ()
{
Marker* marker;
@@ -726,6 +722,32 @@ Editor::marker_menu_set_from_selection ()
}
}
+
+void
+Editor::marker_menu_play_range ()
+{
+ Marker* marker;
+
+ if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+ fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
+ /*NOTREACHED*/
+ }
+
+ Location* l;
+ bool is_start;
+
+ if ((l = find_location_from_marker (marker, is_start)) != 0) {
+
+ if (l->is_mark()) {
+ session->request_locate (l->start(), true);
+ }
+ else {
+ session->request_bounded_roll (l->start(), l->end());
+
+ }
+ }
+}
+
void
Editor::marker_menu_loop_range ()
{
diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc
index 8b100afae5..8139e91ca7 100644
--- a/gtk2_ardour/editor_mixer.cc
+++ b/gtk2_ardour/editor_mixer.cc
@@ -164,12 +164,16 @@ Editor::update_current_screen ()
frame = session->audible_frame();
+ if (_dragging_playhead) {
+ goto almost_done;
+ }
+
/* only update if the playhead is on screen or we are following it */
if (_follow_playhead) {
-
playhead_cursor->canvas_item.show();
+
if (frame != last_update_frame) {
const jack_nframes_t page_width = current_page_frames();
@@ -209,6 +213,7 @@ Editor::update_current_screen ()
}
}
+ almost_done:
last_update_frame = frame;
if (current_mixer_strip) {
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 76357070a7..fc76c6a43c 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -317,6 +317,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
switch (item_type) {
case RegionItem:
+ /* XXX make tying track/region selection optional */
c1 = set_selected_track_from_click (op, true);
c2 = set_selected_regionview_from_click (press, op, true);
commit = (c1 || c2);
@@ -324,6 +325,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
case RegionViewNameHighlight:
case RegionViewName:
+ /* XXX make tying track/region selection optional */
c1 = set_selected_track_from_click (op, true);
c2 = set_selected_regionview_from_click (press, op, true);
commit = (c1 || c2);
@@ -332,6 +334,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
case GainAutomationControlPointItem:
case PanAutomationControlPointItem:
case RedirectAutomationControlPointItem:
+ /* XXX make tying track/region selection optional */
c1 = set_selected_track_from_click (op, true);
c2 = set_selected_control_point_from_click (op, false);
commit = (c1 || c2);
@@ -1943,8 +1946,10 @@ Editor::start_cursor_grab (ArdourCanvas::Item* item, GdkEvent* event)
Cursor* cursor = (Cursor *) drag_info.data;
- if (session && cursor == playhead_cursor) {
- if (drag_info.was_rolling) {
+ if (cursor == playhead_cursor) {
+ _dragging_playhead = true;
+
+ if (session && drag_info.was_rolling) {
session->request_stop ();
}
}
@@ -1979,6 +1984,8 @@ Editor::cursor_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
if (cursor == edit_cursor) {
edit_cursor_clock.set (cursor->current_frame);
+ } else {
+ UpdateAllTransportClocks (cursor->current_frame);
}
show_verbose_time_cursor (cursor->current_frame, 10);
@@ -1993,6 +2000,8 @@ Editor::cursor_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
if (drag_info.first_move) return;
cursor_drag_motion_callback (item, event);
+
+ _dragging_playhead = false;
if (item == &playhead_cursor->canvas_item) {
if (session) {
@@ -2490,7 +2499,7 @@ Editor::start_control_point_grab (ArdourCanvas::Item* item, GdkEvent* event)
start_grab (event, fader_cursor);
- control_point->line.start_drag (control_point, 0);
+ control_point->line.start_drag (control_point, drag_info.grab_frame, 0);
float fraction = 1.0 - (control_point->get_y() / control_point->line.height());
set_verbose_canvas_cursor (control_point->line.get_verbose_cursor_string (fraction),
@@ -2623,7 +2632,7 @@ Editor::start_line_grab (AutomationLine* line, GdkEvent* event)
double fraction = 1.0 - (cy / line->height());
- line->start_drag (0, fraction);
+ line->start_drag (0, drag_info.grab_frame, fraction);
set_verbose_canvas_cursor (line->get_verbose_cursor_string (fraction),
drag_info.current_pointer_x + 20, drag_info.current_pointer_y + 20);
@@ -2700,6 +2709,8 @@ Editor::start_region_grab (ArdourCanvas::Item* item, GdkEvent* event)
void
Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event)
{
+ cerr << "start region copy grab, selected regions = " << selection->regions.size() << endl;
+
if (selection->regions.empty() || clicked_regionview == 0) {
return;
}
@@ -2725,6 +2736,7 @@ Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event)
drag_info.want_move_threshold = true;
drag_info.motion_callback = &Editor::region_drag_motion_callback;
drag_info.finished_callback = &Editor::region_drag_finished_callback;
+ show_verbose_time_cursor (drag_info.last_frame_position, 10);
}
void
@@ -2773,8 +2785,6 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
vector<int32_t> height_list(512) ;
vector<int32_t>::iterator j;
- show_verbose_time_cursor (drag_info.last_frame_position, 10);
-
if (drag_info.copy && drag_info.move_threshold_passed && drag_info.want_move_threshold) {
drag_info.want_move_threshold = false; // don't copy again
@@ -2787,15 +2797,16 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
vector<RegionView*> new_regionviews;
- set<Playlist*> affected_playlists;
- pair<set<Playlist*>::iterator,bool> insert_result;
+ set<boost::shared_ptr<Playlist> > affected_playlists;
+ pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
+ // TODO: Crossfades need to be copied!
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
RegionView* rv;
rv = (*i);
- Playlist* to_playlist = rv->region()->playlist();
+ boost::shared_ptr<Playlist> to_playlist = rv->region()->playlist();
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(&rv->get_time_axis_view());
insert_result = affected_playlists.insert (to_playlist);
@@ -2826,6 +2837,8 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
new_regionviews.push_back (latest_regionview);
}
}
+
+
if (new_regionviews.empty()) {
return;
@@ -3116,7 +3129,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
MOTION
************************************************************/
- pair<set<Playlist*>::iterator,bool> insert_result;
+ pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
const list<RegionView*>& layered_regions = selection->regions.by_layer();
for (list<RegionView*>::const_iterator i = layered_regions.begin(); i != layered_regions.end(); ++i) {
@@ -3227,8 +3240,8 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
*/
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (&rv->get_time_axis_view());
- if (rtv && rtv->is_track()) {
- Playlist* pl = dynamic_cast<Playlist*>(rtv->get_diskstream()->playlist());
+ if (rtv && rtv->is_audio_track()) {
+ boost::shared_ptr<AudioPlaylist> pl = boost::dynamic_pointer_cast<AudioPlaylist>(rtv->get_diskstream()->playlist());
if (pl) {
/* only freeze and capture state once */
@@ -3239,6 +3252,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
}
}
}
+ rv->region()->set_opaque(false);
}
if (drag_info.brushing) {
@@ -3265,7 +3279,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
{
nframes_t where;
RegionView* rv = reinterpret_cast<RegionView *> (drag_info.data);
- pair<set<Playlist*>::iterator,bool> insert_result;
+ pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
bool nocommit = true;
double speed;
RouteTimeAxisView* atv;
@@ -3337,8 +3351,8 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
for (list<RegionView*>::const_iterator i = new_selection.begin(); i != new_selection.end();i++ ) {
- Playlist* from_playlist;
- Playlist* to_playlist;
+ boost::shared_ptr<Playlist> from_playlist;
+ boost::shared_ptr<Playlist> to_playlist;
double ix1, ix2, iy1, iy2;
@@ -3346,6 +3360,8 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
(*i)->get_canvas_group()->i2w (ix1, iy1);
TimeAxisView* tvp2 = trackview_by_y_position (iy1);
RouteTimeAxisView* atv2 = dynamic_cast<RouteTimeAxisView*>(tvp2);
+
+ (*i)->region()->set_opaque (true);
from_playlist = (*i)->region()->playlist();
to_playlist = atv2->playlist();
@@ -3372,8 +3388,8 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
for (list<RegionView*>::const_iterator i = new_selection.begin(); i != new_selection.end();i++ ) {
- Playlist* from_playlist;
- Playlist* to_playlist;
+ boost::shared_ptr<Playlist> from_playlist;
+ boost::shared_ptr<Playlist> to_playlist;
double ix1, ix2, iy1, iy2;
@@ -3439,13 +3455,14 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
/* no need to add an undo here, we did that when we added this playlist to motion_frozen playlists */
rv->region()->set_position (where, (void *) this);
+ rv->region()->set_opaque (true);
}
}
out:
- for (set<Playlist*>::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
+ for (set<boost::shared_ptr<Playlist> >::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
(*p)->thaw ();
- session->add_command (new MementoCommand<Playlist>(*(*p), 0, & (*p)->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*((*p).get()), 0, & (*p)->get_state()));
}
motion_frozen_playlists.clear ();
@@ -3491,6 +3508,8 @@ Editor::show_verbose_time_cursor (nframes_t frame, double offset, double xpos, d
char buf[128];
SMPTE::Time smpte;
BBT_Time bbt;
+ int hours, mins;
+ nframes_t frame_rate;
float secs;
if (session == 0) {
@@ -3509,10 +3528,14 @@ Editor::show_verbose_time_cursor (nframes_t frame, double offset, double xpos, d
break;
case AudioClock::MinSec:
- /* XXX fix this to compute min/sec properly */
- session->smpte_time (frame, smpte);
- secs = smpte.seconds + ((float) smpte.frames / Config->get_smpte_frames_per_second());
- snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%.4f", smpte.hours, smpte.minutes, secs);
+ /* XXX this is copied from show_verbose_duration_cursor() */
+ frame_rate = session->frame_rate();
+ hours = frame / (frame_rate * 3600);
+ frame = frame % (frame_rate * 3600);
+ mins = frame / (frame_rate * 60);
+ frame = frame % (frame_rate * 60);
+ secs = (float) frame / (float) frame_rate;
+ snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%.4f", hours, mins, secs);
break;
default:
@@ -3536,6 +3559,8 @@ Editor::show_verbose_duration_cursor (nframes_t start, nframes_t end, double off
SMPTE::Time smpte;
BBT_Time sbbt;
BBT_Time ebbt;
+ int hours, mins;
+ nframes_t distance, frame_rate;
float secs;
Meter meter_at_start(session->tempo_map().meter_at(start));
@@ -3576,10 +3601,15 @@ Editor::show_verbose_duration_cursor (nframes_t start, nframes_t end, double off
break;
case AudioClock::MinSec:
- /* XXX fix this to compute min/sec properly */
- session->smpte_duration (end - start, smpte);
- secs = smpte.seconds + ((float) smpte.frames / Config->get_smpte_frames_per_second());
- snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%.4f", smpte.hours, smpte.minutes, secs);
+ /* XXX this stuff should be elsewhere.. */
+ distance = end - start;
+ frame_rate = session->frame_rate();
+ hours = distance / (frame_rate * 3600);
+ distance = distance % (frame_rate * 3600);
+ mins = distance / (frame_rate * 60);
+ distance = distance % (frame_rate * 60);
+ secs = (float) distance / (float) frame_rate;
+ snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%.4f", hours, mins, secs);
break;
default:
@@ -3638,7 +3668,7 @@ Editor::start_selection_grab (ArdourCanvas::Item* item, GdkEvent* event)
begin_reversible_command (_("selection grab"));
- Playlist* playlist = clicked_axisview->playlist();
+ boost::shared_ptr<Playlist> playlist = clicked_axisview->playlist();
XMLNode *before = &(playlist->get_state());
clicked_routeview->playlist()->add_region (region, selection->time[clicked_selection].start);
@@ -3962,7 +3992,7 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
double speed = 1.0;
TimeAxisView* tvp = clicked_axisview;
RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp);
- pair<set<Playlist*>::iterator,bool> insert_result;
+ pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
if (tv && tv->is_track()) {
speed = tv->get_diskstream()->speed();
@@ -4001,13 +4031,14 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
begin_reversible_command (trim_type);
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
+ (*i)->region()->set_opaque(false);
(*i)->region()->freeze ();
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
if (arv)
arv->temporarily_hide_envelope ();
- Playlist * pl = (*i)->region()->playlist();
+ boost::shared_ptr<Playlist> pl = (*i)->region()->playlist();
insert_result = motion_frozen_playlists.insert (pl);
if (insert_result.second) {
session->add_command(new MementoCommand<Playlist>(*pl, &pl->get_state(), 0));
@@ -4195,12 +4226,13 @@ Editor::trim_finished_callback (ArdourCanvas::Item* item, GdkEvent* event)
i != selection->regions.by_layer().end(); ++i)
{
thaw_region_after_trim (**i);
+ (*i)->region()->set_opaque(true);
}
}
- for (set<Playlist*>::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
+ for (set<boost::shared_ptr<Playlist> >::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
//(*p)->thaw ();
- session->add_command (new MementoCommand<Playlist>(*(*p), 0, &(*p)->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*(*p).get(), 0, &(*p)->get_state()));
}
motion_frozen_playlists.clear ();
@@ -4234,22 +4266,22 @@ Editor::point_trim (GdkEvent* event)
i != selection->regions.by_layer().end(); ++i)
{
if (!(*i)->region()->locked()) {
- Playlist *pl = (*i)->region()->playlist();
+ boost::shared_ptr<Playlist> pl = (*i)->region()->playlist();
XMLNode &before = pl->get_state();
(*i)->region()->trim_front (new_bound, this);
XMLNode &after = pl->get_state();
- session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
+ session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
} else {
if (!rv->region()->locked()) {
- Playlist *pl = rv->region()->playlist();
+ boost::shared_ptr<Playlist> pl = rv->region()->playlist();
XMLNode &before = pl->get_state();
rv->region()->trim_front (new_bound, this);
XMLNode &after = pl->get_state();
- session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
+ session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
@@ -4265,22 +4297,22 @@ Editor::point_trim (GdkEvent* event)
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i)
{
if (!(*i)->region()->locked()) {
- Playlist *pl = (*i)->region()->playlist();
+ boost::shared_ptr<Playlist> pl = (*i)->region()->playlist();
XMLNode &before = pl->get_state();
(*i)->region()->trim_end (new_bound, this);
XMLNode &after = pl->get_state();
- session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
+ session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
} else {
if (!rv->region()->locked()) {
- Playlist *pl = rv->region()->playlist();
+ boost::shared_ptr<Playlist> pl = rv->region()->playlist();
XMLNode &before = pl->get_state();
rv->region()->trim_end (new_bound, this);
XMLNode &after = pl->get_state();
- session->add_command (new MementoCommand<Playlist>(*pl, &before, &after));
+ session->add_command (new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
@@ -4436,6 +4468,7 @@ void
Editor::end_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event)
{
Location * newloc = 0;
+ string rangename;
if (!drag_info.first_move) {
drag_range_markerbar_op (item, event);
@@ -4445,7 +4478,8 @@ Editor::end_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event)
{
begin_reversible_command (_("new range marker"));
XMLNode &before = session->locations()->get_state();
- newloc = new Location(temp_location->start(), temp_location->end(), "unnamed", Location::IsRangeMarker);
+ session->locations()->next_available_name(rangename,"unnamed");
+ newloc = new Location(temp_location->start(), temp_location->end(), rangename, Location::IsRangeMarker);
session->locations()->add (newloc, true);
XMLNode &after = session->locations()->get_state();
session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
@@ -4584,7 +4618,7 @@ Editor::reposition_zoom_rect (nframes_t start, nframes_t end)
{
double x1 = frame_to_pixel (start);
double x2 = frame_to_pixel (end);
- double y2 = canvas_height - 2;
+ double y2 = full_canvas_height - 1.0;
zoom_rect->property_x1() = x1;
zoom_rect->property_y1() = 1.0;
@@ -4825,13 +4859,13 @@ Editor::mouse_brush_insert_region (RegionView* rv, nframes_t pos)
return;
}
- Playlist* playlist = atv->playlist();
+ boost::shared_ptr<Playlist> playlist = atv->playlist();
double speed = atv->get_diskstream()->speed();
XMLNode &before = playlist->get_state();
playlist->add_region (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (arv->audio_region())), (nframes_t) (pos * speed));
XMLNode &after = playlist->get_state();
- session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
+ session->add_command(new MementoCommand<Playlist>(*playlist.get(), &before, &after));
// playlist is frozen, so we have to update manually
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 93e90f4c2c..ea4848b882 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -44,6 +44,7 @@
#include <ardour/audio_track.h>
#include <ardour/audioplaylist.h>
#include <ardour/region_factory.h>
+#include <ardour/playlist_factory.h>
#include <ardour/reverse.h>
#include "ardour_ui.h"
@@ -56,7 +57,6 @@
#include "rgb_macros.h"
#include "selection_templates.h"
#include "selection.h"
-#include "sfdb_ui.h"
#include "editing.h"
#include "gtk-custom-hruler.h"
#include "gui_thread.h"
@@ -122,7 +122,7 @@ Editor::split_regions_at (nframes_t where, RegionSelection& regions)
tmp = a;
++tmp;
- Playlist* pl = (*a)->region()->playlist();
+ boost::shared_ptr<Playlist> pl = (*a)->region()->playlist();
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*a);
if (arv)
@@ -149,7 +149,7 @@ Editor::remove_clicked_region ()
return;
}
- Playlist* playlist = clicked_routeview->playlist();
+ boost::shared_ptr<Playlist> playlist = clicked_routeview->playlist();
begin_reversible_command (_("remove region"));
XMLNode &before = playlist->get_state();
@@ -232,7 +232,7 @@ Editor::select_region_for_operation (int dir, TimeAxisView **tv)
RouteTimeAxisView* rtv;
if ((rtv = dynamic_cast<RouteTimeAxisView*> (*tv)) != 0) {
- Playlist *pl;
+ boost::shared_ptr<Playlist> pl;
if ((pl = rtv->playlist()) == 0) {
return region;
@@ -1197,6 +1197,8 @@ Editor::temporal_zoom_to_frame (bool coarser, nframes_t frame)
void
Editor::add_location_from_selection ()
{
+ string rangename;
+
if (selection->time.empty()) {
return;
}
@@ -1208,7 +1210,8 @@ Editor::add_location_from_selection ()
nframes_t start = selection->time[clicked_selection].start;
nframes_t end = selection->time[clicked_selection].end;
- Location *location = new Location (start, end, "selection");
+ session->locations()->next_available_name(rangename,"selection");
+ Location *location = new Location (start, end, rangename, Location::IsRangeMarker);
session->begin_reversible_command (_("add marker"));
XMLNode &before = session->locations()->get_state();
@@ -1221,9 +1224,12 @@ Editor::add_location_from_selection ()
void
Editor::add_location_from_playhead_cursor ()
{
+ string markername;
+
nframes_t where = session->audible_frame();
- Location *location = new Location (where, where, "mark", Location::IsMark);
+ session->locations()->next_available_name(markername,"mark");
+ Location *location = new Location (where, where, markername, Location::IsMark);
session->begin_reversible_command (_("add marker"));
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
@@ -1242,7 +1248,7 @@ Editor::add_location_from_audio_region ()
RegionView* rv = *(selection->regions.begin());
boost::shared_ptr<Region> region = rv->region();
- Location *location = new Location (region->position(), region->last_frame(), region->name());
+ Location *location = new Location (region->position(), region->last_frame(), region->name(), Location::IsRangeMarker);
session->begin_reversible_command (_("add marker"));
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
@@ -1649,6 +1655,7 @@ Editor::set_mark ()
nframes_t pos;
float prefix;
bool was_floating;
+ string markername;
if (get_prefix (prefix, was_floating)) {
pos = session->audible_frame ();
@@ -1660,7 +1667,8 @@ Editor::set_mark ()
}
}
- session->locations()->add (new Location (pos, 0, "mark", Location::IsMark), true);
+ session->locations()->next_available_name(markername,"mark");
+ session->locations()->add (new Location (pos, 0, markername, Location::IsMark), true);
}
void
@@ -1709,6 +1717,28 @@ Editor::clear_locations ()
session->locations()->clear ();
}
+void
+Editor::unhide_markers ()
+{
+ for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
+ Location *l = (*i).first;
+ if (l->is_hidden() && l->is_mark()) {
+ l->set_hidden(false, this);
+ }
+ }
+}
+
+void
+Editor::unhide_ranges ()
+{
+ for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
+ Location *l = (*i).first;
+ if (l->is_hidden() && l->is_range_marker()) {
+ l->set_hidden(false, this);
+ }
+ }
+}
+
/* INSERT/REPLACE */
void
@@ -1719,7 +1749,7 @@ Editor::insert_region_list_drag (boost::shared_ptr<Region> region, int x, int y)
TimeAxisView *tv;
nframes_t where;
AudioTimeAxisView *atv = 0;
- Playlist *playlist;
+ boost::shared_ptr<Playlist> playlist;
track_canvas.window_to_world (x, y, wx, wy);
wx += horizontal_adjustment.get_value();
@@ -1749,20 +1779,26 @@ Editor::insert_region_list_drag (boost::shared_ptr<Region> region, int x, int y)
return;
}
+ cerr << "drop target playlist, UC = " << playlist.use_count() << endl;
+
snap_to (where);
begin_reversible_command (_("insert dragged region"));
XMLNode &before = playlist->get_state();
+ cerr << "pre add target playlist, UC = " << playlist.use_count() << endl;
playlist->add_region (RegionFactory::create (region), where, 1.0);
+ cerr << "post add target playlist, UC = " << playlist.use_count() << endl;
session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
commit_reversible_command ();
+
+ cerr << "post drop target playlist, UC = " << playlist.use_count() << endl;
}
void
Editor::insert_region_list_selection (float times)
{
RouteTimeAxisView *tv = 0;
- Playlist *playlist;
+ boost::shared_ptr<Playlist> playlist;
if (clicked_routeview != 0) {
tv = clicked_routeview;
@@ -2097,7 +2133,7 @@ Editor::region_from_selection ()
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
boost::shared_ptr<AudioRegion> current;
boost::shared_ptr<Region> current_r;
- Playlist *pl;
+ boost::shared_ptr<Playlist> pl;
nframes_t internal_start;
string new_name;
@@ -2134,7 +2170,7 @@ Editor::create_region_from_selection (vector<boost::shared_ptr<AudioRegion> >& n
boost::shared_ptr<AudioRegion> current;
boost::shared_ptr<Region> current_r;
- Playlist* playlist;
+ boost::shared_ptr<Playlist> playlist;
nframes_t internal_start;
string new_name;
@@ -2191,7 +2227,7 @@ Editor::separate_region_from_selection ()
return;
}
- Playlist *playlist;
+ boost::shared_ptr<Playlist> playlist;
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
@@ -2239,7 +2275,7 @@ Editor::separate_regions_using_location (Location& loc)
return;
}
- Playlist *playlist;
+ boost::shared_ptr<Playlist> playlist;
/* XXX i'm unsure as to whether this should operate on selected tracks only
or the entire enchillada. uncomment the below line to correct the behaviour
@@ -2288,8 +2324,8 @@ Editor::crop_region_to_selection ()
return;
}
- vector<Playlist*> playlists;
- Playlist *playlist;
+ vector<boost::shared_ptr<Playlist> > playlists;
+ boost::shared_ptr<Playlist> playlist;
if (clicked_axisview != 0) {
@@ -2322,7 +2358,7 @@ Editor::crop_region_to_selection ()
begin_reversible_command (_("trim to selection"));
- for (vector<Playlist*>::iterator i = playlists.begin(); i != playlists.end(); ++i) {
+ for (vector<boost::shared_ptr<Playlist> >::iterator i = playlists.begin(); i != playlists.end(); ++i) {
boost::shared_ptr<Region> region;
@@ -2371,7 +2407,7 @@ Editor::region_fill_track ()
boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion>(region);
assert(ar);
- Playlist* pl = region->playlist();
+ boost::shared_ptr<Playlist> pl = region->playlist();
if (end <= region->last_frame()) {
return;
@@ -2415,7 +2451,7 @@ Editor::region_fill_selection ()
nframes_t start = selection->time[clicked_selection].start;
nframes_t end = selection->time[clicked_selection].end;
- Playlist *playlist;
+ boost::shared_ptr<Playlist> playlist;
if (selection->tracks.empty()) {
return;
@@ -2781,7 +2817,7 @@ Editor::bounce_range_selection ()
continue;
}
- Playlist* playlist;
+ boost::shared_ptr<Playlist> playlist;
if ((playlist = atv->playlist()) == 0) {
return;
@@ -2897,7 +2933,7 @@ Editor::cut_copy_points (CutCopyOp op)
}
struct PlaylistState {
- Playlist* playlist;
+ boost::shared_ptr<Playlist> playlist;
XMLNode* before;
};
@@ -2910,7 +2946,7 @@ struct lt_playlist {
void
Editor::cut_copy_regions (CutCopyOp op)
{
- typedef std::map<AudioPlaylist*,AudioPlaylist*> PlaylistMapping;
+ typedef std::map<boost::shared_ptr<AudioPlaylist>,boost::shared_ptr<AudioPlaylist> > PlaylistMapping;
PlaylistMapping pmap;
nframes_t first_position = max_frames;
@@ -2921,7 +2957,8 @@ Editor::cut_copy_regions (CutCopyOp op)
first_position = min ((*x)->region()->position(), first_position);
if (op == Cut || op == Clear) {
- AudioPlaylist *pl = dynamic_cast<AudioPlaylist*>((*x)->region()->playlist());
+ boost::shared_ptr<AudioPlaylist> pl = boost::dynamic_pointer_cast<AudioPlaylist>((*x)->region()->playlist());
+
if (pl) {
PlaylistState before;
@@ -2939,8 +2976,8 @@ Editor::cut_copy_regions (CutCopyOp op)
for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ) {
- AudioPlaylist *pl = dynamic_cast<AudioPlaylist*>((*x)->region()->playlist());
- AudioPlaylist* npl;
+ boost::shared_ptr<AudioPlaylist> pl = boost::dynamic_pointer_cast<AudioPlaylist>((*x)->region()->playlist());
+ boost::shared_ptr<AudioPlaylist> npl;
RegionSelection::iterator tmp;
tmp = x;
@@ -2951,7 +2988,8 @@ Editor::cut_copy_regions (CutCopyOp op)
PlaylistMapping::iterator pi = pmap.find (pl);
if (pi == pmap.end()) {
- npl = new AudioPlaylist (*session, "cutlist", true);
+ // FIXME
+ npl = boost::dynamic_pointer_cast<AudioPlaylist> (PlaylistFactory::create (DataType::AUDIO, *session, "cutlist", true));
npl->freeze();
pmap[pl] = npl;
} else {
@@ -2983,7 +3021,7 @@ Editor::cut_copy_regions (CutCopyOp op)
x = tmp;
}
- list<Playlist*> foo;
+ list<boost::shared_ptr<Playlist> > foo;
for (PlaylistMapping::iterator i = pmap.begin(); i != pmap.end(); ++i) {
foo.push_back (i->second);
@@ -3080,8 +3118,8 @@ Editor::paste_named_selection (float times)
TreeModel::iterator i = selected->get_selected();
NamedSelection* ns = (*i)[named_selection_columns.selection];
- list<Playlist*>::iterator chunk;
- list<Playlist*>::iterator tmp;
+ list<boost::shared_ptr<Playlist> >::iterator chunk;
+ list<boost::shared_ptr<Playlist> >::iterator tmp;
chunk = ns->playlists.begin();
@@ -3090,8 +3128,8 @@ Editor::paste_named_selection (float times)
for (t = selection->tracks.begin(); t != selection->tracks.end(); ++t) {
AudioTimeAxisView* atv;
- Playlist* pl;
- AudioPlaylist* apl;
+ boost::shared_ptr<Playlist> pl;
+ boost::shared_ptr<AudioPlaylist> apl;
if ((atv = dynamic_cast<AudioTimeAxisView*> (*t)) == 0) {
continue;
@@ -3100,8 +3138,8 @@ Editor::paste_named_selection (float times)
if ((pl = atv->playlist()) == 0) {
continue;
}
-
- if ((apl = dynamic_cast<AudioPlaylist*> (pl)) == 0) {
+
+ if ((apl = boost::dynamic_pointer_cast<AudioPlaylist> (pl)) == 0) {
continue;
}
@@ -3109,7 +3147,7 @@ Editor::paste_named_selection (float times)
++tmp;
XMLNode &before = apl->get_state();
- apl->paste (**chunk, edit_cursor->current_frame, times);
+ apl->paste (*chunk, edit_cursor->current_frame, times);
session->add_command(new MementoCommand<AudioPlaylist>(*apl, &before, &apl->get_state()));
if (tmp != ns->playlists.end()) {
@@ -3123,7 +3161,7 @@ Editor::paste_named_selection (float times)
void
Editor::duplicate_some_regions (RegionSelection& regions, float times)
{
- Playlist *playlist;
+ boost::shared_ptr<Playlist> playlist;
RegionSelection sel = regions; // clear (below) will clear the argument list
begin_reversible_command (_("duplicate region"));
@@ -3161,7 +3199,7 @@ Editor::duplicate_selection (float times)
return;
}
- Playlist *playlist;
+ boost::shared_ptr<Playlist> playlist;
vector<boost::shared_ptr<AudioRegion> > new_regions;
vector<boost::shared_ptr<AudioRegion> >::iterator ri;
@@ -3227,20 +3265,20 @@ Editor::center_edit_cursor ()
}
void
-Editor::clear_playlist (Playlist& playlist)
+Editor::clear_playlist (boost::shared_ptr<Playlist> playlist)
{
begin_reversible_command (_("clear playlist"));
- XMLNode &before = playlist.get_state();
- playlist.clear ();
- XMLNode &after = playlist.get_state();
- session->add_command (new MementoCommand<Playlist>(playlist, &before, &after));
+ XMLNode &before = playlist->get_state();
+ playlist->clear ();
+ XMLNode &after = playlist->get_state();
+ session->add_command (new MementoCommand<Playlist>(*playlist.get(), &before, &after));
commit_reversible_command ();
}
void
Editor::nudge_track (bool use_edit_cursor, bool forwards)
{
- Playlist *playlist;
+ boost::shared_ptr<Playlist> playlist;
nframes_t distance;
nframes_t next_distance;
nframes_t start;
@@ -3388,7 +3426,7 @@ Editor::apply_filter (AudioFilter& filter, string command)
if (!arv)
continue;
- Playlist* playlist = arv->region()->playlist();
+ boost::shared_ptr<Playlist> playlist = arv->region()->playlist();
RegionSelection::iterator tmp;
diff --git a/gtk2_ardour/editor_region_list.cc b/gtk2_ardour/editor_region_list.cc
index b30a3092ec..bc95cb0d14 100644
--- a/gtk2_ardour/editor_region_list.cc
+++ b/gtk2_ardour/editor_region_list.cc
@@ -26,7 +26,7 @@
#include <pbd/basename.h>
#include <ardour/audioregion.h>
-#include <ardour/audiosource.h>
+#include <ardour/audiofilesource.h>
#include <ardour/session_region.h>
#include <gtkmm2ext/stop_signal.h>
@@ -101,7 +101,8 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
parent = *(region_list_model->append());
parent[region_list_columns.name] = _("Hidden");
- /// XXX FIX ME parent[region_list_columns.region]->reset ();
+ boost::shared_ptr<Region> proxy = parent[region_list_columns.region];
+ proxy.reset ();
} else {
@@ -109,7 +110,8 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
parent = *(region_list_model->insert(iter));
parent[region_list_columns.name] = _("Hidden");
- /// XXX FIX ME parent[region_list_columns.region]->reset ();
+ boost::shared_ptr<Region> proxy = parent[region_list_columns.region];
+ proxy.reset ();
} else {
parent = *iter;
@@ -129,8 +131,15 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
if (region->whole_file()) {
str = ".../";
- str += PBD::basename_nosuffix (region->source()->name());
-
+
+ boost::shared_ptr<AudioFileSource> afs = boost::dynamic_pointer_cast<AudioFileSource>(region->source());
+
+ if (afs) {
+ str += region_name_from_path (afs->path(), region->n_channels() > 1);
+ } else {
+ str += region->source()->name();
+ }
+
} else {
str = region->name();
}
@@ -342,20 +351,15 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
}
}
- if (region == 0) {
- return false;
- }
-
- if (Keyboard::is_delete_event (ev)) {
- session->remove_region_from_region_list (region);
- return true;
- }
-
if (Keyboard::is_context_menu_event (ev)) {
show_region_list_display_context_menu (ev->button, ev->time);
return true;
}
+ if (region == 0) {
+ return false;
+ }
+
switch (ev->button) {
case 1:
/* audition on double click */
diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc
index 06bf7da625..216e3a8e1b 100644
--- a/gtk2_ardour/editor_route_list.cc
+++ b/gtk2_ardour/editor_route_list.cc
@@ -479,7 +479,7 @@ Editor::show_route_list_menu()
build_route_list_menu ();
}
- route_list_menu->popup (1, 0);
+ route_list_menu->popup (1, gtk_get_current_event_time());
}
bool
diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc
index 9834ce16db..bc2328b524 100644
--- a/gtk2_ardour/editor_rulers.cc
+++ b/gtk2_ardour/editor_rulers.cc
@@ -338,11 +338,13 @@ Editor::popup_ruler_menu (nframes_t where, ItemType t)
case MarkerBarItem:
ruler_items.push_back (MenuElem (_("New location marker"), bind ( mem_fun(*this, &Editor::mouse_add_new_marker), where)));
ruler_items.push_back (MenuElem (_("Clear all locations"), mem_fun(*this, &Editor::clear_markers)));
+ ruler_items.push_back (MenuElem (_("Unhide locations"), mem_fun(*this, &Editor::unhide_markers)));
ruler_items.push_back (SeparatorElem ());
break;
case RangeMarkerBarItem:
//ruler_items.push_back (MenuElem (_("New Range")));
ruler_items.push_back (MenuElem (_("Clear all ranges"), mem_fun(*this, &Editor::clear_ranges)));
+ ruler_items.push_back (MenuElem (_("Unhide ranges"), mem_fun(*this, &Editor::unhide_ranges)));
ruler_items.push_back (SeparatorElem ());
break;
@@ -422,7 +424,7 @@ Editor::popup_ruler_menu (nframes_t where, ItemType t)
mitem->set_active(true);
}
- editor_ruler_menu->popup (1, 0);
+ editor_ruler_menu->popup (1, gtk_get_current_event_time());
no_ruler_shown_update = false;
}
@@ -468,7 +470,7 @@ Editor::store_ruler_visibility ()
session->add_extra_xml (*node);
session->set_dirty ();
}
-
+
void
Editor::restore_ruler_visibility ()
{
@@ -854,7 +856,7 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upp
if (range < (2 * session->frames_per_smpte_frame())) { /* 0 - 2 frames */
show_bits = true;
mark_modulo = 20;
- nmarks = 1 + 160;
+ nmarks = 1 + (2 * Config->get_subframes_per_frame());
} else if (range <= (fr / 4)) { /* 2 frames - 0.250 second */
show_frames = true;
mark_modulo = 1;
diff --git a/gtk2_ardour/editor_selection_list.cc b/gtk2_ardour/editor_selection_list.cc
index 959da1ad2d..8e88ee497b 100644
--- a/gtk2_ardour/editor_selection_list.cc
+++ b/gtk2_ardour/editor_selection_list.cc
@@ -79,7 +79,7 @@ Editor::named_selection_display_button_press (GdkEventButton *ev)
case 1:
if (Keyboard::is_delete_event (ev)) {
session->remove_named_selection ((*i)[named_selection_columns.selection]);
- return stop_signal (named_selection_display, "button_press_event");
+ return true;
}
break;
case 2:
@@ -150,12 +150,12 @@ Editor::create_named_selection (const string & name)
return;
}
- Playlist* what_we_found;
- list<Playlist*> thelist;
+ boost::shared_ptr<Playlist> what_we_found;
+ list<boost::shared_ptr<Playlist> > thelist;
for (TrackViewList::iterator i = views->begin(); i != views->end(); ++i) {
- Playlist *pl = (*i)->playlist();
+ boost::shared_ptr<Playlist> pl = (*i)->playlist();
if (pl) {
diff --git a/gtk2_ardour/editor_timefx.cc b/gtk2_ardour/editor_timefx.cc
index 188960c962..bfc5ee85cd 100644
--- a/gtk2_ardour/editor_timefx.cc
+++ b/gtk2_ardour/editor_timefx.cc
@@ -159,7 +159,7 @@ void
Editor::do_timestretch (TimeStretchDialog& dialog)
{
Track* t;
- Playlist* playlist;
+ boost::shared_ptr<Playlist> playlist;
boost::shared_ptr<Region> new_region;
for (RegionSelection::iterator i = dialog.regions.begin(); i != dialog.regions.end(); ) {
diff --git a/gtk2_ardour/editor_xpms b/gtk2_ardour/editor_xpms
index cb63e2403a..95a51a8213 100644
--- a/gtk2_ardour/editor_xpms
+++ b/gtk2_ardour/editor_xpms
@@ -63,3 +63,55 @@ static const gchar speaker_cursor_mask_bits[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0x3f, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xf0,
0x00, 0xc0, 0x00, 0xc0 };
+
+#define cursor_audition_width 13
+#define cursor_audition_height 16
+#define cursor_audition_x_hot 0
+#define cursor_audition_y_hot 7
+static const short cursor_audition_bits[] = {
+ 0x1000, 0x1800, 0x1400, 0x1200, 0x11f0, 0x1110, 0x111f, 0x1111, 0x1112,
+ 0x111e, 0x1110, 0x11f0, 0x1200, 0x1400, 0x1800, 0x1000 };
+
+#define cursor_audition_mask_width 13
+#define cursor_audition_mask_height 16
+#define cursor_audition_mask_x_hot 0
+#define cursor_audition_mask_y_hot 7
+static const short cursor_audition_mask_bits[] = {
+ 0x1000, 0x1800, 0x1c00, 0x1e00, 0x1ff0, 0x1ff0, 0x1fff, 0x1fff, 0x1ffe,
+ 0x1ffe, 0x1ff0, 0x1ff0, 0x1e00, 0x1c00, 0x1800, 0x1000 };
+
+#define cursor_timestretch_width 15
+#define cursor_timestretch_height 16
+#define cursor_timestretch_x_hot 7
+#define cursor_timestretch_y_hot 8
+static const short cursor_timestretch_bits[] = {
+ 0x01c0, 0x0140, 0x0140, 0x0140, 0x0540, 0x0d40, 0x1548, 0x274c, 0x417e,
+ 0x274c, 0x1548, 0x0d40, 0x0540, 0x0140, 0x0140, 0x01c0 };
+
+#define cursor_timestretch_mask_width 15
+#define cursor_timestretch_mask_height 16
+#define cursor_timestretch_mask_x_hot 7
+#define cursor_timestretch_mask_y_hot 8
+static const short cursor_timestretch_mask_bits[] = {
+ 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x05d0, 0x0dd8, 0x1ddc, 0x3ffe, 0x7fff,
+ 0x3ffe, 0x1ddc, 0x0dd8, 0x05d0, 0x01c0, 0x01c0, 0x01c0 };
+
+#define cursor_zoom_width 17
+#define cursor_zoom_height 16
+#define cursor_zoom_x_hot 6
+#define cursor_zoom_y_hot 6
+static const short cursor_zoom_bits[] = {
+ 0x00e0, 0x0000, 0x03b8, 0x0000, 0x0604, 0x0000, 0x0806, 0x0000, 0x0842,
+ 0x0000, 0x1843, 0x0000, 0x11f1, 0x0000, 0x1843, 0x0000, 0x0842, 0x0000,
+ 0x1806, 0x0000, 0x2604, 0x0000, 0x4758, 0x0000, 0x88e0, 0x0000, 0x1000,
+ 0x0001, 0x2000, 0x0001, 0xc000, 0x0000 };
+
+#define cursor_zoom_mask_width 17
+#define cursor_zoom_mask_height 16
+#define cursor_zoom_mask_x_hot 6
+#define cursor_zoom_mask_y_hot 6
+static const short cursor_zoom_mask_bits[] = {
+ 0x00e0, 0x0000, 0x03f8, 0x0000, 0x07fc, 0x0000, 0x0ffe, 0x0000, 0x0ffe,
+ 0x0000, 0x1fff, 0x0000, 0x1fff, 0x0000, 0x1fff, 0x0000, 0x0ffe, 0x0000,
+ 0x1ffe, 0x0000, 0x3ffc, 0x0000, 0x7ff8, 0x0000, 0xf8e0, 0x0000, 0xf000,
+ 0x0001, 0xe000, 0x0001, 0xc000, 0x0000 };
diff --git a/gtk2_ardour/enums.cc b/gtk2_ardour/enums.cc
new file mode 100644
index 0000000000..68b2751ffb
--- /dev/null
+++ b/gtk2_ardour/enums.cc
@@ -0,0 +1,29 @@
+#include <pbd/enumwriter.h>
+
+#include "audio_clock.h"
+
+using namespace std;
+using namespace PBD;
+using namespace ARDOUR;
+
+void
+setup_gtk_ardour_enums ()
+{
+ EnumWriter& enum_writer (EnumWriter::instance());
+ vector<int> i;
+ vector<string> s;
+
+ AudioClock::Mode clock_mode;
+
+#define REGISTER(e) enum_writer.register_distinct (typeid(e).name(), i, s); i.clear(); s.clear()
+#define REGISTER_BITS(e) enum_writer.register_bits (typeid(e).name(), i, s); i.clear(); s.clear()
+#define REGISTER_ENUM(e) i.push_back (e); s.push_back (#e)
+#define REGISTER_CLASS_ENUM(t,e) i.push_back (t::e); s.push_back (#e)
+
+ REGISTER_CLASS_ENUM (AudioClock, SMPTE);
+ REGISTER_CLASS_ENUM (AudioClock, BBT);
+ REGISTER_CLASS_ENUM (AudioClock, MinSec);
+ REGISTER_CLASS_ENUM (AudioClock, Frames);
+ REGISTER_CLASS_ENUM (AudioClock, Off);
+ REGISTER (clock_mode);
+}
diff --git a/gtk2_ardour/enums.h b/gtk2_ardour/enums.h
index 15ba874366..987c49fe06 100644
--- a/gtk2_ardour/enums.h
+++ b/gtk2_ardour/enums.h
@@ -8,6 +8,11 @@ enum WaveformShape {
Rectified
};
+enum WaveformScale {
+ LinearWaveform=0,
+ LogWaveform,
+};
+
enum Width {
Wide,
@@ -27,4 +32,6 @@ struct SelectionRect {
uint32_t id;
};
+extern void setup_gtk_ardour_enums ();
+
#endif /* __ardour_gtk_enums_h__ */
diff --git a/gtk2_ardour/export_dialog.cc b/gtk2_ardour/export_dialog.cc
index 5a269ffbef..921e6776aa 100644
--- a/gtk2_ardour/export_dialog.cc
+++ b/gtk2_ardour/export_dialog.cc
@@ -123,7 +123,7 @@ ExportDialog::ExportDialog(PublicEditor& e)
export_cd_markers_allowed = true;
set_title (_("ardour: export"));
- set_wmclass (_("ardour_export"), "Ardour");
+ set_wmclass (X_("ardour_export"), "Ardour");
set_name ("ExportWindow");
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
diff --git a/gtk2_ardour/fft_graph.cc b/gtk2_ardour/fft_graph.cc
index 5d2f383a80..e7a0fd75b6 100644
--- a/gtk2_ardour/fft_graph.cc
+++ b/gtk2_ardour/fft_graph.cc
@@ -123,7 +123,7 @@ FFTGraph::setWindowSize_internal(int windowSize)
}
_logScale = (int *) malloc(sizeof(int) * _dataSize);
- float count = 0;
+ //float count = 0;
for (int i = 0; i < _dataSize; i++) {
_logScale[i] = 0;
}
@@ -389,7 +389,7 @@ FFTGraph::on_size_request(Gtk::Requisition* requisition)
pixel++;
freq_at_pixel = FFT_START * exp( FFT_RANGE * pixel / (double)scaleWidth );
}
- _logScale[i] = floor(pixel);
+ _logScale[i] = (int)floor(pixel);
//printf("logscale at %d = %3.3f, freq_at_pixel %3.3f, freq_at_bin %3.3f, scaleWidth %d\n", i, pixel, freq_at_pixel, freq_at_bin, scaleWidth);
}
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc
index fc8e183d96..cedded1d9b 100644
--- a/gtk2_ardour/gain_meter.cc
+++ b/gtk2_ardour/gain_meter.cc
@@ -63,20 +63,7 @@ map<string,Glib::RefPtr<Gdk::Pixmap> > GainMeter::metric_pixmaps;
int
GainMeter::setup_slider_pix ()
{
- string path = ARDOUR::find_data_file("vslider02_slider.xpm", "pixmaps");
- if (path.empty()) {
- error << _("cannot find images for fader slider") << endmsg;
- return -1;
- }
- slider = Gdk::Pixbuf::create_from_file (path);
-
- path = ARDOUR::find_data_file("vslider02_rail.xpm", "pixmaps");
- if (path.empty()) {
- error << _("cannot find images for fader rail") << endmsg;
- return -1;
- }
- rail = Gdk::Pixbuf::create_from_file (path);
-
+ slider = ::get_icon ("fader_belt");
return 0;
}
@@ -86,7 +73,6 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
gain_slider (0),
// 0.781787 is the value needed for gain to be set to 0.
gain_adjustment (0.781787, 0.0, 1.0, 0.01, 0.1),
- gain_display (&gain_adjustment, "MixerStripGainDisplay"),
gain_automation_style_button (""),
gain_automation_state_button ("")
@@ -97,36 +83,38 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
ignore_toggle = false;
meter_menu = 0;
-
- gain_slider = manage (new VSliderController (slider, rail,
+ next_release_selects = false;
+
+ gain_slider = manage (new VSliderController (slider,
&gain_adjustment,
_io->gain_control(),
false));
gain_slider->signal_button_press_event().connect (mem_fun(*this, &GainMeter::start_gain_touch));
gain_slider->signal_button_release_event().connect (mem_fun(*this, &GainMeter::end_gain_touch));
- gain_slider->set_name ("MixerGainMeter");
+ gain_slider->set_name ("GainFader");
- gain_display.set_print_func (_gain_printer, this);
+ gain_display.set_name ("MixerStripGainDisplay");
+ gain_display.set_has_frame (false);
+ set_size_request_to_display_given_text (gain_display, "-80.g", 2, 6); /* note the descender */
+ gain_display.signal_activate().connect (mem_fun (*this, &GainMeter::gain_activated));
+ gain_display.signal_focus_in_event().connect (mem_fun (*this, &GainMeter::gain_focused), false);
+ gain_display.signal_focus_out_event().connect (mem_fun (*this, &GainMeter::gain_focused), false);
+ gain_display_box.set_homogeneous (true);
gain_display_box.set_spacing (2);
- set_size_request_to_display_given_text (gain_display_frame, "-86.g", 2, 6); /* note the descender */
- gain_display_frame.set_shadow_type (Gtk::SHADOW_IN);
- gain_display_frame.set_name ("BaseFrame");
- gain_display_frame.add (gain_display);
- gain_display_box.pack_start (gain_display_frame, Gtk::PACK_SHRINK);
+ gain_display_box.pack_start (gain_display, true, true);
peak_display.set_name ("MixerStripPeakDisplay");
- peak_display.add (peak_display_label);
- set_size_request_to_display_given_text (peak_display_frame, "-86.g", 2, 6); /* note the descender */
- peak_display_frame.set_shadow_type (Gtk::SHADOW_IN);
- peak_display_frame.set_name ("BaseFrame");
- peak_display_frame.add (peak_display);
+ peak_display.set_has_frame (false);
+ peak_display.set_editable (false);
+ set_size_request_to_display_given_text (peak_display, "-80.g", 2, 6); /* note the descender */
max_peak = minus_infinity();
- peak_display_label.set_text (_("-inf"));
+ peak_display.set_text (_("-inf"));
+ peak_display.unset_flags (Gtk::CAN_FOCUS);
- meter_metric_area.set_size_request (25, -1);
meter_metric_area.set_name ("MeterMetricsStrip");
+ set_size_request_to_display_given_text (meter_metric_area, "-50", 0, 0);
meter_packer.set_spacing (2);
@@ -142,12 +130,15 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
gain_automation_state_button.set_size_request(15, 15);
gain_automation_style_button.set_size_request(15, 15);
+ HBox* fader_centering_box = manage (new HBox);
+ fader_centering_box->pack_start (*gain_slider, true, false);
fader_vbox = manage (new Gtk::VBox());
fader_vbox->set_spacing (0);
- fader_vbox->pack_start (*gain_slider, false, false, 0);
+ fader_vbox->pack_start (*fader_centering_box, false, false, 0);
- hbox.set_spacing (0);
+ hbox.set_spacing (2);
+ hbox.pack_start (*fader_vbox, true, true);
if (_io->default_type() == ARDOUR::DataType::AUDIO)
hbox.pack_start (*fader_vbox, false, false, 2);
@@ -157,14 +148,15 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
Route* r;
if ((r = dynamic_cast<Route*> (_io.get())) != 0) {
+
/*
- if we don't have a route (if we're the click),
+ if we have a route (ie. we're not the click),
pack some route-dependent stuff.
*/
- gain_display_box.pack_end (peak_display_frame, Gtk::PACK_SHRINK);
+ gain_display_box.pack_end (peak_display, true, true);
- hbox.pack_start (meter_packer, true, false);
+ hbox.pack_end (meter_packer, true, true);
using namespace Menu_Helpers;
@@ -193,23 +185,25 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
gain_automation_state_changed ();
}
+ set_spacing (2);
- set_spacing (4);
-
- pack_start (gain_display_box, Gtk::PACK_SHRINK);
- pack_start (hbox, Gtk::PACK_SHRINK);
+ pack_start (gain_display_box, Gtk::PACK_SHRINK);
+ pack_start (hbox, Gtk::PACK_SHRINK);
_io->gain_changed.connect (mem_fun(*this, &GainMeter::gain_changed));
meter_metric_area.signal_expose_event().connect (mem_fun(*this, &GainMeter::meter_metrics_expose));
gain_adjustment.signal_value_changed().connect (mem_fun(*this, &GainMeter::gain_adjusted));
- peak_display.signal_button_release_event().connect (mem_fun(*this, &GainMeter::peak_button_release));
+ peak_display.signal_button_release_event().connect (mem_fun(*this, &GainMeter::peak_button_release), false);
+ gain_display.signal_key_press_event().connect (mem_fun(*this, &GainMeter::gain_key_press), false);
Config->ParameterChanged.connect (mem_fun (*this, &GainMeter::parameter_changed));
gain_changed (0);
- update_gain_sensitive ();
+ show_gain ();
+ update_gain_sensitive ();
+
ResetAllPeakDisplays.connect (mem_fun(*this, &GainMeter::reset_peak_display));
ResetGroupPeakDisplays.connect (mem_fun(*this, &GainMeter::reset_group_peak_display));
}
@@ -219,10 +213,10 @@ GainMeter::set_width (Width w)
{
switch (w) {
case Wide:
- peak_display_frame.show_all();
+ peak_display.show();
break;
case Narrow:
- peak_display_frame.hide_all();
+ peak_display.hide();
break;
}
@@ -322,7 +316,7 @@ GainMeter::update_meters ()
{
vector<MeterInfo>::iterator i;
uint32_t n;
- float peak;
+ float peak, mpeak;
char buf[32];
for (n = 0, i = meters.begin(); i != meters.end(); ++i, ++n) {
@@ -330,15 +324,17 @@ GainMeter::update_meters ()
peak = _io->peak_meter().peak_power (n);
(*i).meter->set (log_meter (peak), peak);
-
- if (peak > max_peak) {
- max_peak = peak;
- /* set peak display */
+
+ mpeak = _io->peak_meter().max_peak_power(n);
+
+ if (mpeak > max_peak) {
+ max_peak = mpeak;
+ /* set peak display */
if (max_peak <= -200.0f) {
- peak_display_label.set_text (_("-inf"));
+ peak_display.set_text (_("-inf"));
} else {
snprintf (buf, sizeof(buf), "%.1f", max_peak);
- peak_display_label.set_text (buf);
+ peak_display.set_text (buf);
}
if (max_peak >= 0.0f) {
@@ -432,7 +428,14 @@ GainMeter::setup_meters ()
meters.push_back (MeterInfo());
}
- for (uint32_t n = 0; n < nmeters; ++n) {
+ /* pack them backwards */
+
+ if (_width == Wide) {
+ meter_packer.pack_end (meter_metric_area, false, false);
+ meter_metric_area.show_all ();
+ }
+
+ for (int32_t n = nmeters-1; nmeters && n >= 0 ; --n) {
if (meters[n].width != width) {
delete meters[n].meter;
meters[n].meter = new FastMeter ((uint32_t) floor (Config->get_meter_hold()), width, FastMeter::Vertical);
@@ -442,18 +445,24 @@ GainMeter::setup_meters ()
meters[n].meter->signal_button_release_event().connect (bind (mem_fun(*this, &GainMeter::meter_button_release), n));
}
- meter_packer.pack_start (*meters[n].meter, Gtk::PACK_SHRINK);
+ meter_packer.pack_end (*meters[n].meter, false, false);
meters[n].meter->show_all ();
meters[n].packed = true;
}
+}
- if (_width == Wide) {
- meter_packer.pack_start (meter_metric_area, Gtk::PACK_SHRINK);
- meter_metric_area.show_all ();
+bool
+GainMeter::gain_key_press (GdkEventKey* ev)
+{
+ if (key_is_legal_for_numeric_entry (ev->keyval)) {
+ /* drop through to normal handling */
+ return false;
}
-}
+ /* illegal key for gain entry */
+ return true;
+}
-gint
+bool
GainMeter::peak_button_release (GdkEventButton* ev)
{
/* reset peak label */
@@ -468,14 +477,20 @@ GainMeter::peak_button_release (GdkEventButton* ev)
} else {
reset_peak_display ();
}
- return TRUE;
+
+ return true;
}
void
GainMeter::reset_peak_display ()
{
- max_peak = minus_infinity();
- peak_display_label.set_text (_("-Inf"));
+ Route * r;
+ if ((r = dynamic_cast<Route*> (_io.get())) != 0) {
+ r->peak_meter().reset_max();
+ }
+
+ max_peak = -INFINITY;
+ peak_display.set_text (_("-Inf"));
peak_display.set_name ("MixerStripPeakDisplay");
}
@@ -497,7 +512,7 @@ GainMeter::meter_button_release (GdkEventButton* ev, uint32_t which)
case 1:
meters[which].meter->clear();
max_peak = minus_infinity();
- peak_display_label.set_text (_("-inf"));
+ peak_display.set_text (_("-inf"));
peak_display.set_name ("MixerStripPeakDisplay");
break;
@@ -530,22 +545,46 @@ GainMeter::popup_meter_menu (GdkEventButton *ev)
meter_menu->popup (1, ev->time);
}
+bool
+GainMeter::gain_focused (GdkEventFocus* ev)
+{
+ if (ev->in) {
+ gain_display.select_region (0, -1);
+ } else {
+ gain_display.select_region (0, 0);
+ }
+ return false;
+}
+
void
-GainMeter::_gain_printer (char buf[32], Gtk::Adjustment& adj, void *arg)
+GainMeter::gain_activated ()
{
- static_cast<GainMeter *>(arg)->gain_printer (buf, adj);
+ float f;
+
+ if (sscanf (gain_display.get_text().c_str(), "%f", &f) == 1) {
+
+ /* clamp to displayable values */
+
+ f = min (f, 6.0f);
+
+ _io->set_gain (dB_to_coefficient (f), this);
+ }
}
void
-GainMeter::gain_printer (char buf[32], Gtk::Adjustment& adj)
+GainMeter::show_gain ()
{
- float v = adj.get_value();
+ char buf[32];
+ float v = gain_adjustment.get_value();
+
if (v == 0.0) {
strcpy (buf, _("-inf"));
} else {
snprintf (buf, 32, "%.1f", coefficient_to_dB (slider_position_to_gain (v)));
}
+
+ gain_display.set_text (buf);
}
void
@@ -554,6 +593,7 @@ GainMeter::gain_adjusted ()
if (!ignore_toggle) {
_io->set_gain (slider_position_to_gain (gain_adjustment.get_value()), this);
}
+ show_gain ();
}
void
@@ -562,7 +602,7 @@ GainMeter::effective_gain_display ()
gfloat value = gain_to_slider_position (_io->effective_gain());
if (gain_adjustment.get_value() != value) {
- ignore_toggle = true;
+ ignore_toggle = true;
gain_adjustment.set_value (value);
ignore_toggle = false;
}
@@ -649,7 +689,13 @@ GainMeter::meter_press(GdkEventButton* ev)
/* ctrl-shift-click applies change to all routes */
+ _session.begin_reversible_command (_("meter point change"));
+ Session::GlobalMeteringStateCommand *cmd = new Session::GlobalMeteringStateCommand (_session, this);
_session.foreach_route (this, &GainMeter::set_meter_point, next_meter_point (_route->meter_point()));
+ cmd->mark();
+ _session.add_command (cmd);
+ _session.commit_reversible_command ();
+
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) {
@@ -658,12 +704,19 @@ GainMeter::meter_press(GdkEventButton* ev)
*/
if (ev->button == 1) {
+ _session.begin_reversible_command (_("meter point change"));
+ Session::GlobalMeteringStateCommand *cmd = new Session::GlobalMeteringStateCommand (_session, this);
set_mix_group_meter_point (*_route, next_meter_point (_route->meter_point()));
+ cmd->mark();
+ _session.add_command (cmd);
+ _session.commit_reversible_command ();
}
} else {
- /* click: solo this route */
+ /* click: change just this route */
+
+ // XXX no undo yet
_route->set_meter_point (next_meter_point (_route->meter_point()), this);
}
diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h
index bbc12ccb6c..88105ce846 100644
--- a/gtk2_ardour/gain_meter.h
+++ b/gtk2_ardour/gain_meter.h
@@ -35,6 +35,7 @@
#include <ardour/types.h>
#include <gtkmm2ext/click_box.h>
+#include <gtkmm2ext/focus_entry.h>
#include <gtkmm2ext/slider_controller.h>
#include "enums.h"
@@ -79,14 +80,12 @@ class GainMeter : public Gtk::VBox
ARDOUR::Session& _session;
bool ignore_toggle;
+ bool next_release_selects;
Gtkmm2ext::VSliderController *gain_slider;
Gtk::Adjustment gain_adjustment;
- Gtk::Frame gain_display_frame;
- Gtkmm2ext::ClickBox gain_display;
- Gtk::Frame peak_display_frame;
- Gtk::EventBox peak_display;
- Gtk::Label peak_display_label;
+ Gtkmm2ext::FocusEntry gain_display;
+ Gtk::Entry peak_display;
Gtk::HBox gain_display_box;
Gtk::HBox fader_box;
Gtk::DrawingArea meter_metric_area;
@@ -122,9 +121,10 @@ class GainMeter : public Gtk::VBox
gint meter_metrics_expose (GdkEventExpose *);
- static void _gain_printer (char buf[32], Gtk::Adjustment&, void *);
- void gain_printer (char buf[32], Gtk::Adjustment&);
-
+ void show_gain ();
+ void gain_activated ();
+ bool gain_focused (GdkEventFocus*);
+
struct MeterInfo {
Gtkmm2ext::FastMeter *meter;
gint16 width;
@@ -157,7 +157,8 @@ class GainMeter : public Gtk::VBox
gint meter_button_press (GdkEventButton*, uint32_t);
gint meter_button_release (GdkEventButton*, uint32_t);
- gint peak_button_release (GdkEventButton*);
+ bool peak_button_release (GdkEventButton*);
+ bool gain_key_press (GdkEventKey*);
Gtk::Menu* meter_menu;
void popup_meter_menu (GdkEventButton*);
diff --git a/gtk2_ardour/icons/ardour_icon_16px.png b/gtk2_ardour/icons/ardour_icon_16px.png
new file mode 100644
index 0000000000..7f21711d4b
--- /dev/null
+++ b/gtk2_ardour/icons/ardour_icon_16px.png
Binary files differ
diff --git a/gtk2_ardour/icons/ardour_icon_22px.png b/gtk2_ardour/icons/ardour_icon_22px.png
new file mode 100644
index 0000000000..bdf723edbd
--- /dev/null
+++ b/gtk2_ardour/icons/ardour_icon_22px.png
Binary files differ
diff --git a/gtk2_ardour/icons/ardour_icon_32px.png b/gtk2_ardour/icons/ardour_icon_32px.png
new file mode 100644
index 0000000000..d906f35d68
--- /dev/null
+++ b/gtk2_ardour/icons/ardour_icon_32px.png
Binary files differ
diff --git a/gtk2_ardour/icons/ardour_icon_48px.png b/gtk2_ardour/icons/ardour_icon_48px.png
new file mode 100644
index 0000000000..298a56556a
--- /dev/null
+++ b/gtk2_ardour/icons/ardour_icon_48px.png
Binary files differ
diff --git a/gtk2_ardour/icons/fader_belt.png b/gtk2_ardour/icons/fader_belt.png
new file mode 100644
index 0000000000..eefed15c76
--- /dev/null
+++ b/gtk2_ardour/icons/fader_belt.png
Binary files differ
diff --git a/gtk2_ardour/io_selector.cc b/gtk2_ardour/io_selector.cc
index 366e2c2769..00d24287ed 100644
--- a/gtk2_ardour/io_selector.cc
+++ b/gtk2_ardour/io_selector.cc
@@ -458,7 +458,7 @@ IOSelector::display_ports ()
really_short_name = port->short_name();
really_short_name = really_short_name.substr (really_short_name.find ('/') + 1);
-
+
tview = manage (new TreeView());
RefPtr<ListStore> port_model = ListStore::create (port_display_columns);
@@ -478,7 +478,6 @@ IOSelector::display_ports ()
/* now fill the clist with the current connections */
-
const char **connections = port->get_connections ();
if (connections) {
@@ -487,7 +486,7 @@ IOSelector::display_ports ()
row[port_display_columns.displayed_name] = connections[c];
row[port_display_columns.full_name] = connections[c];
}
- }
+ }
if (for_input) {
diff --git a/gtk2_ardour/ladspa_pluginui.cc b/gtk2_ardour/ladspa_pluginui.cc
index 9465b12c23..51fc20c457 100644
--- a/gtk2_ardour/ladspa_pluginui.cc
+++ b/gtk2_ardour/ladspa_pluginui.cc
@@ -575,7 +575,7 @@ LadspaPluginUI::astate_clicked (ControlUI* cui, uint32_t port)
items.push_back (MenuElem (_("Touch"),
bind (mem_fun(*this, &LadspaPluginUI::set_automation_state), (AutoState) Touch, cui)));
- automation_menu->popup (1, 0);
+ automation_menu->popup (1, gtk_get_current_event_time());
}
void
diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc
index 13dd95b47d..b77c3a5561 100644
--- a/gtk2_ardour/location_ui.cc
+++ b/gtk2_ardour/location_ui.cc
@@ -48,11 +48,11 @@ LocationEditRow::LocationEditRow(Session * sess, Location * loc, int32_t num)
item_table (1, 7, false),
start_set_button (_("Set")),
start_go_button (_("Go")),
- start_clock (X_("LocationEditRowClock"), true),
+ start_clock (X_("locationstart"), true, X_("LocationEditRowClock"), true),
end_set_button (_("Set")),
end_go_button (_("Go")),
- end_clock (X_("LocationEditRowClock"), true),
- length_clock (X_("LocationEditRowClock"), true, true),
+ end_clock (X_("locationend"), true, X_("LocationEditRowClock"), true),
+ length_clock (X_("locationlength"), true, X_("LocationEditRowClock"), true, true),
cd_check_button (_("CD")),
hide_check_button (_("Hidden")),
remove_button (_("Remove")),
@@ -215,7 +215,7 @@ LocationEditRow::set_location (Location *loc)
}
hide_check_button.set_active (location->is_hidden());
- if (location->is_auto_loop() || location->is_auto_punch()) {
+ if (location->is_auto_loop() || location-> is_auto_punch()) {
// use label instead of entry
name_label.set_text (location->name());
@@ -574,7 +574,7 @@ LocationUI::LocationUI ()
i_am_the_modifier = 0;
set_title(_("ardour: locations"));
- set_wmclass(_("ardour_locations"), "Ardour");
+ set_wmclass(X_("ardour_locations"), "Ardour");
set_name ("LocationWindow");
@@ -770,9 +770,12 @@ LocationUI::map_locations (Locations::LocationList& locations)
void
LocationUI::add_new_location()
{
+ string markername;
+
if (session) {
nframes_t where = session->audible_frame();
- Location *location = new Location (where, where, "mark", Location::IsMark);
+ session->locations()->next_available_name(markername,"mark");
+ Location *location = new Location (where, where, markername, Location::IsMark);
session->begin_reversible_command (_("add marker"));
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
@@ -786,10 +789,12 @@ LocationUI::add_new_location()
void
LocationUI::add_new_range()
{
+ string rangename;
+
if (session) {
nframes_t where = session->audible_frame();
- Location *location = new Location (where, where, "unnamed",
- Location::IsRangeMarker);
+ session->locations()->next_available_name(rangename,"unnamed");
+ Location *location = new Location (where, where, rangename, Location::IsRangeMarker);
session->begin_reversible_command (_("add range marker"));
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
diff --git a/gtk2_ardour/logmeter.h b/gtk2_ardour/logmeter.h
index f7ed1dd2be..8d9f0b9d82 100644
--- a/gtk2_ardour/logmeter.h
+++ b/gtk2_ardour/logmeter.h
@@ -1,7 +1,7 @@
#ifndef __ardour_gtk_log_meter_h__
#define __ardour_gtk_log_meter_h__
-#if 0
+#if 1
inline float
_log_meter (float power, double lower_db, double upper_db, double non_linearity)
{
@@ -9,7 +9,7 @@ _log_meter (float power, double lower_db, double upper_db, double non_linearity)
}
inline float
-log_meter (float power)
+alt_log_meter (float power)
{
return _log_meter (power, -192.0, 0.0, 8.0);
}
diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc
index a1d85cdb69..51a29bbb17 100644
--- a/gtk2_ardour/main.cc
+++ b/gtk2_ardour/main.cc
@@ -48,6 +48,7 @@
#include "version.h"
#include "ardour_ui.h"
#include "opts.h"
+#include "enums.h"
#include "i18n.h"
@@ -79,8 +80,6 @@ shutdown (int status)
} else {
if (ui) {
- msg = _("stopping user interface\n");
- write (1, msg, strlen (msg));
ui->kill();
}
@@ -301,7 +300,7 @@ maybe_load_session ()
if (!session_name.length()) {
ui->hide_splash ();
if (!Config->get_no_new_session_dialog()) {
- ui->new_session (true);
+ ui->new_session ();
}
return true;
@@ -321,12 +320,16 @@ maybe_load_session ()
/* Loading a session, but the session doesn't exist */
if (isnew) {
- error << string_compose (_("\n\nNo session named \"%1\" exists.\n\
-To create it from the command line, start ardour as \"ardour --new %1"), path) << endmsg;
+ error << string_compose (_("\n\nNo session named \"%1\" exists.\n"
+ "To create it from the command line, start ardour as \"ardour --new %1"), path)
+ << endmsg;
return false;
}
- ui->load_session (path, name);
+ if (ui->load_session (path, name)) {
+ /* it failed */
+ return false;
+ }
} else {
@@ -338,7 +341,7 @@ To create it from the command line, start ardour as \"ardour --new %1"), path) <
/* Show the NSD */
ui->hide_splash ();
if (!Config->get_no_new_session_dialog()) {
- ui->new_session (true);
+ ui->new_session ();
}
}
@@ -360,14 +363,15 @@ int main (int argc, char *argv[])
ARDOUR::AudioEngine *engine;
vector<Glib::ustring> null_file_list;
+ Glib::thread_init();
gtk_set_locale ();
- (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
(void) textdomain (PACKAGE);
pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0);
- // catch_signals ();
+ // catch error message system signals ();
text_receiver.listen_to (error);
text_receiver.listen_to (info);
@@ -407,9 +411,6 @@ int main (int argc, char *argv[])
<< endl;
}
- // needs a better home.
- Glib::thread_init();
-
try {
ui = new ARDOUR_UI (&argc, &argv, which_ui_rcfile());
} catch (failed_constructor& err) {
@@ -417,6 +418,9 @@ int main (int argc, char *argv[])
exit (1);
}
+ if (!keybindings_path.empty()) {
+ ui->set_keybindings_path (keybindings_path);
+ }
if (!no_splash) {
ui->show_splash ();
@@ -425,25 +429,27 @@ int main (int argc, char *argv[])
}
}
-
- try {
- engine = new ARDOUR::AudioEngine (jack_client_name);
- } catch (AudioEngine::NoBackendAvailable& err) {
- gui_jack_error ();
- error << string_compose (_("Could not connect to JACK server as \"%1\""), jack_client_name) << endmsg;
- return -1;
- }
-
-
try {
ARDOUR::init (*engine, use_vst, try_hw_optimization);
+ setup_gtk_ardour_enums ();
Config->set_current_owner (ConfigVariableBase::Interface);
+
+ try {
+ engine = new ARDOUR::AudioEngine (jack_client_name);
+ } catch (AudioEngine::NoBackendAvailable& err) {
+ gui_jack_error ();
+ error << string_compose (_("Could not connect to JACK server as \"%1\""), jack_client_name) << endmsg;
+ return -1;
+ }
+
ui->set_engine (*engine);
+
} catch (failed_constructor& err) {
error << _("could not initialize Ardour.") << endmsg;
return -1;
}
+ ui->start_engine ();
if (maybe_load_session ()) {
ui->run (text_receiver);
diff --git a/gtk2_ardour/meter_bridge.cc b/gtk2_ardour/meter_bridge.cc
index b871561563..0e88eff5e0 100644
--- a/gtk2_ardour/meter_bridge.cc
+++ b/gtk2_ardour/meter_bridge.cc
@@ -76,7 +76,7 @@ MeterBridge::MeterBridge ()
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
set_name ("MeterBridgeWindow");
set_title (_("ardour: meter bridge"));
- set_wmclass (_("ardour_meter_bridge"), "Ardour");
+ set_wmclass (X_("ardour_meter_bridge"), "Ardour");
// set_policy (false, false, false); // no user resizing of any kind
signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), static_cast<Gtk::Window*>(this)));
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index 289fb45536..edc66c92bb 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -233,15 +233,17 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt
global_vpacker.set_border_width (0);
global_vpacker.set_spacing (0);
- Gtk::VBox *whvbox = manage (new Gtk::VBox);
+ VBox *whvbox = manage (new VBox);
width_button.set_name ("MixerWidthButton");
hide_button.set_name ("MixerHideButton");
+ top_event_box.set_name ("MixerTopEventBox");
width_button.signal_clicked().connect (mem_fun(*this, &MixerStrip::width_clicked));
hide_button.signal_clicked().connect (mem_fun(*this, &MixerStrip::hide_clicked));
width_hide_box.pack_start (width_button, false, true);
+ width_hide_box.pack_start (top_event_box, true, true);
width_hide_box.pack_end (hide_button, false, true);
Gtk::Alignment *gain_meter_alignment = Gtk::manage(new Gtk::Alignment());
gain_meter_alignment->set_padding(0, 4, 0, 0);
@@ -425,8 +427,8 @@ MixerStrip::set_width (Width w)
if (rec_enable_button) {
rec_enable_button->set_label (_("record"));
}
- mute_button->set_label (_("mute"));
- solo_button->set_label (_("solo"));
+ mute_button->set_label (_("Mute"));
+ solo_button->set_label (_("Solo"));
if (_route->comment() == "") {
comment_button.unset_bg (STATE_NORMAL);
@@ -962,6 +964,7 @@ void
MixerStrip::show_route_color ()
{
name_button.modify_bg (STATE_NORMAL, color());
+ top_event_box.modify_bg (STATE_NORMAL, color());
route_active_changed ();
}
diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h
index 92da4c13fe..430f774eb6 100644
--- a/gtk2_ardour/mixer_strip.h
+++ b/gtk2_ardour/mixer_strip.h
@@ -111,6 +111,7 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
Gtk::Button hide_button;
Gtk::Button width_button;
Gtk::HBox width_hide_box;
+ Gtk::EventBox top_event_box;
void hide_clicked();
void width_clicked ();
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index d8e5fc6988..f20171f9fb 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -81,7 +81,7 @@ Mixer_UI::Mixer_UI (AudioEngine& eng)
track_model = ListStore::create (track_columns);
track_display.set_model (track_model);
track_display.append_column (_("Strips"), track_columns.text);
- track_display.append_column (_("Visible"), track_columns.visible);
+ track_display.append_column (_("Show"), track_columns.visible);
track_display.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(0));
track_display.get_column (1)->set_data (X_("colnum"), GUINT_TO_POINTER(1));
track_display.get_column (0)->set_expand(true);
@@ -107,7 +107,7 @@ Mixer_UI::Mixer_UI (AudioEngine& eng)
group_display.set_model (group_model);
group_display.append_column (_("Group"), group_columns.text);
group_display.append_column (_("Active"), group_columns.active);
- group_display.append_column (_("Visible"), group_columns.visible);
+ group_display.append_column (_("Show"), group_columns.visible);
group_display.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(0));
group_display.get_column (1)->set_data (X_("colnum"), GUINT_TO_POINTER(1));
group_display.get_column (2)->set_data (X_("colnum"), GUINT_TO_POINTER(2));
@@ -199,15 +199,12 @@ Mixer_UI::Mixer_UI (AudioEngine& eng)
rhs_pane1.set_data ("collapse-direction", (gpointer) 0);
list_hpane.set_data ("collapse-direction", (gpointer) 1);
- rhs_pane1.signal_button_release_event().connect (bind (sigc::ptr_fun (pane_handler), static_cast<Paned*>(&rhs_pane1)));
- list_hpane.signal_button_release_event().connect (bind (sigc::ptr_fun (pane_handler), static_cast<Paned*>(&list_hpane)));
-
global_vpacker.pack_start (list_hpane, true, true);
add (global_vpacker);
set_name ("MixerWindow");
set_title (_("ardour: mixer"));
- set_wmclass (_("ardour_mixer"), "Ardour");
+ set_wmclass (X_("ardour_mixer"), "Ardour");
add_accel_group (ActionManager::ui_manager->get_accel_group());
@@ -656,7 +653,7 @@ Mixer_UI::show_track_list_menu ()
build_track_menu ();
}
- track_menu->popup (1, 0);
+ track_menu->popup (1, gtk_get_current_event_time());
}
bool
@@ -765,7 +762,7 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev)
if (mix_group_context_menu == 0) {
build_mix_group_context_menu ();
}
- mix_group_context_menu->popup (1, 0);
+ mix_group_context_menu->popup (1, ev->time);
return true;
}
diff --git a/gtk2_ardour/new_session_dialog.cc b/gtk2_ardour/new_session_dialog.cc
index 4c486eaaf8..9e094c9ad0 100644
--- a/gtk2_ardour/new_session_dialog.cc
+++ b/gtk2_ardour/new_session_dialog.cc
@@ -357,17 +357,29 @@ NewSessionDialog::NewSessionDialog()
m_treeview->get_selection()->set_mode (Gtk::SELECTION_SINGLE);
std::string path = ARDOUR::get_user_ardour_path();
+
if (path.empty()) {
path = ARDOUR::get_system_data_path();
}
+
+ const char * const template_dir_name = X_("templates");
+
if (!path.empty()) {
- m_template->set_current_folder (path + X_("templates/"));
+ string user_template_path = path + template_dir_name;
+
+ if (Glib::file_test(user_template_path, Glib::FILE_TEST_IS_DIR))
+ {
+ m_template->set_current_folder (user_template_path);
+ }
}
- const std::string sys_templates_dir = ARDOUR::get_system_data_path() + X_("templates");
+ const std::string sys_templates_dir = ARDOUR::get_system_data_path() + template_dir_name;
+
if (Glib::file_test(sys_templates_dir, Glib::FILE_TEST_IS_DIR))
+ {
m_template->add_shortcut_folder(sys_templates_dir);
-
+ }
+
m_template->set_title(_("select template"));
Gtk::FileFilter* session_filter = manage (new (Gtk::FileFilter));
session_filter->add_pattern(X_("*.ardour"));
diff --git a/gtk2_ardour/option_editor.cc b/gtk2_ardour/option_editor.cc
index 3e461a85d7..1c76f8079b 100644
--- a/gtk2_ardour/option_editor.cc
+++ b/gtk2_ardour/option_editor.cc
@@ -20,7 +20,6 @@
#include <pbd/whitespace.h>
-#include <ardour/audio_library.h>
#include <ardour/session.h>
#include <ardour/audioengine.h>
#include <ardour/configuration.h>
@@ -60,7 +59,6 @@ OptionEditor::OptionEditor (ARDOUR_UI& uip, PublicEditor& ed, Mixer_UI& mixui)
/* Paths */
path_table (11, 2),
- sfdb_path_view(),
/* Fades */
@@ -71,7 +69,7 @@ OptionEditor::OptionEditor (ARDOUR_UI& uip, PublicEditor& ed, Mixer_UI& mixui)
/* Sync */
- smpte_offset_clock (X_("SMPTEOffsetClock"), true, true),
+ smpte_offset_clock (X_("smpteoffset"), false, X_("SMPTEOffsetClock"), true, true),
smpte_offset_negative_button (_("SMPTE offset is negative")),
/* MIDI */
@@ -99,7 +97,7 @@ OptionEditor::OptionEditor (ARDOUR_UI& uip, PublicEditor& ed, Mixer_UI& mixui)
set_default_size (300, 300);
set_title (_("ardour: options editor"));
- set_wmclass (_("ardour_option_editor"), "Ardour");
+ set_wmclass (X_("ardour_option_editor"), "Ardour");
set_name ("OptionsWindow");
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
@@ -224,24 +222,10 @@ OptionEditor::setup_path_options()
path_table.attach (*label, 0, 1, 0, 1, FILL|EXPAND, FILL);
path_table.attach (session_raid_entry, 1, 3, 0, 1, Gtk::FILL|Gtk::EXPAND, FILL);
- label = manage(new Label(_("Soundfile Search Paths")));
- label->set_name("OptionsLabel");
- path_table.attach(*label, 0, 1, 2, 3, FILL|EXPAND, FILL);
- path_table.attach(sfdb_path_view, 1, 3, 2, 3, Gtk::FILL|Gtk::EXPAND, FILL);
-
- sfdb_path_view.set_paths(Library->get_paths());
- sfdb_path_view.PathsUpdated.connect (mem_fun(*this, &OptionEditor::sfdb_paths_changed));
-
path_table.show_all();
}
void
-OptionEditor::sfdb_paths_changed ()
-{
- Library->set_paths (sfdb_path_view.get_paths());
-}
-
-void
OptionEditor::add_session_paths ()
{
click_path_entry.set_sensitive (true);
@@ -549,7 +533,7 @@ void
OptionEditor::port_online_toggled (MIDI::Port* port, ToggleButton* tb)
{
bool wanted = tb->get_active();
-
+
if (wanted != port->input()->offline()) {
port->input()->set_offline (wanted);
}
@@ -558,12 +542,16 @@ OptionEditor::port_online_toggled (MIDI::Port* port, ToggleButton* tb)
void
OptionEditor::map_port_online (MIDI::Port* port, ToggleButton* tb)
{
- if (port->input()->offline()) {
- tb->set_label (_("offline"));
- tb->set_active (false);
- } else {
- tb->set_label (_("online"));
- tb->set_active (true);
+ bool bstate = tb->get_active ();
+
+ if (bstate != port->input()->offline()) {
+ if (port->input()->offline()) {
+ tb->set_label (_("offline"));
+ tb->set_active (false);
+ } else {
+ tb->set_label (_("online"));
+ tb->set_active (true);
+ }
}
}
@@ -659,19 +647,12 @@ OptionEditor::click_sound_changed ()
return;
}
- if (path.empty()) {
+ strip_whitespace_edges (path);
+ if (path == _("internal")) {
Config->set_click_sound ("");
-
} else {
-
- strip_whitespace_edges (path);
-
- if (path == _("internal")) {
- Config->set_click_sound ("");
- } else {
- Config->set_click_sound (path);
- }
+ Config->set_click_sound (path);
}
}
}
@@ -686,19 +667,12 @@ OptionEditor::click_emphasis_sound_changed ()
return;
}
- if (path.empty()) {
+ strip_whitespace_edges (path);
+ if (path == _("internal")) {
Config->set_click_emphasis_sound ("");
-
} else {
-
- strip_whitespace_edges (path);
-
- if (path == _("internal")) {
- Config->set_click_emphasis_sound ("");
- } else {
- Config->set_click_emphasis_sound (path);
- }
+ Config->set_click_emphasis_sound (path);
}
}
}
diff --git a/gtk2_ardour/option_editor.h b/gtk2_ardour/option_editor.h
index 2076da3935..cc28a74e60 100644
--- a/gtk2_ardour/option_editor.h
+++ b/gtk2_ardour/option_editor.h
@@ -33,8 +33,6 @@
#include <gtkmm/radiobutton.h>
#include <gtkmm/comboboxtext.h>
-#include <gtkmm2ext/pathlist.h>
-
#include <ardour/session.h>
#include "ardour_dialog.h"
@@ -75,13 +73,10 @@ class OptionEditor : public Gtk::Dialog
Gtk::Table path_table;
Gtk::Entry session_raid_entry;
- Gtkmm2ext::PathList sfdb_path_view;
-
void setup_path_options();
void add_session_paths ();
void remove_session_paths ();
void raid_path_changed ();
- void sfdb_paths_changed ();
/* fades */
diff --git a/gtk2_ardour/opts.cc b/gtk2_ardour/opts.cc
index fcd62de512..792fde3a10 100644
--- a/gtk2_ardour/opts.cc
+++ b/gtk2_ardour/opts.cc
@@ -37,6 +37,7 @@ bool GTK_ARDOUR::use_vst = true;
bool GTK_ARDOUR::new_session = false;
char* GTK_ARDOUR::curvetest_file = 0;
bool GTK_ARDOUR::try_hw_optimization = true;
+string GTK_ARDOUR::keybindings_path = ""; /* empty means use builtin default */
using namespace GTK_ARDOUR;
@@ -50,13 +51,13 @@ print_help (const char *execname)
<< _(" -n, --show-splash Show splash screen\n")
<< _(" -c, --name name Use a specific jack client name, default is ardour\n")
<< _(" -N, --new session-name Create a new session from the command line\n")
- << _(" -o, --use-hw-optimizations Try to use h/w specific optimizations\n")
+ << _(" -O, --no-hw-optimizations Disable h/w specific optimizations\n")
#ifdef VST_SUPPORT
<< _(" -V, --novst Do not use VST support\n")
#endif
<< _(" [session-name] Name of session to load\n")
<< _(" -C, --curvetest filename Curve algorithm debugger\n")
- << _(" -g, --gtktheme Allow GTK to load a theme\n")
+ << _(" -k, --keybindings filename Name of key bindings to load (default is ~/.ardour2/ardour.bindings)\n")
;
return 1;
@@ -66,7 +67,7 @@ int
GTK_ARDOUR::parse_opts (int argc, char *argv[])
{
- const char *optstring = "U:hbvVnoc:C:N:g";
+ const char *optstring = "U:hbvVnOc:C:N:k:";
const char *execname = strrchr (argv[0], '/');
if (execname == 0) {
@@ -85,7 +86,6 @@ GTK_ARDOUR::parse_opts (int argc, char *argv[])
{ "new", 1, 0, 'N' },
{ "no-hw-optimizations", 0, 0, 'O' },
{ "curvetest", 1, 0, 'C' },
- { "gtktheme", 0, 0, 'g' },
{ 0, 0, 0, 0 }
};
@@ -142,6 +142,10 @@ GTK_ARDOUR::parse_opts (int argc, char *argv[])
curvetest_file = optarg;
break;
+ case 'k':
+ keybindings_path = optarg;
+ break;
+
default:
return print_help(execname);
}
diff --git a/gtk2_ardour/opts.h b/gtk2_ardour/opts.h
index 0516c3aa98..710621ac65 100644
--- a/gtk2_ardour/opts.h
+++ b/gtk2_ardour/opts.h
@@ -37,6 +37,7 @@ extern bool new_session;
extern char* curvetest_file;
extern bool try_hw_optimization;
extern bool use_gtk_theme;
+extern string keybindings_path;
extern int32_t parse_opts (int argc, char *argv[]);
diff --git a/gtk2_ardour/panner.cc b/gtk2_ardour/panner.cc
new file mode 100644
index 0000000000..bb9b432184
--- /dev/null
+++ b/gtk2_ardour/panner.cc
@@ -0,0 +1,104 @@
+#include <iostream>
+
+#include "panner.h"
+
+using namespace std;
+
+static const int triangle_size = 5;
+
+static void
+null_label_callback (char* buf, unsigned int bufsize)
+{
+ /* no label */
+
+ buf[0] = '\0';
+}
+
+
+PannerBar::PannerBar (Gtk::Adjustment& adj, PBD::Controllable& c)
+ : BarController (adj, c, sigc::ptr_fun (null_label_callback))
+{
+ set_style (BarController::Line);
+}
+
+PannerBar::~PannerBar ()
+{
+}
+
+bool
+PannerBar::expose (GdkEventExpose* ev)
+{
+ Glib::RefPtr<Gdk::Window> win (darea.get_window());
+ Glib::RefPtr<Gdk::GC> gc (get_style()->get_base_gc (get_state()));
+
+ BarController::expose (ev);
+
+ /* now draw triangles for left, right and center */
+
+ GdkPoint points[3];
+
+ // left
+
+ points[0].x = 0;
+ points[0].y = 0;
+
+ points[1].x = triangle_size;
+ points[1].y = 0;
+
+ points[2].x = 0;
+ points[2].y = triangle_size;
+
+ gdk_draw_polygon (win->gobj(), gc->gobj(), true, points, 3);
+
+ // center
+
+ points[0].x = (darea.get_width()/2 - triangle_size);
+ points[0].y = 0;
+
+ points[1].x = (darea.get_width()/2 + triangle_size) - 1;
+ points[1].y = 0;
+
+ points[2].x = darea.get_width()/2 - 1;
+ points[2].y = triangle_size - 1;
+
+ gdk_draw_polygon (win->gobj(), gc->gobj(), true, points, 3);
+
+ // right
+
+ points[0].x = (darea.get_width() - triangle_size) - 1;
+ points[0].y = 0;
+
+ points[1].x = darea.get_width() - 1;
+ points[1].y = 0;
+
+ points[2].x = darea.get_width() - 1;
+ points[2].y = triangle_size;
+
+ gdk_draw_polygon (win->gobj(), gc->gobj(), true, points, 3);
+
+ return true;
+}
+
+bool
+PannerBar::button_press (GdkEventButton* ev)
+{
+ if (ev->button == 1 && ev->type == GDK_BUTTON_PRESS && ev->y < 10) {
+ if (ev->x < triangle_size) {
+ adjustment.set_value (adjustment.get_lower());
+ } else if (ev->x > (darea.get_width() - triangle_size)) {
+ adjustment.set_value (adjustment.get_upper());
+ } else if (ev->x > (darea.get_width()/2 - triangle_size) &&
+ ev->x < (darea.get_width()/2 + triangle_size)) {
+ adjustment.set_value (adjustment.get_lower() + ((adjustment.get_upper() - adjustment.get_lower()) / 2.0));
+ }
+ }
+
+ return BarController::button_press (ev);
+}
+
+bool
+PannerBar::button_release (GdkEventButton* ev)
+{
+ return BarController::button_release (ev);
+}
+
diff --git a/gtk2_ardour/panner.h b/gtk2_ardour/panner.h
new file mode 100644
index 0000000000..d06a4c21e3
--- /dev/null
+++ b/gtk2_ardour/panner.h
@@ -0,0 +1,18 @@
+#ifndef __gtk_ardour_panner_h__
+#define __gtk_ardour_panner_h__
+
+#include <gtkmm2ext/barcontroller.h>
+
+class PannerBar : public Gtkmm2ext::BarController
+{
+ public:
+ PannerBar (Gtk::Adjustment& adj, PBD::Controllable&);
+ ~PannerBar ();
+
+ protected:
+ bool expose (GdkEventExpose*);
+ bool button_press (GdkEventButton*);
+ bool button_release (GdkEventButton*);
+};
+
+#endif /* __gtk_ardour_panner_h__ */
diff --git a/gtk2_ardour/panner2d.cc b/gtk2_ardour/panner2d.cc
index 1fb94a1321..1e6e4c16c9 100644
--- a/gtk2_ardour/panner2d.cc
+++ b/gtk2_ardour/panner2d.cc
@@ -593,7 +593,7 @@ Panner2d::show_context_menu ()
}
bypass_menu_item->set_active (panner.bypassed());
- context_menu->popup (1, 0);
+ context_menu->popup (1, gtk_get_current_event_time());
}
void
diff --git a/gtk2_ardour/panner_ui.cc b/gtk2_ardour/panner_ui.cc
index 250f1e146e..af5379b40f 100644
--- a/gtk2_ardour/panner_ui.cc
+++ b/gtk2_ardour/panner_ui.cc
@@ -30,6 +30,7 @@
#include "panner_ui.h"
#include "panner2d.h"
#include "utils.h"
+#include "panner.h"
#include "gui_thread.h"
#include <ardour/session.h>
@@ -44,6 +45,7 @@ using namespace Gtkmm2ext;
using namespace Gtk;
using namespace sigc;
+const int PannerUI::pan_bar_height = 30;
PannerUI::PannerUI (boost::shared_ptr<IO> io, Session& s)
: _io (io),
@@ -71,7 +73,7 @@ PannerUI::PannerUI (boost::shared_ptr<IO> io, Session& s)
//set_size_request_to_display_given_text (pan_automation_style_button, X_("0"), 2, 2);
pan_bar_packer.set_size_request (-1, 61);
- panning_viewport.set_size_request (61, 61);
+ panning_viewport.set_size_request (64, 61);
panning_viewport.set_name (X_("BaseFrame"));
@@ -131,7 +133,7 @@ PannerUI::PannerUI (boost::shared_ptr<IO> io, Session& s)
panning_up_arrow.set_name (X_("PanScrollerArrow"));
panning_down_arrow.set_name (X_("PanScrollerArrow"));
- pan_vbox.set_spacing (4);
+ pan_vbox.set_spacing (2);
pan_vbox.pack_start (panning_viewport, Gtk::PACK_SHRINK);
pan_vbox.pack_start (panning_link_box, Gtk::PACK_SHRINK);
@@ -213,22 +215,22 @@ PannerUI::set_width (Width w)
{
switch (w) {
case Wide:
- panning_viewport.set_size_request (61, 61);
+ panning_viewport.set_size_request (64, 61);
if (panner) {
- panner->set_size_request (61, 61);
+ panner->set_size_request (63, 61);
}
- for (vector<BarController*>::iterator i = pan_bars.begin(); i != pan_bars.end(); ++i) {
- (*i)->set_size_request (61, 15);
+ for (vector<PannerBar*>::iterator i = pan_bars.begin(); i != pan_bars.end(); ++i) {
+ (*i)->set_size_request (63, pan_bar_height);
}
panning_link_button.set_label (_("link"));
break;
case Narrow:
- panning_viewport.set_size_request (31, 61);
+ panning_viewport.set_size_request (34, 61);
if (panner) {
- panner->set_size_request (31, 61);
+ panner->set_size_request (33, 61);
}
- for (vector<BarController*>::iterator i = pan_bars.begin(); i != pan_bars.end(); ++i) {
- (*i)->set_size_request (31, 15);
+ for (vector<PannerBar*>::iterator i = pan_bars.begin(); i != pan_bars.end(); ++i) {
+ (*i)->set_size_request (33, pan_bar_height);
}
panning_link_button.set_label (_("L"));
break;
@@ -244,7 +246,7 @@ PannerUI::~PannerUI ()
delete (*i);
}
- for (vector<BarController*>::iterator i = pan_bars.begin(); i != pan_bars.end(); ++i) {
+ for (vector<PannerBar*>::iterator i = pan_bars.begin(); i != pan_bars.end(); ++i) {
delete (*i);
}
@@ -301,25 +303,36 @@ PannerUI::setup_pan ()
while ((asz = pan_adjustments.size()) < npans) {
- float x;
- BarController* bc;
+ float x, rx;
+ PannerBar* bc;
- /* initialize adjustment with current value of panner */
+ /* initialize adjustment with 0.0 (L) or 1.0 (R) for the first and second panners,
+ which serves as a default, otherwise use current value */
- _io->panner()[asz]->get_position (x);
+ _io->panner()[asz]->get_position (rx);
+
+ if (npans == 1) {
+ x = 0.5;
+ } else if (asz == 0) {
+ x = 0.0;
+ } else if (asz == 1) {
+ x = 1.0;
+ } else {
+ x = rx;
+ }
pan_adjustments.push_back (new Adjustment (x, 0, 1.0, 0.05, 0.1));
+ bc = new PannerBar (*pan_adjustments[asz], _io->panner()[asz]->control());
+
+ /* now set adjustment with current value of panner, then connect the signals */
+ pan_adjustments.back()->set_value(rx);
pan_adjustments.back()->signal_value_changed().connect (bind (mem_fun(*this, &PannerUI::pan_adjustment_changed), (uint32_t) asz));
_io->panner()[asz]->Changed.connect (bind (mem_fun(*this, &PannerUI::pan_value_changed), (uint32_t) asz));
- bc = new BarController (*pan_adjustments[asz],
- _io->panner()[asz]->control(),
- bind (mem_fun(*this, &PannerUI::pan_printer), pan_adjustments[asz]));
bc->set_name ("PanSlider");
bc->set_shadow_type (Gtk::SHADOW_NONE);
- bc->set_style (BarController::Line);
bc->StartGesture.connect (bind (mem_fun (*_io, &IO::start_pan_touch), (uint32_t) asz));
bc->StopGesture.connect (bind (mem_fun (*_io, &IO::end_pan_touch), (uint32_t) asz));
@@ -334,14 +347,14 @@ PannerUI::setup_pan ()
pan_bars.push_back (bc);
switch (_width) {
case Wide:
- pan_bars.back()->set_size_request (61, 15);
+ bc->set_size_request (63, pan_bar_height);
break;
case Narrow:
- pan_bars.back()->set_size_request (31, 15);
+ bc->set_size_request (33, pan_bar_height);
break;
}
- pan_bar_packer.pack_start (*pan_bars.back(), false, false);
+ pan_bar_packer.pack_start (*bc, false, false);
}
/* now that we actually have the pan bars,
@@ -361,10 +374,10 @@ PannerUI::setup_pan ()
switch (_width) {
case Wide:
- w = 61;
+ w = 63;
break;
case Narrow:
- w = 31;
+ w = 33;
break;
}
@@ -631,7 +644,7 @@ PannerUI::update_pan_sensitive ()
case 1:
break;
case 2:
- for (vector<BarController*>::iterator i = pan_bars.begin(); i != pan_bars.end(); ++i) {
+ for (vector<PannerBar*>::iterator i = pan_bars.begin(); i != pan_bars.end(); ++i) {
(*i)->set_sensitive (sensitive);
}
break;
diff --git a/gtk2_ardour/panner_ui.h b/gtk2_ardour/panner_ui.h
index 7658978233..79a8085488 100644
--- a/gtk2_ardour/panner_ui.h
+++ b/gtk2_ardour/panner_ui.h
@@ -37,6 +37,7 @@
#include "enums.h"
class Panner2d;
+class PannerBar;
namespace ARDOUR {
class IO;
@@ -44,7 +45,6 @@ namespace ARDOUR {
}
namespace Gtkmm2ext {
class FastMeter;
- class BarController;
}
namespace Gtk {
@@ -78,6 +78,8 @@ class PannerUI : public Gtk::HBox
bool ignore_toggle;
bool in_pan_update;
+ static const int pan_bar_height;
+
Panner2d* panner;
Gtk::VBox pan_bar_packer;
@@ -107,7 +109,7 @@ class PannerUI : public Gtk::HBox
void panning_link_direction_clicked ();
vector<Gtk::Adjustment*> pan_adjustments;
- vector<Gtkmm2ext::BarController*> pan_bars;
+ vector<PannerBar*> pan_bars;
void pan_adjustment_changed (uint32_t which);
void pan_value_changed (uint32_t which);
diff --git a/gtk2_ardour/pixmaps/SConscript b/gtk2_ardour/pixmaps/SConscript
index c532d3551a..194031c44f 100644
--- a/gtk2_ardour/pixmaps/SConscript
+++ b/gtk2_ardour/pixmaps/SConscript
@@ -5,6 +5,6 @@ import glob
pixmap_files = glob.glob('*.xpm')
Import('env install_prefix')
-env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour/pixmaps'), pixmap_files))
+env.Alias('install', env.Install(os.path.join(install_prefix, 'share', 'ardour', 'pixmaps'), pixmap_files))
env.Alias('tarball', env.Distribute(env['DISTTREE'], [ 'SConscript' ] + pixmap_files))
diff --git a/gtk2_ardour/playlist_selection.h b/gtk2_ardour/playlist_selection.h
index af0031fec9..813f8a9211 100644
--- a/gtk2_ardour/playlist_selection.h
+++ b/gtk2_ardour/playlist_selection.h
@@ -2,11 +2,12 @@
#define __ardour_gtk_playlist_selection_h__
#include <list>
+#include <boost/shared_ptr.hpp>
namespace ARDOUR {
class Playlist;
}
-struct PlaylistSelection : list<ARDOUR::Playlist*> {};
+struct PlaylistSelection : list<boost::shared_ptr<ARDOUR::Playlist> > {};
#endif /* __ardour_gtk_playlist_selection_h__ */
diff --git a/gtk2_ardour/playlist_selector.cc b/gtk2_ardour/playlist_selector.cc
index ffeaf8f5e9..d02c5a88de 100644
--- a/gtk2_ardour/playlist_selector.cc
+++ b/gtk2_ardour/playlist_selector.cc
@@ -61,9 +61,8 @@ PlaylistSelector::PlaylistSelector ()
scroller.add (tree);
scroller.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC);
- // GTK2FIX do we need this stuff or is GTK applying some policy now?
- //set_border_width (6);
- // set_spacing (12);
+ get_vbox()->set_border_width (6);
+ get_vbox()->set_spacing (12);
get_vbox()->pack_start (scroller);
@@ -86,6 +85,17 @@ PlaylistSelector::clear_map ()
dspl_map.clear ();
}
+bool
+PlaylistSelector::on_unmap_event (GdkEventAny* ev)
+{
+ cerr << "PLselector unmapped\n";
+ clear_map ();
+ if (model) {
+ model->clear ();
+ }
+ return Dialog::on_unmap_event (ev);
+}
+
void
PlaylistSelector::show_for (RouteUI* ruix)
{
@@ -112,7 +122,8 @@ PlaylistSelector::show_for (RouteUI* ruix)
TreeModel::Row others = *(model->append ());
others[columns.text] = _("Other tracks");
- others[columns.playlist] = 0;
+ boost::shared_ptr<Playlist> proxy = others[columns.playlist];
+ proxy.reset ();
for (DSPL_Map::iterator x = dspl_map.begin(); x != dspl_map.end(); ++x) {
@@ -139,18 +150,20 @@ PlaylistSelector::show_for (RouteUI* ruix)
if (ds == this_ds) {
row = *(model->prepend());
row[columns.text] = nodename;
- row[columns.playlist] = 0;
+ boost::shared_ptr<Playlist> proxy = row[columns.playlist];
+ proxy.reset ();
} else {
row = *(model->append (others.children()));
row[columns.text] = nodename;
- row[columns.playlist] = 0;
+ boost::shared_ptr<Playlist> proxy = row[columns.playlist];
+ proxy.reset ();
}
/* Now insert all the playlists for this diskstream/track in a subtree */
- list<Playlist*> *pls = x->second;
+ list<boost::shared_ptr<Playlist> > *pls = x->second;
- for (list<Playlist*>::iterator p = pls->begin(); p != pls->end(); ++p) {
+ for (list<boost::shared_ptr<Playlist> >::iterator p = pls->begin(); p != pls->end(); ++p) {
TreeModel::Row child_row;
@@ -173,15 +186,15 @@ PlaylistSelector::show_for (RouteUI* ruix)
}
void
-PlaylistSelector::add_playlist_to_map (Playlist *pl)
+PlaylistSelector::add_playlist_to_map (boost::shared_ptr<Playlist> pl)
{
- AudioPlaylist* apl;
+ boost::shared_ptr<AudioPlaylist> apl;
if (pl->frozen()) {
return;
}
-
- if ((apl = dynamic_cast<AudioPlaylist*> (pl)) == 0) {
+
+ if ((apl = boost::dynamic_pointer_cast<AudioPlaylist> (pl)) == 0) {
return;
}
@@ -189,7 +202,7 @@ PlaylistSelector::add_playlist_to_map (Playlist *pl)
if ((x = dspl_map.find (apl->get_orig_diskstream_id())) == dspl_map.end()) {
- pair<PBD::ID,list<Playlist*>*> newp (apl->get_orig_diskstream_id(), new list<Playlist*>);
+ pair<PBD::ID,list<boost::shared_ptr<Playlist> >*> newp (apl->get_orig_diskstream_id(), new list<boost::shared_ptr<Playlist> >);
x = dspl_map.insert (dspl_map.end(), newp);
}
@@ -219,7 +232,7 @@ PlaylistSelector::close_button_click ()
void
PlaylistSelector::selection_changed ()
{
- Playlist *playlist;
+ boost::shared_ptr<Playlist> playlist;
TreeModel::iterator iter = tree.get_selection()->get_selected();
@@ -231,14 +244,14 @@ PlaylistSelector::selection_changed ()
if ((playlist = ((*iter)[columns.playlist])) != 0) {
AudioTrack* at;
- AudioPlaylist* apl;
+ boost::shared_ptr<AudioPlaylist> apl;
if ((at = rui->audio_track()) == 0) {
/* eh? */
return;
}
- if ((apl = dynamic_cast<AudioPlaylist*> (playlist)) == 0) {
+ if ((apl = boost::dynamic_pointer_cast<AudioPlaylist> (playlist)) == 0) {
/* eh? */
return;
}
diff --git a/gtk2_ardour/playlist_selector.h b/gtk2_ardour/playlist_selector.h
index 2829ba54bb..071f82c616 100644
--- a/gtk2_ardour/playlist_selector.h
+++ b/gtk2_ardour/playlist_selector.h
@@ -20,6 +20,8 @@
#ifndef __ardour_playlist_selector_h__
#define __ardour_playlist_selector_h__
+#include <boost/shared_ptr.hpp>
+
#include <gtkmm/box.h>
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/button.h>
@@ -45,8 +47,11 @@ class PlaylistSelector : public ArdourDialog
void set_session (ARDOUR::Session*);
void show_for (RouteUI*);
+ protected:
+ bool on_unmap_event (GdkEventAny*);
+
private:
- typedef std::map<PBD::ID,std::list<ARDOUR::Playlist*>*> DSPL_Map;
+ typedef std::map<PBD::ID,std::list<boost::shared_ptr<ARDOUR::Playlist> >*> DSPL_Map;
ARDOUR::Session* session;
Gtk::ScrolledWindow scroller;
@@ -55,7 +60,7 @@ class PlaylistSelector : public ArdourDialog
sigc::connection select_connection;
- void add_playlist_to_map (ARDOUR::Playlist*);
+ void add_playlist_to_map (boost::shared_ptr<ARDOUR::Playlist>);
void clear_map ();
void close_button_click ();
void selection_changed ();
@@ -66,7 +71,7 @@ class PlaylistSelector : public ArdourDialog
add (playlist);
}
Gtk::TreeModelColumn<std::string> text;
- Gtk::TreeModelColumn<ARDOUR::Playlist*> playlist;
+ Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Playlist> > playlist;
};
ModelColumns columns;
diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc
index 56b9e34d35..26f38250a5 100644
--- a/gtk2_ardour/plugin_ui.cc
+++ b/gtk2_ardour/plugin_ui.cc
@@ -102,6 +102,7 @@ PluginUIWindow::PluginUIWindow (boost::shared_ptr<PluginInsert> insert, bool scr
set_position (Gtk::WIN_POS_MOUSE);
set_name ("PluginEditor");
+ set_wmclass (X_("ardour_plugin_editor"), "Ardour");
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window*> (this)));
diff --git a/gtk2_ardour/po/de_DE.po b/gtk2_ardour/po/de_DE.po
index edd8394611..f8ac19f833 100644
--- a/gtk2_ardour/po/de_DE.po
+++ b/gtk2_ardour/po/de_DE.po
@@ -7,289 +7,352 @@ msgid ""
msgstr ""
"Project-Id-Version: gtk-ardour 0.347.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-06-27 13:00-0400\n"
-"PO-Revision-Date: 2003-05-11 17:36+0200\n"
-"Last-Translator: Karsten Petersen <kapet@kapet.de>\n"
+"POT-Creation-Date: 2006-11-24 00:48+0100\n"
+"PO-Revision-Date: 2006-12-04 13:34+0100\n"
+"Last-Translator: Sebastian Arnold <mail@sebastian-arnold.net>\n"
"Language-Team: Deutsch <de@li.org>\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: KBabel 0.9.6\n"
-#: about.cc:120
+#: gtk2_ardour/about.cc:121
msgid "Paul Davis"
msgstr ""
-#: about.cc:121
-#, fuzzy
+#: gtk2_ardour/about.cc:122
msgid "Jesse Chappell"
-msgstr "bestmöglich"
+msgstr ""
-#: about.cc:122
+#: gtk2_ardour/about.cc:123
msgid "Taybin Rutkin"
msgstr ""
-#: about.cc:123
+#: gtk2_ardour/about.cc:124
msgid "Marcus Andersson"
msgstr ""
-#: about.cc:124
+#: gtk2_ardour/about.cc:125
msgid "Jeremy Hall"
msgstr ""
-#: about.cc:125
+#: gtk2_ardour/about.cc:126
msgid "Steve Harris"
msgstr ""
-#: about.cc:126
+#: gtk2_ardour/about.cc:127
msgid "Tim Mayberry"
msgstr ""
-#: about.cc:127
+#: gtk2_ardour/about.cc:128
msgid "Mark Stewart"
msgstr ""
-#: about.cc:128
+#: gtk2_ardour/about.cc:129
msgid "Sam Chessman"
msgstr ""
-#: about.cc:129
+#: gtk2_ardour/about.cc:130
msgid "Jack O'Quin"
msgstr ""
-#: about.cc:130
+#: gtk2_ardour/about.cc:131
msgid "Matt Krai"
msgstr ""
-#: about.cc:131
+#: gtk2_ardour/about.cc:132
msgid "Ben Bell"
msgstr ""
-#: about.cc:132
+#: gtk2_ardour/about.cc:133
msgid "Gerard van Dongen"
msgstr ""
-#: about.cc:133
+#: gtk2_ardour/about.cc:134
msgid "Thomas Charbonnel"
msgstr ""
-#: about.cc:134
+#: gtk2_ardour/about.cc:135
msgid "Nick Mainsbridge"
msgstr ""
-#: about.cc:135
+#: gtk2_ardour/about.cc:136
msgid "Colin Law"
msgstr ""
-#: about.cc:136
+#: gtk2_ardour/about.cc:137
msgid "Sampo Savolainen"
msgstr ""
-#: about.cc:137
+#: gtk2_ardour/about.cc:138
msgid "Joshua Leach"
msgstr ""
-#: about.cc:138
+#: gtk2_ardour/about.cc:139
msgid "Rob Holland"
msgstr ""
-#: about.cc:139
+#: gtk2_ardour/about.cc:140
msgid "Per Sigmond"
msgstr ""
-#: about.cc:140
+#: gtk2_ardour/about.cc:141
msgid "Doug Mclain"
msgstr ""
-#: about.cc:141
+#: gtk2_ardour/about.cc:142
msgid "Petter Sundlöf"
msgstr ""
-#: about.cc:146
+#: gtk2_ardour/about.cc:143
+msgid "Thorsten Wilms"
+msgstr ""
+
+#: gtk2_ardour/about.cc:144
+msgid "Ben Loftis"
+msgstr ""
+
+#: gtk2_ardour/about.cc:145
+msgid "Stefan Kersten"
+msgstr ""
+
+#: gtk2_ardour/about.cc:146
+msgid "Christopher George"
+msgstr ""
+
+#: gtk2_ardour/about.cc:147
+msgid "Robert Jordens"
+msgstr ""
+
+#: gtk2_ardour/about.cc:152
msgid ""
"French:\n"
"\tAlain Fréhel <alain.frehel@free.fr>\n"
+"\tChristophe Combelles <ccomb@free.fr>\n"
msgstr ""
-#: about.cc:147
+#: gtk2_ardour/about.cc:153
msgid ""
"German:\n"
"\tKarsten Petersen <kapet@kapet.de>\n"
msgstr ""
+"German:\n"
+"\tKarsten Petersen <kapet@kapet.de>\n"
+"\tSebastian Arnold <linux@sebastian-arnold.net>\n"
-#: about.cc:148
+#: gtk2_ardour/about.cc:154
msgid ""
"Italian:\n"
"\tFilippo Pappalardo <filippo@email.it>\n"
msgstr ""
-#: about.cc:149
+#: gtk2_ardour/about.cc:155
msgid ""
"Portuguese:\n"
"\tRui Nuno Capela <rncbc@rncbc.org>\n"
msgstr ""
-#: about.cc:150
+#: gtk2_ardour/about.cc:156
msgid ""
"Brazilian Portuguese:\n"
"\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
"\tChris Ross <chris@tebibyte.org>\n"
msgstr ""
-#: about.cc:152
+#: gtk2_ardour/about.cc:158
msgid ""
"Spanish:\n"
"\t Alex Krohn <alexkrohn@fastmail.fm>\n"
msgstr ""
-#: about.cc:153
+#: gtk2_ardour/about.cc:159
msgid ""
"Russian:\n"
"\t Igor Blinov <pitstop@nm.ru>\n"
msgstr ""
-#: about.cc:181
-msgid "Copyright (C) 1999-2005 Paul Davis\n"
+#: gtk2_ardour/about.cc:187
+msgid "Copyright (C) 1999-2006 Paul Davis\n"
msgstr ""
-#: about.cc:182
+#: gtk2_ardour/about.cc:188
msgid ""
"Ardour comes with ABSOLUTELY NO WARRANTY\n"
"This is free software, and you are welcome to redistribute it\n"
"under certain conditions; see the file COPYING for details.\n"
msgstr ""
-#: about.cc:188
+#: gtk2_ardour/about.cc:193
+msgid "visit http://www.ardour.org/"
+msgstr ""
+
+#: gtk2_ardour/about.cc:194
msgid ""
"%1\n"
-"(built with ardour/gtk %2.%3.%4 libardour: %5.%6.%7)"
+"(built from revision %2)"
msgstr ""
+"%1\n"
+"(built from revision %2)"
-#: actions.cc:261
+#: gtk2_ardour/actions.cc:77
+msgid "badly formatted UI definition file"
+msgstr "die UI Definitionsdatei ist falsch formatiert"
+
+#: gtk2_ardour/actions.cc:79
+msgid "Ardour menu definition file not found"
+msgstr "Konnte die Ardour Menü-Definition nicht finden"
+
+#: gtk2_ardour/actions.cc:83
+msgid "ardour will not work without a valid ardour.menus file"
+msgstr "Ardour benötigt eine gültige ardour.menus Datei"
+
+#: gtk2_ardour/actions.cc:235
msgid "programmer error: %1 %2"
+msgstr "Programmierfehler: %1 %2"
+
+#: gtk2_ardour/actions.cc:254
+msgid "Unknown action name: %1"
+msgstr "Unbekannte Aktionsbezeichnung: %1"
+
+#: gtk2_ardour/add_route_dialog.cc:41
+#: gtk2_ardour/add_route_dialog.cc:196
+msgid "Mono"
+msgstr "Mono"
+
+#: gtk2_ardour/add_route_dialog.cc:42
+#: gtk2_ardour/add_route_dialog.cc:198
+msgid "Stereo"
+msgstr "Stereo"
+
+#: gtk2_ardour/add_route_dialog.cc:43
+msgid "3 Channels"
+msgstr "3 Kanäle"
+
+#: gtk2_ardour/add_route_dialog.cc:44
+msgid "4 Channels"
+msgstr "4 Kanäle"
+
+#: gtk2_ardour/add_route_dialog.cc:45
+msgid "6 Channels"
+msgstr "6 Kanäle"
+
+#: gtk2_ardour/add_route_dialog.cc:46
+msgid "8 Channels"
+msgstr "8 Kanäle"
+
+#: gtk2_ardour/add_route_dialog.cc:47
+msgid "Manual Setup"
+msgstr "Manuell"
+
+#: gtk2_ardour/add_route_dialog.cc:52
+#: gtk2_ardour/add_route_dialog.cc:177
+#: gtk2_ardour/editor.cc:126
+#: gtk2_ardour/editor.cc:3485
+#: gtk2_ardour/editor_actions.cc:286
+#: gtk2_ardour/time_axis_view.cc:586
+msgid "Normal"
+msgstr "Normal"
+
+#: gtk2_ardour/add_route_dialog.cc:53
+#: gtk2_ardour/add_route_dialog.cc:179
+msgid "Tape"
msgstr ""
-#: add_route_dialog.cc:62
-#, fuzzy
+#: gtk2_ardour/add_route_dialog.cc:62
msgid "ardour: add track/bus"
-msgstr "Ardour: Editor"
+msgstr "Ardour: Füge Spur/Bus hinzu"
-#. path = "1"
-#: add_route_dialog.cc:63 editor_route_list.cc:73
+#: gtk2_ardour/add_route_dialog.cc:63
+#: gtk2_ardour/editor_route_list.cc:71
msgid "Tracks"
msgstr "Spuren"
-#. path = "0"
-#: add_route_dialog.cc:64 editor_route_list.cc:70
+#: gtk2_ardour/add_route_dialog.cc:64
+#: gtk2_ardour/editor_route_list.cc:68
msgid "Busses"
-msgstr ""
+msgstr "Busse"
-#: add_route_dialog.cc:96 plugin_ui.cc:833
+#: gtk2_ardour/add_route_dialog.cc:96
+#: gtk2_ardour/plugin_ui.cc:150
msgid "Add"
msgstr "Hinzufügen"
-#: add_route_dialog.cc:114
-#, fuzzy
+#: gtk2_ardour/add_route_dialog.cc:114
msgid "Name (template)"
-msgstr "Name für Mixer-Voreinstellung"
+msgstr "Name für Mixer-Vorlage"
-#: add_route_dialog.cc:120
-#, fuzzy
+#: gtk2_ardour/add_route_dialog.cc:120
msgid "Channel Configuration"
-msgstr "Importieren Abbrechen"
+msgstr "Kanaleinstellungen"
-#: add_route_dialog.cc:177 editor.cc:134 editor.cc:3688 time_axis_view.cc:552
-msgid "Normal"
-msgstr ""
-
-#: add_route_dialog.cc:179
-#, fuzzy
-msgid "Tape"
-msgstr "Anfang"
-
-#: add_route_dialog.cc:196
-msgid "Mono"
-msgstr ""
-
-#: add_route_dialog.cc:198
-#, fuzzy
-msgid "Stereo"
-msgstr "Stop"
-
-#. preroll stuff
-#: ardour_ui.cc:106
+#: gtk2_ardour/ardour_ui.cc:106
msgid ""
"pre\n"
"roll"
msgstr ""
-#: ardour_ui.cc:107
+#: gtk2_ardour/ardour_ui.cc:107
msgid ""
"post\n"
"roll"
msgstr ""
-#. transport
-#: ardour_ui.cc:115
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:115
msgid ""
"time\n"
"master"
-msgstr "Ardour: Mixer"
+msgstr ""
+"Time\n"
+"Master"
-#: ardour_ui.cc:117
+#: gtk2_ardour/ardour_ui.cc:117
msgid "% "
msgstr ""
-#: ardour_ui.cc:119
-msgid ""
-"punch\n"
-"in"
-msgstr ""
+#: gtk2_ardour/ardour_ui.cc:119
+#: gtk2_ardour/ardour_ui_ed.cc:275
+msgid "Punch In"
+msgstr "Punch In"
-#: ardour_ui.cc:120
-msgid ""
-"punch\n"
-"out"
-msgstr ""
+#: gtk2_ardour/ardour_ui.cc:120
+#: gtk2_ardour/ardour_ui_ed.cc:278
+msgid "Punch Out"
+msgstr "Punch Out"
-#: ardour_ui.cc:121
-msgid ""
-"auto\n"
-"return"
-msgstr ""
+#: gtk2_ardour/ardour_ui.cc:121
+#: gtk2_ardour/ardour_ui_ed.cc:290
+msgid "Auto Return"
+msgstr "Auto Return"
-#: ardour_ui.cc:122
-msgid ""
-"auto\n"
-"play"
-msgstr ""
+#: gtk2_ardour/ardour_ui.cc:122
+msgid "Autuo Play"
+msgstr "Auto Play"
-#: ardour_ui.cc:123
-#, fuzzy
-msgid ""
-"auto\n"
-"input"
-msgstr "Port hinzufügen"
+#: gtk2_ardour/ardour_ui.cc:123
+#: gtk2_ardour/ardour_ui_ed.cc:284
+msgid "Auto Input"
+msgstr "Auto Input"
-#: ardour_ui.cc:124
-msgid "click"
-msgstr ""
+#: gtk2_ardour/ardour_ui.cc:124
+#: gtk2_ardour/ardour_ui_ed.cc:281
+#: gtk2_ardour/option_editor.cc:128
+msgid "Click"
+msgstr "Click"
-#: ardour_ui.cc:125
-msgid "AUDITIONING"
-msgstr ""
+#: gtk2_ardour/ardour_ui.cc:125
+msgid "AUDITION"
+msgstr "VORHÖREN"
-#: ardour_ui.cc:126
+#: gtk2_ardour/ardour_ui.cc:126
msgid "SOLO"
-msgstr ""
+msgstr "SOLO"
-#: ardour_ui.cc:375
+#: gtk2_ardour/ardour_ui.cc:370
msgid "quit"
-msgstr "Verlassen"
+msgstr "Beenden"
-#: ardour_ui.cc:384
+#: gtk2_ardour/ardour_ui.cc:379
msgid ""
"Ardour was unable to save your session.\n"
"\n"
@@ -297,35 +360,37 @@ msgid ""
"\n"
"\"Just quit\" option."
msgstr ""
+"Ardour konnte die Sitzung nicht speichern.\n"
+"\n"
+"Wenn Sie trotzdem beenden wollen, wählen Sie bitte\n"
+"\n"
+"\"Trotzdem beenden\"."
-#: ardour_ui.cc:403
+#: gtk2_ardour/ardour_ui.cc:398
msgid "ardour: save session?"
msgstr "Ardour: Sitzung speichern?"
-#: ardour_ui.cc:410
+#: gtk2_ardour/ardour_ui.cc:405
msgid "Don't %1"
-msgstr "Ohne %1"
+msgstr "Nicht %1"
-#: ardour_ui.cc:412
+#: gtk2_ardour/ardour_ui.cc:407
msgid "Just %1"
-msgstr "Nur %1"
+msgstr "%1 ohne zu Speichern"
-#: ardour_ui.cc:414
+#: gtk2_ardour/ardour_ui.cc:409
msgid "Save and %1"
msgstr "Speichern und %1"
-#: ardour_ui.cc:426
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:421
msgid "session"
msgstr "Sitzung"
-#: ardour_ui.cc:428
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:423
msgid "snapshot"
-msgstr "Schnappschuß"
+msgstr "Schnappschuss..."
-#: ardour_ui.cc:430
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:425
msgid ""
"The %1\"%2\"\n"
"has not been saved.\n"
@@ -335,7 +400,7 @@ msgid ""
"\n"
"What do you want to do?"
msgstr ""
-"Die Sitzung \"%1\"\n"
+"Die Sitzung %1\"%2\"\n"
"wurde nicht gespeichert.\n"
"\n"
"Alle Änderungen werden verloren\n"
@@ -343,159 +408,179 @@ msgstr ""
"\n"
"Was wollen Sie machen?"
-#: ardour_ui.cc:444
+#: gtk2_ardour/ardour_ui.cc:439
msgid "Prompter"
msgstr ""
-#: ardour_ui.cc:503
-#, fuzzy, c-format
+#: gtk2_ardour/ardour_ui.cc:498
+#, c-format
msgid "disconnected"
-msgstr "Trennen"
+msgstr "getrennt"
-#: ardour_ui.cc:510
+#: gtk2_ardour/ardour_ui.cc:505
#, c-format
-msgid "SR: %.1f kHz / %4.1f msecs"
+msgid "%.1f kHz / %4.1f msecs"
msgstr ""
-#: ardour_ui.cc:514
+#: gtk2_ardour/ardour_ui.cc:509
#, c-format
-msgid "SR: %u kHz / %4.1f msecs"
+msgid "%u kHz / %4.1f msecs"
msgstr ""
-#: ardour_ui.cc:527
-#, fuzzy, c-format
-msgid "DSP Load: %.1f%%"
-msgstr "Auslastung der CPU: %.1f%%"
+#: gtk2_ardour/ardour_ui.cc:522
+#, c-format
+msgid "DSP: %.1f%%"
+msgstr "CPU Auslastung: %.1f%%"
-#: ardour_ui.cc:537
+#: gtk2_ardour/ardour_ui.cc:532
#, c-format
msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
-msgstr ""
+msgstr "Buffer p:%<PRIu32>%% c:%<PRIu32>%%"
-#: ardour_ui.cc:564
-msgid "space: 24hrs+"
+#: gtk2_ardour/ardour_ui.cc:560
+msgid "Disk: 24hrs+"
msgstr "Platz: >24 Stunden"
-#: ardour_ui.cc:594
+#: gtk2_ardour/ardour_ui.cc:580
#, c-format
-msgid "space: %02dh:%02dm:%02ds"
+msgid "Disk: %02dh:%02dm:%02ds"
msgstr "Platz: %02dh:%02dm:%02ds"
-#: ardour_ui.cc:633
+#: gtk2_ardour/ardour_ui.cc:619
msgid "programming error: impossible control method"
-msgstr ""
+msgstr "Programmierfehler: ungültige Kontrollmethode"
-#: ardour_ui.cc:741 new_session_dialog.cc:294
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:727
+#: gtk2_ardour/new_session_dialog.cc:355
msgid "Recent Sessions"
-msgstr "Sitzung"
+msgstr "Zuletzt verwendete Sitzungen"
-#. ardour sessions are folders
-#: ardour_ui.cc:834
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:820
msgid "open session"
-msgstr "Sitzung"
+msgstr "Sitzung öffnen"
-#: ardour_ui.cc:840
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:826
msgid "Ardour sessions"
-msgstr "Ardour: Neue Sitzung"
+msgstr "Ardour-Sitzungen"
-#: ardour_ui.cc:873
+#: gtk2_ardour/ardour_ui.cc:859
msgid "Patience is a virtue.\n"
msgstr "Geduld ist eine Tugend.\n"
-#: ardour_ui.cc:882
-msgid "You cannot add a track without a session already loaded."
-msgstr "Sie können erst eine Spur hinzufügen, wenn eine Sitzung geladen wurde."
+#: gtk2_ardour/ardour_ui.cc:869
+msgid "You cannot add a track or bus without a session already loaded."
+msgstr "Sie können erst Spuren oder Busse hinzufügen, wenn eine Sitzung geladen wurde."
-#: ardour_ui.cc:889
-msgid "could not create new audio track"
+#: gtk2_ardour/ardour_ui.cc:879
+#: gtk2_ardour/ardour_ui.cc:891
+msgid "could not create a new audio track"
msgstr "Konnte neue Spur nicht erstellen."
-#: ardour_ui.cc:893
-msgid "could not create new audio bus"
-msgstr "Konnte neuen Audiokanal nicht erstellen."
+#: gtk2_ardour/ardour_ui.cc:881
+#: gtk2_ardour/ardour_ui.cc:893
+msgid "could not create %1 new audio tracks"
+msgstr "Konnte %1 neue Spuren nicht erstellen."
-#: ardour_ui.cc:912
+#: gtk2_ardour/ardour_ui.cc:913
msgid ""
"There are insufficient JACK ports available\n"
"to create a new track or bus.\n"
"You should save Ardour, exit and\n"
"restart JACK with more ports."
msgstr ""
+"Es sind nicht genügend JACK Ports verfügbar\n"
+"um neue Spuren oder Busse zu erstellen.\n"
+"Speichern Sie Ihre Sitzung und starten Sie\n"
+"Ardour sowie JACK mit einer größeren\n"
+"Anzahl Ports erneut."
-#: ardour_ui.cc:1036
+#: gtk2_ardour/ardour_ui.cc:1033
msgid ""
"Please create 1 or more track\n"
"before trying to record.\n"
"Check the Session menu."
msgstr ""
+"Bitte fügen Sie mindestens eine weitere Spur hinzu,\n"
+"bevor Sie aufnehmen.\n"
+"Weitere Einstellungen finden Sie im Sitzungsmenü."
-#: ardour_ui.cc:1265
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:1253
msgid ""
"JACK has either been shutdown or it\n"
"disconnected Ardour because Ardour\n"
"was not fast enough. You can save the\n"
"session and/or try to reconnect to JACK ."
msgstr ""
-"JACK wurde entweder beendet oder es\n"
-"hat Ardour abgekoppelt weil Ardour nicht\n"
+"JACK wurde entweder beendet oder\n"
+"hat Ardour getrennt weil Ardour nicht\n"
"schnell genug war. Sie sollten die Sitzung\n"
-"speichern und JACK sowie Ardour neu starten."
+"speichern versuchen, erneut zu JACK zu verbinden."
-#: ardour_ui.cc:1282
+#: gtk2_ardour/ardour_ui.cc:1270
msgid "Unable to create all required ports"
-msgstr ""
+msgstr "Ardour konnte nicht alle benötigten Ports erstellen."
-#: ardour_ui.cc:1290
+#: gtk2_ardour/ardour_ui.cc:1278
#, fuzzy
msgid "Unable to start the session running"
-msgstr "An den Anfang der Sitzung springen"
+msgstr "Konnte die aktuelle Sitzung nicht starten"
-#: ardour_ui.cc:1426
-msgid "No Stream"
-msgstr "Kein Datenstrom"
-
-#: ardour_ui.cc:1453 ardour_ui.cc:1472
+#: gtk2_ardour/ardour_ui.cc:1384
+#: gtk2_ardour/ardour_ui.cc:1403
+#: gtk2_ardour/audio_clock.cc:448
msgid "none"
msgstr "keine"
-#: ardour_ui.cc:1462 ardour_ui.cc:1481
+#: gtk2_ardour/ardour_ui.cc:1393
+#: gtk2_ardour/ardour_ui.cc:1412
msgid "off"
msgstr "aus"
-#: ardour_ui.cc:1505
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:1435
msgid "Name of New Snapshot"
-msgstr "Name für Schnappschuß"
+msgstr "Name für neuen Schnappschuss"
-#: ardour_ui.cc:1651
+#: gtk2_ardour/ardour_ui.cc:1581
msgid "Name for mix template:"
-msgstr "Name für Mixer-Voreinstellung"
+msgstr "Name für Mixer-Vorlage"
-#: ardour_ui.cc:1652
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:1582
msgid "-template"
-msgstr "Voreinstellung"
+msgstr "Vorlage"
+
+#: gtk2_ardour/ardour_ui.cc:1703
+msgid ""
+"This session\n"
+"%1\n"
+"already exists. Do you want to open it?"
+msgstr ""
+"Die Sitzung\n"
+"%1\n"
+"existiert bereits. Wollen Sie sie öffnen?"
+
+#: gtk2_ardour/ardour_ui.cc:1713
+#, fuzzy
+msgid "existing_session"
+msgstr "Stellen"
-#: ardour_ui.cc:1809
+#: gtk2_ardour/ardour_ui.cc:1819
msgid ""
"You do not have write access to this session.\n"
"This prevents the session from being loaded."
msgstr ""
+"Sie haben keinen Schreibzugriff auf diese Sitzung.\n"
+"Dadurch kann die Sitzung nicht geladen werden."
-#: ardour_ui.cc:1822 ardour_ui.cc:1877
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:1832
+#: gtk2_ardour/ardour_ui.cc:1889
msgid "Session \"%1 (snapshot %2)\" did not load successfully"
-msgstr "Sitzung \"%1\" konnte nicht geladen werden."
+msgstr "Sitzung \"%1 (Schnappschuss %2)\" konnte nicht geladen werden."
-#: ardour_ui.cc:1933
+#: gtk2_ardour/ardour_ui.cc:1948
msgid "No audio files were ready for cleanup"
-msgstr ""
+msgstr "Keine Audiodateien zum Aufräumen vorhanden"
-#: ardour_ui.cc:1937
+#: gtk2_ardour/ardour_ui.cc:1952
msgid ""
"If this seems suprising, \n"
"check for any existing snapshots.\n"
@@ -503,51 +588,53 @@ msgid ""
"require some unused files to continue to exist."
msgstr ""
-#: ardour_ui.cc:1946
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:1961
msgid "ardour: cleanup"
-msgstr "Ardour: Uhr"
+msgstr "Ardour: Aufräumen"
-#: ardour_ui.cc:1982 ardour_ui.cc:1988
+#: gtk2_ardour/ardour_ui.cc:1997
+#: gtk2_ardour/ardour_ui.cc:2003
msgid "files were"
-msgstr ""
+msgstr "folgenden Dateien wurden"
-#: ardour_ui.cc:1984 ardour_ui.cc:1990
+#: gtk2_ardour/ardour_ui.cc:1999
+#: gtk2_ardour/ardour_ui.cc:2005
msgid "file was"
-msgstr ""
+msgstr "folgende Datei wurde"
-#: ardour_ui.cc:2031
+#: gtk2_ardour/ardour_ui.cc:2046
msgid "Are you sure you want to cleanup?"
-msgstr ""
+msgstr "Sind Sie sicher, dass Sie aufräumen wollen?"
-#: ardour_ui.cc:2036
+#: gtk2_ardour/ardour_ui.cc:2051
msgid ""
"Cleanup is a destructive operation.\n"
"ALL undo/redo information will be lost if you cleanup.\n"
-"After cleanup, unused audio files will be moved to a \"dead sounds\" "
-"location."
+"After cleanup, unused audio files will be moved to a \"dead sounds\" location."
msgstr ""
+"Das Aufräumen ist eine destruktive Operation.\n"
+"Sämtliche Wiederherstellungsinformationen gehen verloren, wenn Sie aufräumen.\n"
+"Nach dem Aufräumen werden alle nicht benötigten Audiodateien in einen \"dead sounds\" Ordner verschoben."
-#: ardour_ui.cc:2042
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:2057
msgid "Clean Up"
-msgstr "leeren"
+msgstr "Aufräumen"
-#: ardour_ui.cc:2045
+#: gtk2_ardour/ardour_ui.cc:2060
#, fuzzy
msgid "CleanupDialog"
msgstr "leeren"
-#: ardour_ui.cc:2046
+#: gtk2_ardour/ardour_ui.cc:2061
#, fuzzy
msgid "ardour_cleanup"
msgstr "Ardour: Uhr"
-#: ardour_ui.cc:2065
+#: gtk2_ardour/ardour_ui.cc:2080
msgid "cleaned files"
-msgstr ""
+msgstr "aufgeräumte Dateien"
-#: ardour_ui.cc:2066
+#: gtk2_ardour/ardour_ui.cc:2081
msgid ""
"The following %1 %2 not in use and \n"
"have been moved to:\n"
@@ -557,24 +644,32 @@ msgid ""
"release an additional\n"
"%4 %5bytes of disk space.\n"
msgstr ""
+"Die %1 %2 nicht benötigt und\n"
+"verschoben nach:\n"
+"%3. \n"
+"\n"
+"Wenn Sie den Müll leeren werden weitere\n"
+"%4 %5byte Speicherplatz frei.\n"
-#: ardour_ui.cc:2091
-#, fuzzy
+#: gtk2_ardour/ardour_ui.cc:2106
msgid "deleted file"
-msgstr "entfernen"
+msgstr "gelöschte Datei"
-#: ardour_ui.cc:2092
+#: gtk2_ardour/ardour_ui.cc:2107
msgid ""
"The following %1 %2 deleted from\n"
"%3,\n"
"releasing %4 %5bytes of disk space"
msgstr ""
+"Die %1 %2 gelöscht aus\n"
+"%3,\n"
+"und machten %4 %5byte Speicherplatz frei"
-#: ardour_ui.cc:2215
+#: gtk2_ardour/ardour_ui.cc:2223
msgid "Recording was stopped because your system could not keep up."
msgstr ""
-#: ardour_ui.cc:2238
+#: gtk2_ardour/ardour_ui.cc:2234
msgid ""
"The disk system on your computer\n"
"was not able to keep up with Ardour.\n"
@@ -583,7 +678,7 @@ msgid ""
"quickly enough to keep up with recording.\n"
msgstr ""
-#: ardour_ui.cc:2257
+#: gtk2_ardour/ardour_ui.cc:2253
msgid ""
"The disk system on your computer\n"
"was not able to keep up with Ardour.\n"
@@ -592,7 +687,7 @@ msgid ""
"quickly enough to keep up with playback.\n"
msgstr ""
-#: ardour_ui.cc:2283
+#: gtk2_ardour/ardour_ui.cc:2279
msgid ""
"This session appears to have been in\n"
"middle of recording when ardour or\n"
@@ -603,3482 +698,3564 @@ msgid ""
"what you would like to do.\n"
msgstr ""
-#: ardour_ui.cc:2293
+#: gtk2_ardour/ardour_ui.cc:2289
msgid "Recover from crash"
msgstr ""
-#: ardour_ui.cc:2294
+#: gtk2_ardour/ardour_ui.cc:2290
msgid "Ignore crash data"
msgstr ""
-#: ardour_ui.cc:2312
+#: gtk2_ardour/ardour_ui.cc:2308
msgid "Could not disconnect from JACK"
msgstr ""
-#: ardour_ui.cc:2325
+#: gtk2_ardour/ardour_ui.cc:2321
msgid "Could not reconnect to JACK"
msgstr ""
-#: ardour_ui2.cc:60
+#: gtk2_ardour/ardour_ui2.cc:60
msgid "UI: cannot setup editor"
msgstr "Der Editor konnte nicht initialisiert werden."
-#: ardour_ui2.cc:65
+#: gtk2_ardour/ardour_ui2.cc:65
msgid "UI: cannot setup mixer"
msgstr "Der Mixer konnte nicht initialisiert werden."
-#: ardour_ui2.cc:91
+#: gtk2_ardour/ardour_ui2.cc:91
msgid "MMC + Local"
msgstr ""
-#: ardour_ui2.cc:92
+#: gtk2_ardour/ardour_ui2.cc:92
msgid "MMC"
msgstr ""
-#: ardour_ui2.cc:93
+#: gtk2_ardour/ardour_ui2.cc:93
msgid "Local"
msgstr ""
-#: ardour_ui2.cc:110
+#: gtk2_ardour/ardour_ui2.cc:110
msgid "MMC ID"
msgstr ""
-#: ardour_ui2.cc:291
+#: gtk2_ardour/ardour_ui2.cc:295
msgid "Play from playhead"
-msgstr "Wiedergabe ab Playhead"
+msgstr "Wiedergabe ab Positionszeiger"
-#: ardour_ui2.cc:292
+#: gtk2_ardour/ardour_ui2.cc:296
msgid "Stop playback"
msgstr "Wiedergabe anhalten"
-#: ardour_ui2.cc:293
-#, fuzzy
+#: gtk2_ardour/ardour_ui2.cc:297
msgid "Play range/selection"
-msgstr "Auswahl wiedergeben"
+msgstr "Bereich/Auswahl wiedergeben"
-#: ardour_ui2.cc:294
+#: gtk2_ardour/ardour_ui2.cc:298
msgid "Go to start of session"
msgstr "An den Anfang der Sitzung springen"
-#: ardour_ui2.cc:295
+#: gtk2_ardour/ardour_ui2.cc:299
msgid "Go to end of session"
msgstr "Ans Ende der Sitzung springen"
-#: ardour_ui2.cc:296
-#, fuzzy
+#: gtk2_ardour/ardour_ui2.cc:300
msgid "Play loop range"
-msgstr "Bereich"
+msgstr "Schleife wiedergeben"
-#: ardour_ui2.cc:297
+#: gtk2_ardour/ardour_ui2.cc:301
msgid "Return to last playback start when stopped"
-msgstr "Bei Stopp zum Wiedergabeanfang springen"
+msgstr "Bei Stop zum letzten Wiedergabeanfang springen"
-#: ardour_ui2.cc:298
+#: gtk2_ardour/ardour_ui2.cc:302
msgid "Start playback after any locate"
-msgstr ""
+msgstr "Startet die Wiedergabe nach setzen des Positionszeigers"
-#: ardour_ui2.cc:299
+#: gtk2_ardour/ardour_ui2.cc:303
msgid "Be sensible about input monitoring"
-msgstr ""
+msgstr "Automatisches Input Monitoring aktivieren"
-#: ardour_ui2.cc:300
+#: gtk2_ardour/ardour_ui2.cc:304
msgid "Start recording at auto-punch start"
-msgstr ""
+msgstr "Beginnt die Aufnahme bei Auto-Punch Start"
-#: ardour_ui2.cc:301
+#: gtk2_ardour/ardour_ui2.cc:305
msgid "Stop recording at auto-punch end"
-msgstr ""
+msgstr "Beginnt die Aufnahme bei Auto-Punch Ende"
-#: ardour_ui2.cc:302
+#: gtk2_ardour/ardour_ui2.cc:306
msgid "Enable/Disable audio click"
-msgstr ""
+msgstr "Aktiviert/Deaktiviert Audio Click"
-#: ardour_ui2.cc:303
+#: gtk2_ardour/ardour_ui2.cc:307
msgid "Positional sync source"
msgstr ""
-#: ardour_ui2.cc:304
+#: gtk2_ardour/ardour_ui2.cc:308
msgid "Does Ardour control the time?"
-msgstr ""
+msgstr "Bestimmt Ardour die Time?"
-#: ardour_ui2.cc:305
+#: gtk2_ardour/ardour_ui2.cc:309
msgid "Shuttle speed control"
-msgstr ""
+msgstr "Shuttle-Geschwindigkeit"
-#: ardour_ui2.cc:306
+#: gtk2_ardour/ardour_ui2.cc:310
#, c-format
msgid "Select semitones or %%-age for speed display"
-msgstr ""
+msgstr "Geschwindigkeitsanzeige als Prozent oder Halbtöne einstellen"
-#: ardour_ui2.cc:307
+#: gtk2_ardour/ardour_ui2.cc:311
msgid "Current transport speed"
-msgstr ""
+msgstr "Geschwindigkeitsanzeige"
-#: ardour_ui2.cc:330
-#, fuzzy
+#: gtk2_ardour/ardour_ui2.cc:334
msgid "Primary clock"
-msgstr "Ardour: Uhr"
+msgstr ""
-#: ardour_ui2.cc:331
+#: gtk2_ardour/ardour_ui2.cc:335
msgid "secondary clock"
msgstr ""
-#. XXX: this should really be saved in instant.xml or something similar and restored from there
-#. Combo's are stupid - they steal space from the entry for the button
-#: ardour_ui2.cc:388 ardour_ui2.cc:833 ardour_ui2.cc:846 ardour_ui2.cc:909
-#: ardour_ui2.cc:911
-msgid "sprung"
+#: gtk2_ardour/ardour_ui2.cc:366
+msgid ""
+"When active, something is soloed.\n"
+"Click to de-solo everything"
msgstr ""
+"Wird aktiv, wenn eine Spur Solo läuft.\n"
+"Schaltet bei Klick Solo aus."
-#: ardour_ui2.cc:389 ardour_ui2.cc:835 ardour_ui2.cc:857
-msgid "wheel"
+#: gtk2_ardour/ardour_ui2.cc:367
+msgid ""
+"When active, auditioning is taking place\n"
+"Click to stop the audition"
msgstr ""
+"Wird beim Vorhören aktiv.\n"
+"Klicken stoppt das Vorhören."
-#: ardour_ui2.cc:451
-msgid "ardour: clock"
-msgstr "Ardour: Uhr"
+#: gtk2_ardour/ardour_ui2.cc:395
+#: gtk2_ardour/ardour_ui2.cc:826
+#: gtk2_ardour/ardour_ui2.cc:882
+#: gtk2_ardour/ardour_ui_options.cc:804
+msgid "sprung"
+msgstr "Feder"
-#: ardour_ui2.cc:596
+#: gtk2_ardour/ardour_ui2.cc:396
+#: gtk2_ardour/ardour_ui2.cc:828
+#: gtk2_ardour/ardour_ui_options.cc:815
+msgid "wheel"
+msgstr "Drehrad"
+
+#: gtk2_ardour/ardour_ui2.cc:602
msgid "Maximum speed"
msgstr ""
-#: ardour_ui2.cc:823
-#, fuzzy
-msgid "st"
-msgstr "bestmöglich"
+#: gtk2_ardour/ardour_ui2.cc:838
+#: gtk2_ardour/ardour_ui2.cc:861
+msgid "stop"
+msgstr "Stop"
-#: ardour_ui2.cc:867 ardour_ui2.cc:890 ardour_ui2.cc:907
-msgid "stopped"
+#: gtk2_ardour/ardour_ui2.cc:880
+msgid "-0.55"
msgstr ""
-#: ardour_ui_dialogs.cc:153 playlist_selector.cc:70
-#, fuzzy
+#: gtk2_ardour/ardour_ui_dialogs.cc:146
+#: gtk2_ardour/playlist_selector.cc:70
msgid "close"
msgstr "Schließen"
-#: ardour_ui_dialogs.cc:360 ardour_ui_ed.cc:184
-#, fuzzy
+#: gtk2_ardour/ardour_ui_dialogs.cc:353
+#: gtk2_ardour/ardour_ui_ed.cc:192
msgid "Sound File Browser"
-msgstr "Ardour: Audio Bibliothek"
+msgstr "Audio-Browser"
-#. menus + submenus that need action items
-#: ardour_ui_ed.cc:72
+#: gtk2_ardour/ardour_ui_ed.cc:77
msgid "Session"
msgstr "Sitzung"
-#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:130 editor.cc:1836 export_dialog.cc:350
-#: export_dialog.cc:1059 export_dialog.cc:1063
+#: gtk2_ardour/ardour_ui_ed.cc:78
+#: gtk2_ardour/ardour_ui_ed.cc:138
+#: gtk2_ardour/editor.cc:1713
+#: gtk2_ardour/export_dialog.cc:348
+#: gtk2_ardour/export_dialog.cc:1057
+#: gtk2_ardour/export_dialog.cc:1061
msgid "Export"
msgstr "Exportieren"
-#: ardour_ui_ed.cc:74
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:79
msgid "Cleanup"
-msgstr "leeren"
+msgstr "Aufräumen"
-#: ardour_ui_ed.cc:75 option_editor.cc:126
+#: gtk2_ardour/ardour_ui_ed.cc:80
+#: gtk2_ardour/option_editor.cc:125
msgid "Sync"
msgstr ""
-#: ardour_ui_ed.cc:76 ardour_ui_ed.cc:77
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:81
+#: gtk2_ardour/ardour_ui_ed.cc:82
msgid "Options"
-msgstr "Geschwindigkeitseditor"
+msgstr "Optionen"
-#: ardour_ui_ed.cc:78
+#: gtk2_ardour/ardour_ui_ed.cc:83
msgid "Help"
-msgstr ""
+msgstr "Hilfe"
-#: ardour_ui_ed.cc:79
+#: gtk2_ardour/ardour_ui_ed.cc:84
msgid "KeyMouse Actions"
-msgstr ""
+msgstr "Tastatur/Maus-Befehle"
-#: ardour_ui_ed.cc:80
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:85
msgid "Audio File Format"
-msgstr "Ardour: Audio Bibliothek"
+msgstr "Audio-Dateiformat"
-#: ardour_ui_ed.cc:81
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:86
msgid "Header"
-msgstr "Verbergen"
+msgstr "Header"
-#: ardour_ui_ed.cc:82
+#: gtk2_ardour/ardour_ui_ed.cc:87
msgid "Data"
-msgstr ""
+msgstr "Datenformat"
-#: ardour_ui_ed.cc:83
+#: gtk2_ardour/ardour_ui_ed.cc:88
msgid "Control Surfaces"
-msgstr ""
+msgstr "Eingabegeräte"
-#. the real actions
-#: ardour_ui_ed.cc:87 audio_time_axis.cc:1854 new_session_dialog.cc:529
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:89
+msgid "Metering"
+msgstr "Pegelanzeige"
+
+#: gtk2_ardour/ardour_ui_ed.cc:90
+msgid "Fall off rate"
+msgstr "Abfall der Pegelanzeige"
+
+#: gtk2_ardour/ardour_ui_ed.cc:91
+msgid "Hold Time"
+msgstr "Pegelanzeige halten"
+
+#: gtk2_ardour/ardour_ui_ed.cc:95
+#: gtk2_ardour/route_time_axis.cc:1288
+#: gtk2_ardour/new_session_dialog.cc:600
msgid "New"
msgstr "Neu..."
-#: ardour_ui_ed.cc:89 new_session_dialog.cc:517
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:97
+#: gtk2_ardour/new_session_dialog.cc:587
msgid "Open"
msgstr "Öffnen..."
-#: ardour_ui_ed.cc:90
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:98
msgid "Recent"
-msgstr "Zurücksetzen"
+msgstr "Zuletzt verwendet..."
-#: ardour_ui_ed.cc:91 io_selector.cc:58 io_selector.cc:792
+#: gtk2_ardour/ardour_ui_ed.cc:99
+#: gtk2_ardour/io_selector.cc:60
+#: gtk2_ardour/io_selector.cc:749
+#: gtk2_ardour/connection_editor.cc:59
msgid "Close"
msgstr "Schließen"
-#: ardour_ui_ed.cc:94 route_params_ui.cc:514
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:102
+#: gtk2_ardour/route_params_ui.cc:510
msgid "Add Track/Bus"
-msgstr "MIDI Spur(en) hinzufügen"
+msgstr "Spur/Bus hinzufügen..."
-#: ardour_ui_ed.cc:105
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:113
msgid "Connect"
-msgstr "Verbindungen"
+msgstr "Verbinden"
-#. </CMT Additions>
-#: ardour_ui_ed.cc:113
+#: gtk2_ardour/ardour_ui_ed.cc:121
msgid "Snapshot"
-msgstr "Schnappschuß"
+msgstr "Schnappschuss"
-#: ardour_ui_ed.cc:116
+#: gtk2_ardour/ardour_ui_ed.cc:124
msgid "Save Template..."
-msgstr "Speichern als Voreinstellung..."
+msgstr "Als Vorlage Speichern..."
-#: ardour_ui_ed.cc:119
+#: gtk2_ardour/ardour_ui_ed.cc:127
msgid "Export session to audiofile..."
-msgstr "Export als Audio-Datei..."
+msgstr "Exportiere Sitzung als Audio-Datei..."
-#: ardour_ui_ed.cc:122
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:130
msgid "Export selection to audiofile..."
-msgstr "Export als Audio-Datei..."
+msgstr "Exportiere Auswahl als Audio-Datei..."
-#: ardour_ui_ed.cc:126
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:134
msgid "Export range markers to audiofile..."
-msgstr "Export als Audio-Datei..."
+msgstr "Exportiere Bereich als Audio-Datei..."
-#: ardour_ui_ed.cc:133
+#: gtk2_ardour/ardour_ui_ed.cc:141
msgid "Cleanup unused sources"
-msgstr ""
+msgstr "Nicht benutzte Dateien entfernen"
-#: ardour_ui_ed.cc:135
+#: gtk2_ardour/ardour_ui_ed.cc:143
msgid "Flush wastebasket"
-msgstr ""
+msgstr "Müll leeren"
-#: ardour_ui_ed.cc:141 ardour_ui_options.cc:408 ardour_ui_options.cc:417
-#: ardour_ui_options.cc:489
+#: gtk2_ardour/ardour_ui_ed.cc:149
msgid "JACK"
msgstr ""
-#: ardour_ui_ed.cc:142
+#: gtk2_ardour/ardour_ui_ed.cc:150
msgid "Latency"
-msgstr ""
+msgstr "Latenz"
-#: ardour_ui_ed.cc:144
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:152
msgid "Reconnect"
-msgstr "Verbindungen"
+msgstr "Neu Verbinden"
-#: ardour_ui_ed.cc:147 mixer_strip.cc:497 mixer_strip.cc:565
+#: gtk2_ardour/ardour_ui_ed.cc:155
+#: gtk2_ardour/mixer_strip.cc:517
+#: gtk2_ardour/mixer_strip.cc:579
msgid "Disconnect"
msgstr "Trennen"
-#: ardour_ui_ed.cc:174
+#: gtk2_ardour/ardour_ui_ed.cc:182
msgid "Windows"
msgstr "Fenster"
-#: ardour_ui_ed.cc:175
+#: gtk2_ardour/ardour_ui_ed.cc:183
msgid "start prefix"
msgstr ""
-#: ardour_ui_ed.cc:176
+#: gtk2_ardour/ardour_ui_ed.cc:184
msgid "Quit"
msgstr "Beenden"
-#. windows visibility actions
-#: ardour_ui_ed.cc:180
+#: gtk2_ardour/ardour_ui_ed.cc:188
msgid "Maximise Editor Space"
-msgstr ""
+msgstr "Editor Maximieren"
-#: ardour_ui_ed.cc:182
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:190
msgid "Show Editor"
-msgstr "Geschwindigkeitseditor"
+msgstr "Editor anzeigen"
-#: ardour_ui_ed.cc:183
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:191
msgid "Show Mixer"
-msgstr "Mixer"
+msgstr "Mixer anzeigen"
-#: ardour_ui_ed.cc:185
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:193
msgid "Options Editor"
-msgstr "Geschwindigkeitseditor"
+msgstr "Optionen"
-#: ardour_ui_ed.cc:186
+#: gtk2_ardour/ardour_ui_ed.cc:194
msgid "Track/Bus Inspector"
-msgstr ""
+msgstr "Verbindungen"
-#: ardour_ui_ed.cc:188
+#: gtk2_ardour/ardour_ui_ed.cc:196
+#: gtk2_ardour/connection_editor.cc:147
+#: gtk2_ardour/connection_editor.cc:148
msgid "Connections"
msgstr "Verbindungen"
-#: ardour_ui_ed.cc:190
+#: gtk2_ardour/ardour_ui_ed.cc:198
msgid "Locations"
-msgstr "Stellen"
+msgstr "Lokatoren"
-#: ardour_ui_ed.cc:192
+#: gtk2_ardour/ardour_ui_ed.cc:200
msgid "Big Clock"
msgstr "Große Uhr"
-#: ardour_ui_ed.cc:194
+#: gtk2_ardour/ardour_ui_ed.cc:202
msgid "About"
-msgstr ""
+msgstr "Ãœber Ardour..."
-#: ardour_ui_ed.cc:195
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:203
msgid "Colors"
-msgstr "solo"
+msgstr "Farben"
-#: ardour_ui_ed.cc:197
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:205
msgid "Add Audio Track"
-msgstr "MIDI Spur(en) hinzufügen"
+msgstr "Audiospur hinzufügen"
-#: ardour_ui_ed.cc:199
+#: gtk2_ardour/ardour_ui_ed.cc:207
msgid "Add Audio Bus"
msgstr ""
-#: ardour_ui_ed.cc:201
+#: gtk2_ardour/ardour_ui_ed.cc:209
msgid "Save"
msgstr "Speichern"
-#: ardour_ui_ed.cc:203 editor_actions.cc:255
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:211
+#: gtk2_ardour/editor_actions.cc:256
msgid "Remove Last Capture"
-msgstr "Synchronisationspunkt entfernen"
+msgstr "Letzte Aufnahme entfernen"
-#. do-nothing action for the "transport" menu bar item
-#: ardour_ui_ed.cc:210
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:218
msgid "Transport"
-msgstr "dreieckig"
+msgstr "Transport"
-#. these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
-#. menus and via button proxies.
-#.
-#: ardour_ui_ed.cc:216 sfdb_ui.cc:57
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:224
+#: gtk2_ardour/sfdb_ui.cc:60
msgid "Stop"
msgstr "Stop"
-#: ardour_ui_ed.cc:219
+#: gtk2_ardour/ardour_ui_ed.cc:227
msgid "Roll"
msgstr ""
-#: ardour_ui_ed.cc:223
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:231
msgid "Start/Stop"
-msgstr "Anfang:"
+msgstr "Start/Stop"
-#: ardour_ui_ed.cc:226
+#: gtk2_ardour/ardour_ui_ed.cc:234
msgid "Stop + Forget Capture"
-msgstr ""
+msgstr "Stop + Aufnahme verwerfen"
-#: ardour_ui_ed.cc:229
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:237
msgid "Play Loop Range"
-msgstr "Bereich"
+msgstr "Schleife wiedergeben"
-#: ardour_ui_ed.cc:232
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:240
msgid "Play Selection"
-msgstr "Wiedergabe der ausgewählten Region"
+msgstr "Auswahl wiedergeben"
-#: ardour_ui_ed.cc:236
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:244
msgid "Enable Record"
-msgstr "Wiederherstellen"
+msgstr "Aufnahme aktivieren"
-#: ardour_ui_ed.cc:239
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:247
msgid "Rewind"
-msgstr "Suchen"
+msgstr "Rückwärts"
-#: ardour_ui_ed.cc:242
+#: gtk2_ardour/ardour_ui_ed.cc:250
msgid "Rewind (Slow)"
msgstr ""
-#: ardour_ui_ed.cc:245
+#: gtk2_ardour/ardour_ui_ed.cc:253
msgid "Rewind (Fast)"
msgstr ""
-#: ardour_ui_ed.cc:248
+#: gtk2_ardour/ardour_ui_ed.cc:256
msgid "Forward"
-msgstr ""
+msgstr "Vorwärts"
-#: ardour_ui_ed.cc:251
+#: gtk2_ardour/ardour_ui_ed.cc:259
msgid "Forward (Slow)"
msgstr ""
-#: ardour_ui_ed.cc:254
+#: gtk2_ardour/ardour_ui_ed.cc:262
msgid "Forward (Fast)"
msgstr ""
-#: ardour_ui_ed.cc:257
+#: gtk2_ardour/ardour_ui_ed.cc:265
msgid "Goto Zero"
-msgstr ""
+msgstr "Zum Nullpunkt springen"
-#: ardour_ui_ed.cc:260
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:268
msgid "Goto Start"
-msgstr "Anfang:"
+msgstr "Zum Anfang springen"
-#: ardour_ui_ed.cc:263
+#: gtk2_ardour/ardour_ui_ed.cc:271
msgid "Goto End"
-msgstr ""
+msgstr "Zum Ende Springen"
-#. XXX the newline in the displayed names of these action is really wrong, but its because we want the button
-#. that proxies for these action to be more compact. It would be nice to find a way to override the action
-#. name appearance on the buttons.
-#.
-#: ardour_ui_ed.cc:272
-msgid ""
-"Punch\n"
-"in"
-msgstr ""
-
-#: ardour_ui_ed.cc:275
-msgid ""
-"Punch\n"
-"out"
-msgstr ""
+#: gtk2_ardour/ardour_ui_ed.cc:287
+msgid "Auto Play"
+msgstr "Auto Play"
-#: ardour_ui_ed.cc:278 option_editor.cc:129
-msgid "Click"
-msgstr ""
+#: gtk2_ardour/ardour_ui_ed.cc:294
+msgid "Sync startup to video"
+msgstr "Mit Video synchronisieren"
-#: ardour_ui_ed.cc:281
-#, fuzzy
-msgid ""
-"Auto\n"
-"input"
-msgstr "Port hinzufügen"
+#: gtk2_ardour/ardour_ui_ed.cc:295
+msgid "Time master"
+msgstr "Time Master"
-#: ardour_ui_ed.cc:284
-msgid ""
-"Auto\n"
-"play"
-msgstr ""
-
-#: ardour_ui_ed.cc:287
-msgid ""
-"Auto\n"
-"return"
-msgstr ""
-
-#: ardour_ui_ed.cc:291
-msgid ""
-"Time\n"
-"master"
-msgstr ""
-
-#: ardour_ui_ed.cc:294
+#: gtk2_ardour/ardour_ui_ed.cc:298
msgid "Toggle Record Enable Track1"
msgstr ""
-#: ardour_ui_ed.cc:296
+#: gtk2_ardour/ardour_ui_ed.cc:300
msgid "Toggle Record Enable Track2"
msgstr ""
-#: ardour_ui_ed.cc:298
+#: gtk2_ardour/ardour_ui_ed.cc:302
msgid "Toggle Record Enable Track3"
msgstr ""
-#: ardour_ui_ed.cc:300
+#: gtk2_ardour/ardour_ui_ed.cc:304
msgid "Toggle Record Enable Track4"
msgstr ""
-#: ardour_ui_ed.cc:302
+#: gtk2_ardour/ardour_ui_ed.cc:306
msgid "Toggle Record Enable Track5"
msgstr ""
-#: ardour_ui_ed.cc:304
+#: gtk2_ardour/ardour_ui_ed.cc:308
msgid "Toggle Record Enable Track6"
msgstr ""
-#: ardour_ui_ed.cc:306
+#: gtk2_ardour/ardour_ui_ed.cc:310
msgid "Toggle Record Enable Track7"
msgstr ""
-#: ardour_ui_ed.cc:308
+#: gtk2_ardour/ardour_ui_ed.cc:312
msgid "Toggle Record Enable Track8"
msgstr ""
-#: ardour_ui_ed.cc:310
+#: gtk2_ardour/ardour_ui_ed.cc:314
msgid "Toggle Record Enable Track9"
msgstr ""
-#: ardour_ui_ed.cc:312
+#: gtk2_ardour/ardour_ui_ed.cc:316
msgid "Toggle Record Enable Track10"
msgstr ""
-#: ardour_ui_ed.cc:314
+#: gtk2_ardour/ardour_ui_ed.cc:318
msgid "Toggle Record Enable Track11"
msgstr ""
-#: ardour_ui_ed.cc:316
+#: gtk2_ardour/ardour_ui_ed.cc:320
msgid "Toggle Record Enable Track12"
msgstr ""
-#: ardour_ui_ed.cc:318
+#: gtk2_ardour/ardour_ui_ed.cc:322
msgid "Toggle Record Enable Track13"
msgstr ""
-#: ardour_ui_ed.cc:320
+#: gtk2_ardour/ardour_ui_ed.cc:324
msgid "Toggle Record Enable Track14"
msgstr ""
-#: ardour_ui_ed.cc:322
+#: gtk2_ardour/ardour_ui_ed.cc:326
msgid "Toggle Record Enable Track15"
msgstr ""
-#: ardour_ui_ed.cc:324
+#: gtk2_ardour/ardour_ui_ed.cc:328
msgid "Toggle Record Enable Track16"
msgstr ""
-#: ardour_ui_ed.cc:326
+#: gtk2_ardour/ardour_ui_ed.cc:330
msgid "Toggle Record Enable Track17"
msgstr ""
-#: ardour_ui_ed.cc:328
+#: gtk2_ardour/ardour_ui_ed.cc:332
msgid "Toggle Record Enable Track18"
msgstr ""
-#: ardour_ui_ed.cc:330
+#: gtk2_ardour/ardour_ui_ed.cc:334
msgid "Toggle Record Enable Track19"
msgstr ""
-#: ardour_ui_ed.cc:332
+#: gtk2_ardour/ardour_ui_ed.cc:336
msgid "Toggle Record Enable Track20"
msgstr ""
-#: ardour_ui_ed.cc:334
+#: gtk2_ardour/ardour_ui_ed.cc:338
msgid "Toggle Record Enable Track21"
msgstr ""
-#: ardour_ui_ed.cc:336
+#: gtk2_ardour/ardour_ui_ed.cc:340
msgid "Toggle Record Enable Track22"
msgstr ""
-#: ardour_ui_ed.cc:338
+#: gtk2_ardour/ardour_ui_ed.cc:342
msgid "Toggle Record Enable Track23"
msgstr ""
-#: ardour_ui_ed.cc:340
+#: gtk2_ardour/ardour_ui_ed.cc:344
msgid "Toggle Record Enable Track24"
msgstr ""
-#: ardour_ui_ed.cc:342
+#: gtk2_ardour/ardour_ui_ed.cc:346
msgid "Toggle Record Enable Track25"
msgstr ""
-#: ardour_ui_ed.cc:344
+#: gtk2_ardour/ardour_ui_ed.cc:348
msgid "Toggle Record Enable Track26"
msgstr ""
-#: ardour_ui_ed.cc:346
+#: gtk2_ardour/ardour_ui_ed.cc:350
msgid "Toggle Record Enable Track27"
msgstr ""
-#: ardour_ui_ed.cc:348
+#: gtk2_ardour/ardour_ui_ed.cc:352
msgid "Toggle Record Enable Track28"
msgstr ""
-#: ardour_ui_ed.cc:350
+#: gtk2_ardour/ardour_ui_ed.cc:354
msgid "Toggle Record Enable Track29"
msgstr ""
-#: ardour_ui_ed.cc:352
+#: gtk2_ardour/ardour_ui_ed.cc:356
msgid "Toggle Record Enable Track30"
msgstr ""
-#: ardour_ui_ed.cc:354
+#: gtk2_ardour/ardour_ui_ed.cc:358
msgid "Toggle Record Enable Track31"
msgstr ""
-#: ardour_ui_ed.cc:356
+#: gtk2_ardour/ardour_ui_ed.cc:360
msgid "Toggle Record Enable Track32"
msgstr ""
-#: ardour_ui_ed.cc:361
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:365
msgid "Percentage"
-msgstr "Zurücksetzen"
+msgstr "Prozent"
-#: ardour_ui_ed.cc:362
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:366
msgid "Semitones"
-msgstr "Sitzung"
+msgstr "Halbtöne"
-#: ardour_ui_ed.cc:366
+#: gtk2_ardour/ardour_ui_ed.cc:370
msgid "Send MTC"
msgstr "MTC senden"
-#: ardour_ui_ed.cc:368
+#: gtk2_ardour/ardour_ui_ed.cc:372
msgid "Send MMC"
msgstr "MMC senden"
-#: ardour_ui_ed.cc:370
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:374
msgid "Use MMC"
-msgstr "MMC senden"
+msgstr "Benutze MMC"
-#: ardour_ui_ed.cc:372
+#: gtk2_ardour/ardour_ui_ed.cc:376
msgid "Send MIDI feedback"
msgstr ""
-#: ardour_ui_ed.cc:374
+#: gtk2_ardour/ardour_ui_ed.cc:378
msgid "Use MIDI control"
msgstr ""
-#: ardour_ui_ed.cc:377
-msgid "Connect new track inputs to hardware"
-msgstr ""
-
-#: ardour_ui_ed.cc:396
-msgid "Connect new track outputs to hardware"
-msgstr ""
-
-#: ardour_ui_ed.cc:398
-msgid "Connect new track outputs to master"
-msgstr ""
-
-#: ardour_ui_ed.cc:400
-msgid "Manually connect new track outputs"
-msgstr ""
-
-#: ardour_ui_ed.cc:405
-msgid "Hardware monitoring"
-msgstr ""
-
-#: ardour_ui_ed.cc:406
-msgid "Software monitoring"
-msgstr ""
-
-#: ardour_ui_ed.cc:407
-msgid "External monitoring"
-msgstr ""
-
-#. Configuration object options (i.e. not session specific)
-#: ardour_ui_ed.cc:411
+#: gtk2_ardour/ardour_ui_ed.cc:381
msgid "Stop plugins with transport"
-msgstr ""
+msgstr "Plugins mit Transport stoppen"
-#: ardour_ui_ed.cc:412
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:382
msgid "Verify remove last capture"
-msgstr "Synchronisationspunkt entfernen"
+msgstr "Verwerfen der letzten Aufnahme bestätigen"
-#: ardour_ui_ed.cc:413
+#: gtk2_ardour/ardour_ui_ed.cc:383
msgid "Stop recording on xrun"
-msgstr ""
+msgstr "Aufnahme bei XRUN stoppen"
-#: ardour_ui_ed.cc:414
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:384
msgid "Stop transport at session end"
-msgstr "Ans Ende der Sitzung springen"
+msgstr "Transport am Ende der Sitzung stoppen"
-#: ardour_ui_ed.cc:415
+#: gtk2_ardour/ardour_ui_ed.cc:385
msgid "-12dB gain reduce ffwd/rewind"
-msgstr ""
+msgstr "Beim Spulen Pegel um -12dB absenken"
-#: ardour_ui_ed.cc:416
+#: gtk2_ardour/ardour_ui_ed.cc:386
msgid "Rec-enable stays engaged at stop"
-msgstr ""
+msgstr "Aufnahmestatus bleibt nach Stop erhalten"
-#. session options
-#: ardour_ui_ed.cc:420
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:388
msgid "Do not run plugins while recording"
-msgstr "Wellenform zeigen"
+msgstr "Plugins während der Aufnahme daktivieren"
-#: ardour_ui_ed.cc:423
+#: gtk2_ardour/ardour_ui_ed.cc:391
msgid "Latched solo"
-msgstr ""
+msgstr "Latch Solo"
+
+#: gtk2_ardour/ardour_ui_ed.cc:399
+#: gtk2_ardour/ardour_ui_ed.cc:407
+#: gtk2_ardour/audio_clock.cc:1800
+#: gtk2_ardour/gain_meter.cc:159
+#: gtk2_ardour/ladspa_pluginui.cc:330
+#: gtk2_ardour/ladspa_pluginui.cc:573
+#: gtk2_ardour/panner_ui.cc:87
+msgid "Off"
+msgstr "Aus"
-#: ardour_ui_ed.cc:428
-#, fuzzy
+#: gtk2_ardour/ardour_ui_ed.cc:400
+#: gtk2_ardour/editor.cc:1334
+#: gtk2_ardour/editor.cc:1351
+msgid "Slowest"
+msgstr "Sehr langsam"
+
+#: gtk2_ardour/ardour_ui_ed.cc:401
+#: gtk2_ardour/editor.cc:1335
+#: gtk2_ardour/editor.cc:1352
+msgid "Slow"
+msgstr "Langsam"
+
+#: gtk2_ardour/ardour_ui_ed.cc:402
+#: gtk2_ardour/ardour_ui_ed.cc:409
+msgid "Medium"
+msgstr "Mittel"
+
+#: gtk2_ardour/ardour_ui_ed.cc:403
+#: gtk2_ardour/editor.cc:1336
+#: gtk2_ardour/editor.cc:1353
+msgid "Fast"
+msgstr "Schnell"
+
+#: gtk2_ardour/ardour_ui_ed.cc:404
+msgid "Faster"
+msgstr "Schneller"
+
+#: gtk2_ardour/ardour_ui_ed.cc:405
+#: gtk2_ardour/editor.cc:1337
+#: gtk2_ardour/editor.cc:1354
+msgid "Fastest"
+msgstr "Schnellstmöglich"
+
+#: gtk2_ardour/ardour_ui_ed.cc:408
+#: gtk2_ardour/editor_actions.cc:58
+msgid "Short"
+msgstr "Kurz"
+
+#: gtk2_ardour/ardour_ui_ed.cc:410
+msgid "Long"
+msgstr "Lange"
+
+#: gtk2_ardour/ardour_ui_ed.cc:428
+msgid "Hardware monitoring"
+msgstr "Hardware Monitoring"
+
+#: gtk2_ardour/ardour_ui_ed.cc:429
+msgid "Software monitoring"
+msgstr "Software Monitoring"
+
+#: gtk2_ardour/ardour_ui_ed.cc:430
+msgid "External monitoring"
+msgstr "Externes Monitoring"
+
+#: gtk2_ardour/ardour_ui_ed.cc:434
msgid "Solo in-place"
-msgstr "solo"
+msgstr "Solo-In-Place"
-#: ardour_ui_ed.cc:430
+#: gtk2_ardour/ardour_ui_ed.cc:436
msgid "Solo via bus"
+msgstr "Solo über Bus"
+
+#: gtk2_ardour/ardour_ui_ed.cc:441
+msgid "Auto-connect inputs to physical inputs"
+msgstr "Eingänge automatisch mit Soundkarteneingängen verbinden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:443
+msgid "Manually connect inputs"
+msgstr "Eingänge manuell verbinden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:448
+msgid "Auto-connect outputs to physical outs"
+msgstr "Ausgänge automatisch mit Soundkartenausgängen verbinden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:450
+msgid "Auto-connect outputs to master bus"
+msgstr "Ausgänge automatisch mit Master-Bus verbinden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:452
+msgid "Manually connect outputs"
+msgstr "Ausgänge manuell verbinden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:547
+#: gtk2_ardour/ladspa_pluginui.cc:168
+msgid "Controls"
+msgstr "Steuerelemente"
+
+#: gtk2_ardour/ardour_ui_ed.cc:551
+msgid "Feedback"
msgstr ""
-#: ardour_ui_ed.cc:433
-msgid "Automatically create crossfades"
+#: gtk2_ardour/ardour_ui_ed.cc:631
+msgid "ardour: clock"
+msgstr "Ardour: Uhr"
+
+#: gtk2_ardour/ardour_ui_options.cc:205
+msgid "programming error: unknown solo model in ARDOUR_UI::set_solo_model: %1"
msgstr ""
-#: ardour_ui_ed.cc:435
-msgid "Unmute new full crossfades"
+#: gtk2_ardour/ardour_ui_options.cc:239
+msgid "programming error: unknown monitor model in ARDOUR_UI::set_monitor_model: %1"
msgstr ""
-#: ardour_ui_options.cc:406 ardour_ui_options.cc:416 ardour_ui_options.cc:483
-#, fuzzy
-msgid "Internal"
-msgstr "mittelmäßig"
+#: gtk2_ardour/ardour_ui_options.cc:492
+msgid "programming error: unknown file header format passed to ARDOUR_UI::map_file_data_format: %1"
+msgstr ""
-#: ardour_ui_options.cc:407 ardour_ui_options.cc:486
-msgid "MTC"
+#: gtk2_ardour/ardour_ui_options.cc:524
+msgid "programming error: unknown file data format passed to ARDOUR_UI::map_file_data_format: %1"
msgstr ""
-#: audio_clock.cc:1742 editor.cc:188
-msgid "SMPTE"
+#: gtk2_ardour/ardour_ui_options.cc:826
+msgid "ST"
msgstr ""
-#: audio_clock.cc:1743 editor.cc:187 editor_rulers.cc:360
+#: gtk2_ardour/audio_clock.cc:1796
+#: gtk2_ardour/editor.cc:180
+msgid "Timecode"
+msgstr "Timecode"
+
+#: gtk2_ardour/audio_clock.cc:1797
+#: gtk2_ardour/editor.cc:179
+#: gtk2_ardour/editor_rulers.cc:386
msgid "Bars:Beats"
-msgstr ""
+msgstr "Takte:Schläge"
-#: audio_clock.cc:1744
+#: gtk2_ardour/audio_clock.cc:1798
msgid "Minutes:Seconds"
msgstr "Minuten:Sekunden"
-#: audio_clock.cc:1745
+#: gtk2_ardour/audio_clock.cc:1799
msgid "Audio Frames"
msgstr ""
-#.
-#. Slowest = 6.6dB/sec falloff at update rate of 40ms
-#. Slow = 6.8dB/sec falloff at update rate of 40ms
-#.
-#: audio_clock.cc:1746 editor_actions.cc:375 editor_actions.cc:383
-#: gain_meter.cc:172 panner_ui.cc:89 plugin_ui.cc:392 plugin_ui.cc:635
-msgid "Off"
-msgstr "Aus"
-
-#: audio_clock.cc:1748
+#: gtk2_ardour/audio_clock.cc:1802
msgid "Mode"
msgstr "Modus"
-#: audio_time_axis.cc:91
+#: gtk2_ardour/route_time_axis.cc:87
msgid "m"
-msgstr ""
+msgstr "m"
-#: audio_time_axis.cc:91
+#: gtk2_ardour/route_time_axis.cc:87
msgid "s"
-msgstr ""
+msgstr "s"
-#: audio_time_axis.cc:91
+#: gtk2_ardour/route_time_axis.cc:87
msgid "r"
msgstr ""
-#: audio_time_axis.cc:95
+#: gtk2_ardour/route_time_axis.cc:91
msgid "g"
-msgstr ""
+msgstr "g"
-#. group
-#: audio_time_axis.cc:96
+#: gtk2_ardour/route_time_axis.cc:92
msgid "p"
-msgstr ""
+msgstr "w"
-#: audio_time_axis.cc:97 automation_time_axis.cc:32 visual_time_axis.cc:74
+#: gtk2_ardour/route_time_axis.cc:93
+#: gtk2_ardour/automation_time_axis.cc:33
+#: gtk2_ardour/visual_time_axis.cc:74
msgid "h"
-msgstr ""
+msgstr "h"
-#. height
-#: audio_time_axis.cc:98
+#: gtk2_ardour/route_time_axis.cc:94
msgid "a"
-msgstr ""
+msgstr "a"
-#: audio_time_axis.cc:99 visual_time_axis.cc:73
+#: gtk2_ardour/route_time_axis.cc:95
+#: gtk2_ardour/visual_time_axis.cc:73
msgid "v"
-msgstr ""
+msgstr "v"
-#: audio_time_axis.cc:168 mixer_strip.cc:86
-#, fuzzy
+#: gtk2_ardour/route_time_axis.cc:150
+#: gtk2_ardour/mixer_strip.cc:85
msgid "Record"
-msgstr "Wiederherstellen"
+msgstr "Aufnahme"
-#: audio_time_axis.cc:169 editor_actions.cc:37 mixer_strip.cc:86
-#, fuzzy
+#: gtk2_ardour/route_time_axis.cc:158
+#: gtk2_ardour/editor_actions.cc:38
+#: gtk2_ardour/mixer_strip.cc:85
+#: gtk2_ardour/mixer_strip.cc:433
msgid "Solo"
-msgstr "solo"
-
-#: audio_time_axis.cc:170 editor.cc:1760 editor.cc:1859 mixer_strip.cc:86
-#: panner_ui.cc:427
-#, fuzzy
+msgstr "Solo"
+
+#: gtk2_ardour/route_time_axis.cc:159
+#: gtk2_ardour/editor.cc:1637
+#: gtk2_ardour/editor.cc:1727
+#: gtk2_ardour/mixer_strip.cc:85
+#: gtk2_ardour/mixer_strip.cc:432
+#: gtk2_ardour/panner_ui.cc:417
msgid "Mute"
-msgstr "mute"
+msgstr "Mute"
-#: audio_time_axis.cc:171
-#, fuzzy
+#: gtk2_ardour/route_time_axis.cc:160
msgid "Edit Group"
-msgstr "Mix Gruppen"
+msgstr "Bearbeitungsgruppe"
-#: audio_time_axis.cc:172 visual_time_axis.cc:92
-#, fuzzy
+#: gtk2_ardour/route_time_axis.cc:161
+#: gtk2_ardour/visual_time_axis.cc:92
msgid "Display Height"
-msgstr "Anzeige"
+msgstr "Anzeigehöhe"
-#: audio_time_axis.cc:173
-#, fuzzy
+#: gtk2_ardour/route_time_axis.cc:162
msgid "Playlist"
-msgstr "Wiedergabe"
+msgstr "Wiedergabeliste"
-#: audio_time_axis.cc:174 audio_time_axis.cc:741
-#, fuzzy
+#: gtk2_ardour/route_time_axis.cc:163
+#: gtk2_ardour/route_time_axis.cc:425
msgid "Automation"
-msgstr "Stellen"
+msgstr "Automationen"
-#: audio_time_axis.cc:175 visual_time_axis.cc:93
+#: gtk2_ardour/route_time_axis.cc:164
+#: gtk2_ardour/visual_time_axis.cc:93
msgid "Visual options"
-msgstr ""
+msgstr "Visuelle optionen"
-#: audio_time_axis.cc:176 visual_time_axis.cc:94
+#: gtk2_ardour/route_time_axis.cc:165
+#: gtk2_ardour/visual_time_axis.cc:94
msgid "Hide this track"
-msgstr ""
+msgstr "Diese Spur verbergen"
-#: audio_time_axis.cc:333 mixer_strip.cc:927
-#, fuzzy
+#: gtk2_ardour/route_time_axis.cc:276
+#: gtk2_ardour/mixer_strip.cc:917
msgid "No group"
msgstr "keine Gruppe"
-#: audio_time_axis.cc:702 automation_time_axis.cc:450
-#: imageframe_time_axis.cc:255 marker_time_axis.cc:211
-#, fuzzy
-msgid "Height"
-msgstr "Rechts"
-
-#: audio_time_axis.cc:703 color_manager.cc:41 imageframe_time_axis.cc:256
-#: marker_time_axis.cc:212
-#, fuzzy
-msgid "Color"
-msgstr "solo"
-
-#: audio_time_axis.cc:707
-msgid "Hide all crossfades"
-msgstr ""
-
-#: audio_time_axis.cc:708
-msgid "Show all crossfades"
-msgstr ""
-
-#: audio_time_axis.cc:712 mixer_strip.cc:1011
-#, fuzzy
-msgid "Remote Control ID"
-msgstr "Synchronisationspunkt entfernen"
-
-#: audio_time_axis.cc:718
-#, fuzzy
+#: gtk2_ardour/route_time_axis.cc:386
msgid "Show all automation"
-msgstr "Stellen"
+msgstr "Alle Automationen zeigen"
-#: audio_time_axis.cc:721
-#, fuzzy
+#: gtk2_ardour/route_time_axis.cc:389
msgid "Show existing automation"
-msgstr "Stellen"
+msgstr "Verfügbare Automationen zeigen"
-#: audio_time_axis.cc:724
-#, fuzzy
+#: gtk2_ardour/route_time_axis.cc:392
msgid "Hide all automation"
-msgstr "Stellen"
-
-#: audio_time_axis.cc:729
-#, fuzzy
-msgid "Fader"
-msgstr "Verbergen"
-
-#: audio_time_axis.cc:734
-msgid "Pan"
-msgstr ""
+msgstr "Automationen verbergen"
-#: audio_time_axis.cc:739
+#: gtk2_ardour/route_time_axis.cc:395
msgid "Plugins"
-msgstr ""
+msgstr "Plugins"
-#: audio_time_axis.cc:747
-#, fuzzy
-msgid "Show waveforms"
-msgstr "Wellenform zeigen"
-
-#: audio_time_axis.cc:755
-msgid "Traditional"
-msgstr ""
+#: gtk2_ardour/route_time_axis.cc:416
+#: gtk2_ardour/automation_time_axis.cc:425
+#: gtk2_ardour/imageframe_time_axis.cc:255
+#: gtk2_ardour/marker_time_axis.cc:211
+msgid "Height"
+msgstr "Höhe"
-#: audio_time_axis.cc:758
-msgid "Rectified"
-msgstr ""
+#: gtk2_ardour/route_time_axis.cc:417
+#: gtk2_ardour/color_manager.cc:41
+#: gtk2_ardour/imageframe_time_axis.cc:256
+#: gtk2_ardour/marker_time_axis.cc:212
+msgid "Color"
+msgstr "Farbe"
-#: audio_time_axis.cc:761
-#, fuzzy
-msgid "Waveform"
-msgstr "Wellenform zeigen"
+#: gtk2_ardour/route_time_axis.cc:422
+#: gtk2_ardour/mixer_strip.cc:1002
+msgid "Remote Control ID"
+msgstr "ID für Fernsteuerung"
-#: audio_time_axis.cc:771
+#: gtk2_ardour/route_time_axis.cc:440
msgid "Align with existing material"
-msgstr ""
+msgstr "An vorhandenem Material ausrichten"
-#: audio_time_axis.cc:776
+#: gtk2_ardour/route_time_axis.cc:446
msgid "Align with capture time"
-msgstr ""
+msgstr "An Aufnahmezeit ausrichten"
-#: audio_time_axis.cc:782
+#: gtk2_ardour/route_time_axis.cc:452
msgid "Alignment"
-msgstr ""
+msgstr "Ausrichtung"
-#: audio_time_axis.cc:788 editor.cc:527 editor_actions.cc:60
-#: mixer_strip.cc:1000 mixer_ui.cc:111
+#: gtk2_ardour/route_time_axis.cc:458
+msgid "Normal mode"
+msgstr "Normaler Modus"
+
+#: gtk2_ardour/route_time_axis.cc:461
+msgid "Tape mode"
+msgstr "Tape-Modus"
+
+#: gtk2_ardour/route_time_axis.cc:477
+#: gtk2_ardour/editor.cc:478
+#: gtk2_ardour/editor_actions.cc:61
+#: gtk2_ardour/mixer_strip.cc:991
+#: gtk2_ardour/mixer_ui.cc:109
msgid "Active"
msgstr "Aktiv"
-#: audio_time_axis.cc:793 editor.cc:1922 editor_actions.cc:320
-#: editor_markers.cc:508 imageframe_time_axis.cc:259 location_ui.cc:57
-#: marker_time_axis.cc:215 mixer_strip.cc:1014
+#: gtk2_ardour/route_time_axis.cc:482
+#: gtk2_ardour/editor.cc:1817
+#: gtk2_ardour/editor_actions.cc:326
+#: gtk2_ardour/editor_markers.cc:511
+#: gtk2_ardour/imageframe_time_axis.cc:259
+#: gtk2_ardour/location_ui.cc:58
+#: gtk2_ardour/marker_time_axis.cc:215
+#: gtk2_ardour/mixer_strip.cc:1005
msgid "Remove"
-msgstr "Entfernen"
+msgstr "Löschen"
-#: audio_time_axis.cc:833
-#, fuzzy
-msgid "Name for playlist"
-msgstr "Name für Schnappschuß"
+#: gtk2_ardour/route_time_axis.cc:508
+#: gtk2_ardour/route_time_axis.cc:563
+#: gtk2_ardour/route_time_axis.cc:826
+#: gtk2_ardour/editor_actions.cc:1034
+msgid "programming error: %1 %2"
+msgstr ""
-#: audio_time_axis.cc:835 audio_time_axis.cc:1851 editor_markers.cc:827
-#: editor_mouse.cc:4673 imageframe_time_axis.cc:248 marker_time_axis.cc:208
-#: meter_bridge_strip.cc:224 mixer_strip.cc:998 redirect_box.cc:751
-#: redirect_box.cc:1065 route_ui.cc:739 visual_time_axis.cc:326
+#: gtk2_ardour/route_time_axis.cc:850
+msgid "Name for playlist"
+msgstr "Name für Wiedergabeliste"
+
+#: gtk2_ardour/route_time_axis.cc:852
+#: gtk2_ardour/route_time_axis.cc:1285
+#: gtk2_ardour/editor_markers.cc:830
+#: gtk2_ardour/editor_mouse.cc:4732
+#: gtk2_ardour/imageframe_time_axis.cc:248
+#: gtk2_ardour/marker_time_axis.cc:208
+#: gtk2_ardour/mixer_strip.cc:989
+#: gtk2_ardour/redirect_box.cc:752
+#: gtk2_ardour/redirect_box.cc:1075
+#: gtk2_ardour/route_ui.cc:760
+#: gtk2_ardour/visual_time_axis.cc:331
msgid "Rename"
msgstr "Umbenennen"
-#: audio_time_axis.cc:868 audio_time_axis.cc:908
-#, fuzzy
+#: gtk2_ardour/route_time_axis.cc:894
+#: gtk2_ardour/route_time_axis.cc:935
msgid "Name for Playlist"
-msgstr "Name für Schnappschuß"
+msgstr "Name für Playlist"
-#: audio_time_axis.cc:1126 visual_time_axis.cc:383
+#: gtk2_ardour/route_time_axis.cc:1118
+#: gtk2_ardour/visual_time_axis.cc:388
msgid "a track already exists with that name"
msgstr ""
-#: audio_time_axis.cc:1167 editor.cc:218
-msgid "gain"
+#: gtk2_ardour/route_time_axis.cc:1289
+msgid "New Copy"
+msgstr "Neue Kopie"
+
+#: gtk2_ardour/route_time_axis.cc:1291
+msgid "Clear Current"
msgstr ""
-#: audio_time_axis.cc:1207
-msgid "pan"
+#: gtk2_ardour/route_time_axis.cc:1294
+msgid "Select from all ..."
msgstr ""
-#: audio_time_axis.cc:1410 editor.cc:1483 selection.cc:634
+#: gtk2_ardour/route_time_axis.cc:1494
+#: gtk2_ardour/editor.cc:1359
+#: gtk2_ardour/selection.cc:642
msgid "programming error: "
msgstr ""
-#: audio_time_axis.cc:1848
-msgid "Current: %1"
+#: gtk2_ardour/audio_time_axis.cc:221
+msgid "Fader"
+msgstr "Fader"
+
+#: gtk2_ardour/audio_time_axis.cc:226
+msgid "Pan"
msgstr ""
-#: audio_time_axis.cc:1855
-#, fuzzy
-msgid "New Copy"
-msgstr "Kopieren"
+#: gtk2_ardour/audio_time_axis.cc:241
+msgid "Hide all crossfades"
+msgstr "Alle Crossfades verbergen"
-#: audio_time_axis.cc:1857
-msgid "Clear Current"
+#: gtk2_ardour/audio_time_axis.cc:242
+msgid "Show all crossfades"
+msgstr "Alle Crossfades zeigen"
+
+#: gtk2_ardour/audio_time_axis.cc:249
+msgid "Show waveforms"
+msgstr "Wellenformen zeigen"
+
+#: gtk2_ardour/audio_time_axis.cc:257
+msgid "Traditional"
+msgstr "Traditionell"
+
+#: gtk2_ardour/audio_time_axis.cc:260
+msgid "Rectified"
+msgstr "Gleichgerichtet"
+
+#: gtk2_ardour/audio_time_axis.cc:263
+msgid "Waveform"
+msgstr "Wellenform"
+
+#: gtk2_ardour/audio_time_axis.cc:323
+msgid "gain"
msgstr ""
-#: audio_time_axis.cc:1859 editor.cc:2024 editor.cc:2100
-msgid "Select"
-msgstr "Auswahl"
+#: gtk2_ardour/audio_time_axis.cc:363
+msgid "pan"
+msgstr ""
-#: automation_line.cc:884
+#: gtk2_ardour/automation_line.cc:801
#, fuzzy
msgid "automation event move"
msgstr "Stellen"
-#: automation_line.cc:886
+#: gtk2_ardour/automation_line.cc:803
#, fuzzy
msgid "automation range drag"
msgstr "Stellen"
-#: automation_line.cc:1015 region_gain_line.cc:62
+#: gtk2_ardour/automation_line.cc:1028
+#: gtk2_ardour/region_gain_line.cc:64
#, fuzzy
msgid "remove control point"
msgstr "Synchronisationspunkt entfernen"
-#: automation_time_axis.cc:33 editor_ops.cc:2885
+#: gtk2_ardour/automation_time_axis.cc:34
+#: gtk2_ardour/editor_ops.cc:2834
msgid "clear"
msgstr "leeren"
-#: automation_time_axis.cc:75
+#: gtk2_ardour/automation_time_axis.cc:70
msgid "track height"
-msgstr ""
+msgstr "Anzeigehöhe"
-#: automation_time_axis.cc:76
-#, fuzzy
+#: gtk2_ardour/automation_time_axis.cc:71
msgid "automation state"
-msgstr "Stellen"
+msgstr "Automationsmodus"
-#: automation_time_axis.cc:77
-#, fuzzy
+#: gtk2_ardour/automation_time_axis.cc:72
msgid "clear track"
-msgstr "Verbindungen löschen"
+msgstr "Verbindungen entfernen"
-#: automation_time_axis.cc:78
-#, fuzzy
+#: gtk2_ardour/automation_time_axis.cc:73
msgid "hide track"
-msgstr "Stille einfügen"
+msgstr "Diese Spur verbergen"
-#: automation_time_axis.cc:184 automation_time_axis.cc:213
-#: automation_time_axis.cc:461
+#: gtk2_ardour/automation_time_axis.cc:182
+#: gtk2_ardour/automation_time_axis.cc:211
+#: gtk2_ardour/automation_time_axis.cc:436
msgid "Manual"
-msgstr ""
-
-#: automation_time_axis.cc:186 automation_time_axis.cc:224
-#: automation_time_axis.cc:465 editor.cc:2001 editor.cc:2082 gain_meter.cc:174
-#: panner_ui.cc:91 plugin_ui.cc:395 plugin_ui.cc:637 sfdb_ui.cc:56
+msgstr "Manuell"
+
+#: gtk2_ardour/automation_time_axis.cc:184
+#: gtk2_ardour/automation_time_axis.cc:222
+#: gtk2_ardour/automation_time_axis.cc:440
+#: gtk2_ardour/editor.cc:1894
+#: gtk2_ardour/editor.cc:1975
+#: gtk2_ardour/gain_meter.cc:161
+#: gtk2_ardour/ladspa_pluginui.cc:333
+#: gtk2_ardour/ladspa_pluginui.cc:575
+#: gtk2_ardour/panner_ui.cc:89
+#: gtk2_ardour/sfdb_ui.cc:59
msgid "Play"
msgstr "Wiedergabe"
-#: automation_time_axis.cc:188 automation_time_axis.cc:235
-#: automation_time_axis.cc:469 gain_meter.cc:176 panner_ui.cc:93
-#: plugin_ui.cc:398 plugin_ui.cc:639
+#: gtk2_ardour/automation_time_axis.cc:186
+#: gtk2_ardour/automation_time_axis.cc:233
+#: gtk2_ardour/automation_time_axis.cc:444
+#: gtk2_ardour/gain_meter.cc:163
+#: gtk2_ardour/ladspa_pluginui.cc:336
+#: gtk2_ardour/ladspa_pluginui.cc:577
+#: gtk2_ardour/panner_ui.cc:91
msgid "Write"
-msgstr ""
-
-#: automation_time_axis.cc:190 automation_time_axis.cc:246
-#: automation_time_axis.cc:473 gain_meter.cc:178 panner_ui.cc:95
-#: plugin_ui.cc:401 plugin_ui.cc:641
+msgstr "Schreiben"
+
+#: gtk2_ardour/automation_time_axis.cc:188
+#: gtk2_ardour/automation_time_axis.cc:244
+#: gtk2_ardour/automation_time_axis.cc:448
+#: gtk2_ardour/gain_meter.cc:165
+#: gtk2_ardour/ladspa_pluginui.cc:339
+#: gtk2_ardour/ladspa_pluginui.cc:579
+#: gtk2_ardour/panner_ui.cc:93
msgid "Touch"
-msgstr ""
+msgstr "Berühren"
-#: automation_time_axis.cc:257 option_editor.cc:183 option_editor.cc:189
-#: plugin_ui.cc:404
+#: gtk2_ardour/automation_time_axis.cc:255
+#: gtk2_ardour/ladspa_pluginui.cc:342
msgid "???"
msgstr ""
-#: automation_time_axis.cc:271
-#, fuzzy
+#: gtk2_ardour/automation_time_axis.cc:269
msgid "clear automation"
-msgstr "Verbindungen löschen"
+msgstr "Verbindungen entfernen"
-#: automation_time_axis.cc:452 editor_actions.cc:318
+#: gtk2_ardour/automation_time_axis.cc:427
+#: gtk2_ardour/editor_actions.cc:324
msgid "Hide"
msgstr "Verbergen"
-#: automation_time_axis.cc:454 crossfade_edit.cc:78 redirect_box.cc:1057
+#: gtk2_ardour/automation_time_axis.cc:429
+#: gtk2_ardour/crossfade_edit.cc:79
+#: gtk2_ardour/redirect_box.cc:1067
+#: gtk2_ardour/connection_editor.cc:57
msgid "Clear"
msgstr "leeren"
-#: automation_time_axis.cc:477
-#, fuzzy
+#: gtk2_ardour/automation_time_axis.cc:452
msgid "State"
-msgstr "Anfang"
+msgstr "Automationssmodus"
-#: canvas-imageframe.c:104
+#: gtk2_ardour/canvas-imageframe.c:104
msgid "pixbuf"
msgstr ""
-#: canvas-imageframe.c:105
+#: gtk2_ardour/canvas-imageframe.c:105
msgid "the pixbuf"
msgstr ""
-#: canvas-imageframe.c:110
+#: gtk2_ardour/canvas-imageframe.c:110
msgid "x"
msgstr ""
-#: canvas-imageframe.c:111 canvas-simpleline.c:111 canvas-simplerect.c:107
+#: gtk2_ardour/canvas-imageframe.c:111
+#: gtk2_ardour/canvas-simpleline.c:111
+#: gtk2_ardour/canvas-simplerect.c:107
msgid "x coordinate of upper left corner of rect"
msgstr ""
-#: canvas-imageframe.c:120
+#: gtk2_ardour/canvas-imageframe.c:120
msgid "y"
msgstr ""
-#: canvas-imageframe.c:121 canvas-simpleline.c:121 canvas-simplerect.c:117
+#: gtk2_ardour/canvas-imageframe.c:121
+#: gtk2_ardour/canvas-simpleline.c:121
+#: gtk2_ardour/canvas-simplerect.c:117
msgid "y coordinate of upper left corner of rect "
msgstr ""
-#: canvas-imageframe.c:129
+#: gtk2_ardour/canvas-imageframe.c:129
msgid "width"
msgstr ""
-#: canvas-imageframe.c:130
+#: gtk2_ardour/canvas-imageframe.c:130
msgid "the width"
msgstr ""
-#: canvas-imageframe.c:139
+#: gtk2_ardour/canvas-imageframe.c:139
msgid "drawwidth"
msgstr ""
-#: canvas-imageframe.c:140
+#: gtk2_ardour/canvas-imageframe.c:140
msgid "drawn width"
msgstr ""
-#: canvas-imageframe.c:148
+#: gtk2_ardour/canvas-imageframe.c:148
#, fuzzy
msgid "height"
msgstr "Rechts"
-#: canvas-imageframe.c:149
+#: gtk2_ardour/canvas-imageframe.c:149
#, fuzzy
msgid "the height"
msgstr "Rechts"
-#: canvas-imageframe.c:157
+#: gtk2_ardour/canvas-imageframe.c:157
msgid "anchor"
msgstr ""
-#: canvas-imageframe.c:158
+#: gtk2_ardour/canvas-imageframe.c:158
msgid "the anchor"
msgstr ""
-#: canvas-simpleline.c:110 canvas-simplerect.c:106
+#: gtk2_ardour/canvas-simpleline.c:110
+#: gtk2_ardour/canvas-simplerect.c:106
msgid "x1"
msgstr ""
-#: canvas-simpleline.c:120 canvas-simplerect.c:116
+#: gtk2_ardour/canvas-simpleline.c:120
+#: gtk2_ardour/canvas-simplerect.c:116
msgid "y1"
msgstr ""
-#: canvas-simpleline.c:131 canvas-simplerect.c:127
+#: gtk2_ardour/canvas-simpleline.c:131
+#: gtk2_ardour/canvas-simplerect.c:127
msgid "x2"
msgstr ""
-#: canvas-simpleline.c:132 canvas-simplerect.c:128
+#: gtk2_ardour/canvas-simpleline.c:132
+#: gtk2_ardour/canvas-simplerect.c:128
msgid "x coordinate of lower right corner of rect"
msgstr ""
-#: canvas-simpleline.c:141 canvas-simplerect.c:137
+#: gtk2_ardour/canvas-simpleline.c:141
+#: gtk2_ardour/canvas-simplerect.c:137
msgid "y2"
msgstr ""
-#: canvas-simpleline.c:142 canvas-simplerect.c:138
+#: gtk2_ardour/canvas-simpleline.c:142
+#: gtk2_ardour/canvas-simplerect.c:138
msgid "y coordinate of lower right corner of rect "
msgstr ""
-#: canvas-simpleline.c:150
+#: gtk2_ardour/canvas-simpleline.c:150
msgid "color rgba"
msgstr ""
-#: canvas-simpleline.c:151
+#: gtk2_ardour/canvas-simpleline.c:151
msgid "color of line"
msgstr ""
-#: canvas-simplerect.c:148
+#: gtk2_ardour/canvas-simplerect.c:148
msgid "outline pixels"
msgstr ""
-#: canvas-simplerect.c:149
+#: gtk2_ardour/canvas-simplerect.c:149
msgid "width in pixels of outline"
msgstr ""
-#: canvas-simplerect.c:159
+#: gtk2_ardour/canvas-simplerect.c:159
msgid "outline what"
msgstr ""
-#: canvas-simplerect.c:160
+#: gtk2_ardour/canvas-simplerect.c:160
msgid "which boundaries to outline (mask)"
msgstr ""
-#: canvas-simplerect.c:171
+#: gtk2_ardour/canvas-simplerect.c:171
msgid "fill"
msgstr ""
-#: canvas-simplerect.c:172
+#: gtk2_ardour/canvas-simplerect.c:172
#, fuzzy
msgid "fill rectangle"
msgstr "Auswahl zu Schleife machen"
-#: canvas-simplerect.c:179
+#: gtk2_ardour/canvas-simplerect.c:179
msgid "draw"
msgstr ""
-#: canvas-simplerect.c:180
+#: gtk2_ardour/canvas-simplerect.c:180
#, fuzzy
msgid "draw rectangle"
msgstr "Bereich"
-#: canvas-simplerect.c:188
+#: gtk2_ardour/canvas-simplerect.c:188
msgid "outline color rgba"
msgstr ""
-#: canvas-simplerect.c:189
+#: gtk2_ardour/canvas-simplerect.c:189
msgid "color of outline"
msgstr ""
-#: canvas-simplerect.c:199
+#: gtk2_ardour/canvas-simplerect.c:199
msgid "fill color rgba"
msgstr ""
-#: canvas-simplerect.c:200
+#: gtk2_ardour/canvas-simplerect.c:200
msgid "color of fill"
msgstr ""
-#: color_manager.cc:40
+#: gtk2_ardour/color_manager.cc:40
#, fuzzy
msgid "Object"
msgstr "Objekt"
-#: color_manager.cc:78
+#: gtk2_ardour/color_manager.cc:78
msgid "cannot open color definition file %1: %2"
msgstr ""
-#: crossfade_edit.cc:75
+#: gtk2_ardour/crossfade_edit.cc:76
#, fuzzy
msgid "ardour: x-fade edit"
msgstr "Ardour: Editor"
-#: crossfade_edit.cc:79 panner_ui.cc:443
+#: gtk2_ardour/crossfade_edit.cc:80
+#: gtk2_ardour/panner_ui.cc:433
#, fuzzy
msgid "Reset"
msgstr "bestmöglich"
-#: crossfade_edit.cc:80
+#: gtk2_ardour/crossfade_edit.cc:81
msgid "Fade"
msgstr ""
-#: crossfade_edit.cc:81
+#: gtk2_ardour/crossfade_edit.cc:82
msgid "Out (dry)"
msgstr ""
-#: crossfade_edit.cc:82
+#: gtk2_ardour/crossfade_edit.cc:83
#, fuzzy
msgid "Out"
msgstr "Ausgänge"
-#: crossfade_edit.cc:83
+#: gtk2_ardour/crossfade_edit.cc:84
msgid "In (dry)"
msgstr ""
-#: crossfade_edit.cc:84
+#: gtk2_ardour/crossfade_edit.cc:85
msgid "In"
msgstr ""
-#: crossfade_edit.cc:86
+#: gtk2_ardour/crossfade_edit.cc:87
msgid "With Pre-roll"
msgstr ""
-#: crossfade_edit.cc:87
+#: gtk2_ardour/crossfade_edit.cc:88
msgid "With Post-roll"
msgstr ""
-#: crossfade_edit.cc:95
+#: gtk2_ardour/crossfade_edit.cc:96
msgid "Fade In"
msgstr ""
-#: crossfade_edit.cc:96
+#: gtk2_ardour/crossfade_edit.cc:97
msgid "Fade Out"
msgstr ""
-#: crossfade_edit.cc:172 editor.cc:1835 editor_actions.cc:316
-#: option_editor.cc:130
+#: gtk2_ardour/crossfade_edit.cc:173
+#: gtk2_ardour/editor.cc:1712
+#: gtk2_ardour/editor_actions.cc:322
+#: gtk2_ardour/option_editor.cc:129
msgid "Audition"
-msgstr ""
-
-#: editor.cc:104 editor.cc:3616
-msgid "Slide"
-msgstr ""
-
-#: editor.cc:105 editor.cc:3614
-msgid "Splice"
-msgstr ""
-
-#. note that this menu list starts at zero, not 1, because zero
-#. is a valid, if useless, ID.
-#.
-#. leave some breathing room
-#: editor.cc:110 editor.cc:3671 export_dialog.cc:78 export_dialog.cc:92
-#: export_dialog.cc:893 export_dialog.cc:1225 route_ui.cc:437
+msgstr "Vorhören"
+
+#: gtk2_ardour/editor.cc:102
+#: gtk2_ardour/editor.cc:3469
+#: gtk2_ardour/editor_actions.cc:400
+#: gtk2_ardour/export_dialog.cc:76
+#: gtk2_ardour/export_dialog.cc:90
+#: gtk2_ardour/export_dialog.cc:891
+#: gtk2_ardour/export_dialog.cc:1223
+#: gtk2_ardour/route_ui.cc:459
msgid "None"
-msgstr "Nichts"
+msgstr "Kein"
-#: editor.cc:111 editor.cc:3659
+#: gtk2_ardour/editor.cc:103
+#: gtk2_ardour/editor.cc:3457
msgid "CD Frames"
-msgstr ""
+msgstr "CD-Frames"
-#: editor.cc:112 editor.cc:3661
+#: gtk2_ardour/editor.cc:104
+#: gtk2_ardour/editor.cc:3459
msgid "SMPTE Frames"
-msgstr ""
+msgstr "SMPTE-Frames"
-#: editor.cc:113 editor.cc:3663
+#: gtk2_ardour/editor.cc:105
+#: gtk2_ardour/editor.cc:3461
msgid "SMPTE Seconds"
-msgstr ""
+msgstr "SMPTE-Sekunden"
-#: editor.cc:114 editor.cc:3665
+#: gtk2_ardour/editor.cc:106
+#: gtk2_ardour/editor.cc:3463
msgid "SMPTE Minutes"
-msgstr ""
+msgstr "SMPTE-Minuten"
-#: editor.cc:115 editor.cc:3667
-#, fuzzy
+#: gtk2_ardour/editor.cc:107
+#: gtk2_ardour/editor.cc:3465
msgid "Seconds"
-msgstr "Minuten:Sekunden"
+msgstr "Sekunden"
-#: editor.cc:116 editor.cc:3669
-#, fuzzy
+#: gtk2_ardour/editor.cc:108
+#: gtk2_ardour/editor.cc:3467
msgid "Minutes"
-msgstr "mute"
+msgstr "Minuten"
-#: editor.cc:117 editor.cc:3641
+#: gtk2_ardour/editor.cc:109
+#: gtk2_ardour/editor.cc:3439
msgid "Beats/32"
-msgstr ""
+msgstr "Zweiunddreißigstel"
-#: editor.cc:118 editor.cc:3639
+#: gtk2_ardour/editor.cc:110
+#: gtk2_ardour/editor.cc:3437
msgid "Beats/16"
-msgstr ""
+msgstr "Sechzehntel"
-#: editor.cc:119 editor.cc:3637
+#: gtk2_ardour/editor.cc:111
+#: gtk2_ardour/editor.cc:3435
msgid "Beats/8"
-msgstr ""
+msgstr "Achtel"
-#: editor.cc:120 editor.cc:3635
+#: gtk2_ardour/editor.cc:112
+#: gtk2_ardour/editor.cc:3433
msgid "Beats/4"
-msgstr ""
+msgstr "Viertel"
-#: editor.cc:121 editor.cc:3633
+#: gtk2_ardour/editor.cc:113
+#: gtk2_ardour/editor.cc:3431
msgid "Beats/3"
-msgstr ""
+msgstr "Vierteltriolen"
-#: editor.cc:122 editor.cc:3643
+#: gtk2_ardour/editor.cc:114
+#: gtk2_ardour/editor.cc:3441
msgid "Beats"
-msgstr ""
+msgstr "Schläge"
-#: editor.cc:123 editor.cc:3645
+#: gtk2_ardour/editor.cc:115
+#: gtk2_ardour/editor.cc:3443
msgid "Bars"
-msgstr ""
+msgstr "Takte"
-#: editor.cc:124 editor.cc:3647
+#: gtk2_ardour/editor.cc:116
+#: gtk2_ardour/editor.cc:3445
msgid "Marks"
-msgstr ""
+msgstr "Marker"
-#: editor.cc:125 editor.cc:144 editor.cc:3649 editor.cc:3715
+#: gtk2_ardour/editor.cc:117
+#: gtk2_ardour/editor.cc:136
+#: gtk2_ardour/editor.cc:3447
+#: gtk2_ardour/editor.cc:3512
msgid "Edit Cursor"
-msgstr ""
+msgstr "Editierzeiger"
-#: editor.cc:126 editor.cc:3651
-#, fuzzy
+#: gtk2_ardour/editor.cc:118
+#: gtk2_ardour/editor.cc:3449
msgid "Region starts"
-msgstr "Regionen"
+msgstr "Regionen-Anfang"
-#: editor.cc:127 editor.cc:3653
-#, fuzzy
+#: gtk2_ardour/editor.cc:119
+#: gtk2_ardour/editor.cc:3451
msgid "Region ends"
-msgstr "Regionen"
+msgstr "Regionen-Ende"
-#: editor.cc:128 editor.cc:3657
-#, fuzzy
+#: gtk2_ardour/editor.cc:120
+#: gtk2_ardour/editor.cc:3455
msgid "Region syncs"
-msgstr "Regionen"
+msgstr "Regionen-Sync"
-#: editor.cc:129 editor.cc:3655
-#, fuzzy
+#: gtk2_ardour/editor.cc:121
+#: gtk2_ardour/editor.cc:3453
msgid "Region bounds"
-msgstr "Regionen"
+msgstr "Regionen-Grenzen"
-#: editor.cc:135 editor.cc:3690
-#, fuzzy
+#: gtk2_ardour/editor.cc:127
+#: gtk2_ardour/editor.cc:3487
+#: gtk2_ardour/editor_actions.cc:287
msgid "Magnetic"
-msgstr "generisch"
-
-#: editor.cc:140 editor.cc:3707 export_dialog.cc:140 export_dialog.cc:156
-#: export_dialog.cc:1068 export_dialog.cc:1072
+msgstr "Magnetisch"
+
+#: gtk2_ardour/editor.cc:132
+#: gtk2_ardour/editor.cc:3504
+#: gtk2_ardour/export_dialog.cc:138
+#: gtk2_ardour/export_dialog.cc:154
+#: gtk2_ardour/export_dialog.cc:1066
+#: gtk2_ardour/export_dialog.cc:1070
msgid "Left"
msgstr "Links"
-#: editor.cc:141 editor.cc:3709 export_dialog.cc:141 export_dialog.cc:157
+#: gtk2_ardour/editor.cc:133
+#: gtk2_ardour/editor.cc:3506
+#: gtk2_ardour/export_dialog.cc:139
+#: gtk2_ardour/export_dialog.cc:155
msgid "Right"
msgstr "Rechts"
-#: editor.cc:142 editor.cc:3711
+#: gtk2_ardour/editor.cc:134
+#: gtk2_ardour/editor.cc:3508
msgid "Center"
msgstr "Mitte"
-#: editor.cc:143 editor.cc:3713
+#: gtk2_ardour/editor.cc:135
+#: gtk2_ardour/editor.cc:3510
msgid "Playhead"
-msgstr ""
+msgstr "Positionszeiger"
-#. time display buttons
-#: editor.cc:186
+#: gtk2_ardour/editor.cc:178
msgid "Mins:Secs"
msgstr "Min:Sek"
-#: editor.cc:189 editor_rulers.cc:354
+#: gtk2_ardour/editor.cc:181
+#: gtk2_ardour/editor_rulers.cc:380
msgid "Frames"
-msgstr ""
+msgstr "Frames"
-#: editor.cc:190 editor_rulers.cc:374
+#: gtk2_ardour/editor.cc:182
+#: gtk2_ardour/editor_rulers.cc:400
msgid "Tempo"
-msgstr ""
+msgstr "Tempo"
-#: editor.cc:191 editor_rulers.cc:368
+#: gtk2_ardour/editor.cc:183
+#: gtk2_ardour/editor_rulers.cc:394
msgid "Meter"
-msgstr ""
+msgstr "Taktart"
-#: editor.cc:192 editor_rulers.cc:380
-#, fuzzy
+#: gtk2_ardour/editor.cc:184
+#: gtk2_ardour/editor_rulers.cc:406
msgid "Location Markers"
-msgstr "Stellen"
+msgstr "Positionsmarker"
-#: editor.cc:193 editor_rulers.cc:386
+#: gtk2_ardour/editor.cc:185
+#: gtk2_ardour/editor_rulers.cc:412
msgid "Range Markers"
-msgstr ""
+msgstr "Bereiche"
-#: editor.cc:194 editor_rulers.cc:392
+#: gtk2_ardour/editor.cc:186
+#: gtk2_ardour/editor_rulers.cc:418
msgid "Loop/Punch Ranges"
-msgstr ""
+msgstr "Schleifen/Punch-Bereiche"
-#: editor.cc:216
-msgid "range"
-msgstr "Bereich"
-
-#: editor.cc:217
-msgid "object"
-msgstr "Objekt"
-
-#: editor.cc:219
-msgid "zoom"
-msgstr ""
-
-#: editor.cc:220
-msgid "timefx"
-msgstr ""
-
-#: editor.cc:221
-msgid "listen"
-msgstr ""
-
-#: editor.cc:223
+#: gtk2_ardour/editor.cc:204
msgid "mode"
msgstr "Modus"
-#: editor.cc:224
+#: gtk2_ardour/editor.cc:205
msgid "automation"
msgstr ""
-#: editor.cc:226
-msgid "Edit Mode"
-msgstr "Bearbeitungs Modus"
-
-#: editor.cc:227 editor_actions.cc:284
-msgid "Snap To"
-msgstr ""
-
-#: editor.cc:228
-#, fuzzy
-msgid "Snap Mode"
-msgstr "Modus"
+#: gtk2_ardour/editor.cc:453
+#: gtk2_ardour/editor.cc:479
+#: gtk2_ardour/editor_actions.cc:63
+#: gtk2_ardour/mixer_ui.cc:84
+#: gtk2_ardour/mixer_ui.cc:110
+#: gtk2_ardour/analysis_window.cc:64
+msgid "Show"
+msgstr "Anzeigen"
-#: editor.cc:229
-#, fuzzy
-msgid "Zoom Focus"
-msgstr "Verkleinern"
-
-#. </CMT Additions>
-#. nudge
-#: editor.cc:237 editor.cc:1900 editor.cc:2066 editor.cc:2122
-msgid "Nudge"
-msgstr ""
-
-#: editor.cc:470
-msgid "Zoom in"
-msgstr "Vergrößern"
-
-#: editor.cc:471
-msgid "Zoom out"
-msgstr "Verkleinern"
-
-#: editor.cc:474
-#, fuzzy
-msgid "Zoom to session"
-msgstr "Vergrößern auf Auswahl"
-
-#: editor.cc:489
-#, fuzzy
-msgid "Zoom Span"
-msgstr "Vergrößern"
-
-#: editor.cc:502 editor.cc:528 editor_actions.cc:62 mixer_ui.cc:86
-#: mixer_ui.cc:112
-msgid "Visible"
-msgstr ""
-
-#: editor.cc:503 editor.cc:526
+#: gtk2_ardour/editor.cc:454
+#: gtk2_ardour/editor.cc:477
#, fuzzy
msgid "Name"
msgstr "Umbenennen"
-#: editor.cc:602 editor.cc:669
-#, fuzzy
+#: gtk2_ardour/editor.cc:553
+#: gtk2_ardour/editor.cc:619
msgid "Regions"
msgstr "Regionen"
-#: editor.cc:642 editor.cc:681
+#: gtk2_ardour/editor.cc:592
+#: gtk2_ardour/editor.cc:631
msgid "Chunks"
-msgstr "Stücke"
+msgstr "Teile"
-#: editor.cc:672
-#, fuzzy
+#: gtk2_ardour/editor.cc:622
msgid "Tracks/Busses"
-msgstr "MIDI Spur(en) hinzufügen"
+msgstr "Spuren/Busse"
-#: editor.cc:675
+#: gtk2_ardour/editor.cc:625
msgid "Snapshots"
msgstr "Schnapschüsse"
-#: editor.cc:678
+#: gtk2_ardour/editor.cc:628
msgid "Edit Groups"
-msgstr ""
+msgstr "Bearbeitungsgruppen"
-#: editor.cc:727
-msgid "Nudge region/selection forwards"
-msgstr ""
+#: gtk2_ardour/editor.cc:679
+msgid "Nudge Region/Selection Forwards"
+msgstr "Region/Auswahl schrittweise nach vorne"
-#: editor.cc:728
-msgid "Nudge region/selection backwards"
-msgstr ""
+#: gtk2_ardour/editor.cc:680
+msgid "Nudge Region/Selection Backwards"
+msgstr "Region/Auswahl schrittweise nach hinten"
-#: editor.cc:735 editor_mixer.cc:299
+#: gtk2_ardour/editor.cc:687
+#: gtk2_ardour/editor_mixer.cc:299
msgid "ardour: editor"
msgstr "Ardour: Editor"
-#: editor.cc:736
+#: gtk2_ardour/editor.cc:688
#, fuzzy
msgid "ardour_editor"
msgstr "Ardour: Editor"
-#: editor.cc:1183
+#: gtk2_ardour/editor.cc:1093
msgid "ardour: editor: "
msgstr "Ardour: Editor: "
-#. force name
-#: editor.cc:1268 editor.cc:1277 editor_markers.cc:870
+#: gtk2_ardour/editor.cc:1166
+#: gtk2_ardour/editor.cc:1175
+#: gtk2_ardour/editor_markers.cc:874
msgid "Loop"
msgstr "Schleife"
-#. force name
-#: editor.cc:1282 editor.cc:1291 editor_markers.cc:896
+#: gtk2_ardour/editor.cc:1180
+#: gtk2_ardour/editor.cc:1189
+#: gtk2_ardour/editor_markers.cc:902
msgid "Punch"
msgstr ""
-#: editor.cc:1439 editor_mouse.cc:1742
+#: gtk2_ardour/editor.cc:1314
+#: gtk2_ardour/editor_mouse.cc:1748
msgid "programming error: fade in canvas item has no regionview data pointer!"
msgstr ""
-#: editor.cc:1451 editor.cc:1468 redirect_box.cc:1073
-#, fuzzy
+#: gtk2_ardour/editor.cc:1326
+#: gtk2_ardour/editor.cc:1343
+#: gtk2_ardour/redirect_box.cc:1083
msgid "Deactivate"
-msgstr "Alles deaktivieren"
+msgstr "Deaktivieren"
-#. activation
-#: editor.cc:1453 editor.cc:1470 redirect_box.cc:1071
-#, fuzzy
+#: gtk2_ardour/editor.cc:1328
+#: gtk2_ardour/editor.cc:1345
+#: gtk2_ardour/redirect_box.cc:1081
msgid "Activate"
-msgstr "Aktiv"
+msgstr "Aktivieren"
-#: editor.cc:1458 editor.cc:1475
+#: gtk2_ardour/editor.cc:1333
+#: gtk2_ardour/editor.cc:1350
msgid "Linear"
msgstr ""
-#: editor.cc:1459 editor.cc:1476 editor_actions.cc:376
-#, fuzzy
-msgid "Slowest"
-msgstr "Alle zeigen"
-
-#: editor.cc:1460 editor.cc:1477 editor_actions.cc:377
-#, fuzzy
-msgid "Slow"
-msgstr "solo"
-
-#: editor.cc:1461 editor.cc:1478 editor_actions.cc:379
-#, fuzzy
-msgid "Fast"
-msgstr "Einfügen"
-
-#: editor.cc:1462 editor.cc:1479 editor_actions.cc:381
-#, fuzzy
-msgid "Fastest"
-msgstr "schnellstmöglich"
-
-#: editor.cc:1589 editor.cc:1597
+#: gtk2_ardour/editor.cc:1466
+#: gtk2_ardour/editor.cc:1474
msgid "Freeze"
-msgstr ""
+msgstr "Einfrieren"
-#: editor.cc:1593
+#: gtk2_ardour/editor.cc:1470
msgid "Unfreeze"
-msgstr ""
+msgstr "Auftauen"
-#: editor.cc:1762 editor.cc:1857
-#, fuzzy
+#: gtk2_ardour/editor.cc:1639
msgid "Unmute"
-msgstr "mute"
-
-#. non-operative menu items for menu bar
-#. show editors
-#: editor.cc:1766 editor.cc:2046 editor.cc:2748 editor_actions.cc:27
-#: editor_markers.cc:507 mixer_strip.cc:495 mixer_strip.cc:563
-#: redirect_box.cc:1079
+msgstr "Unmute"
+
+#: gtk2_ardour/editor.cc:1643
+#: gtk2_ardour/editor.cc:1939
+#: gtk2_ardour/editor_actions.cc:28
+#: gtk2_ardour/editor_markers.cc:510
+#: gtk2_ardour/mixer_strip.cc:515
+#: gtk2_ardour/mixer_strip.cc:577
+#: gtk2_ardour/redirect_box.cc:1089
msgid "Edit"
msgstr "Bearbeiten"
-#: editor.cc:1771
+#: gtk2_ardour/editor.cc:1648
msgid "Convert to short"
msgstr ""
-#: editor.cc:1773
+#: gtk2_ardour/editor.cc:1650
msgid "Convert to full"
msgstr ""
-#: editor.cc:1784
-#, fuzzy
+#: gtk2_ardour/editor.cc:1661
msgid "Crossfade"
-msgstr "Ardour: Editor"
+msgstr "Crossfade"
-#: editor.cc:1827
+#: gtk2_ardour/editor.cc:1704
msgid "Popup region editor"
-msgstr "Regionen Editor öffnen"
+msgstr "Regioneneditor öffnen"
-#: editor.cc:1828
-#, fuzzy
+#: gtk2_ardour/editor.cc:1705
msgid "Raise to top layer"
msgstr "Region ganz nach oben"
-#: editor.cc:1829
-#, fuzzy
+#: gtk2_ardour/editor.cc:1706
msgid "Lower to bottom layer"
msgstr "Region ganz nach unten"
-#: editor.cc:1831
+#: gtk2_ardour/editor.cc:1708
msgid "Define sync point"
msgstr "Synchronisationspunkt definieren"
-#: editor.cc:1832
+#: gtk2_ardour/editor.cc:1709
msgid "Remove sync point"
msgstr "Synchronisationspunkt entfernen"
-#: editor.cc:1837
-#, fuzzy
+#: gtk2_ardour/editor.cc:1714
msgid "Bounce"
-msgstr "Bereich"
+msgstr "Bounce"
-#: editor.cc:1840
-#, fuzzy
+#: gtk2_ardour/editor.cc:1717
msgid "Analyze region"
-msgstr "Wiedergabe der Region"
+msgstr "Analysiere Region"
-#: editor.cc:1852
-#, fuzzy
+#: gtk2_ardour/editor.cc:1722
msgid "Lock"
-msgstr "OK"
+msgstr "Sperren"
-#: editor.cc:1853
-#, fuzzy
-msgid "Unlock"
-msgstr "Rückgängig"
+#: gtk2_ardour/editor.cc:1732
+msgid "Opaque"
+msgstr "Deckend"
-#: editor.cc:1863
-#, fuzzy
+#: gtk2_ardour/editor.cc:1738
msgid "Original position"
-msgstr "Regionen"
+msgstr "Ursprungsposition"
-#: editor.cc:1869
-msgid "Toggle envelope visibility"
-msgstr ""
+#: gtk2_ardour/editor.cc:1750
+msgid "Reset Envelope"
+msgstr "Lautstärkekurve zurücksetzen"
-#: editor.cc:1870
-msgid "Toggle envelope active"
-msgstr ""
+#: gtk2_ardour/editor.cc:1752
+msgid "Envelope Visible"
+msgstr "Lautstärkekurve sichtbar"
-#: editor.cc:1874
-#, fuzzy
+#: gtk2_ardour/editor.cc:1759
+msgid "Envelope Active"
+msgstr "Lautstärkekurve aktiv"
+
+#: gtk2_ardour/editor.cc:1769
msgid "DeNormalize"
-msgstr "Ardour: Region"
+msgstr "Ardour: Region "
-#: editor.cc:1876
-#, fuzzy
+#: gtk2_ardour/editor.cc:1771
msgid "Normalize"
-msgstr "Ardour: Region"
+msgstr "Normalisieren"
-#: editor.cc:1879
-#, fuzzy
+#: gtk2_ardour/editor.cc:1774
msgid "Reverse"
-msgstr "Entfernen"
+msgstr "Rückwärts"
-#. range related stuff
-#: editor.cc:1885
-#, fuzzy
+#: gtk2_ardour/editor.cc:1780
msgid "Add Range Markers"
-msgstr "Ardour: Region umbenennen"
+msgstr "Bereichsmarker einfügen"
-#: editor.cc:1886
-#, fuzzy
-msgid "Set Range"
-msgstr "Ausgewählten Bereich wiedergeben"
+#: gtk2_ardour/editor.cc:1781
+msgid "Set Range Selection"
+msgstr "Bereich auswählen"
-#: editor.cc:1895
+#: gtk2_ardour/editor.cc:1790
msgid "Nudge fwd"
-msgstr ""
+msgstr "Schritt nach vorne"
-#: editor.cc:1896
+#: gtk2_ardour/editor.cc:1791
msgid "Nudge bwd"
-msgstr ""
+msgstr "Schritt nach hinten"
-#: editor.cc:1897
+#: gtk2_ardour/editor.cc:1792
msgid "Nudge fwd by capture offset"
-msgstr ""
+msgstr "Schritt nach vorne um Aufnahme-Offset"
-#: editor.cc:1898
+#: gtk2_ardour/editor.cc:1793
msgid "Nudge bwd by capture offset"
-msgstr ""
+msgstr "Schritt nach hinten um Aufnahme-Offset"
-#: editor.cc:1907
+#: gtk2_ardour/editor.cc:1795
+#: gtk2_ardour/editor.cc:1959
+#: gtk2_ardour/editor.cc:2015
+msgid "Nudge"
+msgstr "Verschieben"
+
+#: gtk2_ardour/editor.cc:1802
msgid "Start to edit cursor"
-msgstr ""
+msgstr "Von Anfang bis Editierzeiger"
-#: editor.cc:1908
+#: gtk2_ardour/editor.cc:1803
msgid "Edit cursor to end"
-msgstr ""
+msgstr "Von Editierzeiger bis Ende"
-#: editor.cc:1910 gain_meter.cc:181 gain_meter.cc:813 panner_ui.cc:98
-#: panner_ui.cc:803
+#: gtk2_ardour/editor.cc:1805
+#: gtk2_ardour/gain_meter.cc:168
+#: gtk2_ardour/gain_meter.cc:848
+#: gtk2_ardour/panner_ui.cc:96
+#: gtk2_ardour/panner_ui.cc:793
msgid "Trim"
-msgstr ""
+msgstr "Abschneiden"
-#: editor.cc:1913
+#: gtk2_ardour/editor.cc:1808
msgid "Split"
msgstr "Teilen"
-#: editor.cc:1916
-#, fuzzy
+#: gtk2_ardour/editor.cc:1811
msgid "Make mono regions"
-msgstr "Name für Region:"
+msgstr "Zu Mono-Regionen umwandeln"
-#: editor.cc:1919
+#: gtk2_ardour/editor.cc:1814
msgid "Duplicate"
msgstr "Duplizieren"
-#: editor.cc:1920
-#, fuzzy
+#: gtk2_ardour/editor.cc:1815
msgid "Fill Track"
-msgstr "Spur"
+msgstr "Spur auffüllen"
-#: editor.cc:1924
-msgid "Destroy"
-msgstr ""
-
-#: editor.cc:1954
+#: gtk2_ardour/editor.cc:1847
#, fuzzy
msgid "Play range"
msgstr "Bereich"
-#: editor.cc:1955
+#: gtk2_ardour/editor.cc:1848
#, fuzzy
msgid "Loop range"
msgstr "Bereich"
-#: editor.cc:1959
-#, fuzzy
+#: gtk2_ardour/editor.cc:1852
msgid "Analyze range"
-msgstr "Bereich"
+msgstr "Bereich analysieren"
-#: editor.cc:1963
+#: gtk2_ardour/editor.cc:1856
#, fuzzy
msgid "Separate range to track"
msgstr "Ausgewählten Bereich wiedergeben"
-#: editor.cc:1964
+#: gtk2_ardour/editor.cc:1857
#, fuzzy
msgid "Separate range to region list"
msgstr "Auswahl zu Schleife machen"
-#: editor.cc:1967
+#: gtk2_ardour/editor.cc:1860
#, fuzzy
msgid "Select all in range"
msgstr "Auswahl"
-#: editor.cc:1969 editor.cc:2014
-#, fuzzy
+#: gtk2_ardour/editor.cc:1862
+#: gtk2_ardour/editor.cc:1907
msgid "Set range to loop range"
-msgstr "Ausgewählten Bereich wiedergeben"
+msgstr "Ausgewählten Bereich als Schleife"
-#: editor.cc:1970 editor.cc:2015
-#, fuzzy
+#: gtk2_ardour/editor.cc:1863
+#: gtk2_ardour/editor.cc:1908
msgid "Set range to punch range"
-msgstr "Ausgewählten Bereich wiedergeben"
+msgstr "Ausgewählten Bereich als Punch-Bereich"
-#: editor.cc:1972
-#, fuzzy
+#: gtk2_ardour/editor.cc:1865
msgid "Crop region to range"
-msgstr "Regionen Editor öffnen"
+msgstr "Regionen-Editor öffnen"
-#: editor.cc:1973
+#: gtk2_ardour/editor.cc:1866
#, fuzzy
msgid "Fill range with region"
msgstr "Region erstellen"
-#: editor.cc:1974
+#: gtk2_ardour/editor.cc:1867
#, fuzzy
msgid "Duplicate range"
msgstr "Duplizieren"
-#: editor.cc:1975
+#: gtk2_ardour/editor.cc:1868
#, fuzzy
msgid "Create chunk from range"
msgstr "Auswahl zu Abschnitt machen"
-#: editor.cc:1977
+#: gtk2_ardour/editor.cc:1870
#, fuzzy
msgid "Bounce range"
msgstr "Bereich"
-#: editor.cc:1978
+#: gtk2_ardour/editor.cc:1871
#, fuzzy
msgid "Export range"
msgstr "Name für Region:"
-#: editor.cc:1980
+#: gtk2_ardour/editor.cc:1873
#, fuzzy
msgid "Range"
msgstr "Bereich"
-#: editor.cc:1995 editor.cc:2080
-#, fuzzy
+#: gtk2_ardour/editor.cc:1888
+#: gtk2_ardour/editor.cc:1973
msgid "Play from edit cursor"
-msgstr "Wiedergabe ab Cursor"
+msgstr "Wiedergabe ab Editierzeiger"
-#: editor.cc:1996 editor.cc:2081
+#: gtk2_ardour/editor.cc:1889
+#: gtk2_ardour/editor.cc:1974
msgid "Play from start"
msgstr "Wiedergabe ab Anfang"
-#: editor.cc:1997
-#, fuzzy
+#: gtk2_ardour/editor.cc:1890
msgid "Play region"
-msgstr "Wiedergabe der Region"
+msgstr "Region wiedergeben"
-#: editor.cc:1999
-#, fuzzy
+#: gtk2_ardour/editor.cc:1892
msgid "Loop Region"
-msgstr "Auswahl zu Schleife machen"
+msgstr "Region in Schleife wiedergeben"
-#: editor.cc:2009 editor.cc:2090
-#, fuzzy
+#: gtk2_ardour/editor.cc:1902
+#: gtk2_ardour/editor.cc:1983
msgid "Select All in track"
-msgstr "Auswahl"
+msgstr "Alles in Spur auswählen"
-#: editor.cc:2010 editor.cc:2091 redirect_box.cc:1067
-#, fuzzy
+#: gtk2_ardour/editor.cc:1903
+#: gtk2_ardour/editor.cc:1984
+#: gtk2_ardour/redirect_box.cc:1077
msgid "Select All"
-msgstr "Auswahl"
+msgstr "Alles Auswählen"
-#: editor.cc:2011 editor.cc:2092
-#, fuzzy
+#: gtk2_ardour/editor.cc:1904
+#: gtk2_ardour/editor.cc:1985
msgid "Invert selection in track"
-msgstr "Stille einfügen"
+msgstr "Auswahl in Spur umkehren"
-#: editor.cc:2012 editor.cc:2093
-#, fuzzy
+#: gtk2_ardour/editor.cc:1905
+#: gtk2_ardour/editor.cc:1986
msgid "Invert selection"
-msgstr "Auswahl zu Schleife machen"
+msgstr "Auswahl umkehren"
-#: editor.cc:2017 editor.cc:2095
-#, fuzzy
+#: gtk2_ardour/editor.cc:1910
+#: gtk2_ardour/editor.cc:1988
msgid "Select all after edit cursor"
-msgstr "Wiedergabe ab Cursor"
+msgstr "Alles nach Editierzeiger auswählen"
-#: editor.cc:2018 editor.cc:2096
-#, fuzzy
+#: gtk2_ardour/editor.cc:1911
+#: gtk2_ardour/editor.cc:1989
msgid "Select all before edit cursor"
-msgstr "Wiedergabe ab Cursor"
+msgstr "Alles vor Editierzeiger auswählen"
-#: editor.cc:2019 editor.cc:2097
-#, fuzzy
+#: gtk2_ardour/editor.cc:1912
+#: gtk2_ardour/editor.cc:1990
msgid "Select all after playhead"
-msgstr "Wiedergabe ab Playhead"
+msgstr "Alles nach Positionszeiger auswählen"
-#: editor.cc:2020 editor.cc:2098
-#, fuzzy
+#: gtk2_ardour/editor.cc:1913
+#: gtk2_ardour/editor.cc:1991
msgid "Select all before playhead"
-msgstr "Wiedergabe ab Playhead"
+msgstr "Alles vor Positionszeiger auswählen"
-#: editor.cc:2021
-#, fuzzy
+#: gtk2_ardour/editor.cc:1914
msgid "Select all between cursors"
-msgstr "Wiedergabe ab Cursor"
+msgstr "Alles zwischen Zeigern auswählen"
+
+#: gtk2_ardour/editor.cc:1917
+#: gtk2_ardour/editor.cc:1993
+msgid "Select"
+msgstr "Auswahl"
-#. standard editing stuff
-#: editor.cc:2032 editor.cc:2108 editor.cc:3483 editor_actions.cc:214
-#: redirect_box.cc:1060
+#: gtk2_ardour/editor.cc:1925
+#: gtk2_ardour/editor.cc:2001
+#: gtk2_ardour/editor_actions.cc:215
+#: gtk2_ardour/redirect_box.cc:1070
msgid "Cut"
msgstr "Ausschneiden"
-#: editor.cc:2033 editor.cc:2109 editor.cc:3485 editor_actions.cc:219
-#: redirect_box.cc:1062
+#: gtk2_ardour/editor.cc:1926
+#: gtk2_ardour/editor.cc:2002
+#: gtk2_ardour/editor_actions.cc:220
+#: gtk2_ardour/redirect_box.cc:1072
msgid "Copy"
msgstr "Kopieren"
-#: editor.cc:2034
-#, fuzzy
+#: gtk2_ardour/editor.cc:1927
msgid "Paste at edit cursor"
-msgstr "Wiedergabe ab Cursor"
+msgstr "Am Editierzeiger einfügen"
-#: editor.cc:2035
+#: gtk2_ardour/editor.cc:1928
msgid "Paste at mouse"
-msgstr ""
+msgstr "An Mausposition einfügen"
-#: editor.cc:2039 editor.cc:3490
+#: gtk2_ardour/editor.cc:1932
msgid "Align"
-msgstr ""
+msgstr "Ausrichten"
-#: editor.cc:2040 editor.cc:3492
+#: gtk2_ardour/editor.cc:1933
msgid "Align Relative"
-msgstr ""
+msgstr "Relativ ausrichten"
-#: editor.cc:2044
+#: gtk2_ardour/editor.cc:1937
msgid "Insert chunk"
msgstr "Abschnitt einfügen"
-#: editor.cc:2051
-#, fuzzy
+#: gtk2_ardour/editor.cc:1944
msgid "Insert Selected Region"
-msgstr "Auswahl zu Schleife machen"
+msgstr "Ausgewählte Region einfügen"
-#: editor.cc:2052
+#: gtk2_ardour/editor.cc:1945
msgid "Insert Existing Audio"
-msgstr ""
+msgstr "Audio importieren..."
-#: editor.cc:2061 editor.cc:2117
+#: gtk2_ardour/editor.cc:1954
+#: gtk2_ardour/editor.cc:2010
msgid "Nudge entire track fwd"
-msgstr ""
+msgstr "Gesamte Spur schrittweise nach vorne"
-#: editor.cc:2062 editor.cc:2118
+#: gtk2_ardour/editor.cc:1955
+#: gtk2_ardour/editor.cc:2011
msgid "Nudge track after edit cursor fwd"
-msgstr ""
+msgstr "Spur nach Editierzeiger schrittweise nach vorne"
-#: editor.cc:2063 editor.cc:2119
+#: gtk2_ardour/editor.cc:1956
+#: gtk2_ardour/editor.cc:2012
msgid "Nudge entire track bwd"
-msgstr ""
+msgstr "Gesamte Spur schrittweise nach hinten"
-#: editor.cc:2064 editor.cc:2120
+#: gtk2_ardour/editor.cc:1957
+#: gtk2_ardour/editor.cc:2013
msgid "Nudge track after edit cursor bwd"
-msgstr ""
+msgstr "Spur nach Editierzeiger schrittweise nach hinten"
-#: editor.cc:2110 editor.cc:3487 editor_actions.cc:221 redirect_box.cc:1064
+#: gtk2_ardour/editor.cc:2003
+#: gtk2_ardour/editor_actions.cc:222
+#: gtk2_ardour/redirect_box.cc:1074
msgid "Paste"
msgstr "Einfügen"
-#: editor.cc:2630
-msgid "select/move objects"
-msgstr ""
+#: gtk2_ardour/editor.cc:2566
+msgid "Select/Move Objects"
+msgstr "Objekte auswählen/verschieben"
-#: editor.cc:2631
-#, fuzzy
-msgid "select/move ranges"
-msgstr "Ausgewählten Bereich wiedergeben"
+#: gtk2_ardour/editor.cc:2567
+msgid "Select/Move Ranges"
+msgstr "Bereiche auswählen/verschieben"
-#: editor.cc:2632
-msgid "draw gain automation"
-msgstr ""
+#: gtk2_ardour/editor.cc:2568
+msgid "Draw Gain Automation"
+msgstr "Lautstärkeautomation zeichnen"
-#: editor.cc:2633
-#, fuzzy
-msgid "select zoom range"
-msgstr "Ausgewählten Bereich wiedergeben"
+#: gtk2_ardour/editor.cc:2569
+msgid "Select Zoom Range"
+msgstr "Zoombereich auswählen"
-#: editor.cc:2634
-msgid "stretch/shrink regions"
-msgstr ""
+#: gtk2_ardour/editor.cc:2570
+msgid "Stretch/Shrink Regions"
+msgstr "Regionen vergrößern/verkleinern (Time-Stretch)"
-#: editor.cc:2635
-#, fuzzy
-msgid "listen to specific regions"
-msgstr "Auswahl zu Schleife machen"
+#: gtk2_ardour/editor.cc:2571
+msgid "Listen to Specific Regions"
+msgstr "Ausgewählte Regionen vorhören"
+
+#: gtk2_ardour/editor.cc:2600
+#: gtk2_ardour/editor_actions.cc:143
+msgid "Zoom In"
+msgstr "Vergrößern"
+
+#: gtk2_ardour/editor.cc:2605
+#: gtk2_ardour/editor_actions.cc:141
+msgid "Zoom Out"
+msgstr "Verkleinern"
+
+#: gtk2_ardour/editor.cc:2610
+#: gtk2_ardour/editor_actions.cc:145
+msgid "Zoom to Session"
+msgstr "Auf ganze Sitzung zoomen"
-#: editor.cc:2746
-msgid "Start:"
-msgstr "Anfang:"
+#: gtk2_ardour/editor.cc:2617
+msgid ""
+"Current Zoom Range\n"
+"(Width of visible area)"
+msgstr ""
+
+#: gtk2_ardour/editor.cc:2623
+msgid "Zoom focus"
+msgstr "Zoom-Mittelpunkt"
-#: editor.cc:2747
-msgid "End:"
-msgstr "Ende:"
+#: gtk2_ardour/editor.cc:2637
+msgid "Unit to snap cursors and ranges to"
+msgstr ""
-#: editor.cc:3362 editor.cc:3402
+#: gtk2_ardour/editor.cc:3217
+#: gtk2_ardour/editor.cc:3266
#, fuzzy
msgid "set selected regions"
msgstr "Auswahl zu Schleife machen"
-#: editor.cc:3458 editor_actions.cc:204
+#: gtk2_ardour/editor.cc:3306
+#: gtk2_ardour/editor_actions.cc:205
msgid "Undo"
msgstr "Rückgängig"
-#: editor.cc:3460
+#: gtk2_ardour/editor.cc:3308
msgid "Undo (%1)"
msgstr "Rückgängig (%1)"
-#: editor.cc:3470 editor_actions.cc:206
+#: gtk2_ardour/editor.cc:3315
+#: gtk2_ardour/editor_actions.cc:207
msgid "Redo"
msgstr "Wiederherstellen"
-#: editor.cc:3472
+#: gtk2_ardour/editor.cc:3317
msgid "Redo (%1)"
msgstr "Wiederherstellen (%1)"
-#: editor.cc:3506
-msgid "... as new track"
-msgstr ""
-
-#: editor.cc:3507
-#, fuzzy
-msgid "... as new region"
-msgstr "Ardour: Region"
-
-#: editor.cc:3509
-#, fuzzy
-msgid "Import audio (copy)"
-msgstr "Audio Importieren"
+#: gtk2_ardour/editor.cc:3338
+msgid "Duplicate how many times?"
+msgstr "Wie häufig duplizieren?"
-#: editor.cc:3512
+#: gtk2_ardour/editor.cc:3416
#, fuzzy
-msgid "Remove last capture"
-msgstr "Synchronisationspunkt entfernen"
+msgid "Splice Edit"
+msgstr "Teilen"
-#: editor.cc:3536
-msgid "Duplicate how many times?"
-msgstr "Wie häufig duplizieren?"
+#: gtk2_ardour/editor.cc:3418
+msgid "Slide Edit"
+msgstr ""
-#: editor.cc:4022
+#: gtk2_ardour/editor.cc:3828
msgid ""
"Playlist %1 is currently unused.\n"
"If left alone, no audio files used by it will be cleaned.\n"
"If deleted, audio files used by it alone by will cleaned."
msgstr ""
-#: editor.cc:4030
-#, fuzzy
+#: gtk2_ardour/editor.cc:3836
msgid "Delete playlist"
-msgstr "Name für Schnappschuß"
+msgstr "Wiedergabeliste löschen"
-#: editor.cc:4031
-#, fuzzy
+#: gtk2_ardour/editor.cc:3837
msgid "Keep playlist"
-msgstr "Name für Schnappschuß"
-
-#: editor.cc:4032 editor_audio_import.cc:236 editor_ops.cc:2048
-#: editor_timefx.cc:71 export_dialog.cc:971 io_selector.cc:59
-#: io_selector.cc:793 redirect_box.cc:903 tempo_dialog.cc:20
-#: tempo_dialog.cc:37 tempo_dialog.cc:202 tempo_dialog.cc:220
+msgstr "Wiedergabeliste beibehalten"
+
+#: gtk2_ardour/editor.cc:3838
+#: gtk2_ardour/editor_audio_import.cc:239
+#: gtk2_ardour/editor_ops.cc:1973
+#: gtk2_ardour/editor_timefx.cc:72
+#: gtk2_ardour/export_dialog.cc:969
+#: gtk2_ardour/io_selector.cc:61
+#: gtk2_ardour/io_selector.cc:750
+#: gtk2_ardour/redirect_box.cc:901
+#: gtk2_ardour/tempo_dialog.cc:20
+#: gtk2_ardour/tempo_dialog.cc:37
+#: gtk2_ardour/tempo_dialog.cc:202
+#: gtk2_ardour/tempo_dialog.cc:220
+#: gtk2_ardour/connection_editor.cc:60
msgid "Cancel"
msgstr "Abbrechen"
-#: editor.cc:4199
-#, fuzzy
+#: gtk2_ardour/editor.cc:4041
msgid "new playlists"
-msgstr "Name für Schnappschuß"
+msgstr "Neue Wiedergabelisten"
-#: editor.cc:4207
-#, fuzzy
+#: gtk2_ardour/editor.cc:4049
msgid "copy playlists"
-msgstr "Name für Schnappschuß"
+msgstr "Wiedergabelisten kopieren"
-#: editor.cc:4215
-#, fuzzy
+#: gtk2_ardour/editor.cc:4057
msgid "clear playlists"
-msgstr "Name für Schnappschuß"
+msgstr ""
-#: editor_actions.cc:28
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:29
msgid "Select regions"
-msgstr "Auswahl zu Schleife machen"
+msgstr "Region(en) auswählen"
-#: editor_actions.cc:29
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:30
msgid "Select range operations"
-msgstr "Auswahl zu Schleife machen"
+msgstr "Bereich"
-#: editor_actions.cc:30
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:31
msgid "Move edit cursor"
-msgstr "Wiedergabe ab Cursor"
+msgstr "Editierzeiger bewegen"
-#: editor_actions.cc:31
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:32
msgid "Region operations"
-msgstr "Regionen"
+msgstr "Region(en)"
-#: editor_actions.cc:32
+#: gtk2_ardour/editor_actions.cc:33
msgid "Tools"
msgstr ""
-#: editor_actions.cc:33
+#: gtk2_ardour/editor_actions.cc:34
msgid "View"
-msgstr ""
+msgstr "Ansicht"
-#: editor_actions.cc:34
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:35
msgid "ZoomFocus"
-msgstr "Verkleinern"
+msgstr "Zoom-Mittelpunkt"
-#: editor_actions.cc:35
+#: gtk2_ardour/editor_actions.cc:36
msgid "Meter hold"
-msgstr ""
+msgstr "Pegelanzeige halten"
-#: editor_actions.cc:36
+#: gtk2_ardour/editor_actions.cc:37
msgid "Meter falloff"
-msgstr ""
+msgstr "Abfall der Pegelanzeigen"
-#: editor_actions.cc:38
+#: gtk2_ardour/editor_actions.cc:39
#, fuzzy
msgid "Crossfades"
msgstr "Ardour: Editor"
-#: editor_actions.cc:39
+#: gtk2_ardour/editor_actions.cc:40
msgid "Monitoring"
-msgstr ""
+msgstr "Monitoring"
-#: editor_actions.cc:40
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:41
msgid "Autoconnect"
-msgstr "Verbindungen"
+msgstr "Automatisch verbinden"
-#: editor_actions.cc:41
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:42
msgid "Layering"
-msgstr "Schicht"
+msgstr "Layering"
-#: editor_actions.cc:42
-#, fuzzy
-msgid "Metering"
-msgstr "Schicht"
+#: gtk2_ardour/editor_actions.cc:43
+msgid "Timecode fps"
+msgstr ""
-#: editor_actions.cc:43
-msgid "Fall off rate"
+#: gtk2_ardour/editor_actions.cc:44
+msgid "Pullup / Pulldown"
msgstr ""
-#: editor_actions.cc:44
-msgid "Hold Time"
+#: gtk2_ardour/editor_actions.cc:45
+msgid "Subframes"
msgstr ""
-#: editor_actions.cc:45
+#: gtk2_ardour/editor_actions.cc:46
msgid "Add Existing Audio"
-msgstr ""
+msgstr "Audio importieren"
-#. add named actions for the editor
-#: editor_actions.cc:50
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:51
msgid "Show Editor Mixer"
-msgstr "Ardour: Mixer"
+msgstr "Mixer-Panel zeigen"
-#: editor_actions.cc:55
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:56
msgid "Span Entire Overlap"
-msgstr "Region eine Ebene nach oben"
-
-#: editor_actions.cc:57 editor_actions.cc:384
-#, fuzzy
-msgid "Short"
-msgstr "Anschluß"
+msgstr "Gesamte Ãœberlappung"
-#: editor_actions.cc:64
+#: gtk2_ardour/editor_actions.cc:65
msgid "Created Automatically"
-msgstr ""
+msgstr "Automatisch erzeugen"
-#: editor_actions.cc:67
+#: gtk2_ardour/editor_actions.cc:68
msgid "Playhead to Next Region Start"
-msgstr ""
+msgstr "Positionszeiger zum Anfang der nächsten Region"
-#: editor_actions.cc:69
+#: gtk2_ardour/editor_actions.cc:70
msgid "Playhead to Next Region End"
-msgstr ""
+msgstr "Positionszeiger zum Ende der nächsten Region"
-#: editor_actions.cc:71
+#: gtk2_ardour/editor_actions.cc:72
msgid "Playhead to Next Region Sync"
-msgstr ""
+msgstr "Positionszeiger zum Sync der nächsten Region"
-#: editor_actions.cc:74
+#: gtk2_ardour/editor_actions.cc:75
msgid "Playhead to Previous Region Start"
-msgstr ""
+msgstr "Positionszeiger zum Anfang der vorherigen Region"
-#: editor_actions.cc:76
+#: gtk2_ardour/editor_actions.cc:77
msgid "Playhead to Previous Region End"
-msgstr ""
+msgstr "Positionszeiger zum Ende der vorherigen Region"
-#: editor_actions.cc:78
+#: gtk2_ardour/editor_actions.cc:79
msgid "Playhead to Previous Region Sync"
-msgstr ""
+msgstr "Positionszeiger zum Sync der vorherigen Region"
-#: editor_actions.cc:81
+#: gtk2_ardour/editor_actions.cc:82
msgid "Edit Cursor to Next Region Start"
-msgstr ""
+msgstr "Editierzeiger zum Anfang der nächsten Region"
-#: editor_actions.cc:83
+#: gtk2_ardour/editor_actions.cc:84
msgid "Edit Cursor to Next Region End"
-msgstr ""
+msgstr "Editierzeiger zum Ende der nächsten Region"
-#: editor_actions.cc:85
+#: gtk2_ardour/editor_actions.cc:86
msgid "Edit Cursor to Next Region Sync"
-msgstr ""
+msgstr "Editierzeiger zum Sync der nächsten Region"
-#: editor_actions.cc:88
+#: gtk2_ardour/editor_actions.cc:89
msgid "Edit Cursor to Previous Region Start"
-msgstr ""
+msgstr "Editierzeiger zum Anfang der vorherigen Region"
-#: editor_actions.cc:90
+#: gtk2_ardour/editor_actions.cc:91
msgid "Edit Cursor to Previous Region End"
-msgstr ""
+msgstr "Editierzeiger zum Ende der vorherigen Region"
-#: editor_actions.cc:92
+#: gtk2_ardour/editor_actions.cc:93
msgid "Edit Cursor to Previous Region Sync"
-msgstr ""
+msgstr "Editierzeiger zum Sync der vorherigen Region"
-#: editor_actions.cc:95
+#: gtk2_ardour/editor_actions.cc:96
msgid "Playhead to Range Start"
-msgstr ""
+msgstr "Positionszeiger zum Anfang der Auswahl"
-#: editor_actions.cc:97
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:98
msgid "Playhead to Range End"
-msgstr "Bereich"
+msgstr "Positionszeiger zum Ende der Auswahl"
-#: editor_actions.cc:100
+#: gtk2_ardour/editor_actions.cc:101
msgid "Edit Cursor to Range Start"
-msgstr ""
+msgstr "Editierzeiger zum Anfang der Auswahl"
-#: editor_actions.cc:102
+#: gtk2_ardour/editor_actions.cc:103
msgid "Edit Cursor to Range End"
-msgstr ""
+msgstr "Editierzeiger zum Ende der Auswahl"
-#: editor_actions.cc:105 editor_ops.cc:1363
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:106
+#: gtk2_ardour/editor_ops.cc:1292
msgid "select all"
-msgstr "Auswahl"
+msgstr "Alle Regionen auswählen"
-#: editor_actions.cc:107
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:108
msgid "Select All After Edit Cursor"
-msgstr "Wiedergabe ab Cursor"
+msgstr "Alle Regionen nach dem Editierzeiger auswählen"
-#: editor_actions.cc:109
+#: gtk2_ardour/editor_actions.cc:110
msgid "Select All Before Edit Cursor"
-msgstr ""
+msgstr "Alle Regionen vor dem Editierzeiger auswählen"
-#: editor_actions.cc:112
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:113
msgid "Select All After Playhead"
-msgstr "Wiedergabe ab Playhead"
+msgstr "Alle Regionen nach dem Positionszeiger auswählen"
-#: editor_actions.cc:114
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:115
msgid "Select All Before Playhead"
-msgstr "Wiedergabe ab Playhead"
+msgstr "Alle Regionen vor dem Positionszeiger auswählen"
-#: editor_actions.cc:116
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:117
msgid "Select All Between Cursors"
-msgstr "Wiedergabe ab Cursor"
+msgstr "Alle Regionen zwischen den Zeigern auswählen"
-#: editor_actions.cc:119
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:120
msgid "Select All in Punch Range"
-msgstr "Ausgewählten Bereich wiedergeben"
+msgstr "Alle Regionen im Punch-Bereich auswählen"
-#: editor_actions.cc:121
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:122
msgid "Select All in Loop Range"
-msgstr "Ausgewählten Bereich wiedergeben"
+msgstr "Alle Regionen innerhalb der Schleife auswählen"
-#: editor_actions.cc:124
+#: gtk2_ardour/editor_actions.cc:125
msgid "Jump Forward to Mark"
-msgstr ""
+msgstr "Zum nächsten Marker springen"
-#: editor_actions.cc:126
+#: gtk2_ardour/editor_actions.cc:127
msgid "Jump Backward to Mark"
-msgstr ""
+msgstr "Zum vorherigen Marker springen"
-#: editor_actions.cc:128
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:129
msgid "Add Location from Playhead"
-msgstr "Wiedergabe ab Playhead"
+msgstr "Marker am Positionszeiger setzen"
-#: editor_actions.cc:131
+#: gtk2_ardour/editor_actions.cc:132
msgid "Nudge Forward"
-msgstr ""
+msgstr "Schritt nach vorne"
-#: editor_actions.cc:133
+#: gtk2_ardour/editor_actions.cc:134
msgid "Nudge Next Forward"
msgstr ""
-#: editor_actions.cc:135
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:136
msgid "Nudge Backward"
-msgstr "Stille einfügen"
+msgstr "Schritt nach Hinten"
-#: editor_actions.cc:137
+#: gtk2_ardour/editor_actions.cc:138
#, fuzzy
msgid "Nudge Next Backward"
msgstr "Stille einfügen"
-#: editor_actions.cc:140
-#, fuzzy
-msgid "Zoom Out"
-msgstr "Verkleinern"
-
-#: editor_actions.cc:142
-#, fuzzy
-msgid "Zoom In"
-msgstr "Vergrößern"
-
-#: editor_actions.cc:144
-#, fuzzy
-msgid "Zoom to Session"
-msgstr "Vergrößern auf Auswahl"
-
-#: editor_actions.cc:147
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:148
msgid "Scroll Tracks Up"
-msgstr "Spur"
+msgstr "Spuren nach oben scrollen"
-#: editor_actions.cc:149
+#: gtk2_ardour/editor_actions.cc:150
msgid "Scroll Tracks Down"
-msgstr ""
+msgstr "Spuren nach unten scrollen"
-#: editor_actions.cc:151
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:152
msgid "Step Tracks Up"
-msgstr "Stille einfügen"
+msgstr "Spuren langsam nach oben scrollen"
-#: editor_actions.cc:153
+#: gtk2_ardour/editor_actions.cc:154
msgid "Step Tracks Down"
-msgstr ""
+msgstr "Spuren langsam nach unten scrollen"
-#: editor_actions.cc:156
+#: gtk2_ardour/editor_actions.cc:157
msgid "Scroll Backward"
-msgstr ""
+msgstr "Vorwärts scrollen"
-#: editor_actions.cc:158
+#: gtk2_ardour/editor_actions.cc:159
msgid "Scroll Forward"
-msgstr ""
+msgstr "Rückwärts scrollen"
-#: editor_actions.cc:160
+#: gtk2_ardour/editor_actions.cc:161
msgid "goto"
msgstr ""
-#: editor_actions.cc:162
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:163
msgid "Center Playhead"
-msgstr "Wiedergabe ab Playhead"
+msgstr "Ansicht am Positionszeiger zentrieren"
-#: editor_actions.cc:164
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:165
msgid "Center Edit Cursor"
-msgstr "Wiedergabe ab Cursor"
+msgstr "Editierzeiger zentrieren"
-#: editor_actions.cc:166
+#: gtk2_ardour/editor_actions.cc:167
msgid "Playhead Forward"
-msgstr ""
+msgstr "Positionszeiger vorwärts"
-#: editor_actions.cc:168
+#: gtk2_ardour/editor_actions.cc:169
msgid "Playhead Backward"
-msgstr ""
+msgstr "Positionszeiger rückwärts"
-#: editor_actions.cc:170
+#: gtk2_ardour/editor_actions.cc:171
msgid "Playhead to Edit"
-msgstr ""
+msgstr "Positionszeiger zum Editierzeiger setzen"
-#: editor_actions.cc:172
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:173
msgid "Edit to Playhead"
-msgstr "Wiedergabe ab Playhead"
+msgstr "Editierzeiger zum Positionszeiger setzen"
-#: editor_actions.cc:175
+#: gtk2_ardour/editor_actions.cc:176
#, fuzzy
msgid "Align Regions Start"
msgstr "Regionen"
-#: editor_actions.cc:177
+#: gtk2_ardour/editor_actions.cc:178
#, fuzzy
msgid "Align Regions Start Relative"
msgstr "nach Anfang der Region in der Datei"
-#: editor_actions.cc:179
+#: gtk2_ardour/editor_actions.cc:180
#, fuzzy
msgid "Align Regions End"
msgstr "Ardour: Region"
-#: editor_actions.cc:181
+#: gtk2_ardour/editor_actions.cc:182
msgid "Align Regions End Relative"
msgstr ""
-#: editor_actions.cc:184
+#: gtk2_ardour/editor_actions.cc:185
#, fuzzy
msgid "Align Regions Sync"
msgstr "Ardour: Region"
-#: editor_actions.cc:186
+#: gtk2_ardour/editor_actions.cc:187
msgid "Align Regions Sync Relative"
msgstr ""
-#: editor_actions.cc:189
+#: gtk2_ardour/editor_actions.cc:190
msgid "Audition at Mouse"
-msgstr ""
+msgstr "An Mauszeigerposition vorhören"
-#: editor_actions.cc:191
+#: gtk2_ardour/editor_actions.cc:192
msgid "Brush at Mouse"
-msgstr ""
+msgstr "Pinsel an Mausposition (Brush)"
-#: editor_actions.cc:193
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:194
msgid "Set Edit Cursor"
-msgstr "Wiedergabe ab Cursor"
+msgstr "Editierzeiger setzen"
-#: editor_actions.cc:195
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:196
msgid "Mute/Unmute Region"
-msgstr "Region erstellen"
+msgstr "Region Mute/Unmute"
-#: editor_actions.cc:197
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:198
msgid "Set Playhead"
-msgstr "Wiedergabe ab Playhead"
+msgstr "Positionszeiger setzen"
-#: editor_actions.cc:199
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:200
msgid "Split Region"
-msgstr "Auswahl zu Schleife machen"
+msgstr "Region teilen (Split)"
-#: editor_actions.cc:201
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:202
msgid "Set Region Sync Position"
-msgstr "nach Zeitstempel der Region"
+msgstr "Sync-Position der Region setzen"
-#: editor_actions.cc:209
+#: gtk2_ardour/editor_actions.cc:210
#, fuzzy
msgid "Export Session"
msgstr "Name für Region:"
-#: editor_actions.cc:211
+#: gtk2_ardour/editor_actions.cc:212
#, fuzzy
msgid "Export Range"
msgstr "Ausgewählten Bereich wiedergeben"
-#. Note: for now, editor-delete does the exact same thing as editor-cut
-#: editor_actions.cc:217
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:218
+#: gtk2_ardour/connection_editor.cc:56
msgid "Delete"
-msgstr "entfernen"
+msgstr "Löschen"
-#: editor_actions.cc:223
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:224
msgid "Duplicate Region"
-msgstr "Auswahl zu Schleife machen"
+msgstr "Duplizieren"
-#: editor_actions.cc:225
+#: gtk2_ardour/editor_actions.cc:226
#, fuzzy
msgid "Duplicate Range"
msgstr "Duplizieren"
-#: editor_actions.cc:227
+#: gtk2_ardour/editor_actions.cc:228
msgid "Insert Region"
-msgstr ""
+msgstr "Einfügen"
-#: editor_actions.cc:229
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:230
msgid "Reverse Region"
-msgstr "Name für Region:"
+msgstr "Rückwärts"
-#: editor_actions.cc:231
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:232
msgid "Normalize Region"
-msgstr "Ardour: Region"
+msgstr "Normalisieren"
-#: editor_actions.cc:233
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:234
msgid "crop"
-msgstr "Kopieren"
+msgstr "Abschneiden"
-#: editor_actions.cc:235
+#: gtk2_ardour/editor_actions.cc:236
#, fuzzy
msgid "Insert Chunk"
msgstr "Abschnitt einfügen"
-#: editor_actions.cc:238
+#: gtk2_ardour/editor_actions.cc:239
#, fuzzy
msgid "Split at edit cursor"
msgstr "Wiedergabe ab Cursor"
-#: editor_actions.cc:241
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:242
msgid "Start Range"
-msgstr "Ausgewählten Bereich wiedergeben"
+msgstr "Bereich anfangen"
-#: editor_actions.cc:243
+#: gtk2_ardour/editor_actions.cc:244
msgid "Finish Range"
-msgstr ""
+msgstr "Bereich beenden"
-#: editor_actions.cc:245
+#: gtk2_ardour/editor_actions.cc:246
msgid "Finish add Range"
msgstr ""
-#: editor_actions.cc:248
+#: gtk2_ardour/editor_actions.cc:249
msgid "Extend Range to End of Region"
-msgstr ""
+msgstr "Bereich vergrößern bis zum Ende der Region "
-#: editor_actions.cc:250
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:251
msgid "Extend Range to Start of Region"
-msgstr "An den Anfang der Sitzung springen"
+msgstr "Bereich vergrößern bis zum Anfang der Region "
-#: editor_actions.cc:253
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:254
msgid "Follow Playhead"
-msgstr "Wiedergabe ab Playhead"
+msgstr "Positionszeiger folgen"
-#: editor_actions.cc:261
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:262
msgid "Zoom Focus Left"
-msgstr "Verkleinern"
+msgstr "Am linken Rand ausrichten"
-#: editor_actions.cc:263
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:264
msgid "Zoom Focus Right"
-msgstr "Verkleinern"
+msgstr "Am rechten Rand ausrichten"
-#: editor_actions.cc:265
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:266
msgid "Zoom Focus Center"
-msgstr "Verkleinern"
+msgstr "Zentriert ausrichten"
-#: editor_actions.cc:267
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:268
msgid "Zoom Focus Playhead"
-msgstr "Verkleinern"
+msgstr "Am Positionszeiger ausrichten"
-#: editor_actions.cc:269
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:270
msgid "Zoom Focus Edit"
-msgstr "Verkleinern"
+msgstr "Am Editierzeiger ausrichten"
-#: editor_actions.cc:275
+#: gtk2_ardour/editor_actions.cc:276
msgid "Object Tool"
-msgstr ""
+msgstr "Objektwerkzeug"
-#: editor_actions.cc:276
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:277
msgid "Range Tool"
-msgstr "Bereich"
+msgstr "Bereich-Werkzeug (Range)"
-#: editor_actions.cc:277
+#: gtk2_ardour/editor_actions.cc:278
msgid "Gain Tool"
-msgstr ""
+msgstr "Lautstärkewerkzeug (Gain)"
-#: editor_actions.cc:278
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:279
msgid "Zoom Tool"
-msgstr "Verkleinern"
+msgstr "Zoom-Werkzeug"
-#: editor_actions.cc:279
+#: gtk2_ardour/editor_actions.cc:280
msgid "Timefx Tool"
-msgstr ""
+msgstr "Zeit-Werkzeug (Time)"
-#: editor_actions.cc:286
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:282
+msgid "Snap To"
+msgstr "Raster"
+
+#: gtk2_ardour/editor_actions.cc:283
+msgid "Snap Mode"
+msgstr "Einrastmodus"
+
+#: gtk2_ardour/editor_actions.cc:292
msgid "Snap to frame"
-msgstr "Modus"
+msgstr "An Frames einrasten"
-#: editor_actions.cc:287
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:293
msgid "Snap to cd frame"
-msgstr "Modus"
+msgstr "An CD-Frames einrasten"
-#: editor_actions.cc:288
+#: gtk2_ardour/editor_actions.cc:294
msgid "Snap to SMPTE frame"
-msgstr ""
+msgstr "An SMPTE-Frames einrasten"
-#: editor_actions.cc:289
+#: gtk2_ardour/editor_actions.cc:295
msgid "Snap to SMPTE seconds"
-msgstr ""
+msgstr "An SMPTE-Sekunden einrasten"
-#: editor_actions.cc:290
+#: gtk2_ardour/editor_actions.cc:296
msgid "Snap to SMPTE minutes"
-msgstr ""
+msgstr "An SMPTE-Minuten einrasten"
-#: editor_actions.cc:291
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:297
msgid "Snap to seconds"
-msgstr "Minuten:Sekunden"
+msgstr "An Sekunden einrasten"
-#: editor_actions.cc:292
+#: gtk2_ardour/editor_actions.cc:298
msgid "Snap to minutes"
-msgstr ""
+msgstr "An Minuten einrasten"
-#: editor_actions.cc:293
+#: gtk2_ardour/editor_actions.cc:299
msgid "Snap to thirtyseconds"
-msgstr ""
+msgstr "An halben Minuten einrasten"
-#: editor_actions.cc:294
+#: gtk2_ardour/editor_actions.cc:300
msgid "Snap to asixteenthbeat"
-msgstr ""
+msgstr "An Sechzehnteln einrasten"
-#: editor_actions.cc:295
+#: gtk2_ardour/editor_actions.cc:301
msgid "Snap to eighths"
-msgstr ""
+msgstr "An Achteln einrasten"
-#: editor_actions.cc:296
+#: gtk2_ardour/editor_actions.cc:302
msgid "Snap to quarters"
-msgstr ""
+msgstr "An Vierteln einrasten"
-#: editor_actions.cc:297
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:303
msgid "Snap to thirds"
-msgstr "Modus"
+msgstr "An Triolen einrasten"
-#: editor_actions.cc:298
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:304
msgid "Snap to beat"
-msgstr "Modus"
+msgstr "An Schlägen einrasten"
-#: editor_actions.cc:299
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:305
msgid "Snap to bar"
-msgstr "Modus"
+msgstr "An Takten einrasten"
-#: editor_actions.cc:300
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:306
msgid "Snap to mark"
-msgstr "Ardour: Region umbenennen"
+msgstr "An Markern einrasten"
-#: editor_actions.cc:301
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:307
msgid "Snap to edit cursor"
-msgstr "Wiedergabe ab Cursor"
+msgstr "Am Editierzeiger einrasten"
-#: editor_actions.cc:302
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:308
msgid "Snap to region start"
-msgstr "Regionen"
+msgstr "Am Anfang der Regionen einrasten"
-#: editor_actions.cc:303
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:309
msgid "Snap to region end"
-msgstr "Regionen"
+msgstr "Am Ende der Regionen einrasten"
-#: editor_actions.cc:304
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:310
msgid "Snap to region sync"
-msgstr "Regionen"
+msgstr "Am Sync der Regionen einrasten"
-#: editor_actions.cc:305
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:311
msgid "Snap to region boundary"
-msgstr "Regionen"
+msgstr "An Grenzen der Regionen einrasten"
-#. the region list popup menu
-#: editor_actions.cc:314
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:320
msgid "Sort"
-msgstr "Anschluß"
+msgstr "Sortieren"
-#: editor_actions.cc:322
+#: gtk2_ardour/editor_actions.cc:328
msgid "Show all"
msgstr "Alle zeigen"
-#: editor_actions.cc:323
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:329
msgid "Show automatic regions"
-msgstr "Stellen"
+msgstr "Automatische Regionen zeigen"
-#: editor_actions.cc:325
+#: gtk2_ardour/editor_actions.cc:331
msgid "Ascending"
msgstr "aufsteigend"
-#: editor_actions.cc:327
+#: gtk2_ardour/editor_actions.cc:333
msgid "Descending"
msgstr "absteigend"
-#: editor_actions.cc:330
+#: gtk2_ardour/editor_actions.cc:336
msgid "By Region Name"
msgstr "nach Name der Region"
-#: editor_actions.cc:332
+#: gtk2_ardour/editor_actions.cc:338
msgid "By Region Length"
msgstr "nach Länge der Region"
-#: editor_actions.cc:334
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:340
msgid "By Region Position"
-msgstr "nach Zeitstempel der Region"
+msgstr "nach Position der Region"
-#: editor_actions.cc:336
+#: gtk2_ardour/editor_actions.cc:342
msgid "By Region Timestamp"
msgstr "nach Zeitstempel der Region"
-#: editor_actions.cc:338
+#: gtk2_ardour/editor_actions.cc:344
msgid "By Region Start in File"
msgstr "nach Anfang der Region in der Datei"
-#: editor_actions.cc:340
+#: gtk2_ardour/editor_actions.cc:346
msgid "By Region End in File"
msgstr "nach Ende der Region in der Datei"
-#: editor_actions.cc:342
+#: gtk2_ardour/editor_actions.cc:348
msgid "By Source File Name"
msgstr "nach Namen der Quelldatei"
-#: editor_actions.cc:344
+#: gtk2_ardour/editor_actions.cc:350
msgid "By Source File Length"
msgstr "nach Länge der Quelldatei"
-#: editor_actions.cc:346
+#: gtk2_ardour/editor_actions.cc:352
msgid "By Source File Creation Date"
msgstr "nach Erstellungsdatum der Quelldatei"
-#: editor_actions.cc:348
+#: gtk2_ardour/editor_actions.cc:354
msgid "By Source Filesystem"
msgstr "nach Dateisystem der Quelle"
-#. the next two are duplicate items with different names for use in two different contexts
-#: editor_actions.cc:354
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:360
msgid "Add External Audio"
-msgstr "Ardour: Region"
+msgstr "Audio importieren..."
-#: editor_actions.cc:356
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:362
msgid "as Region(s)"
-msgstr "Ardour: Region"
+msgstr "als Region(en)..."
-#: editor_actions.cc:358
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:364
msgid "as Tracks"
-msgstr "Spuren"
+msgstr "als neue Spur(en)..."
-#: editor_actions.cc:360
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:366
+msgid "as Tape Tracks"
+msgstr "als neue Tape-Spur(en)..."
+
+#: gtk2_ardour/editor_actions.cc:368
msgid "to Tracks"
-msgstr "Spuren"
+msgstr "in vorhandene Spuren..."
-#: editor_actions.cc:363
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:371
msgid "Show Waveforms"
-msgstr "Wellenform zeigen"
+msgstr "Wellenformen zeigen"
-#: editor_actions.cc:364
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:372
msgid "Show Waveforms While Recording"
-msgstr "Wellenform zeigen"
+msgstr "Wellenformen beim Aufnehmen zeigen"
-#: editor_actions.cc:365
+#: gtk2_ardour/editor_actions.cc:373
msgid "Show Measures"
+msgstr "Takte zeigen"
+
+#: gtk2_ardour/editor_actions.cc:377
+msgid "Later is Higher"
+msgstr "Neuste nach oben"
+
+#: gtk2_ardour/editor_actions.cc:378
+msgid "Most Recently Moved/Added is Higher"
+msgstr "Zuletzt bewegte/hinzugefügte nach oben"
+
+#: gtk2_ardour/editor_actions.cc:379
+msgid "Most Recently Added is Higher"
+msgstr "Zuletzt hinzugefügte nach oben"
+
+#: gtk2_ardour/editor_actions.cc:383
+msgid "23.976"
msgstr ""
-#: editor_actions.cc:378 editor_actions.cc:385
-msgid "Medium"
+#: gtk2_ardour/editor_actions.cc:384
+msgid "24"
msgstr ""
-#: editor_actions.cc:380
-#, fuzzy
-msgid "Faster"
-msgstr "Einfügen"
+#: gtk2_ardour/editor_actions.cc:385
+msgid "24.976"
+msgstr ""
-#: editor_actions.cc:386
-msgid "Long"
+#: gtk2_ardour/editor_actions.cc:386
+msgid "25"
msgstr ""
-#: editor_actions.cc:390
-#, fuzzy
-msgid "Later is Higher"
-msgstr "Region eine Ebene nach unten"
+#: gtk2_ardour/editor_actions.cc:387
+msgid "29.97"
+msgstr ""
-#: editor_actions.cc:391
-#, fuzzy
-msgid "Most Recently Moved/Added is Higher"
-msgstr "Region eine Ebene nach unten"
+#: gtk2_ardour/editor_actions.cc:388
+msgid "29.97 drop"
+msgstr ""
-#: editor_actions.cc:392
-#, fuzzy
-msgid "Most Recently Added is Higher"
-msgstr "Region eine Ebene nach unten"
+#: gtk2_ardour/editor_actions.cc:389
+msgid "30"
+msgstr ""
-#: editor_audio_import.cc:72
-#, fuzzy
-msgid "You can't import or embed an audiofile until you have a session loaded."
+#: gtk2_ardour/editor_actions.cc:390
+msgid "30 drop"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:391
+msgid "59.94"
msgstr ""
-"Sie können keine Audio-Daten importieren, solange keine Sitzung geladen ist."
-#: editor_audio_import.cc:77
+#: gtk2_ardour/editor_actions.cc:392
+msgid "60"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:396
+msgid "+4.1667% + 0.1%"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:397
+msgid "+4.1667%"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:398
+msgid "+4.1667% - 0.1%"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:399
+msgid "+ 0.1%"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:401
+msgid "- 0.1%"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:402
+msgid "-4.1667% + 0.1%"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:403
+msgid "-4.1667%"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:404
+msgid "-4.1667% - 0.1%"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:408
+msgid "80 per frame"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:409
+msgid "100 per frame"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:529
+msgid "programming error: Unexpected SMPTE value (%1, drop = %2) in update_smpte_mode. Menu is probably wrong."
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:708
+#: gtk2_ardour/editor_actions.cc:753
+#: gtk2_ardour/editor_actions.cc:764
+#: gtk2_ardour/editor_actions.cc:808
+#: gtk2_ardour/editor_actions.cc:818
+msgid "programming error: %1: %2"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:719
+#: gtk2_ardour/editor_actions.cc:970
+#: gtk2_ardour/editor_actions.cc:983
+#: gtk2_ardour/editor_actions.cc:1047
+#: gtk2_ardour/sfdb_ui.cc:454
+msgid "programming error: %1"
+msgstr ""
+
+#: gtk2_ardour/editor_actions.cc:1002
+msgid "Configuraton is using unhandled subframes per frame value: %1"
+msgstr ""
+
+#: gtk2_ardour/editor_audio_import.cc:75
#, fuzzy
+msgid "You can't import or embed an audiofile until you have a session loaded."
+msgstr "Sie können keine Audio-Daten importieren, solange keine Sitzung geladen ist."
+
+#: gtk2_ardour/editor_audio_import.cc:80
msgid "Add existing audio to session"
-msgstr "Stellen"
+msgstr "Audio importieren"
-#: editor_audio_import.cc:142
+#: gtk2_ardour/editor_audio_import.cc:145
#, fuzzy
msgid "ardour: importing %1"
msgstr "Ardour: Exportieren"
-#: editor_audio_import.cc:146
+#: gtk2_ardour/editor_audio_import.cc:149
msgid "Cancel Import"
msgstr "Importieren Abbrechen"
-#: editor_audio_import.cc:224
+#: gtk2_ardour/editor_audio_import.cc:227
msgid "Editor: cannot open file \"%1\", (%2)"
msgstr ""
-#: editor_audio_import.cc:232
+#: gtk2_ardour/editor_audio_import.cc:235
#, fuzzy
msgid "Cancel entire import"
msgstr "Importieren Abbrechen"
-#: editor_audio_import.cc:233
+#: gtk2_ardour/editor_audio_import.cc:236
#, fuzzy
msgid "Don't embed it"
msgstr "Ohne %1"
-#: editor_audio_import.cc:234
+#: gtk2_ardour/editor_audio_import.cc:237
msgid "Embed all without questions"
msgstr ""
-#: editor_audio_import.cc:239
+#: gtk2_ardour/editor_audio_import.cc:242
msgid "Embed it anyway"
msgstr ""
-#: editor_audio_import.cc:242
+#: gtk2_ardour/editor_audio_import.cc:245
msgid ""
"%1\n"
"This audiofile's sample rate doesn't match the session sample rate!"
msgstr ""
-#: editor_audio_import.cc:275
+#: gtk2_ardour/editor_audio_import.cc:282
msgid "could not open %1"
msgstr "Konnte \"%s\" nicht öffnen."
-#: editor_audio_import.cc:320
+#: gtk2_ardour/editor_audio_import.cc:331
#, fuzzy
msgid "insert sndfile"
msgstr "Stille einfügen"
-#. stuff for the verbose canvas cursor
-#: editor_canvas.cc:118
+#: gtk2_ardour/editor_canvas.cc:119
msgid "VerboseCanvasCursor"
msgstr ""
-#: editor_edit_groups.cc:53 mixer_ui.cc:736
-#, fuzzy
+#: gtk2_ardour/editor_edit_groups.cc:53
+#: gtk2_ardour/mixer_ui.cc:754
msgid "Activate All"
-msgstr "Aktiv"
+msgstr "Alle aktivieren"
-#: editor_edit_groups.cc:54 mixer_ui.cc:737
-#, fuzzy
+#: gtk2_ardour/editor_edit_groups.cc:54
+#: gtk2_ardour/mixer_ui.cc:755
msgid "Disable All"
-msgstr "Trennen"
+msgstr "Alle deaktivieren"
-#: editor_edit_groups.cc:56 mixer_ui.cc:739
-#, fuzzy
+#: gtk2_ardour/editor_edit_groups.cc:56
+#: gtk2_ardour/mixer_ui.cc:757
msgid "Add group"
-msgstr "keine Gruppe"
+msgstr "Gruppe hinzufügen"
-#: editor_edit_groups.cc:229 mixer_ui.cc:970
+#: gtk2_ardour/editor_edit_groups.cc:229
+#: gtk2_ardour/mixer_ui.cc:988
#, fuzzy
msgid "unnamed"
msgstr "Umbenennen"
-#: editor_edit_groups.cc:258 mixer_ui.cc:834
+#: gtk2_ardour/editor_edit_groups.cc:258
+#: gtk2_ardour/mixer_ui.cc:852
msgid "-all-"
msgstr "-alle-"
-#: editor_export_audio.cc:65
+#: gtk2_ardour/editor_export_audio.cc:67
msgid ""
"There is no selection to export.\n"
"\n"
"Select a selection using the range mouse mode"
msgstr ""
-#: editor_export_audio.cc:110
+#: gtk2_ardour/editor_export_audio.cc:112
msgid ""
"There are no ranges to export.\n"
"\n"
"Create 1 or more ranges by dragging the mouse in the range bar"
msgstr ""
-#: editor_imageframe.cc:625 editor_imageframe.cc:655
+#: gtk2_ardour/editor_imageframe.cc:625
+#: gtk2_ardour/editor_imageframe.cc:655
msgid "programming error: no ImageFrameView selected"
msgstr ""
-#: editor_imageframe.cc:848 editor_imageframe.cc:870
+#: gtk2_ardour/editor_imageframe.cc:848
+#: gtk2_ardour/editor_imageframe.cc:870
msgid "programming error: no MarkerView selected"
msgstr ""
-#: editor_keyboard.cc:104
+#: gtk2_ardour/editor_keyboard.cc:105
#, fuzzy
msgid "mute region"
msgstr "Name für Region:"
-#: editor_keys.cc:46
+#: gtk2_ardour/editor_keys.cc:46
#, fuzzy
msgid "keyboard selection"
msgstr "Auswahl zu Abschnitt machen"
-#: editor_markers.cc:292 editor_ops.cc:1290 editor_ops.cc:1303
-#: editor_ops.cc:1321 location_ui.cc:774
+#: gtk2_ardour/editor_markers.cc:293
+#: gtk2_ardour/editor_ops.cc:1213
+#: gtk2_ardour/editor_ops.cc:1227
+#: gtk2_ardour/editor_ops.cc:1246
+#: gtk2_ardour/location_ui.cc:776
msgid "add marker"
msgstr ""
-#: editor_markers.cc:307 editor_markers.cc:380 editor_markers.cc:552
-#: editor_markers.cc:570 editor_markers.cc:589 editor_markers.cc:608
-#: editor_markers.cc:638 editor_markers.cc:666 editor_markers.cc:694
-#: editor_markers.cc:732 editor_markers.cc:759 editor_markers.cc:782
-#: editor_markers.cc:801 editor_mouse.cc:2015 editor_mouse.cc:4275
+#: gtk2_ardour/editor_markers.cc:309
+#: gtk2_ardour/editor_markers.cc:383
+#: gtk2_ardour/editor_markers.cc:555
+#: gtk2_ardour/editor_markers.cc:573
+#: gtk2_ardour/editor_markers.cc:592
+#: gtk2_ardour/editor_markers.cc:611
+#: gtk2_ardour/editor_markers.cc:641
+#: gtk2_ardour/editor_markers.cc:669
+#: gtk2_ardour/editor_markers.cc:697
+#: gtk2_ardour/editor_markers.cc:735
+#: gtk2_ardour/editor_markers.cc:762
+#: gtk2_ardour/editor_markers.cc:785
+#: gtk2_ardour/editor_markers.cc:804
+#: gtk2_ardour/editor_mouse.cc:2031
+#: gtk2_ardour/editor_mouse.cc:4331
msgid "programming error: marker canvas item has no marker object pointer!"
msgstr ""
-#: editor_markers.cc:331 location_ui.cc:656
+#: gtk2_ardour/editor_markers.cc:333
+#: gtk2_ardour/location_ui.cc:657
msgid "remove marker"
-msgstr ""
+msgstr "Marker entfernen"
-#: editor_markers.cc:458
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:461
msgid "Locate to Mark"
-msgstr "Stellen"
+msgstr "Positionszeiger zu Marker setzen"
-#: editor_markers.cc:459
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:462
msgid "Play from Mark"
-msgstr "Wiedergabe ab Anfang"
+msgstr "Wiedergabe ab Marker"
-#: editor_markers.cc:460
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:463
msgid "Set Mark from Playhead"
-msgstr "Wiedergabe ab Playhead"
+msgstr "Marker am Positionszeiger setzen"
-#: editor_markers.cc:464
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:467
msgid "Rename Mark"
-msgstr "Umbenennen"
+msgstr "Marker umbenennen"
-#: editor_markers.cc:465
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:468
msgid "Hide Mark"
-msgstr "Stille einfügen"
+msgstr "Marker verbergen"
-#: editor_markers.cc:466
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:469
msgid "Remove Mark"
-msgstr "Feld entfernen"
+msgstr "Marker entfernen"
-#: editor_markers.cc:479 editor_markers.cc:535
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:482
+#: gtk2_ardour/editor_markers.cc:538
msgid "Locate to Range Mark"
-msgstr "Stellen"
+msgstr "Positionszeiger zu Bereichsmarker"
-#: editor_markers.cc:480 editor_markers.cc:536
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:483
+#: gtk2_ardour/editor_markers.cc:539
msgid "Play from Range Mark"
-msgstr "Bereich"
+msgstr "Wiedergabe ab Bereichsmarker"
-#: editor_markers.cc:481
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:484
msgid "Loop Range"
-msgstr "Bereich"
+msgstr "Bereich in Schleife wiedergeben"
-#: editor_markers.cc:482 editor_markers.cc:537
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:485
+#: gtk2_ardour/editor_markers.cc:540
msgid "Set Range Mark from Playhead"
-msgstr "Wiedergabe ab Playhead"
+msgstr "Bereichsmarker zum Positionszeiger verschieben"
-#: editor_markers.cc:483 editor_markers.cc:538
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:486
+#: gtk2_ardour/editor_markers.cc:541
msgid "Set Range from Range Selection"
-msgstr "Auswahl wiedergeben"
+msgstr "Bereichsmarker zum Auswahlbereich verschieben"
-#: editor_markers.cc:487
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:490
msgid "Rename Range"
-msgstr "Umbenennen"
+msgstr "Bereich umbenennen"
-#: editor_markers.cc:488 editor_markers.cc:540
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:491
+#: gtk2_ardour/editor_markers.cc:543
msgid "Hide Range"
-msgstr "Bereich"
+msgstr "Bereich verbergen"
-#: editor_markers.cc:489
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:492
msgid "Remove Range"
-msgstr "Feld entfernen"
+msgstr "Bereich entfernen"
-#: editor_markers.cc:493 editor_markers.cc:542
+#: gtk2_ardour/editor_markers.cc:496
+#: gtk2_ardour/editor_markers.cc:545
msgid "Separate Regions in Range"
-msgstr ""
+msgstr "Regionen an Bereichsgrenzen teilen"
-#: editor_markers.cc:494 editor_markers.cc:543
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:497
+#: gtk2_ardour/editor_markers.cc:546
msgid "Select All in Range"
-msgstr "Auswahl"
+msgstr "Alles im Bereich auswählen"
-#: editor_markers.cc:520
-#, fuzzy
+#: gtk2_ardour/editor_markers.cc:523
msgid "Set Loop Range"
-msgstr "Ausgewählten Bereich wiedergeben"
+msgstr "Schleife erstellen"
-#: editor_markers.cc:521
+#: gtk2_ardour/editor_markers.cc:524
msgid "Set Punch Range"
-msgstr ""
+msgstr "Punch-Bereich erstellen"
-#: editor_markers.cc:815
+#: gtk2_ardour/editor_markers.cc:818
#, fuzzy
msgid "New Name:"
msgstr "Neuer Name: "
-#: editor_markers.cc:818
+#: gtk2_ardour/editor_markers.cc:821
#, fuzzy
msgid "ardour: rename mark"
msgstr "Ardour: Region umbenennen"
-#: editor_markers.cc:820
+#: gtk2_ardour/editor_markers.cc:823
#, fuzzy
msgid "ardour: rename range"
msgstr "Ardour: Region umbenennen"
-#: editor_markers.cc:840
+#: gtk2_ardour/editor_markers.cc:843
#, fuzzy
msgid "rename marker"
msgstr "Feld entfernen"
-#: editor_markers.cc:865
+#: gtk2_ardour/editor_markers.cc:869
#, fuzzy
msgid "set loop range"
msgstr "Ausgewählten Bereich wiedergeben"
-#: editor_markers.cc:891
+#: gtk2_ardour/editor_markers.cc:897
#, fuzzy
msgid "set punch range"
msgstr "Ausgewählten Bereich wiedergeben"
-#: editor_mouse.cc:103
+#: gtk2_ardour/editor_mouse.cc:105
msgid "Editor::event_frame() used on unhandled event type %1"
msgstr ""
-#: editor_mouse.cc:313
+#: gtk2_ardour/editor_mouse.cc:315
#, fuzzy
msgid "select on click"
msgstr "Auswahl"
-#: editor_mouse.cc:1590
+#: gtk2_ardour/editor_mouse.cc:1596
msgid "programming error: start_grab called without drag item"
msgstr ""
-#: editor_mouse.cc:1814
+#: gtk2_ardour/editor_mouse.cc:1820
msgid "change fade in length"
msgstr ""
-#: editor_mouse.cc:1832
+#: gtk2_ardour/editor_mouse.cc:1842
msgid "programming error: fade out canvas item has no regionview data pointer!"
msgstr ""
-#: editor_mouse.cc:1906
+#: gtk2_ardour/editor_mouse.cc:1916
#, fuzzy
msgid "change fade out length"
msgstr "Ardour: Editor"
-#: editor_mouse.cc:1925
+#: gtk2_ardour/editor_mouse.cc:1939
msgid "programming error: cursor canvas item has no cursor data pointer!"
msgstr ""
-#: editor_mouse.cc:2142
-#, fuzzy
+#: gtk2_ardour/editor_mouse.cc:2166
msgid "move marker"
-msgstr "Feld entfernen"
+msgstr "Marker bewegen"
-#: editor_mouse.cc:2165 editor_mouse.cc:2196 editor_tempodisplay.cc:459
-msgid ""
-"programming error: meter marker canvas item has no marker object pointer!"
+#: gtk2_ardour/editor_mouse.cc:2194
+#: gtk2_ardour/editor_mouse.cc:2225
+#: gtk2_ardour/editor_tempodisplay.cc:492
+msgid "programming error: meter marker canvas item has no marker object pointer!"
msgstr ""
-#: editor_mouse.cc:2264
+#: gtk2_ardour/editor_mouse.cc:2293
#, fuzzy
msgid "copy meter mark"
msgstr "Ardour: Region umbenennen"
-#: editor_mouse.cc:2274
+#: gtk2_ardour/editor_mouse.cc:2304
msgid "move meter mark"
-msgstr ""
+msgstr "Taktwechsel bewegen"
-#: editor_mouse.cc:2289 editor_mouse.cc:2322 editor_tempodisplay.cc:331
-#: editor_tempodisplay.cc:409 editor_tempodisplay.cc:428
-msgid ""
-"programming error: tempo marker canvas item has no marker object pointer!"
+#: gtk2_ardour/editor_mouse.cc:2320
+#: gtk2_ardour/editor_mouse.cc:2353
+#: gtk2_ardour/editor_tempodisplay.cc:355
+#: gtk2_ardour/editor_tempodisplay.cc:439
+#: gtk2_ardour/editor_tempodisplay.cc:458
+msgid "programming error: tempo marker canvas item has no marker object pointer!"
msgstr ""
-#: editor_mouse.cc:2294 editor_mouse.cc:2327 editor_tempodisplay.cc:336
-#: editor_tempodisplay.cc:414
+#: gtk2_ardour/editor_mouse.cc:2325
+#: gtk2_ardour/editor_mouse.cc:2358
+#: gtk2_ardour/editor_tempodisplay.cc:360
+#: gtk2_ardour/editor_tempodisplay.cc:444
msgid "programming error: marker for tempo is not a tempo marker!"
msgstr ""
-#: editor_mouse.cc:2394
+#: gtk2_ardour/editor_mouse.cc:2425
#, fuzzy
msgid "copy tempo mark"
msgstr "Ardour: Region umbenennen"
-#: editor_mouse.cc:2404
+#: gtk2_ardour/editor_mouse.cc:2436
msgid "move tempo mark"
-msgstr ""
+msgstr "Tempowechsel bewegen"
-#: editor_mouse.cc:2418 editor_mouse.cc:2437 editor_mouse.cc:2450
-msgid ""
-"programming error: control point canvas item has no control point object "
-"pointer!"
+#: gtk2_ardour/editor_mouse.cc:2451
+#: gtk2_ardour/editor_mouse.cc:2470
+#: gtk2_ardour/editor_mouse.cc:2483
+msgid "programming error: control point canvas item has no control point object pointer!"
msgstr ""
-#: editor_mouse.cc:2555
+#: gtk2_ardour/editor_mouse.cc:2589
msgid "programming error: line canvas item has no line pointer!"
msgstr ""
-#: editor_mouse.cc:2664
-#, fuzzy
+#: gtk2_ardour/editor_mouse.cc:2698
msgid "move region(s)"
-msgstr "Name für Region:"
+msgstr "Region(en) bewegen"
-#: editor_mouse.cc:2727
+#: gtk2_ardour/editor_mouse.cc:2762
#, fuzzy
msgid "Drag region brush"
msgstr "Ardour: Region"
-#. don't copy again
-#. this is committed in the grab finished callback.
-#: editor_mouse.cc:2751
+#: gtk2_ardour/editor_mouse.cc:2784
msgid "Drag region copy"
msgstr ""
-#. A selection grab currently creates two undo/redo operations, one for
-#. creating the new region and another for moving it.
-#.
-#: editor_mouse.cc:3609
+#: gtk2_ardour/editor_mouse.cc:3648
#, fuzzy
msgid "selection grab"
msgstr "Auswahl"
-#: editor_mouse.cc:3650
+#: gtk2_ardour/editor_mouse.cc:3690
#, fuzzy
msgid "cancel selection"
msgstr "Auswahl wiedergeben"
-#: editor_mouse.cc:3760
+#: gtk2_ardour/editor_mouse.cc:3800
#, fuzzy
msgid "range selection"
msgstr "Auswahl wiedergeben"
-#: editor_mouse.cc:3776
+#: gtk2_ardour/editor_mouse.cc:3816
#, fuzzy
msgid "trim selection start"
msgstr "Auswahl zu Abschnitt machen"
-#: editor_mouse.cc:3792
+#: gtk2_ardour/editor_mouse.cc:3832
#, fuzzy
msgid "trim selection end"
msgstr "Auswahl zu Abschnitt machen"
-#: editor_mouse.cc:3809
-#, fuzzy
+#: gtk2_ardour/editor_mouse.cc:3849
msgid "move selection"
-msgstr "Auswahl zu Schleife machen"
+msgstr "Auswahl bewegen"
-#: editor_mouse.cc:4195
+#: gtk2_ardour/editor_mouse.cc:4240
msgid "Start point trim"
msgstr ""
-#: editor_mouse.cc:4223
+#: gtk2_ardour/editor_mouse.cc:4272
msgid "End point trim"
msgstr ""
-#: editor_mouse.cc:4262
+#: gtk2_ardour/editor_mouse.cc:4315
#, fuzzy
msgid "trimmed region"
msgstr "Ardour: Region"
-#: editor_mouse.cc:4400
+#: gtk2_ardour/editor_mouse.cc:4457
#, fuzzy
msgid "new range marker"
msgstr "Ardour: Region umbenennen"
-#: editor_mouse.cc:4642
+#: gtk2_ardour/editor_mouse.cc:4701
#, fuzzy
msgid "select regions"
msgstr "Auswahl zu Schleife machen"
-#: editor_mouse.cc:4671
+#: gtk2_ardour/editor_mouse.cc:4730
msgid "Name for region:"
msgstr "Name für Region:"
-#: editor_mouse.cc:4735
+#: gtk2_ardour/editor_mouse.cc:4794
#, fuzzy
msgid "timestretch"
msgstr "Ardour: Mixer"
-#: editor_ops.cc:195
+#: gtk2_ardour/editor_ops.cc:115
#, fuzzy
msgid "split"
msgstr "Teilen"
-#: editor_ops.cc:231
-#, fuzzy
+#: gtk2_ardour/editor_ops.cc:154
msgid "remove region"
-msgstr "Name für Region:"
+msgstr "Region(en) löschen"
-#: editor_ops.cc:250
+#: gtk2_ardour/editor_ops.cc:174
msgid ""
" This is destructive, will possibly delete audio files\n"
"It cannot be undone\n"
"Do you really want to destroy %1 ?"
msgstr ""
-#: editor_ops.cc:254
+#: gtk2_ardour/editor_ops.cc:178
#, fuzzy
msgid "these regions"
msgstr "Name für Region:"
-#: editor_ops.cc:254
+#: gtk2_ardour/editor_ops.cc:178
#, fuzzy
msgid "this region"
msgstr "Name für Region:"
-#: editor_ops.cc:256 editor_ops.cc:3318 route_ui.cc:707
-#: visual_time_axis.cc:278
+#: gtk2_ardour/editor_ops.cc:180
+#: gtk2_ardour/editor_ops.cc:3293
+#: gtk2_ardour/route_ui.cc:736
+#: gtk2_ardour/visual_time_axis.cc:283
msgid "No, do nothing."
msgstr "Nein, nichts machen."
-#: editor_ops.cc:259
+#: gtk2_ardour/editor_ops.cc:183
#, fuzzy
msgid "Yes, destroy them."
msgstr "Ja, entfernen."
-#: editor_ops.cc:261 editor_ops.cc:3319
+#: gtk2_ardour/editor_ops.cc:185
+#: gtk2_ardour/editor_ops.cc:3294
#, fuzzy
msgid "Yes, destroy it."
msgstr "Ja, entfernen."
-#: editor_ops.cc:352 editor_ops.cc:380
+#: gtk2_ardour/editor_ops.cc:271
+#: gtk2_ardour/editor_ops.cc:299
#, fuzzy
msgid "extend selection"
msgstr "Auswahl zu Abschnitt machen"
-#: editor_ops.cc:396 editor_ops.cc:430 editor_ops.cc:474 editor_ops.cc:500
+#: gtk2_ardour/editor_ops.cc:315
+#: gtk2_ardour/editor_ops.cc:350
+#: gtk2_ardour/editor_ops.cc:395
+#: gtk2_ardour/editor_ops.cc:422
msgid "nudge forward"
msgstr ""
-#: editor_ops.cc:564
+#: gtk2_ardour/editor_ops.cc:487
msgid "build_region_boundary_cache called with snap_type = %1"
msgstr ""
-#: editor_ops.cc:1420
+#: gtk2_ardour/editor_ops.cc:1350
#, fuzzy
msgid "select all within"
msgstr "Auswahl"
-#: editor_ops.cc:1452
+#: gtk2_ardour/editor_ops.cc:1383
#, fuzzy
msgid "set selection from region"
msgstr "Ausgewählten Bereich wiedergeben"
-#: editor_ops.cc:1485
+#: gtk2_ardour/editor_ops.cc:1416
#, fuzzy
msgid "set selection from range"
msgstr "Ausgewählten Bereich wiedergeben"
-#: editor_ops.cc:1515
+#: gtk2_ardour/editor_ops.cc:1446
#, fuzzy
msgid "select all from range"
msgstr "Ausgewählten Bereich wiedergeben"
-#: editor_ops.cc:1537
+#: gtk2_ardour/editor_ops.cc:1468
#, fuzzy
msgid "select all from punch"
msgstr "Auswahl"
-#: editor_ops.cc:1559
+#: gtk2_ardour/editor_ops.cc:1490
#, fuzzy
msgid "select all from loop"
msgstr "Auswahl"
-#: editor_ops.cc:1573
+#: gtk2_ardour/editor_ops.cc:1504
#, fuzzy
msgid "select all after cursor"
msgstr "Wiedergabe ab Cursor"
-#: editor_ops.cc:1578
+#: gtk2_ardour/editor_ops.cc:1509
#, fuzzy
msgid "select all before cursor"
msgstr "Wiedergabe ab Cursor"
-#: editor_ops.cc:1608
+#: gtk2_ardour/editor_ops.cc:1539
#, fuzzy
msgid "select all between cursors"
msgstr "Wiedergabe ab Cursor"
-#: editor_ops.cc:1739
+#: gtk2_ardour/editor_ops.cc:1670
msgid "clear markers"
msgstr ""
-#: editor_ops.cc:1751
-#, fuzzy
+#: gtk2_ardour/editor_ops.cc:1683
msgid "clear ranges"
-msgstr "Verbindungen löschen"
+msgstr "Verbindungen entfernen"
-#: editor_ops.cc:1770
-#, fuzzy
+#: gtk2_ardour/editor_ops.cc:1703
msgid "clear locations"
-msgstr "Verbindungen löschen"
+msgstr "Verbindungen entfernen"
-#: editor_ops.cc:1820
+#: gtk2_ardour/editor_ops.cc:1754
#, fuzzy
msgid "insert dragged region"
msgstr "Ardour: Region"
-#: editor_ops.cc:1856
+#: gtk2_ardour/editor_ops.cc:1797
#, fuzzy
msgid "insert region"
msgstr "Name für Region:"
-#: editor_ops.cc:2047 io_selector.cc:58 io_selector.cc:792
+#: gtk2_ardour/editor_ops.cc:1972
+#: gtk2_ardour/io_selector.cc:60
+#: gtk2_ardour/io_selector.cc:749
+#: gtk2_ardour/connection_editor.cc:86
msgid "OK"
msgstr ""
-#: editor_ops.cc:2054
+#: gtk2_ardour/editor_ops.cc:1979
msgid "ardour: rename region"
msgstr "Ardour: Region umbenennen"
-#: editor_ops.cc:2277 editor_ops.cc:2326
+#: gtk2_ardour/editor_ops.cc:2204
+#: gtk2_ardour/editor_ops.cc:2257
#, fuzzy
msgid "separate"
msgstr "Ausgewählten Bereich wiedergeben"
-#: editor_ops.cc:2388
+#: gtk2_ardour/editor_ops.cc:2322
#, fuzzy
msgid "trim to selection"
msgstr "Auswahl zu Abschnitt machen"
-#: editor_ops.cc:2428
+#: gtk2_ardour/editor_ops.cc:2363
msgid "region fill"
msgstr ""
-#: editor_ops.cc:2487
+#: gtk2_ardour/editor_ops.cc:2427
#, fuzzy
msgid "fill selection"
msgstr "Auswahl zu Schleife machen"
-#: editor_ops.cc:2508
+#: gtk2_ardour/editor_ops.cc:2448
msgid "Programming error. that region doesn't cover that position"
msgstr ""
-#: editor_ops.cc:2511
+#: gtk2_ardour/editor_ops.cc:2451
#, fuzzy
msgid "set region sync position"
msgstr "Regionen"
-#: editor_ops.cc:2526
+#: gtk2_ardour/editor_ops.cc:2467
msgid "Place the edit cursor at the desired sync point"
-msgstr ""
-"Positionieren sie den Arbeits-Cursor am gewünschten Synchronisationspunkt"
+msgstr "Positionieren sie den Arbeits-Cursor am gewünschten Synchronisationspunkt"
-#: editor_ops.cc:2531
+#: gtk2_ardour/editor_ops.cc:2472
#, fuzzy
msgid "set sync from edit cursor"
msgstr "Wiedergabe ab Cursor"
-#: editor_ops.cc:2543
+#: gtk2_ardour/editor_ops.cc:2485
#, fuzzy
msgid "remove sync"
msgstr "Synchronisationspunkt entfernen"
-#: editor_ops.cc:2557
+#: gtk2_ardour/editor_ops.cc:2500
#, fuzzy
msgid "naturalize"
msgstr "Ardour: Region"
-#: editor_ops.cc:2621
+#: gtk2_ardour/editor_ops.cc:2565
msgid "align selection (relative)"
msgstr ""
-#: editor_ops.cc:2649
+#: gtk2_ardour/editor_ops.cc:2594
#, fuzzy
msgid "align selection"
msgstr "Auswahl zu Schleife machen"
-#: editor_ops.cc:2661
+#: gtk2_ardour/editor_ops.cc:2606
#, fuzzy
msgid "align region"
msgstr "Ardour: Region"
-#: editor_ops.cc:2708 editor_ops.cc:2733
+#: gtk2_ardour/editor_ops.cc:2654
+#: gtk2_ardour/editor_ops.cc:2680
msgid "trim to edit"
msgstr ""
-#: editor_ops.cc:2784
+#: gtk2_ardour/editor_ops.cc:2732
#, fuzzy
msgid "ardour: freeze"
msgstr "Ardour: "
-#: editor_ops.cc:2789
-#, fuzzy
+#: gtk2_ardour/editor_ops.cc:2737
msgid "Cancel Freeze"
-msgstr "Abbrechen"
+msgstr "Einfrieren abbrechen"
-#: editor_ops.cc:2826
+#: gtk2_ardour/editor_ops.cc:2774
#, fuzzy
msgid "bounce range"
msgstr "Bereich"
-#: editor_ops.cc:2879
+#: gtk2_ardour/editor_ops.cc:2828
#, fuzzy
msgid "cut"
msgstr "Ausschneiden"
-#: editor_ops.cc:2882
+#: gtk2_ardour/editor_ops.cc:2831
#, fuzzy
msgid "copy"
msgstr "Kopieren"
-#: editor_ops.cc:2895
+#: gtk2_ardour/editor_ops.cc:2844
#, fuzzy
msgid " objects"
msgstr "Objekt"
-#: editor_ops.cc:2921
+#: gtk2_ardour/editor_ops.cc:2870
#, fuzzy
msgid " range"
msgstr "Bereich"
-#: editor_ops.cc:3078
+#: gtk2_ardour/editor_ops.cc:3050
#, fuzzy
msgid "paste"
msgstr "Einfügen"
-#: editor_ops.cc:3116
+#: gtk2_ardour/editor_ops.cc:3088
#, fuzzy
msgid "paste chunk"
msgstr "Abschnitt erzeugen:"
-#. clear (below) will clear the argument list
-#: editor_ops.cc:3157
+#: gtk2_ardour/editor_ops.cc:3129
#, fuzzy
msgid "duplicate region"
msgstr "Auswahl zu Schleife machen"
-#: editor_ops.cc:3202
+#: gtk2_ardour/editor_ops.cc:3174
#, fuzzy
msgid "duplicate selection"
msgstr "Auswahl zu Schleife machen"
-#: editor_ops.cc:3259
+#: gtk2_ardour/editor_ops.cc:3232
#, fuzzy
msgid "clear playlist"
msgstr "Name für Schnappschuß"
-#: editor_ops.cc:3288
+#: gtk2_ardour/editor_ops.cc:3262
#, fuzzy
msgid "nudge track"
msgstr "Stille einfügen"
-#: editor_ops.cc:3315
+#: gtk2_ardour/editor_ops.cc:3290
#, fuzzy
msgid ""
"Do you really want to destroy the last capture?\n"
@@ -4087,715 +4264,756 @@ msgstr ""
"Wollen Sie wirklich die Spur \"%1\" löschen?\n"
"(Kann nicht rückgängig gemacht werden!)"
-#: editor_ops.cc:3343
+#: gtk2_ardour/editor_ops.cc:3318
#, fuzzy
msgid "normalize"
msgstr "Ardour: Region"
-#: editor_ops.cc:3390
+#: gtk2_ardour/editor_ops.cc:3371
#, fuzzy
msgid "reverse regions"
msgstr "Name für Region:"
-#: editor_region_list.cc:98 editor_region_list.cc:103
-#: editor_region_list.cc:106 location_ui.cc:56
+#: gtk2_ardour/editor_ops.cc:3484
+#, fuzzy
+msgid "reset region gain"
+msgstr "Name für Region:"
+
+#: gtk2_ardour/editor_region_list.cc:103
+#: gtk2_ardour/editor_region_list.cc:108
+#: gtk2_ardour/editor_region_list.cc:111
+#: gtk2_ardour/location_ui.cc:57
#, fuzzy
msgid "Hidden"
msgstr "Verbergen"
-#. added a new fresh one at the end
-#: editor_route_list.cc:102 editor_route_list.cc:103 editor_route_list.cc:247
+#: gtk2_ardour/editor_route_list.cc:100
+#: gtk2_ardour/editor_route_list.cc:101
+#: gtk2_ardour/editor_route_list.cc:250
msgid "editor"
msgstr ""
-#: editor_route_list.cc:310 mixer_ui.cc:699
+#: gtk2_ardour/editor_route_list.cc:317
+#: gtk2_ardour/mixer_ui.cc:717
msgid "Show All"
msgstr "Alles zeigen"
-#: editor_route_list.cc:311 mixer_ui.cc:700
+#: gtk2_ardour/editor_route_list.cc:318
+#: gtk2_ardour/mixer_ui.cc:718
msgid "Hide All"
-msgstr "Alle verstecken"
+msgstr "Alle verbergen"
-#: editor_route_list.cc:312 mixer_ui.cc:701
-#, fuzzy
+#: gtk2_ardour/editor_route_list.cc:319
+#: gtk2_ardour/mixer_ui.cc:719
msgid "Show All Audio Tracks"
-msgstr "Auswahl"
+msgstr "Zeige alle Audio-Spuren"
-#: editor_route_list.cc:313 mixer_ui.cc:702
-#, fuzzy
+#: gtk2_ardour/editor_route_list.cc:320
+#: gtk2_ardour/mixer_ui.cc:720
msgid "Hide All Audio Tracks"
-msgstr "Auswahl"
+msgstr "Verberge alle Audio-Spuren"
-#: editor_route_list.cc:314 mixer_ui.cc:703
+#: gtk2_ardour/editor_route_list.cc:321
+#: gtk2_ardour/mixer_ui.cc:721
msgid "Show All Audio Busses"
-msgstr ""
+msgstr "Zeige alle Audio-Busse"
-#: editor_route_list.cc:315 mixer_ui.cc:704
+#: gtk2_ardour/editor_route_list.cc:322
+#: gtk2_ardour/mixer_ui.cc:722
msgid "Hide All Audio Busses"
-msgstr ""
+msgstr "Verberge alle Audio-Busse"
-#: editor_rulers.cc:312
-#, fuzzy
+#: gtk2_ardour/editor_rulers.cc:338
msgid "New location marker"
-msgstr "Stellen"
+msgstr "Neuer Positionsmarker"
-#: editor_rulers.cc:313
-#, fuzzy
+#: gtk2_ardour/editor_rulers.cc:339
msgid "Clear all locations"
-msgstr "Verbindungen löschen"
+msgstr "Alle Positionsmarker entfernen"
-#. ruler_items.push_back (MenuElem (_("New Range")));
-#: editor_rulers.cc:318
-#, fuzzy
+#: gtk2_ardour/editor_rulers.cc:344
msgid "Clear all ranges"
-msgstr "Verbindungen löschen"
+msgstr "Alle Bereiche entfernen"
-#: editor_rulers.cc:327
+#: gtk2_ardour/editor_rulers.cc:353
msgid "New Tempo"
-msgstr ""
+msgstr "Tempowechsel einfügen..."
-#: editor_rulers.cc:328
-#, fuzzy
+#: gtk2_ardour/editor_rulers.cc:354
msgid "Clear tempo"
-msgstr "leeren"
+msgstr "Tempo zurücksetzen"
-#: editor_rulers.cc:333
+#: gtk2_ardour/editor_rulers.cc:359
msgid "New Meter"
-msgstr ""
+msgstr "Taktwechsel einfügen..."
-#: editor_rulers.cc:334
-#, fuzzy
+#: gtk2_ardour/editor_rulers.cc:360
msgid "Clear meter"
-msgstr "leeren"
+msgstr "Taktart zurücksetzen"
-#: editor_rulers.cc:342
+#: gtk2_ardour/editor_rulers.cc:368
#, fuzzy
msgid "Min:Secs"
msgstr "Min:Sek"
-#: editor_selection_list.cc:108
+#: gtk2_ardour/editor_selection_list.cc:108
#, fuzzy
msgid "Name for Chunk:"
msgstr "Name für Abschnitt:"
-#: editor_selection_list.cc:111
+#: gtk2_ardour/editor_selection_list.cc:111
#, fuzzy
msgid "Create Chunk"
msgstr "Abschnitt erzeugen:"
-#: editor_selection_list.cc:111
+#: gtk2_ardour/editor_selection_list.cc:111
msgid "Forget it"
msgstr "Abbrechen"
-#: editor_tempodisplay.cc:253 editor_tempodisplay.cc:293
+#: gtk2_ardour/editor_tempodisplay.cc:272
+#: gtk2_ardour/editor_tempodisplay.cc:315
#, fuzzy
msgid "add"
msgstr "Hinzufügen"
-#: editor_tempodisplay.cc:275
+#: gtk2_ardour/editor_tempodisplay.cc:294
#, fuzzy
msgid "add tempo mark"
msgstr "Ardour: Region umbenennen"
-#: editor_tempodisplay.cc:315
+#: gtk2_ardour/editor_tempodisplay.cc:337
#, fuzzy
msgid "add meter mark"
msgstr "Ardour: Region umbenennen"
-#: editor_tempodisplay.cc:348 editor_tempodisplay.cc:376
+#: gtk2_ardour/editor_tempodisplay.cc:372
+#: gtk2_ardour/editor_tempodisplay.cc:403
#, fuzzy
msgid "done"
msgstr "keine"
-#: editor_tempodisplay.cc:366 editor_tempodisplay.cc:394
+#: gtk2_ardour/editor_tempodisplay.cc:390
+#: gtk2_ardour/editor_tempodisplay.cc:421
msgid "replace tempo mark"
msgstr ""
-#: editor_tempodisplay.cc:433 editor_tempodisplay.cc:464
+#: gtk2_ardour/editor_tempodisplay.cc:463
+#: gtk2_ardour/editor_tempodisplay.cc:497
msgid "programming error: marker for meter is not a meter marker!"
msgstr ""
-#: editor_tempodisplay.cc:443 editor_tempodisplay.cc:476
-#, fuzzy
+#: gtk2_ardour/editor_tempodisplay.cc:473
+#: gtk2_ardour/editor_tempodisplay.cc:509
msgid "remove tempo mark"
-msgstr "Ja, entfernen."
+msgstr "Tempowechsel entfernen"
-#: editor_timefx.cc:51
+#: gtk2_ardour/editor_timefx.cc:52
msgid "Quick but Ugly"
msgstr ""
-#: editor_timefx.cc:52
+#: gtk2_ardour/editor_timefx.cc:53
msgid "Skip Anti-aliasing"
msgstr ""
-#: editor_timefx.cc:56
+#: gtk2_ardour/editor_timefx.cc:57
#, fuzzy
msgid "ardour: timestretch"
msgstr "Ardour: Mixer"
-#: editor_timefx.cc:57
+#: gtk2_ardour/editor_timefx.cc:58
msgid "TimeStretchDialog"
msgstr ""
-#: editor_timefx.cc:70
+#: gtk2_ardour/editor_timefx.cc:71
msgid "Stretch/Shrink it"
msgstr ""
-#: editor_timefx.cc:73 editor_timefx.cc:74
+#: gtk2_ardour/editor_timefx.cc:74
+#: gtk2_ardour/editor_timefx.cc:75
msgid "TimeStretchButton"
msgstr ""
-#: editor_timefx.cc:75
+#: gtk2_ardour/editor_timefx.cc:76
msgid "TimeStretchProgress"
msgstr ""
-#: editor_timefx.cc:139
+#: gtk2_ardour/editor_timefx.cc:140
msgid "timestretch cannot be started - thread creation error"
msgstr ""
-#: export_dialog.cc:59 export_dialog.cc:399 export_dialog.cc:1027
-#: export_dialog.cc:1195
+#: gtk2_ardour/export_dialog.cc:57
+#: gtk2_ardour/export_dialog.cc:397
+#: gtk2_ardour/export_dialog.cc:1025
+#: gtk2_ardour/export_dialog.cc:1193
msgid "22.05kHz"
msgstr ""
-#: export_dialog.cc:60 export_dialog.cc:402 export_dialog.cc:417
-#: export_dialog.cc:1029 export_dialog.cc:1197
+#: gtk2_ardour/export_dialog.cc:58
+#: gtk2_ardour/export_dialog.cc:400
+#: gtk2_ardour/export_dialog.cc:415
+#: gtk2_ardour/export_dialog.cc:1027
+#: gtk2_ardour/export_dialog.cc:1195
msgid "44.1kHz"
msgstr ""
-#: export_dialog.cc:61 export_dialog.cc:405 export_dialog.cc:1031
-#: export_dialog.cc:1199
+#: gtk2_ardour/export_dialog.cc:59
+#: gtk2_ardour/export_dialog.cc:403
+#: gtk2_ardour/export_dialog.cc:1029
+#: gtk2_ardour/export_dialog.cc:1197
msgid "48kHz"
msgstr ""
-#: export_dialog.cc:62 export_dialog.cc:408 export_dialog.cc:1033
-#: export_dialog.cc:1201
+#: gtk2_ardour/export_dialog.cc:60
+#: gtk2_ardour/export_dialog.cc:406
+#: gtk2_ardour/export_dialog.cc:1031
+#: gtk2_ardour/export_dialog.cc:1199
msgid "88.2kHz"
msgstr ""
-#: export_dialog.cc:63 export_dialog.cc:411 export_dialog.cc:1035
-#: export_dialog.cc:1203
+#: gtk2_ardour/export_dialog.cc:61
+#: gtk2_ardour/export_dialog.cc:409
+#: gtk2_ardour/export_dialog.cc:1033
+#: gtk2_ardour/export_dialog.cc:1201
msgid "96kHz"
msgstr ""
-#: export_dialog.cc:64 export_dialog.cc:414 export_dialog.cc:1037
-#: export_dialog.cc:1205
+#: gtk2_ardour/export_dialog.cc:62
+#: gtk2_ardour/export_dialog.cc:412
+#: gtk2_ardour/export_dialog.cc:1035
+#: gtk2_ardour/export_dialog.cc:1203
msgid "192kHz"
msgstr ""
-#: export_dialog.cc:69
+#: gtk2_ardour/export_dialog.cc:67
msgid "best"
msgstr "bestmöglich"
-#: export_dialog.cc:70 export_dialog.cc:1212
+#: gtk2_ardour/export_dialog.cc:68
+#: gtk2_ardour/export_dialog.cc:1210
msgid "fastest"
msgstr "schnellstmöglich"
-#: export_dialog.cc:71 export_dialog.cc:1214
+#: gtk2_ardour/export_dialog.cc:69
+#: gtk2_ardour/export_dialog.cc:1212
msgid "linear"
msgstr ""
-#: export_dialog.cc:72 export_dialog.cc:1216
+#: gtk2_ardour/export_dialog.cc:70
+#: gtk2_ardour/export_dialog.cc:1214
msgid "better"
msgstr "besser"
-#: export_dialog.cc:73 export_dialog.cc:1218
+#: gtk2_ardour/export_dialog.cc:71
+#: gtk2_ardour/export_dialog.cc:1216
msgid "intermediate"
msgstr "mittelmäßig"
-#: export_dialog.cc:79 export_dialog.cc:1227
+#: gtk2_ardour/export_dialog.cc:77
+#: gtk2_ardour/export_dialog.cc:1225
msgid "Rectangular"
msgstr "rechteckig"
-#: export_dialog.cc:80
+#: gtk2_ardour/export_dialog.cc:78
msgid "Shaped Noise"
msgstr ""
-#: export_dialog.cc:81 export_dialog.cc:1229
+#: gtk2_ardour/export_dialog.cc:79
+#: gtk2_ardour/export_dialog.cc:1227
msgid "Triangular"
msgstr "dreieckig"
-#: export_dialog.cc:86
+#: gtk2_ardour/export_dialog.cc:84
msgid "stereo"
msgstr ""
-#. default is to use all
-#: export_dialog.cc:87 export_dialog.cc:486 export_dialog.cc:1055
-#: export_dialog.cc:1177
+#: gtk2_ardour/export_dialog.cc:85
+#: gtk2_ardour/export_dialog.cc:484
+#: gtk2_ardour/export_dialog.cc:1053
+#: gtk2_ardour/export_dialog.cc:1175
msgid "mono"
msgstr ""
-#: export_dialog.cc:93
+#: gtk2_ardour/export_dialog.cc:91
msgid "CUE"
msgstr ""
-#: export_dialog.cc:94
+#: gtk2_ardour/export_dialog.cc:92
msgid "TOC"
msgstr ""
-#: export_dialog.cc:102
-#, fuzzy
+#: gtk2_ardour/export_dialog.cc:100
msgid "Format"
-msgstr "Anschluß"
+msgstr "Format"
-#: export_dialog.cc:103
+#: gtk2_ardour/export_dialog.cc:101
msgid "CD Marker File Type"
-msgstr ""
+msgstr "CD-Marker"
-#: export_dialog.cc:104
-#, fuzzy
+#: gtk2_ardour/export_dialog.cc:102
msgid "Channels"
-msgstr "Abbrechen"
+msgstr "Kanäle"
-#: export_dialog.cc:105
-#, fuzzy
+#: gtk2_ardour/export_dialog.cc:103
msgid "File Type"
-msgstr "nach Dateisystem der Quelle"
+msgstr "Dateiformat"
-#: export_dialog.cc:106
-#, fuzzy
+#: gtk2_ardour/export_dialog.cc:104
msgid "Sample Format"
-msgstr "Ausgewählten Bereich wiedergeben"
+msgstr "Sampleformat"
-#: export_dialog.cc:107
+#: gtk2_ardour/export_dialog.cc:105
msgid "Sample Endianness"
-msgstr ""
+msgstr "Bytefolge"
-#: export_dialog.cc:108
-#, fuzzy
+#: gtk2_ardour/export_dialog.cc:106
msgid "Sample Rate"
-msgstr "Ausgewählten Bereich wiedergeben"
+msgstr "Samplerate"
-#: export_dialog.cc:109
+#: gtk2_ardour/export_dialog.cc:107
msgid "Conversion Quality"
-msgstr ""
+msgstr "Qualität"
-#: export_dialog.cc:110
+#: gtk2_ardour/export_dialog.cc:108
msgid "Dither Type"
-msgstr ""
+msgstr "Dithering"
-#: export_dialog.cc:111
+#: gtk2_ardour/export_dialog.cc:109
msgid "Export CD Marker File Only"
-msgstr ""
+msgstr "Nur CD-Marker exportieren"
-#: export_dialog.cc:112
-#, fuzzy
+#: gtk2_ardour/export_dialog.cc:110
msgid "Export to File"
-msgstr "Export nach CD"
+msgstr "Als Audiodatei exportieren"
-#: export_dialog.cc:113 option_editor.cc:83 option_editor.cc:84
+#: gtk2_ardour/export_dialog.cc:111
+#: gtk2_ardour/option_editor.cc:82
+#: gtk2_ardour/option_editor.cc:83
msgid "Browse"
-msgstr ""
+msgstr "Durchsuchen"
-#: export_dialog.cc:114
+#: gtk2_ardour/export_dialog.cc:112
msgid "Specific tracks ..."
-msgstr ""
+msgstr "Alle Spuren..."
-#: export_dialog.cc:125
+#: gtk2_ardour/export_dialog.cc:123
msgid "ardour: export"
msgstr "Ardour: Exportieren"
-#: export_dialog.cc:126
+#: gtk2_ardour/export_dialog.cc:124
#, fuzzy
msgid "ardour_export"
msgstr "Ardour: Exportieren"
-#: export_dialog.cc:139 export_dialog.cc:155 mixer_strip.cc:124
-#: mixer_strip.cc:767
-#, fuzzy
+#: gtk2_ardour/export_dialog.cc:137
+#: gtk2_ardour/export_dialog.cc:153
+#: gtk2_ardour/mixer_strip.cc:123
+#: gtk2_ardour/mixer_strip.cc:746
msgid "Output"
-msgstr "Ausgänge"
+msgstr "Ausgang"
-#: export_dialog.cc:633
+#: gtk2_ardour/export_dialog.cc:631
#, fuzzy
msgid "Editor: cannot open \"%1\" as export file for CD toc file"
-msgstr ""
-"Editor: Kann \"%1\" nicht öffnen um CD Track Markierungen zu exportieren."
+msgstr "Editor: Kann \"%1\" nicht öffnen um CD Track Markierungen zu exportieren."
-#: export_dialog.cc:759
+#: gtk2_ardour/export_dialog.cc:757
#, fuzzy
msgid "Editor: cannot open \"%1\" as export file for CD cue file"
-msgstr ""
-"Editor: Kann \"%1\" nicht öffnen um CD Track Markierungen zu exportieren."
+msgstr "Editor: Kann \"%1\" nicht öffnen um CD Track Markierungen zu exportieren."
-#: export_dialog.cc:778
+#: gtk2_ardour/export_dialog.cc:776
msgid "WAV"
msgstr ""
-#: export_dialog.cc:912
+#: gtk2_ardour/export_dialog.cc:910
msgid "Stop Export"
msgstr "Export Abbrechen"
-#: export_dialog.cc:1131
+#: gtk2_ardour/export_dialog.cc:1129
msgid "Please enter a valid filename."
-msgstr ""
+msgstr "Bitte geben Sie einen gültigen Dateinamen ein."
-#: export_dialog.cc:1141
+#: gtk2_ardour/export_dialog.cc:1139
msgid "Please specify a complete filename for the audio file."
-msgstr ""
+msgstr "Bitte geben Sie einen kompletten Dateinamen für die Audiodatei ein."
-#: export_dialog.cc:1147
+#: gtk2_ardour/export_dialog.cc:1145
msgid "File already exists, do you want to overwrite it?"
-msgstr ""
+msgstr "Datei existiert bereits, wollen Sie sie überschreiben?"
-#: export_dialog.cc:1159 export_range_markers_dialog.cc:153
+#: gtk2_ardour/export_dialog.cc:1157
+#: gtk2_ardour/export_range_markers_dialog.cc:153
msgid "Cannot write file in: "
-msgstr ""
+msgstr "Konnte Datei nicht in Verzeichnis schreiben:"
-#. warning dialog
-#: export_range_markers_dialog.cc:135
+#: gtk2_ardour/export_range_markers_dialog.cc:135
msgid "Please enter a valid target directory."
-msgstr ""
+msgstr "Bitte geben Sie ein gültiges Zielverzeichis an."
-#: export_range_markers_dialog.cc:143
+#: gtk2_ardour/export_range_markers_dialog.cc:143
msgid ""
"Please select an existing target directory. Files\n"
"are not allowed!"
msgstr ""
+"Bitte wählen Sie ein vorhandenes Zielverzeichnis aus.\n"
+"Dateien sind nicht möglich."
-#: gain_automation_time_axis.cc:62
+#: gtk2_ardour/gain_automation_time_axis.cc:65
#, fuzzy
msgid "add gain automation event"
msgstr "Stellen"
-#: gain_meter.cc:67
-msgid "cannot find images for fader slider"
-msgstr ""
-
-#: gain_meter.cc:74
-msgid "cannot find images for fader rail"
-msgstr ""
-
-#: gain_meter.cc:130 gain_meter.cc:339 gain_meter.cc:494 gain_meter.cc:539
+#: gtk2_ardour/gain_meter.cc:112
+#: gtk2_ardour/gain_meter.cc:328
+#: gtk2_ardour/gain_meter.cc:504
+#: gtk2_ardour/gain_meter.cc:571
msgid "-inf"
msgstr ""
-#: gain_meter.cc:140
-#, fuzzy
+#: gtk2_ardour/gain_meter.cc:123
msgid "Fader automation mode"
-msgstr "Stellen"
+msgstr "Fader Automationsmodus"
-#: gain_meter.cc:141
+#: gtk2_ardour/gain_meter.cc:124
#, fuzzy
msgid "Fader automation type"
msgstr "Stellen"
-#. XXX it might different in different languages
-#: gain_meter.cc:182 gain_meter.cc:817 panner_ui.cc:99 panner_ui.cc:807
+#: gtk2_ardour/gain_meter.cc:169
+#: gtk2_ardour/gain_meter.cc:852
+#: gtk2_ardour/panner_ui.cc:97
+#: gtk2_ardour/panner_ui.cc:797
msgid "Abs"
msgstr ""
-#: gain_meter.cc:472
+#: gtk2_ardour/gain_meter.cc:482
msgid "-Inf"
msgstr ""
-#: gain_meter.cc:781 mixer_strip.cc:770 panner_ui.cc:771
+#: gtk2_ardour/gain_meter.cc:816
+#: gtk2_ardour/mixer_strip.cc:749
+#: gtk2_ardour/panner_ui.cc:761
#, fuzzy
msgid "O"
msgstr "ODER"
-#: gain_meter.cc:784 panner_ui.cc:774
+#: gtk2_ardour/gain_meter.cc:819
+#: gtk2_ardour/panner_ui.cc:764
msgid "P"
msgstr ""
-#: gain_meter.cc:787 panner_ui.cc:777
+#: gtk2_ardour/gain_meter.cc:822
+#: gtk2_ardour/panner_ui.cc:767
msgid "T"
msgstr ""
-#: gain_meter.cc:790 panner_ui.cc:780
+#: gtk2_ardour/gain_meter.cc:825
+#: gtk2_ardour/panner_ui.cc:770
msgid "W"
msgstr ""
-#: gtk-custom-ruler.c:126
+#: gtk2_ardour/gtk-custom-ruler.c:126
#, fuzzy
msgid "Lower"
msgstr "Schicht"
-#: gtk-custom-ruler.c:127
+#: gtk2_ardour/gtk-custom-ruler.c:127
#, fuzzy
msgid "Lower limit of ruler"
msgstr "Region ganz nach unten"
-#: gtk-custom-ruler.c:136
+#: gtk2_ardour/gtk-custom-ruler.c:136
msgid "Upper"
msgstr ""
-#: gtk-custom-ruler.c:137
+#: gtk2_ardour/gtk-custom-ruler.c:137
msgid "Upper limit of ruler"
msgstr ""
-#: gtk-custom-ruler.c:146
+#: gtk2_ardour/gtk-custom-ruler.c:146
#, fuzzy
msgid "Position"
msgstr "Stellen"
-#: gtk-custom-ruler.c:147
+#: gtk2_ardour/gtk-custom-ruler.c:147
msgid "Position of mark on the ruler"
msgstr ""
-#: gtk-custom-ruler.c:156
+#: gtk2_ardour/gtk-custom-ruler.c:156
msgid "Max Size"
msgstr ""
-#: gtk-custom-ruler.c:157
+#: gtk2_ardour/gtk-custom-ruler.c:157
msgid "Maximum size of the ruler"
msgstr ""
-#: gtk-custom-ruler.c:166
+#: gtk2_ardour/gtk-custom-ruler.c:166
#, fuzzy
msgid "Show Position"
msgstr "nach Zeitstempel der Region"
-#: gtk-custom-ruler.c:167
+#: gtk2_ardour/gtk-custom-ruler.c:167
msgid "Draw current ruler position"
msgstr ""
-#. end-of-file, other end closed or shutdown?
-#: imageframe_socket_handler.cc:127
+#: gtk2_ardour/imageframe_socket_handler.cc:127
msgid "Image Compositor Socket has been shutdown/closed"
msgstr ""
-#: imageframe_time_axis.cc:286
+#: gtk2_ardour/imageframe_time_axis.cc:286
#, fuzzy
msgid "0.5 seconds"
msgstr "Minuten:Sekunden"
-#: imageframe_time_axis.cc:287 marker_time_axis.cc:242
+#: gtk2_ardour/imageframe_time_axis.cc:287
+#: gtk2_ardour/marker_time_axis.cc:242
#, fuzzy
msgid "1 seconds"
msgstr "Minuten:Sekunden"
-#: imageframe_time_axis.cc:288 marker_time_axis.cc:243
+#: gtk2_ardour/imageframe_time_axis.cc:288
+#: gtk2_ardour/marker_time_axis.cc:243
#, fuzzy
msgid "1.5 seconds"
msgstr "Minuten:Sekunden"
-#: imageframe_time_axis.cc:289 marker_time_axis.cc:244
+#: gtk2_ardour/imageframe_time_axis.cc:289
+#: gtk2_ardour/marker_time_axis.cc:244
#, fuzzy
msgid "2 seconds"
msgstr "Minuten:Sekunden"
-#: imageframe_time_axis.cc:290 marker_time_axis.cc:245
+#: gtk2_ardour/imageframe_time_axis.cc:290
+#: gtk2_ardour/marker_time_axis.cc:245
#, fuzzy
msgid "2.5 seconds"
msgstr "Minuten:Sekunden"
-#: imageframe_time_axis.cc:291 marker_time_axis.cc:246
+#: gtk2_ardour/imageframe_time_axis.cc:291
+#: gtk2_ardour/marker_time_axis.cc:246
#, fuzzy
msgid "3 seconds"
msgstr "Minuten:Sekunden"
-#. duration_items.push_back(SeparatorElem()) ;
-#. duration_items.push_back(MenuElem (_("custom"), mem_fun(*this, &ImageFrameTimeAxis::set_marker_duration_custom))) ;
-#: imageframe_time_axis.cc:296 marker_time_axis.cc:251
+#: gtk2_ardour/imageframe_time_axis.cc:296
+#: gtk2_ardour/marker_time_axis.cc:251
#, fuzzy
msgid "Duration (sec)"
msgstr "Ardour: Region"
-#: imageframe_time_axis.cc:301
+#: gtk2_ardour/imageframe_time_axis.cc:301
#, fuzzy
msgid "Remove Frame"
msgstr "Feld entfernen"
-#: imageframe_time_axis.cc:304
+#: gtk2_ardour/imageframe_time_axis.cc:304
msgid "Image Frame"
msgstr ""
-#: imageframe_time_axis.cc:305 marker_time_axis.cc:257
+#: gtk2_ardour/imageframe_time_axis.cc:305
+#: gtk2_ardour/marker_time_axis.cc:257
#, fuzzy
msgid "Rename Track"
msgstr "Umbenennen"
-#: io_selector.cc:60 io_selector.cc:794
+#: gtk2_ardour/io_selector.cc:62
+#: gtk2_ardour/io_selector.cc:751
+#: gtk2_ardour/connection_editor.cc:61
+#: gtk2_ardour/connection_editor.cc:110
#, fuzzy
msgid "Rescan"
msgstr "Auffrischen"
-#: io_selector.cc:68
+#: gtk2_ardour/io_selector.cc:70
msgid "%1 input"
msgstr "%1 Eingang"
-#: io_selector.cc:70
+#: gtk2_ardour/io_selector.cc:72
msgid "%1 output"
msgstr "%1 Ausgang"
-#: io_selector.cc:142 route_params_ui.cc:107
+#: gtk2_ardour/io_selector.cc:144
+#: gtk2_ardour/route_params_ui.cc:103
#, fuzzy
msgid "Inputs"
msgstr "Eingänge"
-#: io_selector.cc:142 route_params_ui.cc:108
-#, fuzzy
+#: gtk2_ardour/io_selector.cc:144
+#: gtk2_ardour/route_params_ui.cc:104
msgid "Outputs"
msgstr "Ausgänge"
-#: io_selector.cc:143
-#, fuzzy
+#: gtk2_ardour/io_selector.cc:145
msgid "Add Input"
-msgstr "Port hinzufügen"
+msgstr "Hinzufügen"
-#: io_selector.cc:143
-#, fuzzy
+#: gtk2_ardour/io_selector.cc:145
msgid "Add Output"
-msgstr "%1 Ausgang"
+msgstr "Hinzufügen"
-#: io_selector.cc:144
-#, fuzzy
+#: gtk2_ardour/io_selector.cc:146
msgid "Remove Input"
-msgstr "Synchronisationspunkt entfernen"
+msgstr "Entfernen"
-#: io_selector.cc:144
-#, fuzzy
+#: gtk2_ardour/io_selector.cc:146
msgid "Remove Output"
-msgstr "Ausgänge"
+msgstr "Entfernen"
-#: io_selector.cc:145
-#, fuzzy
+#: gtk2_ardour/io_selector.cc:147
msgid "Disconnect All"
-msgstr "Trennen"
+msgstr "Alle trennen"
-#: io_selector.cc:159
+#: gtk2_ardour/io_selector.cc:161
msgid "Available connections"
msgstr "Verfügbare Verbindungen"
-#: io_selector.cc:555 io_selector.cc:574
+#: gtk2_ardour/io_selector.cc:550
+#: gtk2_ardour/io_selector.cc:561
msgid "There are no more JACK ports available."
-msgstr ""
-
-#: io_selector.cc:649 io_selector.cc:676 io_selector.cc:729
-msgid "port"
-msgstr "Anschluß"
+msgstr "Es sind keine weiteren JACK Ports verfügbar."
-#: io_selector.cc:798
+#: gtk2_ardour/io_selector.cc:755
msgid "ardour: "
msgstr "Ardour: "
-#: keyboard.cc:299
+#: gtk2_ardour/keyboard.cc:299
msgid "KeyboardTarget: keyname \"%1\" is unknown."
msgstr ""
-#: keyboard.cc:525
-msgid ""
-"Your system is completely broken - NumLock uses \"%1\"as its modifier. This "
-"is madness - see the man page for xmodmap to find out how to fix this."
-msgstr ""
+#: gtk2_ardour/keyboard.cc:525
+msgid "Your system is completely broken - NumLock uses \"%1\"as its modifier. This is madness - see the man page for xmodmap to find out how to fix this."
+msgstr "Ihr System ist falsch konfiguriert. Die NumLock-Taste nutzt \"%1\" als Modifier. Das wird schwere Probleme bereiten. Auf der man page von xmodmap finden sich Infirmationen, wie dieses Problem behoben werden kann."
-#: keyboard.cc:533
-msgid ""
-"Your system generates \"%1\" when the NumLock key is pressed. This can cause "
-"problems when editing so Ardour will use %2 to mean Meta rather than %1"
-msgstr ""
+#: gtk2_ardour/keyboard.cc:533
+msgid "Your system generates \"%1\" when the NumLock key is pressed. This can cause problems when editing so Ardour will use %2 to mean Meta rather than %1"
+msgstr "Ihr System generiert \"%1\" wenn NumLock gedrückt wird. Dies kann zu Problemen führen. Ardour wird deshalb als Meta-Taste %2 an Stelle von %1 benutzen."
-#: keyboard.cc:594
+#: gtk2_ardour/keyboard.cc:594
msgid "You have %1 keys bound to \"mod1\""
msgstr ""
-#: keyboard.cc:609
+#: gtk2_ardour/keyboard.cc:609
msgid "You have %1 keys bound to \"mod2\""
msgstr ""
-#: keyboard.cc:624
+#: gtk2_ardour/keyboard.cc:624
msgid "You have %1 keys bound to \"mod3\""
msgstr ""
-#: keyboard.cc:639
+#: gtk2_ardour/keyboard.cc:639
msgid "You have %1 keys bound to \"mod4\""
msgstr ""
-#: keyboard.cc:654
+#: gtk2_ardour/keyboard.cc:654
msgid "You have %1 keys bound to \"mod5\""
msgstr ""
-#: location_ui.cc:48 location_ui.cc:51
+#: gtk2_ardour/ladspa_pluginui.cc:77
+msgid "<span size=\"large\">Presets</span>"
+msgstr ""
+
+#: gtk2_ardour/ladspa_pluginui.cc:205
+msgid "Plugin Editor: could not build control element for port %1"
+msgstr ""
+
+#: gtk2_ardour/ladspa_pluginui.cc:296
+#, fuzzy
+msgid "Automation control"
+msgstr "Stellen"
+
+#: gtk2_ardour/location_ui.cc:49
+#: gtk2_ardour/location_ui.cc:52
#, fuzzy
msgid "Set"
msgstr "Auswahl"
-#: location_ui.cc:49 location_ui.cc:52
+#: gtk2_ardour/location_ui.cc:50
+#: gtk2_ardour/location_ui.cc:53
msgid "Go"
msgstr ""
-#: location_ui.cc:55
+#: gtk2_ardour/location_ui.cc:56
msgid "CD"
msgstr "CD"
-#: location_ui.cc:58
+#: gtk2_ardour/location_ui.cc:59
msgid "SCMS"
msgstr ""
-#: location_ui.cc:59
+#: gtk2_ardour/location_ui.cc:60
msgid "Pre-Emphasis"
msgstr ""
-#: location_ui.cc:570
+#: gtk2_ardour/location_ui.cc:571
#, fuzzy
msgid "Add New Location"
msgstr "Stellen"
-#: location_ui.cc:571
+#: gtk2_ardour/location_ui.cc:572
msgid "Add New Range"
-msgstr ""
+msgstr "Neuen Bereich hinzufügen"
-#: location_ui.cc:575
+#: gtk2_ardour/location_ui.cc:576
msgid "ardour: locations"
msgstr ""
-#: location_ui.cc:576
+#: gtk2_ardour/location_ui.cc:577
#, fuzzy
msgid "ardour_locations"
msgstr "Ardour: Verbindungen"
-#: location_ui.cc:604
+#: gtk2_ardour/location_ui.cc:605
#, fuzzy
msgid "Location (CD Index) Markers"
msgstr "Stellen"
-#: location_ui.cc:624
+#: gtk2_ardour/location_ui.cc:625
msgid "Range (CD Track) Markers"
msgstr ""
-#: location_ui.cc:790
+#: gtk2_ardour/location_ui.cc:793
#, fuzzy
msgid "add range marker"
msgstr "Ardour: Region umbenennen"
-#: main.cc:72
+#: gtk2_ardour/main.cc:73
msgid "ardour is killing itself for a clean exit\n"
msgstr ""
-#: main.cc:81
+#: gtk2_ardour/main.cc:82
msgid "stopping user interface\n"
-msgstr ""
+msgstr "Stoppe Benutzeroberfläche\n"
-#. XXX its doubtful that snprintf() is async-safe
-#: main.cc:100
+#: gtk2_ardour/main.cc:101
#, c-format
msgid "%d(%d): received signal %d\n"
msgstr ""
-#: main.cc:180
+#: gtk2_ardour/main.cc:181
msgid "cannot become new process group leader (%1)"
msgstr ""
-#: main.cc:207
+#: gtk2_ardour/main.cc:208
msgid "cannot setup signal handling for %1"
msgstr ""
-#: main.cc:218
+#: gtk2_ardour/main.cc:219
msgid "cannot set default signal mask (%1)"
msgstr ""
-#: main.cc:248
+#: gtk2_ardour/main.cc:249
msgid ""
"Without a UI style file, ardour will look strange.\n"
" Please set ARDOUR2_UI_RC to point to a valid UI style file"
msgstr ""
+"Ohne UI-Definitionsdatei wird Ardour merkwürdig aussehen.\n"
+" Bitte setzen Sie ARDOUR_UI_RC auf eine gültige UI-Definitionsdatei"
-#: main.cc:270
+#: gtk2_ardour/main.cc:270
msgid "Ardour could not connect to JACK."
-msgstr ""
+msgstr "Ardour konnte nicht zu JACK verbinden."
-#: main.cc:274
+#: gtk2_ardour/main.cc:274
msgid ""
"There are several possible reasons:\n"
"\n"
@@ -4805,493 +5023,433 @@ msgid ""
"\n"
"Please consider the possibilities, and perhaps (re)start JACK."
msgstr ""
-
-#: main.cc:304
-msgid "could not load command line session \"%1\""
-msgstr ""
-
-#. it wasn't new, but we require a new session
-#: main.cc:324
-msgid ""
+"Dafür kann es verschiedene Gründe geben:\n"
"\n"
+"1) JACK läuft nicht.\n"
+"2) JACK wurde unter einem anderen Benutzer gestartet, möglicherweise als root.\n"
+"3) Es gibt bereits einen anderen Client mit der Bezeichnung \"ardour\".\n"
"\n"
-"A session named \"%1\" already exists.\n"
-"To avoid this message, start ardour as \"ardour %1"
-msgstr ""
+"Betrachten Sie bitte diese Möglichkeiten und starten Sie JACK neu, wenn dies notwendig sein sollte."
+
+#: gtk2_ardour/main.cc:316
+msgid "could not load command line session \"%1\""
+msgstr "Konnte die per Kommandozeile übergebene Sitzung nicht laden: \"%1\""
-#: main.cc:335
+#: gtk2_ardour/main.cc:324
msgid ""
"\n"
"\n"
"No session named \"%1\" exists.\n"
"To create it from the command line, start ardour as \"ardour --new %1"
msgstr ""
+"\n"
+"\n"
+"Es existiert keine Sitzung mit dem namen \"%1\".\n"
+"Um sie von der Kommandozeile aus zu erstellen, starten Sie Ardour mit \"ardour --new %1"
-#: main.cc:399
+#: gtk2_ardour/main.cc:385
msgid "Ardour/GTK "
msgstr ""
-#: main.cc:401
+#: gtk2_ardour/main.cc:387
msgid ""
"\n"
" (built using "
msgstr ""
-#: main.cc:405
-msgid " with libardour "
-msgstr ""
-
-#: main.cc:410
+#: gtk2_ardour/main.cc:390
msgid " and GCC version "
msgstr ""
-#: main.cc:420
+#: gtk2_ardour/main.cc:400
msgid "Copyright (C) 1999-2006 Paul Davis"
msgstr ""
-#: main.cc:421
-msgid ""
-"Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
-"Baker"
+#: gtk2_ardour/main.cc:401
+msgid "Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel Baker"
msgstr ""
-#: main.cc:423
+#: gtk2_ardour/main.cc:403
msgid "Ardour comes with ABSOLUTELY NO WARRANTY"
msgstr "Achtung: Es gibt zu Ardour KEINERLEI Gewährleistung!"
-#: main.cc:424
+#: gtk2_ardour/main.cc:404
msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
msgstr ""
-#: main.cc:425
+#: gtk2_ardour/main.cc:405
msgid "This is free software, and you are welcome to redistribute it "
msgstr "Dies ist freie Software und Sie dürfen sie gerne weiterverbreiten,"
-#: main.cc:426
+#: gtk2_ardour/main.cc:406
#, fuzzy
msgid "under certain conditions; see the source for copying conditions."
msgstr "solange Sie sich an die Spielregeln aus der Datei COPYING halten."
-#: main.cc:435
+#: gtk2_ardour/main.cc:416
msgid "could not create ARDOUR GUI"
msgstr ""
-#: main.cc:453
+#: gtk2_ardour/main.cc:433
msgid "Could not connect to JACK server as \"%1\""
-msgstr ""
+msgstr "Konnte nicht zu JACK Server als \"%1\" verbinden"
-#: main.cc:456
+#: gtk2_ardour/main.cc:443
msgid "could not initialize Ardour."
-msgstr ""
+msgstr "Konnte Ardour nicht initialisieren."
-#: marker.cc:244
+#: gtk2_ardour/marker.cc:244
#, fuzzy
msgid "MarkerText"
msgstr "Schicht"
-#: marker_time_axis.cc:254
-#, fuzzy
+#: gtk2_ardour/marker_time_axis.cc:254
msgid "Remove Marker"
-msgstr "Feld entfernen"
+msgstr "Marker entfernen"
-#: marker_time_axis.cc:256
+#: gtk2_ardour/marker_time_axis.cc:256
#, fuzzy
msgid "Marker"
msgstr "Schicht"
-#: meter_bridge.cc:78
-msgid "ardour: meter bridge"
-msgstr ""
-
-#: meter_bridge.cc:79
-msgid "ardour_meter_bridge"
-msgstr ""
-
-#: meter_bridge_strip.cc:80 meter_bridge_strip.cc:94
-#, c-format
-msgid "# of %u-sample overs"
-msgstr ""
-
-#: meter_bridge_strip.cc:222
-#, fuzzy
-msgid "New Name for Meter:"
-msgstr "Name für Mixer-Voreinstellung"
-
-#: mixer_strip.cc:95 mixer_strip.cc:140 mixer_strip.cc:1227
+#: gtk2_ardour/mixer_strip.cc:94
+#: gtk2_ardour/mixer_strip.cc:139
+#: gtk2_ardour/mixer_strip.cc:1218
msgid "pre"
-msgstr ""
+msgstr "pre"
-#: mixer_strip.cc:96 mixer_strip.cc:822
+#: gtk2_ardour/mixer_strip.cc:95
+#: gtk2_ardour/mixer_strip.cc:796
msgid "Comments"
-msgstr ""
+msgstr "Kommentare"
-#: mixer_strip.cc:119
+#: gtk2_ardour/mixer_strip.cc:118
#, fuzzy
msgid "Input"
msgstr "Eingänge"
-#: mixer_strip.cc:136 mixer_strip.cc:1223
-#, fuzzy
+#: gtk2_ardour/mixer_strip.cc:135
+#: gtk2_ardour/mixer_strip.cc:1214
msgid "input"
-msgstr "%1 Eingang"
+msgstr "input"
-#: mixer_strip.cc:144 mixer_strip.cc:1231
-#, fuzzy
+#: gtk2_ardour/mixer_strip.cc:143
+#: gtk2_ardour/mixer_strip.cc:1222
msgid "post"
-msgstr "Anschluß"
+msgstr "post"
-#. TRANSLATORS: this string should be longest of the strings
-#. used to describe meter points. In english, its "input".
-#.
-#: mixer_strip.cc:152
+#: gtk2_ardour/mixer_strip.cc:150
msgid "tupni"
msgstr ""
-#: mixer_strip.cc:207
+#: gtk2_ardour/mixer_strip.cc:204
msgid "Varispeed"
msgstr ""
-#: mixer_strip.cc:233 mixer_strip.cc:836
+#: gtk2_ardour/mixer_strip.cc:230
+#: gtk2_ardour/mixer_strip.cc:812
msgid "Click to Add/Edit Comments"
-msgstr ""
+msgstr "Kommentare hinzufügen/ändern"
-#: mixer_strip.cc:374
+#: gtk2_ardour/mixer_strip.cc:386
msgid "unknown strip width \"%1\" in XML GUI information"
msgstr ""
-#: mixer_strip.cc:417
-#, fuzzy
+#: gtk2_ardour/mixer_strip.cc:430
msgid "record"
-msgstr "Wiederherstellen"
+msgstr "Aufnahme"
-#: mixer_strip.cc:418 region_editor.cc:47
-msgid "mute"
-msgstr "mute"
-
-#: mixer_strip.cc:419
-msgid "solo"
-msgstr "solo"
-
-#: mixer_strip.cc:422
+#: gtk2_ardour/mixer_strip.cc:437
msgid "comments"
-msgstr ""
+msgstr "Kommentare"
-#: mixer_strip.cc:424
+#: gtk2_ardour/mixer_strip.cc:440
msgid "*comments*"
msgstr ""
-#: mixer_strip.cc:438
+#: gtk2_ardour/mixer_strip.cc:455
#, fuzzy
msgid "Rec"
msgstr "Auffrischen"
-#: mixer_strip.cc:439
+#: gtk2_ardour/mixer_strip.cc:457
msgid "M"
-msgstr ""
+msgstr "M"
-#: mixer_strip.cc:440
+#: gtk2_ardour/mixer_strip.cc:458
msgid "S"
-msgstr ""
+msgstr "S"
-#: mixer_strip.cc:443 mixer_strip.cc:830
+#: gtk2_ardour/mixer_strip.cc:462
+#: gtk2_ardour/mixer_strip.cc:806
#, fuzzy
msgid "Cmt"
msgstr "Ausschneiden"
-#: mixer_strip.cc:445 mixer_strip.cc:828
+#: gtk2_ardour/mixer_strip.cc:465
+#: gtk2_ardour/mixer_strip.cc:803
msgid "*Cmt*"
msgstr ""
-#: mixer_strip.cc:483 mixer_strip.cc:549 redirect_box.cc:1006
+#: gtk2_ardour/mixer_strip.cc:503
+#: gtk2_ardour/mixer_strip.cc:569
+#: gtk2_ardour/redirect_box.cc:1012
msgid "Not connected to JACK - no I/O changes are possible"
-msgstr ""
-
-#: mixer_strip.cc:560
-msgid "Track"
-msgstr "Spur"
+msgstr "Nicht mit Jack verbunden - es sind keine Änderungen an Ein-/Ausgängen möglich"
-#: mixer_strip.cc:588 mixer_strip.cc:604
+#: gtk2_ardour/mixer_strip.cc:603
+#: gtk2_ardour/mixer_strip.cc:619
msgid "could not register new ports required for that connection"
-msgstr ""
+msgstr "Konnte die Ports, die diese Verbindung benötigt nicht registrieren"
-#: mixer_strip.cc:747
+#: gtk2_ardour/mixer_strip.cc:726
#, fuzzy
msgid " Input"
msgstr "Eingänge"
-#: mixer_strip.cc:750
+#: gtk2_ardour/mixer_strip.cc:729
msgid "I"
msgstr ""
-#: mixer_strip.cc:820
+#: gtk2_ardour/mixer_strip.cc:793
msgid "*Comments*"
msgstr ""
-#: mixer_strip.cc:859
+#: gtk2_ardour/mixer_strip.cc:848
#, fuzzy
msgid ": comment editor"
msgstr "Der Editor konnte nicht initialisiert werden."
-#: mixer_strip.cc:953
+#: gtk2_ardour/mixer_strip.cc:943
msgid "Grp"
-msgstr ""
+msgstr "Grp"
-#: mixer_strip.cc:956
+#: gtk2_ardour/mixer_strip.cc:946
msgid "~G"
msgstr ""
-#: mixer_strip.cc:1004
-#, fuzzy
+#: gtk2_ardour/mixer_strip.cc:995
msgid "Invert Polarity"
-msgstr "Polarität"
+msgstr "Polarität umkehren"
-#: mixer_ui.cc:85
+#: gtk2_ardour/mixer_ui.cc:83
msgid "Strips"
-msgstr "Streifen"
+msgstr "Spur"
-#: mixer_ui.cc:110
-#, fuzzy
+#: gtk2_ardour/mixer_ui.cc:108
msgid "Group"
-msgstr "Mix Gruppen"
+msgstr "Gruppe"
-#: mixer_ui.cc:211 mixer_ui.cc:370
+#: gtk2_ardour/mixer_ui.cc:209
+#: gtk2_ardour/mixer_ui.cc:389
msgid "ardour: mixer"
msgstr "Ardour: Mixer"
-#: mixer_ui.cc:212
+#: gtk2_ardour/mixer_ui.cc:210
#, fuzzy
msgid "ardour_mixer"
msgstr "Ardour: Mixer"
-#: mixer_ui.cc:346
+#: gtk2_ardour/mixer_ui.cc:361
msgid "ardour: mixer: "
msgstr "Ardour: Mixer: "
-#: mixer_ui.cc:573
+#: gtk2_ardour/mixer_ui.cc:592
msgid "signal"
msgstr "Signal"
-#: mixer_ui.cc:723
+#: gtk2_ardour/mixer_ui.cc:741
msgid "track display list item for renamed strip not found!"
msgstr ""
-#: new_session_dialog.cc:39
+#: gtk2_ardour/new_session_dialog.cc:41
#, fuzzy
-msgid "New Session Name :"
-msgstr "Name der Sitzung"
+msgid "Name :"
+msgstr "Umbenennen"
-#: new_session_dialog.cc:41
-msgid "Create Session Directory In :"
-msgstr ""
+#: gtk2_ardour/new_session_dialog.cc:45
+#: gtk2_ardour/new_session_dialog.cc:46
+#: gtk2_ardour/new_session_dialog.cc:47
+#: gtk2_ardour/new_session_dialog.cc:48
+#: gtk2_ardour/sfdb_ui.cc:172
+msgid "channels"
+msgstr "Kanäle"
-#: new_session_dialog.cc:43
-#, fuzzy
-msgid "Use Session Template :"
-msgstr "Name der Sitzung"
+#: gtk2_ardour/new_session_dialog.cc:66
+msgid "<b>Busses</b>"
+msgstr "<b>Busse</b>"
-#: new_session_dialog.cc:45
-#, fuzzy
-msgid "Channel Count"
-msgstr "Importieren Abbrechen"
+#: gtk2_ardour/new_session_dialog.cc:67
+msgid "<b>Inputs</b>"
+msgstr "<b>Eingänge</b>"
+
+#: gtk2_ardour/new_session_dialog.cc:68
+msgid "<b>Outputs</b>"
+msgstr "<b>Ausgänge</b>"
+
+#: gtk2_ardour/new_session_dialog.cc:70
+msgid "Create Folder In :"
+msgstr "Verzeichnis erstellen in:"
-#: new_session_dialog.cc:46
+#: gtk2_ardour/new_session_dialog.cc:72
+msgid "Template :"
+msgstr "Vorlage :"
+
+#: gtk2_ardour/new_session_dialog.cc:74
msgid "Create Monitor Bus"
-msgstr ""
+msgstr "Monitor Bus erstellen"
-#: new_session_dialog.cc:53
+#: gtk2_ardour/new_session_dialog.cc:81
msgid "Create Master Bus"
-msgstr ""
-
-#: new_session_dialog.cc:55
-#, fuzzy
-msgid "Automatically Connect Inputs"
-msgstr "Verfügbare Verbindungen"
+msgstr "Master Bus erstellen"
-#: new_session_dialog.cc:56 new_session_dialog.cc:67
-#, fuzzy
-msgid "Port Limit"
-msgstr "Abbrechen"
+#: gtk2_ardour/new_session_dialog.cc:83
+msgid "Automatically Connect to Physical Inputs"
+msgstr "Eingänge automatisch mit Soundkarteneingängen verbinden"
-#: new_session_dialog.cc:64
-#, fuzzy
-msgid "<b>Track/Bus Inputs</b>"
-msgstr "Ausgänge"
+#: gtk2_ardour/new_session_dialog.cc:84
+#: gtk2_ardour/new_session_dialog.cc:97
+msgid "Use only"
+msgstr "Benutze nur"
-#: new_session_dialog.cc:66
-#, fuzzy
+#: gtk2_ardour/new_session_dialog.cc:96
msgid "Automatically Connect Outputs"
-msgstr "Verfügbare Verbindungen"
+msgstr "Ausgänge automatisch verbinden"
-#: new_session_dialog.cc:75
-msgid "Connect to Master Bus"
-msgstr ""
-
-#: new_session_dialog.cc:76
-msgid "Connect to Physical Outputs"
-msgstr ""
+#: gtk2_ardour/new_session_dialog.cc:105
+msgid "... to Master Bus"
+msgstr "... mit Master Bus"
-#: new_session_dialog.cc:80
-#, fuzzy
-msgid "<b>Track/Bus Outputs</b>"
-msgstr "Ausgänge"
+#: gtk2_ardour/new_session_dialog.cc:106
+msgid "... to Physical Outputs"
+msgstr "... mit Soundkartenausgängen"
-#: new_session_dialog.cc:83
-#, fuzzy
+#: gtk2_ardour/new_session_dialog.cc:112
msgid "Advanced Options"
-msgstr "Geschwindigkeitseditor"
+msgstr "Erweiterte Einstellungen"
-#: new_session_dialog.cc:91
-#, fuzzy
-msgid "Open Recent Session"
-msgstr "Sitzung"
+#: gtk2_ardour/new_session_dialog.cc:120
+msgid "Recent:"
+msgstr "Zuletzt verwendet:"
-#: new_session_dialog.cc:127
-#, fuzzy
-msgid "Open Session File :"
-msgstr "Sitzung"
+#: gtk2_ardour/new_session_dialog.cc:157
+msgid "Browse:"
+msgstr "Durchsuchen:"
-#: new_session_dialog.cc:274
-#, fuzzy
+#: gtk2_ardour/new_session_dialog.cc:335
msgid "New Session"
-msgstr "Sitzung"
+msgstr "Neue Sitzung"
-#: new_session_dialog.cc:276
-#, fuzzy
+#: gtk2_ardour/new_session_dialog.cc:337
msgid "Open Session"
-msgstr "Sitzung"
+msgstr "Sitzung öffnen"
-#: new_session_dialog.cc:281
-#, fuzzy
+#: gtk2_ardour/new_session_dialog.cc:342
msgid "ardour: session control"
msgstr "Ardour: Neue Sitzung"
-#: new_session_dialog.cc:310
-#, fuzzy
+#: gtk2_ardour/new_session_dialog.cc:371
msgid "select template"
-msgstr "Voreinstellung"
+msgstr "Vorlage auswählen"
-#: new_session_dialog.cc:316
+#: gtk2_ardour/new_session_dialog.cc:377
#, fuzzy
msgid "select session file"
msgstr "Auswahl zu Schleife machen"
-#: new_session_dialog.cc:325
+#: gtk2_ardour/new_session_dialog.cc:386
#, fuzzy
msgid "select directory"
msgstr "Auswahl zu Schleife machen"
-#: option_editor.cc:76
+#: gtk2_ardour/option_editor.cc:75
msgid "SMPTE offset is negative"
-msgstr ""
+msgstr "Negatives SMPTE-Offset"
-#: option_editor.cc:102
+#: gtk2_ardour/option_editor.cc:101
#, fuzzy
msgid "ardour: options editor"
msgstr "Ardour: Einstellungen"
-#: option_editor.cc:103
+#: gtk2_ardour/option_editor.cc:102
#, fuzzy
msgid "ardour_option_editor"
msgstr "Ardour: Einstellungen"
-#: option_editor.cc:127
+#: gtk2_ardour/option_editor.cc:126
msgid "Paths/Files"
-msgstr "Pfade- und Dateinamen"
+msgstr "Pfade"
-#: option_editor.cc:128
+#: gtk2_ardour/option_editor.cc:127
msgid "Kbd/Mouse"
-msgstr ""
+msgstr "Tastatur/Maus"
-#: option_editor.cc:131
+#: gtk2_ardour/option_editor.cc:130
msgid "Layers & Fades"
-msgstr ""
+msgstr "Layer & Fades"
-#: option_editor.cc:135
+#: gtk2_ardour/option_editor.cc:134
msgid "MIDI"
-msgstr ""
+msgstr "MIDI"
-#: option_editor.cc:177
-msgid "24 FPS"
-msgstr ""
-
-#: option_editor.cc:179
-msgid "25 FPS"
-msgstr ""
-
-#: option_editor.cc:181
-msgid "30 FPS"
-msgstr ""
-
-#: option_editor.cc:187
-msgid "30 FPS drop"
-msgstr ""
-
-#: option_editor.cc:244
+#: gtk2_ardour/option_editor.cc:222
msgid "session RAID path"
-msgstr ""
+msgstr "Sitzungsverzeichnis (RAID)"
-#: option_editor.cc:249
-#, fuzzy
+#: gtk2_ardour/option_editor.cc:227
msgid "Soundfile Search Paths"
-msgstr "Ardour: Audio Bibliothek"
-
-#: option_editor.cc:254
-#, fuzzy
-msgid "Paths"
-msgstr "Pfade- und Dateinamen"
+msgstr "Suchpfade für Audiodateien"
-#: option_editor.cc:268 option_editor.cc:274 option_editor.cc:723
-#: option_editor.cc:750
-#, fuzzy
+#: gtk2_ardour/option_editor.cc:252
+#: gtk2_ardour/option_editor.cc:258
+#: gtk2_ardour/option_editor.cc:670
+#: gtk2_ardour/option_editor.cc:697
msgid "internal"
-msgstr "mittelmäßig"
+msgstr "intern"
-#: option_editor.cc:287
+#: gtk2_ardour/option_editor.cc:271
msgid "Short crossfade length (msecs)"
-msgstr ""
+msgstr "Länge für kurze Crossfades (ms)"
-#: option_editor.cc:299
+#: gtk2_ardour/option_editor.cc:283
msgid "Destructive crossfade length (msecs)"
-msgstr ""
-
-#: option_editor.cc:367
-msgid "SMPTE Frames/second"
-msgstr ""
+msgstr "Länge für destruktive Crossfades (ms)"
-#: option_editor.cc:368
+#: gtk2_ardour/option_editor.cc:343
msgid "SMPTE Offset"
-msgstr ""
+msgstr "SMPTE Offset"
-#: option_editor.cc:462 option_editor.cc:469 option_editor.cc:472
-#: option_editor.cc:618
+#: gtk2_ardour/option_editor.cc:410
+#: gtk2_ardour/option_editor.cc:417
+#: gtk2_ardour/option_editor.cc:420
+#: gtk2_ardour/option_editor.cc:565
#, fuzzy
msgid "online"
msgstr "Verbindungen"
-#. remember, we have to handle the i18n case where the relative
-#. lengths of the strings in language N is different than in english.
-#.
-#: option_editor.cc:469 option_editor.cc:470 option_editor.cc:615
+#: gtk2_ardour/option_editor.cc:417
+#: gtk2_ardour/option_editor.cc:418
+#: gtk2_ardour/option_editor.cc:562
msgid "offline"
msgstr ""
-#: option_editor.cc:670
+#: gtk2_ardour/option_editor.cc:617
msgid "Choose Click"
msgstr ""
-#: option_editor.cc:689
+#: gtk2_ardour/option_editor.cc:636
msgid "Choose Click Emphasis"
msgstr ""
-#: option_editor.cc:803
+#: gtk2_ardour/option_editor.cc:750
msgid "Click audio file"
-msgstr ""
+msgstr "Audiodatei für Click"
-#: option_editor.cc:809
+#: gtk2_ardour/option_editor.cc:756
msgid "Click emphasis audiofile"
-msgstr ""
+msgstr "Audiodatei für betonten Click "
-#: option_editor.cc:846
+#: gtk2_ardour/option_editor.cc:793
msgid ""
"The auditioner is a dedicated mixer strip used\n"
"for listening to specific regions outside the context\n"
@@ -5299,265 +5457,239 @@ msgid ""
"other mixer strip."
msgstr ""
-#: option_editor.cc:919
-#, fuzzy
+#: gtk2_ardour/option_editor.cc:866
msgid "Edit using"
-msgstr "Mix Gruppen"
+msgstr "Bearbeiten mit"
-#: option_editor.cc:926 option_editor.cc:953
+#: gtk2_ardour/option_editor.cc:873
+#: gtk2_ardour/option_editor.cc:900
msgid "+ button"
-msgstr ""
+msgstr "und Maustaste"
-#: option_editor.cc:946
-#, fuzzy
+#: gtk2_ardour/option_editor.cc:893
msgid "Delete using"
-msgstr "Messungen"
+msgstr "Entfernen mit"
-#: option_editor.cc:973
+#: gtk2_ardour/option_editor.cc:920
msgid "Ignore snap using"
-msgstr ""
+msgstr "Einrasten übergehen mit"
-#: opts.cc:46
+#: gtk2_ardour/opts.cc:46
msgid "Usage: "
msgstr "Aufruf:"
-#: opts.cc:47
+#: gtk2_ardour/opts.cc:47
msgid " -v, --version Show version information\n"
msgstr " -v, --version Versionsinformation ausgeben\n"
-#: opts.cc:48
+#: gtk2_ardour/opts.cc:48
msgid " -h, --help Print this message\n"
msgstr " -h, --help Diese Hinweise\n"
-#: opts.cc:49
-msgid ""
-" -b, --bindings Print all possible keyboard binding "
-"names\n"
-msgstr ""
-" -b, --bindings Alle möglichen Tastenzuweisungsnamen "
-"ausgeben\n"
+#: gtk2_ardour/opts.cc:49
+msgid " -b, --bindings Print all possible keyboard binding names\n"
+msgstr " -b, --bindings Alle möglichen Tastenzuweisungsnamen ausgeben\n"
-#: opts.cc:50
+#: gtk2_ardour/opts.cc:50
#, fuzzy
msgid " -n, --show-splash Show splash screen\n"
msgstr " -h, --help Diese Hinweise\n"
-#: opts.cc:51
+#: gtk2_ardour/opts.cc:51
#, fuzzy
-msgid ""
-" -c, --name name Use a specific jack client name, default "
-"is ardour\n"
+msgid " -c, --name name Use a specific jack client name, default is ardour\n"
msgstr " -U, --ui-rcfile=FILENAME Dateiname für UI Einstellungen\n"
-#: opts.cc:52
+#: gtk2_ardour/opts.cc:52
#, fuzzy
-msgid ""
-" -N, --new session-name Create a new session from the command "
-"line\n"
+msgid " -N, --new session-name Create a new session from the command line\n"
msgstr " [session-name] Name der zu ladenden Sitzung\n"
-#: opts.cc:53
-msgid ""
-" -o, --use-hw-optimizations Try to use h/w specific optimizations\n"
+#: gtk2_ardour/opts.cc:53
+msgid " -o, --use-hw-optimizations Try to use h/w specific optimizations\n"
msgstr ""
-#: opts.cc:55
+#: gtk2_ardour/opts.cc:55
#, fuzzy
msgid " -V, --novst Do not use VST support\n"
msgstr " -h, --help Diese Hinweise\n"
-#: opts.cc:57
+#: gtk2_ardour/opts.cc:57
msgid " [session-name] Name of session to load\n"
msgstr " [session-name] Name der zu ladenden Sitzung\n"
-#: opts.cc:58
+#: gtk2_ardour/opts.cc:58
msgid " -C, --curvetest filename Curve algorithm debugger\n"
msgstr ""
-#: opts.cc:59
+#: gtk2_ardour/opts.cc:59
#, fuzzy
msgid " -g, --gtktheme Allow GTK to load a theme\n"
msgstr " -h, --help Diese Hinweise\n"
-#: pan_automation_time_axis.cc:60
-msgid "You can't graphically edit panning of more than stream"
+#: gtk2_ardour/pan_automation_time_axis.cc:70
+msgid "You need to select which line to edit"
msgstr ""
-#: pan_automation_time_axis.cc:80
+#: gtk2_ardour/pan_automation_time_axis.cc:91
#, fuzzy
msgid "add pan automation event"
msgstr "Stellen"
-#: panner2d.cc:589 panner_ui.cc:435 plugin_ui.cc:834
+#: gtk2_ardour/panner2d.cc:589
+#: gtk2_ardour/panner_ui.cc:425
+#: gtk2_ardour/plugin_ui.cc:151
msgid "Bypass"
-msgstr ""
+msgstr "Bypass"
-#: panner_ui.cc:58 panner_ui.cc:225
+#: gtk2_ardour/panner_ui.cc:56
+#: gtk2_ardour/panner_ui.cc:223
#, fuzzy
msgid "link"
msgstr "leer"
-#: panner_ui.cc:69
-#, fuzzy
+#: gtk2_ardour/panner_ui.cc:67
msgid "Pan automation mode"
-msgstr "Stellen"
+msgstr "Pan-Automationsmodus"
-#: panner_ui.cc:70
+#: gtk2_ardour/panner_ui.cc:68
#, fuzzy
msgid "Pan automation type"
msgstr "Stellen"
-#: panner_ui.cc:81
+#: gtk2_ardour/panner_ui.cc:79
msgid "panning link control"
-msgstr ""
+msgstr "Pan-Regler gruppieren"
-#: panner_ui.cc:83
+#: gtk2_ardour/panner_ui.cc:81
msgid "panning link direction"
-msgstr ""
+msgstr "Richtung der Gruppierung"
-#: panner_ui.cc:235
+#: gtk2_ardour/panner_ui.cc:233
msgid "L"
-msgstr ""
+msgstr "L"
-#: panner_ui.cc:335
+#: gtk2_ardour/panner_ui.cc:328
#, c-format
-msgid "panner for channel %lu"
-msgstr ""
-
-#: panner_ui.cc:337
-#, c-format
-msgid "panner for channel %u"
-msgstr ""
+msgid "panner for channel %zu"
+msgstr "Pan-Regler für Kanal %zu"
-#: panner_ui.cc:445
+#: gtk2_ardour/panner_ui.cc:435
#, fuzzy
msgid "Reset all"
msgstr "bestmöglich"
-#: playlist_selector.cc:52
+#: gtk2_ardour/playlist_selector.cc:52
#, fuzzy
msgid "ardour: playlists"
msgstr "Ardour: Plugins"
-#: playlist_selector.cc:59
+#: gtk2_ardour/playlist_selector.cc:59
msgid "Playlists grouped by track"
msgstr ""
-#: playlist_selector.cc:98
+#: gtk2_ardour/playlist_selector.cc:98
#, fuzzy
msgid "ardour: playlist for "
msgstr "Ardour: Editor: "
-#: playlist_selector.cc:114
+#: gtk2_ardour/playlist_selector.cc:114
#, fuzzy
msgid "Other tracks"
msgstr "Stille einfügen"
-#: playlist_selector.cc:130
+#: gtk2_ardour/playlist_selector.cc:130
msgid "unassigned"
msgstr ""
-#: plugin_selector.cc:43
+#: gtk2_ardour/plugin_selector.cc:43
msgid "ardour: plugins"
msgstr "Ardour: Plugins"
-#: plugin_selector.cc:56
-#, fuzzy
+#: gtk2_ardour/plugin_selector.cc:56
msgid "Available LADSPA Plugins"
msgstr "Verfügbare LADSPA Plugins"
-#: plugin_selector.cc:57
+#: gtk2_ardour/plugin_selector.cc:57
msgid "Type"
msgstr "Typ"
-#: plugin_selector.cc:58 plugin_selector.cc:81
+#: gtk2_ardour/plugin_selector.cc:58
+#: gtk2_ardour/plugin_selector.cc:81
+#: gtk2_ardour/plugin_selector.cc:99
msgid "# Inputs"
msgstr "Eingänge"
-#: plugin_selector.cc:59 plugin_selector.cc:82
+#: gtk2_ardour/plugin_selector.cc:59
+#: gtk2_ardour/plugin_selector.cc:82
+#: gtk2_ardour/plugin_selector.cc:100
msgid "# Outputs"
msgstr "Ausgänge"
-#: plugin_selector.cc:68
+#: gtk2_ardour/plugin_selector.cc:68
msgid "Plugins to be Connected to Insert"
-msgstr ""
+msgstr "Plugins, die als Insert verbunden werden"
-#: plugin_selector.cc:80
-#, fuzzy
+#: gtk2_ardour/plugin_selector.cc:80
+#: gtk2_ardour/plugin_selector.cc:98
msgid "Available plugins"
-msgstr "Verfügbare LADSPA Plugins"
+msgstr "Verfügbare VST-Plugins"
-#: plugin_selector.cc:98
+#: gtk2_ardour/plugin_selector.cc:117
msgid "Add a plugin to the effect list"
msgstr "Plugin zur Effektliste hinzufügen"
-#: plugin_selector.cc:102
+#: gtk2_ardour/plugin_selector.cc:121
msgid "Remove a plugin from the effect list"
msgstr "Plugin aus der Effektliste entfernen"
-#: plugin_selector.cc:104
+#: gtk2_ardour/plugin_selector.cc:123
msgid "Update available plugins"
msgstr "Verfügbare Plugins auffrischen"
-#: plugin_selector.cc:126
+#: gtk2_ardour/plugin_selector.cc:146
msgid "LADSPA"
-msgstr ""
+msgstr "LADSPA"
-#: plugin_selector.cc:129
+#: gtk2_ardour/plugin_selector.cc:150
msgid "VST"
-msgstr ""
+msgstr "VST"
-#: plugin_ui.cc:84
-msgid ""
-"unknown type of editor-supplying plugin (note: no VST support in this "
-"version of ardour)"
+#: gtk2_ardour/plugin_selector.cc:155
+msgid "AudioUnit"
msgstr ""
-#: plugin_ui.cc:139
-msgid "<span size=\"large\">Presets</span>"
+#: gtk2_ardour/plugin_ui.cc:85
+msgid "unknown type of editor-supplying plugin (note: no VST support in this version of ardour)"
msgstr ""
-#: plugin_ui.cc:230
-#, fuzzy
-msgid "Controls"
-msgstr "Verbindungen"
-
-#: plugin_ui.cc:267
-msgid "Plugin Editor: could not build control element for port %1"
-msgstr ""
-
-#: plugin_ui.cc:358
-#, fuzzy
-msgid "Automation control"
-msgstr "Stellen"
-
-#: plugin_ui.cc:854
+#: gtk2_ardour/plugin_ui.cc:171
msgid "Plugin preset %1 not found"
-msgstr ""
+msgstr "Plugin Preset %1 nicht gefunden"
-#: plugin_ui.cc:864
+#: gtk2_ardour/plugin_ui.cc:181
#, fuzzy
msgid "Name of New Preset:"
msgstr "Name für neue Verbindung:"
-#: redirect_automation_line.cc:54
+#: gtk2_ardour/redirect_automation_line.cc:54
msgid "redirect automation created for non-plugin"
msgstr ""
-#: redirect_automation_time_axis.cc:94
+#: gtk2_ardour/redirect_automation_time_axis.cc:96
#, fuzzy
msgid "add automation event to "
msgstr "Stellen"
-#: redirect_box.cc:223
+#: gtk2_ardour/redirect_box.cc:226
msgid "New send"
msgstr ""
-#: redirect_box.cc:224
+#: gtk2_ardour/redirect_box.cc:227
msgid "Show send controls"
msgstr ""
-#: redirect_box.cc:383
+#: gtk2_ardour/redirect_box.cc:386
msgid ""
"You attempted to add a plugin (%1).\n"
"The plugin has %2 inputs\n"
@@ -5568,7 +5700,7 @@ msgid ""
"part of the signal."
msgstr ""
-#: redirect_box.cc:395
+#: gtk2_ardour/redirect_box.cc:398
msgid ""
"You attempted to add a plugin (%1).\n"
"The plugin has %2 inputs\n"
@@ -5580,7 +5712,7 @@ msgid ""
"support this type of configuration."
msgstr ""
-#: redirect_box.cc:408
+#: gtk2_ardour/redirect_box.cc:411
msgid ""
"You attempted to add a plugin (%1).\n"
"\n"
@@ -5593,34 +5725,35 @@ msgid ""
"Ardour does not understand what to do in such situations.\n"
msgstr ""
-#: redirect_box.cc:495
+#: gtk2_ardour/redirect_box.cc:499
msgid "Pre-fader inserts, sends & plugins:"
msgstr ""
-#: redirect_box.cc:498
+#: gtk2_ardour/redirect_box.cc:502
msgid "Post-fader inserts, sends & plugins:"
-msgstr ""
+msgstr "Post-Fader Inserts, Sends & Plugins:"
-#: redirect_box.cc:644
+#: gtk2_ardour/redirect_box.cc:650
msgid ""
"You cannot reorder this set of redirects\n"
"in that way because the inputs and\n"
"outputs do not work correctly."
msgstr ""
-#: redirect_box.cc:749
+#: gtk2_ardour/redirect_box.cc:750
#, fuzzy
msgid "rename redirect"
msgstr "Ardour: Region umbenennen"
-#: redirect_box.cc:826 redirect_box.cc:874
+#: gtk2_ardour/redirect_box.cc:824
+#: gtk2_ardour/redirect_box.cc:872
msgid ""
"Copying the set of redirects on the clipboard failed,\n"
"probably because the I/O configuration of the plugins\n"
"could not match the configuration of this track."
msgstr ""
-#: redirect_box.cc:896
+#: gtk2_ardour/redirect_box.cc:894
#, fuzzy
msgid ""
"Do you really want to remove all redirects from this track?\n"
@@ -5629,7 +5762,7 @@ msgstr ""
"Wollen Sie wirklich die Spur \"%1\" löschen?\n"
"(Kann nicht rückgängig gemacht werden!)"
-#: redirect_box.cc:899
+#: gtk2_ardour/redirect_box.cc:897
#, fuzzy
msgid ""
"Do you really want to remove all redirects from this bus?\n"
@@ -5638,261 +5771,194 @@ msgstr ""
"Wollen Sie wirklich die Spur \"%1\" löschen?\n"
"(Kann nicht rückgängig gemacht werden!)"
-#: redirect_box.cc:904
-#, fuzzy
+#: gtk2_ardour/redirect_box.cc:902
msgid "Yes, remove them all"
-msgstr "Ja, entfernen."
+msgstr "Ja, alle löschen"
-#: redirect_box.cc:940
+#: gtk2_ardour/redirect_box.cc:938
#, fuzzy
msgid "ardour: %1"
msgstr "Ardour: "
-#: redirect_box.cc:982
-#, fuzzy
-msgid "ardour: %1: %2 (by %3)"
-msgstr "Ardour: "
-
-#. new stuff
-#: redirect_box.cc:1054
+#: gtk2_ardour/redirect_box.cc:1060
msgid "New Plugin ..."
-msgstr ""
+msgstr "Plugin einfügen..."
-#: redirect_box.cc:1055
-#, fuzzy
+#: gtk2_ardour/redirect_box.cc:1062
msgid "New Insert"
-msgstr "Neuer Eingang"
+msgstr "Insert einfügen"
-#: redirect_box.cc:1056
+#: gtk2_ardour/redirect_box.cc:1064
msgid "New Send ..."
-msgstr ""
+msgstr "Send einfügen..."
-#: redirect_box.cc:1068
-#, fuzzy
+#: gtk2_ardour/redirect_box.cc:1078
msgid "Deselect All"
-msgstr "Auswahl"
+msgstr "Nichts auswählen"
-#: redirect_box.cc:1075
-#, fuzzy
+#: gtk2_ardour/redirect_box.cc:1085
msgid "Activate all"
-msgstr "Aktiv"
+msgstr "Alle aktivieren"
-#: redirect_box.cc:1076
-#, fuzzy
+#: gtk2_ardour/redirect_box.cc:1086
msgid "Deactivate all"
-msgstr "Alles deaktivieren"
+msgstr "Alle deaktivieren"
-#: region_editor.cc:45
-msgid "NAME:"
-msgstr ""
-
-#: region_editor.cc:46
-msgid "lock"
-msgstr ""
-
-#: region_editor.cc:48
-msgid "opaque"
-msgstr ""
-
-#: region_editor.cc:49 region_editor.cc:192 region_editor.cc:226
-msgid "active"
-msgstr ""
-
-#: region_editor.cc:50
-msgid "visible"
-msgstr ""
-
-#: region_editor.cc:53
-msgid "Layer"
-msgstr "Schicht"
-
-#: region_editor.cc:54
-msgid "play"
-msgstr ""
-
-#: region_editor.cc:61
-msgid "ENVELOPE"
-msgstr ""
-
-#: region_editor.cc:107
+#: gtk2_ardour/redirect_box.cc:1263
#, fuzzy
-msgid "mute this region"
-msgstr "Name für Region:"
-
-#: region_editor.cc:108
-msgid "regions underneath this one cannot be heard"
-msgstr ""
-
-#: region_editor.cc:109
-msgid "prevent any changes to this region"
-msgstr ""
-
-#: region_editor.cc:110
-msgid "use the gain envelope during playback"
-msgstr ""
-
-#: region_editor.cc:111
-msgid "show the gain envelope"
-msgstr ""
+msgid "ardour: %1: %2 (by %3)"
+msgstr "Ardour: "
-#: region_editor.cc:112
-msgid "use fade in curve during playback"
-msgstr ""
+#: gtk2_ardour/audio_region_editor.cc:47
+msgid "NAME:"
+msgstr "NAME:"
-#: region_editor.cc:113
-msgid "use fade out curve during playback"
+#: gtk2_ardour/audio_region_editor.cc:48
+msgid "play"
msgstr ""
-#: region_editor.cc:114
+#: gtk2_ardour/audio_region_editor.cc:67
msgid "audition this region"
msgstr ""
-#: region_editor.cc:147
+#: gtk2_ardour/audio_region_editor.cc:82
msgid "START:"
-msgstr ""
+msgstr "BEGINN:"
-#: region_editor.cc:149
+#: gtk2_ardour/audio_region_editor.cc:84
msgid "END:"
-msgstr ""
+msgstr "ENDE:"
-#: region_editor.cc:151
+#: gtk2_ardour/audio_region_editor.cc:86
msgid "LENGTH:"
-msgstr ""
-
-#: region_editor.cc:191
-msgid "FADE IN"
-msgstr ""
-
-#: region_editor.cc:193 region_editor.cc:227
-msgid "msecs"
-msgstr ""
-
-#: region_editor.cc:225
-msgid "FADE OUT"
-msgstr ""
+msgstr "LÄNGE:"
-#: region_editor.cc:265
+#: gtk2_ardour/audio_region_editor.cc:122
msgid "ardour: region "
msgstr "Ardour: Region"
-#: region_editor.cc:402
-msgid "fade in edit"
-msgstr ""
+#: gtk2_ardour/audio_region_editor.cc:202
+#, fuzzy
+msgid "change region start position"
+msgstr "Regionen"
-#: region_editor.cc:414
+#: gtk2_ardour/audio_region_editor.cc:219
#, fuzzy
-msgid "fade out edit"
+msgid "change region end position"
+msgstr "Regionen"
+
+#: gtk2_ardour/audio_region_editor.cc:240
+#, fuzzy
+msgid "change region length"
msgstr "Ardour: Editor"
-#: regionview.cc:1146
+#: gtk2_ardour/audio_region_view.cc:937
#, fuzzy
msgid "add gain control point"
msgstr "Synchronisationspunkt entfernen"
-#: route_params_ui.cc:89
+#: gtk2_ardour/route_params_ui.cc:85
msgid "Tracks/Buses"
msgstr ""
-#: route_params_ui.cc:109
+#: gtk2_ardour/route_params_ui.cc:105
msgid "Pre-fader Redirects"
msgstr ""
-#: route_params_ui.cc:110
+#: gtk2_ardour/route_params_ui.cc:106
msgid "Post-fader Redirects"
msgstr ""
-#: route_params_ui.cc:144
+#: gtk2_ardour/route_params_ui.cc:140
#, fuzzy
msgid "ardour: track/bus inspector"
msgstr "Ardour: Editor"
-#: route_params_ui.cc:145
+#: gtk2_ardour/route_params_ui.cc:141
#, fuzzy
msgid "ardour_route_parameters"
msgstr "Ardour: Route"
-#: route_params_ui.cc:202
+#: gtk2_ardour/route_params_ui.cc:202
msgid "route display list item for renamed route not found!"
msgstr ""
-#: route_params_ui.cc:453
+#: gtk2_ardour/route_params_ui.cc:449
msgid "NO TRACK"
msgstr ""
-#: route_params_ui.cc:695
+#: gtk2_ardour/route_params_ui.cc:672
#, fuzzy
msgid "ardour: track/bus inspector: "
msgstr "Ardour: Editor"
-#: route_params_ui.cc:699
+#: gtk2_ardour/route_params_ui.cc:676
msgid "No Route Selected"
msgstr "Keine Route ausgewählt"
-#: route_params_ui.cc:700
+#: gtk2_ardour/route_params_ui.cc:677
#, fuzzy
msgid "ardour: track/bus/inspector: no route selected"
msgstr "Ardour: Route: keine Route ausgewählt"
-#. ctrl-shift-click applies change to all routes
-#: route_ui.cc:134
+#: gtk2_ardour/route_ui.cc:144
#, fuzzy
msgid "mute change"
msgstr "Bereich"
-#. ctrl-shift-click applies change to all routes
-#. ctrl-alt-click: exclusively solo this track, not a toggle */
-#: route_ui.cc:209 route_ui.cc:219
+#: gtk2_ardour/route_ui.cc:222
+#: gtk2_ardour/route_ui.cc:233
#, fuzzy
msgid "solo change"
msgstr "Bereich"
-#: route_ui.cc:282
+#: gtk2_ardour/route_ui.cc:291
+msgid "Not connected to JACK - cannot engage record"
+msgstr ""
+
+#: gtk2_ardour/route_ui.cc:303
msgid "rec-enable change"
msgstr ""
-#: route_ui.cc:479
+#: gtk2_ardour/route_ui.cc:501
#, fuzzy
msgid "Solo-safe"
msgstr "solo"
-#: route_ui.cc:487 route_ui.cc:530
-msgid "MIDI Bind"
-msgstr ""
-
-#: route_ui.cc:501
+#: gtk2_ardour/route_ui.cc:523
msgid "Pre Fader"
msgstr ""
-#: route_ui.cc:508
+#: gtk2_ardour/route_ui.cc:530
msgid "Post Fader"
msgstr ""
-#: route_ui.cc:515
+#: gtk2_ardour/route_ui.cc:537
msgid "Control Outs"
msgstr ""
-#: route_ui.cc:522
+#: gtk2_ardour/route_ui.cc:544
msgid "Main Outs"
msgstr ""
-#: route_ui.cc:559
+#: gtk2_ardour/route_ui.cc:581
msgid "mix group solo change"
msgstr ""
-#: route_ui.cc:593
+#: gtk2_ardour/route_ui.cc:620
msgid "mix group mute change"
msgstr ""
-#: route_ui.cc:609
+#: gtk2_ardour/route_ui.cc:637
msgid "mix group rec-enable change"
msgstr ""
-#: route_ui.cc:626 visual_time_axis.cc:237
+#: gtk2_ardour/route_ui.cc:655
+#: gtk2_ardour/visual_time_axis.cc:242
msgid "ardour: color selection"
msgstr "Ardour: Farbe auswählen"
-#: route_ui.cc:702
-#, fuzzy
+#: gtk2_ardour/route_ui.cc:731
msgid ""
"Do you really want to remove track \"%1\" ?\n"
"\n"
@@ -5900,221 +5966,269 @@ msgid ""
"(cannot be undone)"
msgstr ""
"Wollen Sie wirklich die Spur \"%1\" löschen?\n"
-"(Kann nicht rückgängig gemacht werden!)"
+"\n"
+"Sie werden auch die Wiedergabeliste, die diese Spur benutzt verlieren.(Dies kann nicht rückgängig gemacht werden!)"
-#: route_ui.cc:704
+#: gtk2_ardour/route_ui.cc:733
msgid ""
"Do you really want to remove bus \"%1\" ?\n"
"(cannot be undone)"
msgstr ""
+"Wollen Sie den Bus \"%1\" wirklich löschen?\n"
+"(Dies kann nicht rückgängig gemacht werden!)"
-#: route_ui.cc:708 visual_time_axis.cc:279
+#: gtk2_ardour/route_ui.cc:737
+#: gtk2_ardour/visual_time_axis.cc:284
msgid "Yes, remove it."
msgstr "Ja, entfernen."
-#: route_ui.cc:737
+#: gtk2_ardour/route_ui.cc:758
#, fuzzy
msgid "New Name: "
msgstr "Neuer Name: "
-#: sfdb_ui.cc:58
+#: gtk2_ardour/sfdb_ui.cc:61
msgid "Add Field..."
msgstr "Feld hinzufügen..."
-#: sfdb_ui.cc:59
+#: gtk2_ardour/sfdb_ui.cc:62
msgid "Remove Field"
msgstr "Feld entfernen"
-#: sfdb_ui.cc:62
+#: gtk2_ardour/sfdb_ui.cc:65
msgid "Soundfile Info"
msgstr ""
-#: sfdb_ui.cc:80
+#: gtk2_ardour/sfdb_ui.cc:84
msgid "Field"
msgstr "Feld"
-#: sfdb_ui.cc:81
+#: gtk2_ardour/sfdb_ui.cc:85
msgid "Value"
msgstr "Wert"
-#: sfdb_ui.cc:161
+#: gtk2_ardour/sfdb_ui.cc:139
+msgid "Length: %1"
+msgstr ""
+
+#: gtk2_ardour/sfdb_ui.cc:145
#, fuzzy
-msgid "channels"
-msgstr "Abbrechen"
+msgid "Channels: %1"
+msgstr "Kanäle"
+
+#: gtk2_ardour/sfdb_ui.cc:148
+#, fuzzy
+msgid "Samplerate: %1"
+msgstr "Ausgewählten Bereich wiedergeben"
+
+#: gtk2_ardour/sfdb_ui.cc:151
+#, fuzzy
+msgid "Timecode: %1"
+msgstr "Timecode"
-#: sfdb_ui.cc:161
+#: gtk2_ardour/sfdb_ui.cc:172
#, fuzzy
msgid "samplerate"
msgstr "Ausgewählten Bereich wiedergeben"
-#: sfdb_ui.cc:162
+#: gtk2_ardour/sfdb_ui.cc:173
#, fuzzy
msgid "resolution"
msgstr "Auswahl wiedergeben"
-#: sfdb_ui.cc:162
+#: gtk2_ardour/sfdb_ui.cc:173
#, fuzzy
msgid "format"
msgstr "Anschluß"
-#: sfdb_ui.cc:183
+#: gtk2_ardour/sfdb_ui.cc:194
msgid "Could not read file: %1 (%2)."
msgstr ""
-#: sfdb_ui.cc:199
+#: gtk2_ardour/sfdb_ui.cc:212
msgid "Could not access soundfile: "
msgstr ""
-#: sfdb_ui.cc:236
+#: gtk2_ardour/sfdb_ui.cc:260
#, fuzzy
msgid "Name for Field"
msgstr "Name für Region:"
-#: sfdb_ui.cc:335
+#: gtk2_ardour/sfdb_ui.cc:327
+msgid "Add to Region list"
+msgstr "Zur Liste der Regionen hinzufügen"
+
+#: gtk2_ardour/sfdb_ui.cc:328
+msgid "Add to selected Track(s)"
+msgstr "Zu ausgewählten Spuren hinzufügen"
+
+#: gtk2_ardour/sfdb_ui.cc:329
+msgid "Add as new Track(s)"
+msgstr "Als neue Spur(en) hinzufügen"
+
+#: gtk2_ardour/sfdb_ui.cc:330
+msgid "Add as new Tape Track(s)"
+msgstr "Als neue Tape-Spuren hinzufügen"
+
+#: gtk2_ardour/sfdb_ui.cc:372
msgid "Split Channels"
-msgstr ""
+msgstr "Kanäle aufteilen"
-#: sfdb_ui.cc:342
+#: gtk2_ardour/sfdb_ui.cc:379
msgid "Create a region for each channel"
-msgstr ""
+msgstr "Erstellt aus jedem Kanal eine eigene Region"
-#: sfdb_ui.cc:344
+#: gtk2_ardour/sfdb_ui.cc:381
msgid "Embed"
-msgstr ""
+msgstr "Einbetten"
-#: sfdb_ui.cc:346
+#: gtk2_ardour/sfdb_ui.cc:383
msgid "Link to an external file"
-msgstr ""
+msgstr "Bettet eine externe Datei ein, ohne sie zu ins Verzeichnis der Sitzung zu importieren"
-#: sfdb_ui.cc:348
+#: gtk2_ardour/sfdb_ui.cc:387
msgid "Import"
msgstr "Importieren"
-#: sfdb_ui.cc:350
+#: gtk2_ardour/sfdb_ui.cc:389
msgid "Copy a file to the session folder"
-msgstr ""
-
-#: sfdb_ui.cc:414
-msgid "programming error: %1"
-msgstr ""
+msgstr "Kopiert eine Datei in das Verzeichnis der Sitzung"
-#: tempo_dialog.cc:18 tempo_dialog.cc:35
+#: gtk2_ardour/tempo_dialog.cc:18
+#: gtk2_ardour/tempo_dialog.cc:35
msgid "Beats per minute"
msgstr ""
-#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:203
-#: tempo_dialog.cc:221
+#: gtk2_ardour/tempo_dialog.cc:21
+#: gtk2_ardour/tempo_dialog.cc:38
+#: gtk2_ardour/tempo_dialog.cc:203
+#: gtk2_ardour/tempo_dialog.cc:221
msgid "Bar"
msgstr ""
-#: tempo_dialog.cc:22 tempo_dialog.cc:39 tempo_dialog.cc:204
-#: tempo_dialog.cc:222
+#: gtk2_ardour/tempo_dialog.cc:22
+#: gtk2_ardour/tempo_dialog.cc:39
+#: gtk2_ardour/tempo_dialog.cc:204
+#: gtk2_ardour/tempo_dialog.cc:222
msgid "Beat"
msgstr ""
-#: tempo_dialog.cc:24 tempo_dialog.cc:41 tempo_dialog.cc:205
-#: tempo_dialog.cc:223
+#: gtk2_ardour/tempo_dialog.cc:24
+#: gtk2_ardour/tempo_dialog.cc:41
+#: gtk2_ardour/tempo_dialog.cc:205
+#: gtk2_ardour/tempo_dialog.cc:223
#, fuzzy
msgid "Location"
msgstr "Stellen"
-#: tempo_dialog.cc:199 tempo_dialog.cc:217
+#: gtk2_ardour/tempo_dialog.cc:199
+#: gtk2_ardour/tempo_dialog.cc:217
msgid "Meter denominator"
msgstr ""
-#: tempo_dialog.cc:200 tempo_dialog.cc:218
+#: gtk2_ardour/tempo_dialog.cc:200
+#: gtk2_ardour/tempo_dialog.cc:218
msgid "Beats per bar"
msgstr ""
-#: tempo_dialog.cc:236 tempo_dialog.cc:247
+#: gtk2_ardour/tempo_dialog.cc:236
+#: gtk2_ardour/tempo_dialog.cc:247
msgid "whole (1)"
msgstr ""
-#: tempo_dialog.cc:237 tempo_dialog.cc:249
+#: gtk2_ardour/tempo_dialog.cc:237
+#: gtk2_ardour/tempo_dialog.cc:249
msgid "second (2)"
msgstr ""
-#: tempo_dialog.cc:238 tempo_dialog.cc:251
+#: gtk2_ardour/tempo_dialog.cc:238
+#: gtk2_ardour/tempo_dialog.cc:251
msgid "third (3)"
msgstr ""
-#: tempo_dialog.cc:239 tempo_dialog.cc:253 tempo_dialog.cc:261
+#: gtk2_ardour/tempo_dialog.cc:239
+#: gtk2_ardour/tempo_dialog.cc:253
+#: gtk2_ardour/tempo_dialog.cc:261
msgid "quarter (4)"
msgstr ""
-#: tempo_dialog.cc:240 tempo_dialog.cc:255
+#: gtk2_ardour/tempo_dialog.cc:240
+#: gtk2_ardour/tempo_dialog.cc:255
msgid "eighth (8)"
msgstr ""
-#: tempo_dialog.cc:241 tempo_dialog.cc:257
+#: gtk2_ardour/tempo_dialog.cc:241
+#: gtk2_ardour/tempo_dialog.cc:257
msgid "sixteenth (16)"
msgstr ""
-#: tempo_dialog.cc:242 tempo_dialog.cc:259
+#: gtk2_ardour/tempo_dialog.cc:242
+#: gtk2_ardour/tempo_dialog.cc:259
msgid "thirty-second (32)"
msgstr ""
-#: tempo_dialog.cc:420
+#: gtk2_ardour/tempo_dialog.cc:420
msgid "garbaged note type entry (%1)"
msgstr ""
-#: tempo_dialog.cc:430
+#: gtk2_ardour/tempo_dialog.cc:430
msgid "incomprehensible note type entry (%1)"
msgstr ""
-#: time_axis_view.cc:112
+#: gtk2_ardour/time_axis_view.cc:112
msgid "gTortnam"
msgstr ""
-#: time_axis_view.cc:549
+#: gtk2_ardour/time_axis_view.cc:583
msgid "Largest"
-msgstr ""
+msgstr "Am größten"
-#: time_axis_view.cc:550
-#, fuzzy
+#: gtk2_ardour/time_axis_view.cc:584
msgid "Large"
-msgstr "Schicht"
+msgstr "Groß"
-#: time_axis_view.cc:551
-#, fuzzy
+#: gtk2_ardour/time_axis_view.cc:585
msgid "Larger"
-msgstr "Schicht"
+msgstr "Größer"
-#: time_axis_view.cc:553
+#: gtk2_ardour/time_axis_view.cc:587
msgid "Smaller"
-msgstr ""
+msgstr "Kleiner"
-#: time_axis_view.cc:554
-#, fuzzy
+#: gtk2_ardour/time_axis_view.cc:588
msgid "Small"
-msgstr "Alle zeigen"
+msgstr "Klein"
-#: time_axis_view.cc:870
+#: gtk2_ardour/time_axis_view.cc:902
msgid "unknown track height name \"%1\" in XML GUI information"
msgstr ""
-#. first constructed item sets up font info
-#: time_axis_view_item.cc:79
+#: gtk2_ardour/time_axis_view_item.cc:79
msgid "TimeAxisViewItemName"
msgstr ""
-#: time_axis_view_item.cc:298
+#: gtk2_ardour/time_axis_view_item.cc:302
msgid "new duration %1 frames is out of bounds for %2"
msgstr ""
-#: time_selection.cc:41
+#: gtk2_ardour/time_selection.cc:41
msgid "programming error: request for non-existent audio range (%1)!"
msgstr ""
-#: utils.cc:107 utils.cc:150
+#: gtk2_ardour/utils.cc:106
+#: gtk2_ardour/utils.cc:149
msgid "bad XPM header %1"
msgstr ""
-#: utils.cc:332
+#: gtk2_ardour/utils.cc:331
msgid "missing RGBA style for \"%1\""
msgstr ""
-#: visual_time_axis.cc:276
+#: gtk2_ardour/utils.cc:513
+msgid "cannot find icon image for %1"
+msgstr ""
+
+#: gtk2_ardour/visual_time_axis.cc:281
msgid ""
"Do you really want to remove track \"%1\" ?\n"
"(cannot be undone)"
@@ -6122,368 +6236,107 @@ msgstr ""
"Wollen Sie wirklich die Spur \"%1\" löschen?\n"
"(Kann nicht rückgängig gemacht werden!)"
-#: visual_time_axis.cc:325
+#: gtk2_ardour/visual_time_axis.cc:330
msgid "new name: "
msgstr "Neuer Name: "
-#: visual_time_axis.cc:336
+#: gtk2_ardour/visual_time_axis.cc:341
msgid "A track already exists with that name"
msgstr ""
-#, fuzzy
-#~ msgid "set selected trackview"
-#~ msgstr "Stille einfügen"
-
-#, fuzzy
-#~ msgid "set selected control point"
-#~ msgstr "Synchronisationspunkt entfernen"
-
-#, fuzzy
-#~ msgid "set selected regionview"
-#~ msgstr "Auswahl zu Schleife machen"
-
-#, fuzzy
-#~ msgid "Start a new session\n"
-#~ msgstr "Bitte mittels des \"Sitzung\"-Menüs\n"
-
-#~ msgid "via Session menu"
-#~ msgstr "eine Sitzung laden oder eine neue erstellen!"
-
-#, fuzzy
-#~ msgid "<b>Advanced</b>"
-#~ msgstr "Feld hinzufügen..."
-
-#, fuzzy
-#~ msgid "Select a File"
-#~ msgstr "Auswahl"
-
-#~ msgid "RECORD"
-#~ msgstr "AUFNAHME"
-
-#~ msgid "INPUT"
-#~ msgstr "EINGANG"
-
-#~ msgid "OUTPUT"
-#~ msgstr "AUSGANG"
-
-#, fuzzy
-#~ msgid "Gain automation mode"
-#~ msgstr "Stellen"
-
-#, fuzzy
-#~ msgid "Gain automation type"
-#~ msgstr "Stellen"
-
-#, fuzzy
-#~ msgid "trim"
-#~ msgstr "Streifen"
-
-#, fuzzy
-#~ msgid "gain automation mode"
-#~ msgstr "Stellen"
-
-#, fuzzy
-#~ msgid "gain automation state"
-#~ msgstr "Stellen"
-
-#, fuzzy
-#~ msgid "pan automation state"
-#~ msgstr "Stellen"
-
-#~ msgid "no group"
-#~ msgstr "keine Gruppe"
-
-#, fuzzy
-#~ msgid "normal"
-#~ msgstr "Ardour: Region"
-
-#, fuzzy
-#~ msgid "ardour cleanup"
-#~ msgstr "Ardour: Uhr"
-
-#, fuzzy
-#~ msgid "close session"
-#~ msgstr "Bitte mittels des \"Sitzung\"-Menüs\n"
-
-#, fuzzy
-#~ msgid "SetRegionLayerMode"
-#~ msgstr "Regionen"
-
-#, fuzzy
-#~ msgid "SetCrossfadeModel"
-#~ msgstr "Ardour: Editor"
-
-#, fuzzy
-#~ msgid "Play from"
-#~ msgstr "Wiedergabe ab Anfang"
-
-#, fuzzy
-#~ msgid "Set from range"
-#~ msgstr "Ausgewählten Bereich wiedergeben"
-
-#, fuzzy
-#~ msgid "ardour: unplugged"
-#~ msgstr "Ardour: Plugins"
-
-#~ msgid "To be added"
-#~ msgstr "hinzuzufügen"
-
-#~ msgid "Update"
-#~ msgstr "Auffrischen"
-
-#, fuzzy
-#~ msgid "save"
-#~ msgstr "Speichern"
-
-#~ msgid "Name for plugin settings:"
-#~ msgstr "Name für Plugineinstellungen:"
-
-#, fuzzy
-#~ msgid "spring"
-#~ msgstr "Importieren"
-
-#, fuzzy
-#~ msgid "Sprung"
-#~ msgstr "Sortieren"
-
-#~ msgid "rescan"
-#~ msgstr "Auffrischen"
-
-#, fuzzy
-#~ msgid "Enable/Disable follow playhead"
-#~ msgstr "Wiedergabeschleife an/abschalten"
-
-#~ msgid "Input Connections"
-#~ msgstr "Verbindungen der Eingänge"
-
-#~ msgid "Output Connections"
-#~ msgstr "Verbindungen der Ausgänge"
-
-#, fuzzy
-#~ msgid "New Input"
-#~ msgstr "Neuer Eingang"
-
-#, fuzzy
-#~ msgid "New Output"
-#~ msgstr "Neuer Ausgang"
-
-#, fuzzy
-#~ msgid "Add Port"
-#~ msgstr "Port hinzufügen"
-
-#, fuzzy
-#~ msgid "Available Ports"
-#~ msgstr "Verfügbare Verbindungen"
-
-#~ msgid "ardour: connections"
-#~ msgstr "Ardour: Verbindungen"
-
-#, fuzzy
-#~ msgid "crossfade editor"
-#~ msgstr "Ardour: Editor"
-
-#, fuzzy
-#~ msgid "Regions/name"
-#~ msgstr "Regionen"
-
-#~ msgid "Edit:"
-#~ msgstr "Bearbeiten:"
-
-#, fuzzy
-#~ msgid "Cancel cleanup"
-#~ msgstr "leeren"
-
-#, fuzzy
-#~ msgid "Import selected as tracks"
-#~ msgstr "Auswahl importieren"
-
-#~ msgid "ardour: audio import in progress"
-#~ msgstr "Ardour: Audio Import in Arbeit"
-
-#, fuzzy
-#~ msgid "You can't embed an audiofile until you have a session loaded."
-#~ msgstr ""
-#~ "Sie können keine Audio-Daten importieren, solange keine Sitzung geladen "
-#~ "ist."
-
-#, fuzzy
-#~ msgid "Insert selected as new tracks"
-#~ msgstr "Stille einfügen"
-
-#, fuzzy
-#~ msgid "Insert selected"
-#~ msgstr "Stille einfügen"
-
-#, fuzzy
-#~ msgid "hidden"
-#~ msgstr "Verbergen"
-
-#~ msgid "Sorting"
-#~ msgstr "Sortieren"
-
-#, fuzzy
-#~ msgid "Regions/length"
-#~ msgstr "nach Länge der Region"
-
-#, fuzzy
-#~ msgid "Regions/start"
-#~ msgstr "Regionen"
-
-#, fuzzy
-#~ msgid "Regions/end"
-#~ msgstr "Regionen"
-
-#, fuzzy
-#~ msgid "Regions/file name"
-#~ msgstr "nach Name der Region"
-
-#, fuzzy
-#~ msgid "ardour: soundfile selector"
-#~ msgstr "Ardour: Farbe auswählen"
-
-#~ msgid "Add to Library..."
-#~ msgstr "Zu Bibliothek hinzufügen..."
-
-#~ msgid "Remove..."
-#~ msgstr "Entfernen..."
-
-#~ msgid "Find..."
-#~ msgstr "Suchen..."
-
-#~ msgid "Add Folder"
-#~ msgstr "Verzeichnis hinzufügen"
-
-#~ msgid "Add audio file or directory"
-#~ msgstr "Audio-Datei oder -Verzeichnis hinzufügen"
-
-#, fuzzy
-#~ msgid "Importing"
-#~ msgstr "Importieren"
-
-#~ msgid "Folder name:"
-#~ msgstr "Verzeichnisname:"
-
-#, fuzzy
-#~ msgid "Should not be reached"
-#~ msgstr "Datei \"%1\" konnte nicht geöffnet werden."
-
-#~ msgid "file \"%1\" could not be opened"
-#~ msgstr "Datei \"%1\" konnte nicht geöffnet werden."
-
-#~ msgid "Field name:"
-#~ msgstr "Feldname:"
-
-#~ msgid "Field value:"
-#~ msgstr "Wert des Feldes:"
-
-#~ msgid "AND"
-#~ msgstr "UND"
-
-#~ msgid "Results"
-#~ msgstr "Ergebnisse"
-
-#~ msgid "Create multi-channel region"
-#~ msgstr "Region mit mehreren Kanälen erstellen"
+#: gtk2_ardour/connection_editor.cc:51
+msgid "ardour: connections"
+msgstr "Ardour: Verbindungen"
-#~ msgid "Ardour: Search Results"
-#~ msgstr "Ardour: Suchergebnisse"
+#: gtk2_ardour/connection_editor.cc:52
+msgid "Input Connections"
+msgstr "Verbindungen der Eingänge"
-#~ msgid "Name for new mix group"
-#~ msgstr "Name für neue Mix Gruppe"
+#: gtk2_ardour/connection_editor.cc:53
+msgid "Output Connections"
+msgstr "Verbindungen der Ausgänge"
+#: gtk2_ardour/connection_editor.cc:54
#, fuzzy
-#~ msgid "Create"
-#~ msgstr "Abschnitt erzeugen:"
-
-#, fuzzy
-#~ msgid "show again"
-#~ msgstr "Stellen"
+msgid "New Input"
+msgstr "Neuer Eingang"
+#: gtk2_ardour/connection_editor.cc:55
#, fuzzy
-#~ msgid "new session setup"
-#~ msgstr "Name der Sitzung"
-
-#~ msgid "blank"
-#~ msgstr "leer"
+msgid "New Output"
+msgstr "Neuer Ausgang"
+#: gtk2_ardour/connection_editor.cc:58
+#: gtk2_ardour/connection_editor.cc:101
#, fuzzy
-#~ msgid "Slave to MTC"
-#~ msgstr "MTC senden"
+msgid "Add Port"
+msgstr "Port hinzufügen"
-#, fuzzy
-#~ msgid "Narrow mixer strips"
-#~ msgstr "schmale Mixerstreifen"
+#: gtk2_ardour/connection_editor.cc:106
+msgid "Available Ports"
+msgstr "Verfügbare Verbindungen"
+#: gtk2_ardour/connection_editor.cc:501
#, fuzzy
-#~ msgid "Misc"
-#~ msgstr "Min:Sek"
+msgid "Connection \""
+msgstr "Verbindungen"
-#~ msgid "Display"
-#~ msgstr "Anzeige"
+#: gtk2_ardour/connection_editor.cc:503
+msgid "\""
+msgstr ""
-#~ msgid "--unknown--"
-#~ msgstr "--unbekannt--"
+#: gtk2_ardour/connection_editor.cc:532
+#, c-format
+msgid "in %d"
+msgstr ""
-#, fuzzy
-#~ msgid "Select all"
-#~ msgstr "Auswahl"
+#: gtk2_ardour/connection_editor.cc:534
+#, fuzzy, c-format
+msgid "out %d"
+msgstr "Nur %1"
+#: gtk2_ardour/connection_editor.cc:658
#, fuzzy
-#~ msgid "Inserts"
-#~ msgstr "Stille einfügen"
+msgid "Name for new connection:"
+msgstr "Name für Region:"
-#, fuzzy
-#~ msgid "Sends"
-#~ msgstr "Minuten:Sekunden"
+#: gtk2_ardour/analysis_window.cc:46
+msgid "analysis window"
+msgstr ""
-#, fuzzy
-#~ msgid "Select all ..."
-#~ msgstr "Auswahl"
+#: gtk2_ardour/analysis_window.cc:48
+msgid "Signal source"
+msgstr ""
+#: gtk2_ardour/analysis_window.cc:49
#, fuzzy
-#~ msgid "Seamless Looping"
-#~ msgstr "Ausgewählten Bereich wiedergeben"
-
-#~ msgid "No toggle button pixmaps found to match toggle-button-[0-9]*.xpm$"
-#~ msgstr ""
-#~ "Keine Grafiken für Umschalter-Knöpfe gefunden!\n"
-#~ "(Gesuchter Dateiname: \"toggle-button[0-9]*.xpm$\")"
-
-#~ msgid ""
-#~ "No small push button pixmaps found to match small-round-button-[0-9]*.xpm$"
-#~ msgstr ""
-#~ "Keine Grafiken für kleine Schaltknöpfe gefunden!\n"
-#~ "(Gesuchter Dateiname: \"small-round-button[0-9]*.xpm$\")"
-
-#~ msgid "ardour: tempo editor"
-#~ msgstr "Ardour: Tempo bearbeiten"
+msgid "Selected ranges"
+msgstr "Ausgewählten Bereich wiedergeben"
+#: gtk2_ardour/analysis_window.cc:50
#, fuzzy
-#~ msgid "ardour_add_track_bus"
-#~ msgstr "Ardour: Editor"
-
-#~ msgid "ok"
-#~ msgstr "OK"
+msgid "Selected regions"
+msgstr "Auswahl zu Schleife machen"
+#: gtk2_ardour/analysis_window.cc:52
#, fuzzy
-#~ msgid "apply"
-#~ msgstr "Anwenden"
+msgid "Display model"
+msgstr "Anzeige"
-#, fuzzy
-#~ msgid "Edit left"
-#~ msgstr "Bearbeitungs Modus"
+#: gtk2_ardour/analysis_window.cc:53
+msgid "Composite graphs for each track"
+msgstr ""
-#, fuzzy
-#~ msgid "Edit right"
-#~ msgstr "Mix Gruppen"
+#: gtk2_ardour/analysis_window.cc:54
+msgid "Composite graph of all tracks"
+msgstr ""
-#, fuzzy
-#~ msgid "Edit fade"
-#~ msgstr "Bearbeitungs Modus"
+#: gtk2_ardour/analysis_window.cc:63
+msgid "Track"
+msgstr "Spur"
+#: gtk2_ardour/analysis_window.cc:131
#, fuzzy
-#~ msgid "Bounce region"
-#~ msgstr "Bereich"
+msgid "Analyze data"
+msgstr "Bereich"
-#~ msgid "clear connections"
-#~ msgstr "Verbindungen löschen"
diff --git a/gtk2_ardour/po/sv_SE.po b/gtk2_ardour/po/sv_SE.po
index 6dbef3b7eb..107e3d36ad 100644
--- a/gtk2_ardour/po/sv_SE.po
+++ b/gtk2_ardour/po/sv_SE.po
@@ -553,7 +553,7 @@ msgstr "fil"
#: ../ardour_ui.cc:2030
msgid "Are you sure you want to cleanup?"
-msgstr "Är du säker på att du vill göra en rensning?"
+msgstr "Är du säker på att du vill rensa upp?"
#: ../ardour_ui.cc:2035
msgid ""
@@ -562,17 +562,17 @@ msgid ""
"After cleanup, unused audio files will be moved to a \"dead sounds\" "
"location."
msgstr ""
-"Rensning är en destruktiv funktion.\n"
-"ALL ångra-/gör om-information kommer att förloras om du rensar.\n"
+"Att rensa är en destruktiv funktion.\n"
+"ALL ångra-/gör om-information kommer att gå förlorad om du rensar.\n"
"Oanvända filer kommer att flyttas till en \"döda ljud\"-plats."
#: ../ardour_ui.cc:2041
msgid "Clean Up"
-msgstr "Rensning"
+msgstr "Rensa upp"
#: ../ardour_ui.cc:2044
msgid "CleanupDialog"
-msgstr "Rensningsdialog"
+msgstr "Rensadialog"
#: ../ardour_ui.cc:2045
msgid "ardour_cleanup"
@@ -596,7 +596,7 @@ msgstr ""
"och har flyttats till:\n"
"%3. \n"
"\n"
-"Tömma papperskorgen kommer att \n"
+"Att tömma papperskorgen kommer att \n"
"frigöra ytterligarel\n"
"%4 %5byte diskutrymme.\n"
@@ -616,7 +616,7 @@ msgstr ""
#: ../ardour_ui.cc:2214
msgid "Recording was stopped because your system could not keep up."
-msgstr "Inspelningen avstannades eftersom ditt system inte kunde hänga med."
+msgstr "Inspelningen stoppades eftersom ditt system inte kunde hänga med."
#: ../ardour_ui.cc:2237
msgid ""
@@ -932,7 +932,7 @@ msgstr "Ã…teranslut"
#: ../ardour_ui_ed.cc:146 ../mixer_strip.cc:497 ../mixer_strip.cc:565
msgid "Disconnect"
-msgstr "Koppla ifrån"
+msgstr "Koppla från"
#: ../ardour_ui_ed.cc:173
msgid "Windows"
@@ -1082,11 +1082,11 @@ msgstr "GÃ¥ till slutet"
#: gtk2_ardour/ardour_ui.cc:119 gtk2_ardour/ardour_ui_ed.cc:267
msgid "Punch In"
-msgstr "Punch-in"
+msgstr "Inslag"
#: gtk2_ardour/ardour_ui.cc:120 gtk2_ardour/ardour_ui_ed.cc:270
msgid "Punch Out"
-msgstr "Punch-ut"
+msgstr "Utslag"
#: gtk2_ardour/ardour_ui.cc:121 gtk2_ardour/ardour_ui_ed.cc:282
msgid "Auto Return"
@@ -1371,6 +1371,11 @@ msgstr "Nya fulla övertoningar är påslagna"
msgid "ST"
msgstr "HT"
+#: gtk2_ardour/audio_clock.cc:1796 gtk2_ardour/editor.cc:180
+msgid "Timecode"
+msgstr "Tidskod"
+
+
#: ../ardour_ui_options.cc:407 ../ardour_ui_options.cc:417
#: ../ardour_ui_options.cc:484
msgid "Internal"
@@ -1560,10 +1565,18 @@ msgstr "Efter inspelningstiden"
msgid "Alignment"
msgstr "Justera"
+#: gtk2_ardour/route_time_axis.cc:458
+msgid "Normal mode"
+msgstr "Normalt läge"
+
+#: gtk2_ardour/route_time_axis.cc:461
+msgid "Tape mode"
+msgstr "Band-läge"
+
#: ../audio_time_axis.cc:787 ../editor.cc:526 ../editor_actions.cc:59
#: ../mixer_strip.cc:1000 ../mixer_ui.cc:110
msgid "Active"
-msgstr "Aktiva"
+msgstr "Aktiv"
#: ../audio_time_axis.cc:792 ../editor.cc:1921 ../editor_actions.cc:319
#: ../editor_markers.cc:507 ../imageframe_time_axis.cc:258
@@ -1633,7 +1646,7 @@ msgstr "ta bort kontrollpunkt"
#: ../automation_time_axis.cc:32 ../editor_ops.cc:2886
msgid "clear"
-msgstr "rensa"
+msgstr "Rensa"
#: ../automation_time_axis.cc:74
msgid "track height"
@@ -1661,7 +1674,7 @@ msgstr "Manuell"
#: ../gain_meter.cc:173 ../panner_ui.cc:90 ../plugin_ui.cc:394
#: ../plugin_ui.cc:636 ../sfdb_ui.cc:55
msgid "Play"
-msgstr "Spela"
+msgstr "Uppspelning"
#: ../automation_time_axis.cc:187 ../automation_time_axis.cc:234
#: ../automation_time_axis.cc:468 ../gain_meter.cc:175 ../panner_ui.cc:92
@@ -2109,8 +2122,8 @@ msgstr "Zoom-räckvidd"
#: ../editor.cc:501 ../editor.cc:527 ../editor_actions.cc:61 ../mixer_ui.cc:85
#: ../mixer_ui.cc:111
-msgid "Visible"
-msgstr "Synliga"
+msgid "Show"
+msgstr "Visa"
#: ../editor.cc:502 ../editor.cc:525
msgid "Name"
@@ -2263,6 +2276,10 @@ msgstr "Analysera regioner"
msgid "Lock"
msgstr "LÃ¥s"
+#: gtk2_ardour/editor.cc:1755
+msgid "Opaque"
+msgstr "Ogenomskinlig"
+
#: ../editor.cc:1852
msgid "Unlock"
msgstr "LÃ¥s upp"
@@ -2271,6 +2288,18 @@ msgstr "LÃ¥s upp"
msgid "Original position"
msgstr "Ursprunglig position"
+#: gtk2_ardour/editor.cc:1773
+msgid "Reset Envelope"
+msgstr "Nollställ konvolut"
+
+#: gtk2_ardour/editor.cc:1775
+msgid "Envelope Visible"
+msgstr "Konvolut synligt"
+
+#: gtk2_ardour/editor.cc:1782
+msgid "Envelope Active"
+msgstr "Konvolut aktivt"
+
#: ../editor.cc:1868
msgid "Toggle envelope visibility"
msgstr "Ändra konvolutsvisning"
@@ -2296,6 +2325,10 @@ msgstr "Motsatt riktning"
msgid "Add Range Markers"
msgstr "Lägg till omfångsmarkörer"
+#: gtk2_ardour/editor.cc:1804
+msgid "Set Range Selection"
+msgstr "Definiera omfångsmarkering"
+
#: ../editor.cc:1885
msgid "Set Range"
msgstr "Definiera omfång"
@@ -2683,6 +2716,26 @@ msgstr "Automatisk anslutning"
msgid "Layering"
msgstr "Lager"
+#: gtk2_ardour/editor_actions.cc:43
+msgid "Timecode fps"
+msgstr "Tidskod-FPS"
+
+#: gtk2_ardour/editor_actions.cc:44
+msgid "Pullup / Pulldown"
+msgstr "Uppåtdrag / Nedåtdrag"
+
+#: gtk2_ardour/editor_actions.cc:45
+msgid "Subframes"
+msgstr "Underrutor"
+
+#: gtk2_ardour/editor_actions.cc:388
+msgid "29.97 drop"
+msgstr "29.97 fall"
+
+#: gtk2_ardour/editor_actions.cc:390
+msgid "30 drop"
+msgstr "30 fall"
+
#: ../editor_actions.cc:41
msgid "Metering"
msgstr "Nivåmätning"
@@ -2782,7 +2835,7 @@ msgstr "Redigeringsmarkören till regionslutet"
#: ../editor_actions.cc:104 ../editor_ops.cc:1364
msgid "select all"
-msgstr "välj allt"
+msgstr "Välj allt"
#: ../editor_actions.cc:106
msgid "Select All After Edit Cursor"
@@ -2991,7 +3044,7 @@ msgstr "Normalisera region"
#: ../editor_actions.cc:232
msgid "crop"
-msgstr "beskär"
+msgstr "Beskär"
#: ../editor_actions.cc:234
msgid "Insert Chunk"
@@ -3263,6 +3316,14 @@ msgstr "Senast flyttade/tillagda är högre"
msgid "Most Recently Added is Higher"
msgstr "Senast tillagda är högre"
+#: gtk2_ardour/editor_actions.cc:408
+msgid "80 per frame"
+msgstr "80 per ruta"
+
+#: gtk2_ardour/editor_actions.cc:409
+msgid "100 per frame"
+msgstr "100 per ruta"
+
#: ../editor_audio_import.cc:72
msgid "You can't import or embed an audiofile until you have a session loaded."
msgstr "Du kan inte importera en ljudfil innan du har laddat en session."
@@ -4242,19 +4303,19 @@ msgstr ""
#: ../gain_meter.cc:776 ../mixer_strip.cc:770 ../panner_ui.cc:770
msgid "O"
-msgstr ""
+msgstr "A"
#: ../gain_meter.cc:779 ../panner_ui.cc:773
msgid "P"
-msgstr ""
+msgstr "U"
#: ../gain_meter.cc:782 ../panner_ui.cc:776
msgid "T"
-msgstr ""
+msgstr "B"
#: ../gain_meter.cc:785 ../panner_ui.cc:779
msgid "W"
-msgstr ""
+msgstr "S"
#: ../gtk-custom-ruler.c:126
msgid "Lower"
@@ -4664,7 +4725,7 @@ msgstr "Nytt namn för taktart"
#: ../mixer_strip.cc:94 ../mixer_strip.cc:140 ../mixer_strip.cc:1227
msgid "pre"
-msgstr "för"
+msgstr "pre"
#: ../mixer_strip.cc:95 ../mixer_strip.cc:822
msgid "Comments"
@@ -4676,18 +4737,18 @@ msgstr "Ingång"
#: ../mixer_strip.cc:136 ../mixer_strip.cc:1223
msgid "input"
-msgstr "ingång"
+msgstr "in"
#: ../mixer_strip.cc:144 ../mixer_strip.cc:1231
msgid "post"
-msgstr "efter"
+msgstr "post"
#. TRANSLATORS: this string should be longest of the strings
#. used to describe meter points. In english, its "input".
#.
#: ../mixer_strip.cc:152
msgid "tupni"
-msgstr "gnågni"
+msgstr "ni"
#: ../mixer_strip.cc:207
msgid "Varispeed"
@@ -4703,7 +4764,7 @@ msgstr "okänd strip-bredd \"%1\" i XML-GUI-informationen"
#: ../mixer_strip.cc:417
msgid "record"
-msgstr "spela in"
+msgstr "Spela in"
#: ../mixer_strip.cc:418 ../region_editor.cc:46
msgid "mute"
@@ -5431,7 +5492,7 @@ msgstr "Aktivera alla"
#: ../redirect_box.cc:1075
msgid "Deactivate all"
-msgstr "Aktivera alla"
+msgstr "Avaktivera alla"
#: ../region_editor.cc:44
msgid "NAME:"
@@ -5450,8 +5511,8 @@ msgid "active"
msgstr "aktivt"
#: ../region_editor.cc:49
-msgid "visible"
-msgstr "synligt"
+msgid "show"
+msgstr "visa"
#: ../region_editor.cc:52
msgid "Layer"
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index 6039e089e9..8f307f61f2 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -94,6 +94,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
virtual gulong frame_to_pixel (nframes_t frame) = 0;
virtual Selection& get_selection() const = 0;
virtual Selection& get_cut_buffer() const = 0;
+ virtual bool extend_selection_to_track (TimeAxisView&) = 0;
virtual void play_selection () = 0;
virtual void set_show_measures (bool yn) = 0;
virtual bool show_measures () const = 0;
@@ -107,7 +108,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
virtual gdouble get_current_zoom () = 0;
virtual PlaylistSelector& playlist_selector() const = 0;
virtual void route_name_changed (TimeAxisView *) = 0;
- virtual void clear_playlist (ARDOUR::Playlist&) = 0;
+ virtual void clear_playlist (boost::shared_ptr<ARDOUR::Playlist>) = 0;
virtual void new_playlists () = 0;
virtual void copy_playlists () = 0;
virtual void clear_playlists () = 0;
@@ -118,6 +119,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
virtual void set_follow_playhead (bool yn) = 0;
virtual void toggle_follow_playhead () = 0;
virtual bool follow_playhead() const = 0;
+ virtual bool dragging_playhead() const = 0;
virtual void ensure_float (Gtk::Window&) = 0;
virtual void show_window () = 0;
virtual TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0) = 0;
@@ -138,6 +140,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
sigc::signal<void> ZoomChanged;
sigc::signal<void> Resized;
sigc::signal<void> Realized;
+ sigc::signal<void,nframes_t> UpdateAllTransportClocks;
Glib::RefPtr<Gtk::ActionGroup> editor_actions;
diff --git a/gtk2_ardour/redirect_box.cc b/gtk2_ardour/redirect_box.cc
index f2ee2a5b8f..fac6ede6f3 100644
--- a/gtk2_ardour/redirect_box.cc
+++ b/gtk2_ardour/redirect_box.cc
@@ -19,6 +19,7 @@
*/
#include <cmath>
+#include <iostream>
#include <sigc++/bind.h>
@@ -136,11 +137,12 @@ RedirectBox::RedirectBox (Placement pcmnt, Session& sess, boost::shared_ptr<Rout
pack_start (redirect_eventbox, true, true);
_route->redirects_changed.connect (mem_fun(*this, &RedirectBox::redisplay_redirects));
+ _route->GoingAway.connect (mem_fun (*this, &RedirectBox::route_going_away));
redirect_eventbox.signal_enter_notify_event().connect (bind (sigc::ptr_fun (RedirectBox::enter_box), this));
redirect_display.signal_button_press_event().connect (mem_fun(*this, &RedirectBox::redirect_button_press_event), false);
- redirect_display.signal_button_release_event().connect (mem_fun(*this, &RedirectBox::redirect_button_press_event));
+ redirect_display.signal_button_release_event().connect (mem_fun(*this, &RedirectBox::redirect_button_release_event));
/* start off as a passthru strip. we'll correct this, if necessary,
in update_diskstream_display().
@@ -156,6 +158,13 @@ RedirectBox::~RedirectBox ()
}
void
+RedirectBox::route_going_away ()
+{
+ /* don't keep updating display as redirects are deleted */
+ no_redirect_redisplay = true;
+}
+
+void
RedirectBox::object_drop (string type, uint32_t cnt, const boost::shared_ptr<Redirect>* ptr)
{
if (type != "redirects" || cnt == 0 || !ptr) {
@@ -282,13 +291,8 @@ RedirectBox::redirect_button_press_event (GdkEventButton *ev)
}
}
-
- if (redirect && Keyboard::is_delete_event (ev)) {
-
- Glib::signal_idle().connect (bind (mem_fun(*this, &RedirectBox::idle_delete_redirect), redirect));
- ret = true;
-
- } else if (redirect && (Keyboard::is_edit_event (ev) || (ev->button == 1 && ev->type == GDK_2BUTTON_PRESS && ev->state == 0))) {
+
+ if (redirect && (Keyboard::is_edit_event (ev) || (ev->button == 1 && ev->type == GDK_2BUTTON_PRESS && ev->state == 0))) {
if (_session.engine().connected()) {
/* XXX giving an error message here is hard, because we may be in the midst of a button press */
@@ -296,23 +300,50 @@ RedirectBox::redirect_button_press_event (GdkEventButton *ev)
}
ret = true;
+ } else if (redirect && ev->button == 1 && selected) {
+
+ // this is purely informational but necessary
+ RedirectSelected (redirect); // emit
+ }
+
+ return ret;
+}
+
+bool
+RedirectBox::redirect_button_release_event (GdkEventButton *ev)
+{
+ TreeIter iter;
+ TreeModel::Path path;
+ TreeViewColumn* column;
+ int cellx;
+ int celly;
+ boost::shared_ptr<Redirect> redirect;
+ int ret = false;
+
+
+ if (redirect_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
+ if ((iter = model->get_iter (path))) {
+ redirect = (*iter)[columns.redirect];
+ }
+ }
+
+ if (redirect && Keyboard::is_delete_event (ev)) {
+
+ Glib::signal_idle().connect (bind (mem_fun(*this, &RedirectBox::idle_delete_redirect), boost::weak_ptr<Redirect>(redirect)));
+ ret = true;
+
} else if (Keyboard::is_context_menu_event (ev)) {
show_redirect_menu(ev->time);
ret = true;
- } else if (redirect && ev->button == 2 && ev->state == 0) {
+ } else if (redirect && ev->button == 2 && ev->state == GDK_BUTTON2_MASK) {
redirect->set_active (!redirect->active(), this);
ret = true;
}
- else if (redirect && ev->button == 1 && selected) {
- // this is purely informational but necessary
- RedirectSelected (redirect); // emit
- }
-
return ret;
}
@@ -362,7 +393,7 @@ RedirectBox::insert_plugin_chosen (boost::shared_ptr<Plugin> plugin)
boost::shared_ptr<Redirect> redirect (new PluginInsert (_session, plugin, _placement));
- redirect->active_changed.connect (mem_fun(*this, &RedirectBox::show_redirect_active));
+ redirect->active_changed.connect (bind (mem_fun (*this, &RedirectBox::show_redirect_active_r), boost::weak_ptr<Redirect>(redirect)));
uint32_t err_streams;
@@ -440,7 +471,7 @@ void
RedirectBox::choose_insert ()
{
boost::shared_ptr<Redirect> redirect (new PortInsert (_session, _placement));
- redirect->active_changed.connect (mem_fun(*this, &RedirectBox::show_redirect_active));
+ redirect->active_changed.connect (bind (mem_fun(*this, &RedirectBox::show_redirect_active_r), boost::weak_ptr<Redirect>(redirect)));
_route->add_redirect (redirect, this);
}
@@ -457,15 +488,24 @@ RedirectBox::choose_send ()
IOSelectorWindow *ios = new IOSelectorWindow (_session, send, false, true);
ios->show_all ();
- ios->selector().Finished.connect (bind (mem_fun(*this, &RedirectBox::send_io_finished), boost::static_pointer_cast<Redirect>(send), ios));
+
+ boost::shared_ptr<Redirect> r = boost::static_pointer_cast<Redirect>(send);
+
+ ios->selector().Finished.connect (bind (mem_fun(*this, &RedirectBox::send_io_finished), boost::weak_ptr<Redirect>(r), ios));
}
void
-RedirectBox::send_io_finished (IOSelector::Result r, boost::shared_ptr<Redirect> redirect, IOSelectorWindow* ios)
+RedirectBox::send_io_finished (IOSelector::Result r, boost::weak_ptr<Redirect> weak_redirect, IOSelectorWindow* ios)
{
+ boost::shared_ptr<Redirect> redirect (weak_redirect.lock());
+
+ if (!redirect) {
+ return;
+ }
+
switch (r) {
case IOSelector::Cancelled:
- // delete redirect; XXX SHAREDPTR HOW TO DESTROY THE REDIRECT ? do we even need to think about it?
+ // redirect will go away when all shared_ptrs to it vanish
break;
case IOSelector::Accepted:
@@ -484,7 +524,7 @@ RedirectBox::redisplay_redirects (void *src)
if (no_redirect_redisplay) {
return;
}
-
+
ignore_delete = true;
model->clear ();
ignore_delete = false;
@@ -515,16 +555,22 @@ RedirectBox::add_redirect_to_display (boost::shared_ptr<Redirect> redirect)
Gtk::TreeModel::Row row = *(model->append());
row[columns.text] = redirect_name (redirect);
row[columns.redirect] = redirect;
-
- show_redirect_active (redirect.get(), this);
- redirect_active_connections.push_back (redirect->active_changed.connect (mem_fun(*this, &RedirectBox::show_redirect_active)));
- redirect_name_connections.push_back (redirect->name_changed.connect (bind (mem_fun(*this, &RedirectBox::show_redirect_name), redirect)));
+ show_redirect_active (redirect);
+
+ redirect_active_connections.push_back (redirect->active_changed.connect (bind (mem_fun(*this, &RedirectBox::show_redirect_active_r), boost::weak_ptr<Redirect>(redirect))));
+ redirect_name_connections.push_back (redirect->name_changed.connect (bind (mem_fun(*this, &RedirectBox::show_redirect_name), boost::weak_ptr<Redirect>(redirect))));
}
string
-RedirectBox::redirect_name (boost::shared_ptr<Redirect> redirect)
+RedirectBox::redirect_name (boost::weak_ptr<Redirect> weak_redirect)
{
+ boost::shared_ptr<Redirect> redirect (weak_redirect.lock());
+
+ if (!redirect) {
+ return string();
+ }
+
boost::shared_ptr<Send> send;
string name_display;
@@ -586,16 +632,28 @@ RedirectBox::build_redirect_tooltip (EventBox& box, string start)
}
void
-RedirectBox::show_redirect_name (void* src, boost::shared_ptr<Redirect> redirect)
+RedirectBox::show_redirect_name (void* src, boost::weak_ptr<Redirect> redirect)
{
ENSURE_GUI_THREAD(bind (mem_fun(*this, &RedirectBox::show_redirect_name), src, redirect));
- show_redirect_active (redirect.get(), src);
+ show_redirect_active (redirect);
}
void
-RedirectBox::show_redirect_active (Redirect* redirect, void *src)
+RedirectBox::show_redirect_active_r (Redirect* r, void *src, boost::weak_ptr<Redirect> weak_redirect)
{
- ENSURE_GUI_THREAD(bind (mem_fun(*this, &RedirectBox::show_redirect_active), redirect, src));
+ show_redirect_active (weak_redirect);
+}
+
+void
+RedirectBox::show_redirect_active (boost::weak_ptr<Redirect> weak_redirect)
+{
+ ENSURE_GUI_THREAD(bind (mem_fun(*this, &RedirectBox::show_redirect_active), weak_redirect));
+
+ boost::shared_ptr<Redirect> redirect (weak_redirect.lock());
+
+ if (!redirect) {
+ return;
+ }
Gtk::TreeModel::Children children = model->children();
Gtk::TreeModel::Children::iterator iter = children.begin();
@@ -604,7 +662,7 @@ RedirectBox::show_redirect_active (Redirect* redirect, void *src)
boost::shared_ptr<Redirect> r = (*iter)[columns.redirect];
- if (r.get() == redirect) {
+ if (r == redirect) {
(*iter)[columns.text] = redirect_name (r);
if (redirect->active()) {
@@ -699,6 +757,7 @@ RedirectBox::cut_redirects ()
_rr_selection.set (to_be_removed);
+ no_redirect_redisplay = true;
for (vector<boost::shared_ptr<Redirect> >::iterator i = to_be_removed.begin(); i != to_be_removed.end(); ++i) {
void* gui = (*i)->get_gui ();
@@ -713,6 +772,8 @@ RedirectBox::cut_redirects ()
}
}
+ no_redirect_redisplay = false;
+ redisplay_redirects (this);
}
void
@@ -735,12 +796,22 @@ RedirectBox::copy_redirects ()
}
gint
-RedirectBox::idle_delete_redirect (boost::shared_ptr<Redirect> redirect)
+RedirectBox::idle_delete_redirect (boost::weak_ptr<Redirect> weak_redirect)
{
+ boost::shared_ptr<Redirect> redirect (weak_redirect.lock());
+
+ if (!redirect) {
+ return false;
+ }
+
/* NOT copied to _mixer.selection() */
+ no_redirect_redisplay = true;
_route->remove_redirect (redirect, this);
- return FALSE;
+ no_redirect_redisplay = false;
+ redisplay_redirects (this);
+
+ return false;
}
void
@@ -765,7 +836,6 @@ RedirectBox::rename_redirect (boost::shared_ptr<Redirect> redirect)
}
return;
-
}
void
@@ -784,9 +854,12 @@ RedirectBox::cut_redirect (boost::shared_ptr<Redirect> redirect)
static_cast<Gtk::Widget*>(gui)->hide ();
}
+ no_redirect_redisplay = true;
if (_route->remove_redirect (redirect, this)) {
_rr_selection.remove (redirect);
}
+ no_redirect_redisplay = false;
+ redisplay_redirects (this);
}
void
@@ -847,8 +920,9 @@ RedirectBox::get_selected_redirects (vector<boost::shared_ptr<Redirect> >& redir
{
vector<Gtk::TreeModel::Path> pathlist = redirect_display.get_selection()->get_selected_rows();
- for (vector<Gtk::TreeModel::Path>::iterator iter = pathlist.begin(); iter != pathlist.end(); ++iter)
- redirects.push_back ((*(model->get_iter(*iter)))[columns.redirect]);
+ for (vector<Gtk::TreeModel::Path>::iterator iter = pathlist.begin(); iter != pathlist.end(); ++iter) {
+ redirects.push_back ((*(model->get_iter(*iter)))[columns.redirect]);
+ }
}
void
@@ -980,7 +1054,7 @@ RedirectBox::edit_redirect (boost::shared_ptr<Redirect> redirect)
plugin_insert->set_gui (plugin_ui);
// change window title when route name is changed
- _route->name_changed.connect (bind (mem_fun(*this, &RedirectBox::route_name_changed), plugin_ui, plugin_insert));
+ _route->name_changed.connect (bind (mem_fun(*this, &RedirectBox::route_name_changed), plugin_ui, boost::weak_ptr<PluginInsert> (plugin_insert)));
} else {
@@ -1240,11 +1314,13 @@ RedirectBox::rb_edit ()
}
void
-RedirectBox::route_name_changed (void* src, PluginUIWindow* plugin_ui, boost::shared_ptr<PluginInsert> pi)
+RedirectBox::route_name_changed (void* src, PluginUIWindow* plugin_ui, boost::weak_ptr<PluginInsert> wpi)
{
- ENSURE_GUI_THREAD(bind (mem_fun (*this, &RedirectBox::route_name_changed), src, plugin_ui, pi));
-
- plugin_ui->set_title (generate_redirect_title (pi));
+ ENSURE_GUI_THREAD(bind (mem_fun (*this, &RedirectBox::route_name_changed), src, plugin_ui, wpi));
+ boost::shared_ptr<PluginInsert> pi (wpi.lock());
+ if (pi) {
+ plugin_ui->set_title (generate_redirect_title (pi));
+ }
}
string
diff --git a/gtk2_ardour/redirect_box.h b/gtk2_ardour/redirect_box.h
index 27ba950899..7ab7d03cac 100644
--- a/gtk2_ardour/redirect_box.h
+++ b/gtk2_ardour/redirect_box.h
@@ -97,7 +97,9 @@ class RedirectBox : public Gtk::HBox
PluginSelector & _plugin_selector;
RouteRedirectSelection & _rr_selection;
-
+
+ void route_going_away ();
+
struct ModelColumns : public Gtk::TreeModel::ColumnRecord {
ModelColumns () {
add (text);
@@ -140,7 +142,7 @@ class RedirectBox : public Gtk::HBox
void show_redirect_menu (gint arg);
void choose_send ();
- void send_io_finished (IOSelector::Result, boost::shared_ptr<ARDOUR::Redirect>, IOSelectorWindow*);
+ void send_io_finished (IOSelector::Result, boost::weak_ptr<ARDOUR::Redirect>, IOSelectorWindow*);
void choose_insert ();
void choose_plugin ();
void insert_plugin_chosen (boost::shared_ptr<ARDOUR::Plugin>);
@@ -149,18 +151,14 @@ class RedirectBox : public Gtk::HBox
bool ignore_delete;
bool redirect_button_press_event (GdkEventButton *);
+ bool redirect_button_release_event (GdkEventButton *);
void redisplay_redirects (void* src);
void add_redirect_to_display (boost::shared_ptr<ARDOUR::Redirect>);
void row_deleted (const Gtk::TreeModel::Path& path);
- void show_redirect_name (void*, boost::shared_ptr<ARDOUR::Redirect>);
-
- /* these are handlers for Redirect signals, so they take Redirect*
- directly, rather than shared_ptr<Redirect>
- */
-
- void show_redirect_active (ARDOUR::Redirect*, void *);
-
- string redirect_name (boost::shared_ptr<ARDOUR::Redirect>);
+ void show_redirect_active_r (ARDOUR::Redirect*, void *, boost::weak_ptr<ARDOUR::Redirect>);
+ void show_redirect_active (boost::weak_ptr<ARDOUR::Redirect>);
+ void show_redirect_name (void* src, boost::weak_ptr<ARDOUR::Redirect>);
+ string redirect_name (boost::weak_ptr<ARDOUR::Redirect>);
void remove_redirect_gui (boost::shared_ptr<ARDOUR::Redirect>);
@@ -195,7 +193,7 @@ class RedirectBox : public Gtk::HBox
void hide_redirect_editor (boost::shared_ptr<ARDOUR::Redirect>);
void rename_redirect (boost::shared_ptr<ARDOUR::Redirect>);
- gint idle_delete_redirect (boost::shared_ptr<ARDOUR::Redirect>);
+ gint idle_delete_redirect (boost::weak_ptr<ARDOUR::Redirect>);
void wierd_plugin_dialog (ARDOUR::Plugin& p, uint32_t streams, boost::shared_ptr<ARDOUR::IO> io);
@@ -219,7 +217,7 @@ class RedirectBox : public Gtk::HBox
static void rb_deactivate_all ();
static void rb_edit ();
- void route_name_changed (void* src, PluginUIWindow* plugin_ui, boost::shared_ptr<ARDOUR::PluginInsert> pi);
+ void route_name_changed (void* src, PluginUIWindow* plugin_ui, boost::weak_ptr<ARDOUR::PluginInsert> pi);
std::string generate_redirect_title (boost::shared_ptr<ARDOUR::PluginInsert> pi);
};
diff --git a/gtk2_ardour/region_gain_line.cc b/gtk2_ardour/region_gain_line.cc
index 3374d44655..1241a1b3a7 100644
--- a/gtk2_ardour/region_gain_line.cc
+++ b/gtk2_ardour/region_gain_line.cc
@@ -44,9 +44,9 @@ AudioRegionGainLine::model_to_view_y (double& y)
}
void
-AudioRegionGainLine::start_drag (ControlPoint* cp, float fraction)
+AudioRegionGainLine::start_drag (ControlPoint* cp, nframes_t x, float fraction)
{
- AutomationLine::start_drag(cp,fraction);
+ AutomationLine::start_drag (cp, x, fraction);
if (!rv.audio_region()->envelope_active()) {
trackview.session().add_command(new MementoCommand<AudioRegion>(*(rv.audio_region().get()), &rv.audio_region()->get_state(), 0));
rv.audio_region()->set_envelope_active(false);
diff --git a/gtk2_ardour/region_gain_line.h b/gtk2_ardour/region_gain_line.h
index 3781fe60bb..e98627f814 100644
--- a/gtk2_ardour/region_gain_line.h
+++ b/gtk2_ardour/region_gain_line.h
@@ -21,7 +21,7 @@ class AudioRegionGainLine : public AutomationLine
void view_to_model_y (double&);
void model_to_view_y (double&);
- void start_drag (ControlPoint*, float fraction);
+ void start_drag (ControlPoint*, nframes_t x, float fraction);
void end_drag (ControlPoint*);
void remove_point (ControlPoint&);
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index 49e7872f49..a9315bb76f 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -367,7 +367,7 @@ void
RegionView::set_frame_color ()
{
if (_region->opaque()) {
- fill_opacity = 180;
+ fill_opacity = 230;
} else {
fill_opacity = 100;
}
diff --git a/gtk2_ardour/route_params_ui.cc b/gtk2_ardour/route_params_ui.cc
index 5f61b0528c..14d9fa02cb 100644
--- a/gtk2_ardour/route_params_ui.cc
+++ b/gtk2_ardour/route_params_ui.cc
@@ -138,7 +138,7 @@ RouteParams_UI::RouteParams_UI (AudioEngine& eng)
set_name ("RouteParamsWindow");
set_default_size (620,370);
set_title (_("ardour: track/bus inspector"));
- set_wmclass (_("ardour_route_parameters"), "Ardour");
+ set_wmclass (X_("ardour_route_parameters"), "Ardour");
// events
route_display.get_selection()->signal_changed().connect(mem_fun(*this, &RouteParams_UI::route_selected));
@@ -510,7 +510,7 @@ RouteParams_UI::show_track_menu()
(MenuElem (_("Add Track/Bus"),
mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::add_route)));
}
- track_menu->popup (1, 0);
+ track_menu->popup (1, gtk_get_current_event_time());
}
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index 7195c83a99..9684f74024 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -189,13 +189,6 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
hide_button.unset_flags (Gtk::CAN_FOCUS);
visual_button.unset_flags (Gtk::CAN_FOCUS);
- /* map current state of the route */
-
- update_diskstream_display ();
- solo_changed(0);
- mute_changed(0);
- //redirects_changed (0);
- //reset_redirect_automation_curves ();
y_position = -1;
_route->mute_changed.connect (mem_fun(*this, &RouteUI::mute_changed));
@@ -212,11 +205,6 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
track()->DiskstreamChanged.connect (mem_fun(*this, &RouteTimeAxisView::diskstream_changed));
get_diskstream()->SpeedChanged.connect (mem_fun(*this, &RouteTimeAxisView::speed_changed));
- /* ask for notifications of any new RegionViews */
- // FIXME: _view is NULL, but it would be nice to attach this here :/
- //_view->RegionViewAdded.connect (mem_fun(*this, &RouteTimeAxisView::region_view_added));
- //_view->attach ();
-
/* pick up the correct freeze state */
map_frozen ();
@@ -224,7 +212,6 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
editor.ZoomChanged.connect (mem_fun(*this, &RouteTimeAxisView::reset_samples_per_unit));
ColorChanged.connect (mem_fun (*this, &RouteTimeAxisView::color_handler));
-
}
RouteTimeAxisView::~RouteTimeAxisView ()
@@ -254,9 +241,20 @@ RouteTimeAxisView::~RouteTimeAxisView ()
}
void
-RouteTimeAxisView::set_playlist (Playlist *newplaylist)
+RouteTimeAxisView::post_construct ()
+{
+ /* map current state of the route */
+
+ update_diskstream_display ();
+ _route->foreach_redirect (this, &RouteTimeAxisView::add_redirect_to_subplugin_menu);
+ _route->foreach_redirect (this, &RouteTimeAxisView::add_existing_redirect_automation_curves);
+ reset_redirect_automation_curves ();
+}
+
+void
+RouteTimeAxisView::set_playlist (boost::shared_ptr<Playlist> newplaylist)
{
- Playlist *pl = playlist();
+ boost::shared_ptr<Playlist> pl = playlist();
assert(pl);
modified_connection.disconnect ();
@@ -321,7 +319,7 @@ RouteTimeAxisView::playlist_changed ()
label_view ();
if (is_track()) {
- set_playlist (dynamic_cast<Playlist*>(get_diskstream()->playlist()));
+ set_playlist (get_diskstream()->playlist());
}
}
@@ -367,7 +365,7 @@ RouteTimeAxisView::playlist_click ()
build_playlist_menu (playlist_action_menu);
editor.set_selected_track (*this, Selection::Add);
- playlist_action_menu->popup (1, 0);
+ playlist_action_menu->popup (1, gtk_get_current_event_time());
}
void
@@ -380,7 +378,7 @@ RouteTimeAxisView::automation_click ()
build_display_menu ();
}
editor.set_selected_track (*this, Selection::Add);
- automation_action_menu->popup (1, 0);
+ automation_action_menu->popup (1, gtk_get_current_event_time());
}
void
@@ -672,7 +670,9 @@ RouteTimeAxisView::set_height (TrackHeight h)
ensure_xml_node ();
- _view->set_height ((double) height);
+ if (_view) {
+ _view->set_height ((double) height);
+ }
switch (height_style) {
case Largest:
@@ -852,7 +852,7 @@ RouteTimeAxisView::rename_current_playlist ()
if (!ds || ds->destructive())
return;
- Playlist *const pl = ds->playlist();
+ boost::shared_ptr<Playlist> pl = ds->playlist();
if (!pl)
return;
@@ -883,11 +883,18 @@ RouteTimeAxisView::use_copy_playlist (bool prompt)
if (!ds || ds->destructive())
return;
- Playlist *const pl = ds->playlist();
+ boost::shared_ptr<const Playlist> pl = ds->playlist();
if (!pl)
return;
- name = Playlist::bump_name (pl->name(), _session);
+ name = pl->name();
+
+ do {
+ name = Playlist::bump_name (name, _session);
+ } while (_session.playlist_by_name(name));
+
+ // TODO: The prompter "new" button should be de-activated if the user
+ // specifies a playlist name which already exists in the session.
if (prompt) {
@@ -896,7 +903,7 @@ RouteTimeAxisView::use_copy_playlist (bool prompt)
prompter.set_prompt (_("Name for Playlist"));
prompter.set_initial_text (name);
prompter.add_button (Gtk::Stock::NEW, Gtk::RESPONSE_ACCEPT);
- prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
+ prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, true);
prompter.show_all ();
switch (prompter.run ()) {
@@ -924,11 +931,16 @@ RouteTimeAxisView::use_new_playlist (bool prompt)
if (!ds || ds->destructive())
return;
- Playlist *const pl = ds->playlist();
+ boost::shared_ptr<const Playlist> pl = ds->playlist();
if (!pl)
return;
- name = Playlist::bump_name (pl->name(), _session);
+ name = pl->name();
+
+ do {
+ name = Playlist::bump_name (name, _session);
+ } while (_session.playlist_by_name(name));
+
if (prompt) {
@@ -937,7 +949,7 @@ RouteTimeAxisView::use_new_playlist (bool prompt)
prompter.set_prompt (_("Name for Playlist"));
prompter.set_initial_text (name);
prompter.add_button (Gtk::Stock::NEW, Gtk::RESPONSE_ACCEPT);
- prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
+ prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, true);
switch (prompter.run ()) {
case Gtk::RESPONSE_ACCEPT:
@@ -962,11 +974,11 @@ RouteTimeAxisView::clear_playlist ()
if (!ds || ds->destructive())
return;
- Playlist *const pl = ds->playlist();
+ boost::shared_ptr<Playlist> pl = ds->playlist();
if (!pl)
return;
- editor.clear_playlist (*pl);
+ editor.clear_playlist (pl);
}
void
@@ -1006,7 +1018,13 @@ RouteTimeAxisView::selection_click (GdkEventButton* ev)
break;
case Selection::Extend:
- /* not defined yet */
+ if (tracks->size() > 1) {
+ /* add each one, do not "extend" */
+ editor.get_selection().add (*tracks);
+ } else {
+ /* extend to the single track */
+ editor.extend_selection_to_track (*tracks->front());
+ }
break;
case Selection::Add:
@@ -1028,7 +1046,9 @@ RouteTimeAxisView::set_selected_points (PointSelection& points)
void
RouteTimeAxisView::set_selected_regionviews (RegionSelection& regions)
{
- _view->set_selected_regionviews (regions);
+ if (_view) {
+ _view->set_selected_regionviews (regions);
+ }
}
void
@@ -1084,7 +1104,7 @@ RouteTimeAxisView::name() const
return _route->name();
}
-Playlist *
+boost::shared_ptr<Playlist>
RouteTimeAxisView::playlist () const
{
boost::shared_ptr<Diskstream> ds;
@@ -1092,7 +1112,7 @@ RouteTimeAxisView::playlist () const
if ((ds = get_diskstream()) != 0) {
return ds->playlist();
} else {
- return 0;
+ return boost::shared_ptr<Playlist> ();
}
}
@@ -1107,17 +1127,17 @@ RouteTimeAxisView::name_entry_changed ()
return;
}
+ strip_whitespace_edges(x);
+
if (x.length() == 0) {
name_entry.set_text (_route->name());
return;
}
- strip_whitespace_edges(x);
-
if (_session.route_name_unique (x)) {
_route->set_name (x, this);
} else {
- ARDOUR_UI::instance()->popup_error (_("a track already exists with that name"));
+ ARDOUR_UI::instance()->popup_error (_("A track already exists with that name"));
name_entry.set_text (_route->name());
}
}
@@ -1143,7 +1163,7 @@ boost::shared_ptr<Region>
RouteTimeAxisView::find_next_region (nframes_t pos, RegionPoint point, int32_t dir)
{
boost::shared_ptr<Diskstream> stream;
- Playlist *playlist;
+ boost::shared_ptr<Playlist> playlist;
if ((stream = get_diskstream()) != 0 && (playlist = stream->playlist()) != 0) {
return playlist->find_next_region (pos, point, dir);
@@ -1155,9 +1175,9 @@ RouteTimeAxisView::find_next_region (nframes_t pos, RegionPoint point, int32_t d
bool
RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
{
- Playlist* what_we_got;
+ boost::shared_ptr<Playlist> what_we_got;
boost::shared_ptr<Diskstream> ds = get_diskstream();
- Playlist* playlist;
+ boost::shared_ptr<Playlist> playlist;
bool ret = false;
if (ds == 0) {
@@ -1167,7 +1187,6 @@ RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
playlist = ds->playlist();
-
TimeSelection time (selection.time);
float speed = ds->speed();
if (speed != 1.0f) {
@@ -1182,7 +1201,7 @@ RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
case Cut:
if ((what_we_got = playlist->cut (time)) != 0) {
editor.get_cut_buffer().add (what_we_got);
- _session.add_command( new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
+ _session.add_command( new MementoCommand<Playlist>(*playlist.get(), &before, &playlist->get_state()));
ret = true;
}
break;
@@ -1195,7 +1214,7 @@ RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
case Clear:
if ((what_we_got = playlist->cut (time)) != 0) {
_session.add_command( new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
- what_we_got->unref ();
+ what_we_got->release ();
ret = true;
}
break;
@@ -1211,7 +1230,7 @@ RouteTimeAxisView::paste (nframes_t pos, float times, Selection& selection, size
return false;
}
- Playlist* playlist = get_diskstream()->playlist();
+ boost::shared_ptr<Playlist> playlist = get_diskstream()->playlist();
PlaylistSelection::iterator p;
for (p = selection.playlists.begin(); p != selection.playlists.end() && nth; ++p, --nth);
@@ -1224,7 +1243,7 @@ RouteTimeAxisView::paste (nframes_t pos, float times, Selection& selection, size
pos = session_frame_to_track_frame(pos, get_diskstream()->speed() );
XMLNode &before = playlist->get_state();
- playlist->paste (**p, pos, times);
+ playlist->paste (*p, pos, times);
_session.add_command( new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
return true;
@@ -1266,20 +1285,26 @@ RouteTimeAxisView::build_playlist_menu (Gtk::Menu * menu)
playlist_menu = new Menu;
playlist_menu->set_name ("ArdourContextMenu");
- vector<Playlist*> playlists;
+ vector<boost::shared_ptr<Playlist> > playlists;
boost::shared_ptr<Diskstream> ds = get_diskstream();
RadioMenuItem::Group playlist_group;
_session.get_playlists (playlists);
- for (vector<Playlist*>::iterator i = playlists.begin(); i != playlists.end(); ++i) {
+ for (vector<boost::shared_ptr<Playlist> >::iterator i = playlists.begin(); i != playlists.end(); ++i) {
if ((*i)->get_orig_diskstream_id() == ds->id()) {
- playlist_items.push_back (RadioMenuElem (playlist_group, (*i)->name(), bind (mem_fun (*this, &RouteTimeAxisView::use_playlist), (*i))));
+ playlist_items.push_back (RadioMenuElem (playlist_group, (*i)->name(), bind (mem_fun (*this, &RouteTimeAxisView::use_playlist),
+ boost::weak_ptr<Playlist> (*i))));
if (ds->playlist()->id() == (*i)->id()) {
static_cast<RadioMenuItem*>(&playlist_items.back())->set_active();
}
+ } else if (ds->playlist()->id() == (*i)->id()) {
+ playlist_items.push_back (RadioMenuElem (playlist_group, (*i)->name(), bind (mem_fun (*this, &RouteTimeAxisView::use_playlist),
+ boost::weak_ptr<Playlist>(*i))));
+ static_cast<RadioMenuItem*>(&playlist_items.back())->set_active();
+
}
}
@@ -1297,12 +1322,18 @@ RouteTimeAxisView::build_playlist_menu (Gtk::Menu * menu)
}
void
-RouteTimeAxisView::use_playlist (Playlist* pl)
+RouteTimeAxisView::use_playlist (boost::weak_ptr<Playlist> wpl)
{
- AudioPlaylist* apl = dynamic_cast<AudioPlaylist*> (pl);
-
assert (is_track());
+ boost::shared_ptr<Playlist> pl (wpl.lock());
+
+ if (!pl) {
+ return;
+ }
+
+ boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist> (pl);
+
if (apl) {
get_diskstream()->use_playlist (apl);
}
@@ -1533,7 +1564,9 @@ RouteTimeAxisView::add_redirect_automation_curve (boost::shared_ptr<Redirect> re
add_child (ran->view);
- _view->foreach_regionview (bind (mem_fun(*this, &RouteTimeAxisView::add_ghost_to_redirect), ran->view));
+ if (_view) {
+ _view->foreach_regionview (bind (mem_fun(*this, &RouteTimeAxisView::add_ghost_to_redirect), ran->view));
+ }
redirect->mark_automation_visible (what, true);
}
diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h
index cefe954c9a..c597f2893c 100644
--- a/gtk2_ardour/route_time_axis.h
+++ b/gtk2_ardour/route_time_axis.h
@@ -99,7 +99,7 @@ public:
string name() const;
StreamView* view() const { return _view; }
ARDOUR::RouteGroup* edit_group() const;
- ARDOUR::Playlist* playlist() const;
+ boost::shared_ptr<ARDOUR::Playlist> playlist() const;
protected:
friend class StreamView;
@@ -176,7 +176,7 @@ protected:
void align_style_changed ();
void set_align_style (ARDOUR::AlignStyle);
- virtual void set_playlist (ARDOUR::Playlist *);
+ virtual void set_playlist (boost::shared_ptr<ARDOUR::Playlist>);
void playlist_click ();
void show_playlist_selector ();
void playlist_changed ();
@@ -229,7 +229,7 @@ protected:
Gtk::Menu* playlist_action_menu;
Gtk::MenuItem* playlist_item;
- void use_playlist (ARDOUR::Playlist*);
+ void use_playlist (boost::weak_ptr<ARDOUR::Playlist>);
ArdourCanvas::SimpleRect* timestretch_rect;
@@ -241,6 +241,8 @@ protected:
vector<RedirectAutomationLine*> redirect_automation_curves;
sigc::connection modified_connection;
+
+ void post_construct ();
};
#endif /* __ardour_route_time_axis_h__ */
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index 851c45aaa0..070ad42037 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -674,7 +674,7 @@ RouteUI::set_color (const Gdk::Color & c)
snprintf (buf, sizeof (buf), "%d:%d:%d", c.get_red(), c.get_green(), c.get_blue());
xml_node->add_property ("color", buf);
- _route->gui_changed ("color", (void *) 0); /* EMIT_SIGNAL */
+ _route->gui_changed ("color", (void *) 0); /* EMIT_SIGNAL */
}
diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc
index 06475aa1d4..38a0cdd8e2 100644
--- a/gtk2_ardour/selection.cc
+++ b/gtk2_ardour/selection.cc
@@ -132,7 +132,7 @@ Selection::clear_playlists ()
/* Selections own their playlists */
for (PlaylistSelection::iterator i = playlists.begin(); i != playlists.end(); ++i) {
- (*i)->unref ();
+ (*i)->release ();
}
if (!playlists.empty()) {
@@ -165,12 +165,12 @@ Selection::toggle (boost::shared_ptr<Redirect> r)
}
void
-Selection::toggle (Playlist* pl)
+Selection::toggle (boost::shared_ptr<Playlist> pl)
{
PlaylistSelection::iterator i;
if ((i = find (playlists.begin(), playlists.end(), pl)) == playlists.end()) {
- pl->ref ();
+ pl->use ();
playlists.push_back(pl);
} else {
playlists.erase (i);
@@ -260,23 +260,23 @@ Selection::add (boost::shared_ptr<Redirect> r)
}
void
-Selection::add (Playlist* pl)
+Selection::add (boost::shared_ptr<Playlist> pl)
{
if (find (playlists.begin(), playlists.end(), pl) == playlists.end()) {
- pl->ref ();
+ pl->use ();
playlists.push_back(pl);
PlaylistsChanged ();
}
}
void
-Selection::add (const list<Playlist*>& pllist)
+Selection::add (const list<boost::shared_ptr<Playlist> >& pllist)
{
bool changed = false;
- for (list<Playlist*>::const_iterator i = pllist.begin(); i != pllist.end(); ++i) {
+ for (list<boost::shared_ptr<Playlist> >::const_iterator i = pllist.begin(); i != pllist.end(); ++i) {
if (find (playlists.begin(), playlists.end(), (*i)) == playlists.end()) {
- (*i)->ref ();
+ (*i)->use ();
playlists.push_back (*i);
changed = true;
}
@@ -429,9 +429,9 @@ Selection::remove (const list<TimeAxisView*>& track_list)
}
void
-Selection::remove (Playlist* track)
+Selection::remove (boost::shared_ptr<Playlist> track)
{
- list<Playlist*>::iterator i;
+ list<boost::shared_ptr<Playlist> >::iterator i;
if ((i = find (playlists.begin(), playlists.end(), track)) != playlists.end()) {
playlists.erase (i);
PlaylistsChanged();
@@ -439,13 +439,13 @@ Selection::remove (Playlist* track)
}
void
-Selection::remove (const list<Playlist*>& pllist)
+Selection::remove (const list<boost::shared_ptr<Playlist> >& pllist)
{
bool changed = false;
- for (list<Playlist*>::const_iterator i = pllist.begin(); i != pllist.end(); ++i) {
+ for (list<boost::shared_ptr<Playlist> >::const_iterator i = pllist.begin(); i != pllist.end(); ++i) {
- list<Playlist*>::iterator x;
+ list<boost::shared_ptr<Playlist> >::iterator x;
if ((x = find (playlists.begin(), playlists.end(), (*i))) != playlists.end()) {
playlists.erase (x);
@@ -520,14 +520,14 @@ Selection::set (const list<TimeAxisView*>& track_list)
}
void
-Selection::set (Playlist* playlist)
+Selection::set (boost::shared_ptr<Playlist> playlist)
{
clear_playlists ();
add (playlist);
}
void
-Selection::set (const list<Playlist*>& pllist)
+Selection::set (const list<boost::shared_ptr<Playlist> >& pllist)
{
clear_playlists ();
add (pllist);
diff --git a/gtk2_ardour/selection.h b/gtk2_ardour/selection.h
index c4336fba21..a2997cd7b5 100644
--- a/gtk2_ardour/selection.h
+++ b/gtk2_ardour/selection.h
@@ -101,8 +101,8 @@ class Selection : public sigc::trackable
void set (std::vector<RegionView*>&);
long set (TimeAxisView*, nframes_t, nframes_t);
void set (ARDOUR::AutomationList*);
- void set (ARDOUR::Playlist*);
- void set (const list<ARDOUR::Playlist*>&);
+ void set (boost::shared_ptr<ARDOUR::Playlist>);
+ void set (const list<boost::shared_ptr<ARDOUR::Playlist> >&);
void set (boost::shared_ptr<ARDOUR::Redirect>);
void set (AutomationSelectable*);
@@ -112,8 +112,8 @@ class Selection : public sigc::trackable
void toggle (std::vector<RegionView*>&);
long toggle (nframes_t, nframes_t);
void toggle (ARDOUR::AutomationList*);
- void toggle (ARDOUR::Playlist*);
- void toggle (const list<ARDOUR::Playlist*>&);
+ void toggle (boost::shared_ptr<ARDOUR::Playlist>);
+ void toggle (const list<boost::shared_ptr<ARDOUR::Playlist> >&);
void toggle (boost::shared_ptr<ARDOUR::Redirect>);
void add (TimeAxisView*);
@@ -122,8 +122,8 @@ class Selection : public sigc::trackable
void add (std::vector<RegionView*>&);
long add (nframes_t, nframes_t);
void add (ARDOUR::AutomationList*);
- void add (ARDOUR::Playlist*);
- void add (const list<ARDOUR::Playlist*>&);
+ void add (boost::shared_ptr<ARDOUR::Playlist>);
+ void add (const list<boost::shared_ptr<ARDOUR::Playlist> >&);
void add (boost::shared_ptr<ARDOUR::Redirect>);
void remove (TimeAxisView*);
@@ -132,8 +132,8 @@ class Selection : public sigc::trackable
void remove (uint32_t selection_id);
void remove (nframes_t, nframes_t);
void remove (ARDOUR::AutomationList*);
- void remove (ARDOUR::Playlist*);
- void remove (const list<ARDOUR::Playlist*>&);
+ void remove (boost::shared_ptr<ARDOUR::Playlist>);
+ void remove (const list<boost::shared_ptr<ARDOUR::Playlist> >&);
void remove (boost::shared_ptr<ARDOUR::Redirect>);
void replace (uint32_t time_index, nframes_t start, nframes_t end);
diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc
index c4d6d7edfc..5d3be0399b 100644
--- a/gtk2_ardour/sfdb_ui.cc
+++ b/gtk2_ardour/sfdb_ui.cc
@@ -1,6 +1,5 @@
/*
- Copyright (C) 2005 Paul Davis
- Written by Taybin Rutkin
+ Copyright (C) 2005-2006 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,16 +15,17 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
*/
#include <map>
#include <cerrno>
+#include <sstream>
#include <gtkmm/box.h>
#include <gtkmm/stock.h>
#include <pbd/convert.h>
+#include <pbd/tokenizer.h>
#include <gtkmm2ext/utils.h>
@@ -52,16 +52,16 @@ SoundFileBox::SoundFileBox ()
:
_session(0),
current_pid(0),
- fields(Gtk::ListStore::create(label_columns)),
main_box (false, 3),
- top_box (true, 4),
bottom_box (true, 4),
play_btn(_("Play")),
stop_btn(_("Stop")),
- add_field_btn(_("Add Field...")),
- remove_field_btn(_("Remove Field"))
+ apply_btn(_("Apply"))
{
set_name (X_("SoundFileBox"));
+
+ set_size_request (250, 500);
+
border_frame.set_label (_("Soundfile Info"));
border_frame.add (main_box);
@@ -75,41 +75,29 @@ SoundFileBox::SoundFileBox ()
main_box.pack_start(channels, false, false);
main_box.pack_start(samplerate, false, false);
main_box.pack_start(timecode, false, false);
- main_box.pack_start(field_view, true, true);
- main_box.pack_start(top_box, false, false);
+ main_box.pack_start(tags_entry, true, true);
+ main_box.pack_start(apply_btn, false, false);
main_box.pack_start(bottom_box, false, false);
- field_view.set_model (fields);
- field_view.set_size_request(200, 150);
- field_view.append_column (_("Field"), label_columns.field);
- field_view.append_column_editable (_("Value"), label_columns.data);
-
- top_box.set_homogeneous(true);
- top_box.pack_start(add_field_btn);
- top_box.pack_start(remove_field_btn);
-
- remove_field_btn.set_sensitive(false);
-
bottom_box.set_homogeneous(true);
bottom_box.pack_start(play_btn);
bottom_box.pack_start(stop_btn);
+// tags_entry.signal_focus_out_event().connect (mem_fun (*this, &SoundFileBox::tags_entry_left));
play_btn.signal_clicked().connect (mem_fun (*this, &SoundFileBox::play_btn_clicked));
stop_btn.signal_clicked().connect (mem_fun (*this, &SoundFileBox::stop_btn_clicked));
+ apply_btn.signal_clicked().connect (mem_fun (*this, &SoundFileBox::apply_btn_clicked));
- add_field_btn.signal_clicked().connect
- (mem_fun (*this, &SoundFileBox::add_field_clicked));
- remove_field_btn.signal_clicked().connect
- (mem_fun (*this, &SoundFileBox::remove_field_clicked));
-
- Gtk::CellRendererText* cell(dynamic_cast<Gtk::CellRendererText*>(field_view.get_column_cell_renderer(1)));
- cell->signal_edited().connect (mem_fun (*this, &SoundFileBox::field_edited));
-
- field_view.get_selection()->signal_changed().connect (mem_fun (*this, &SoundFileBox::field_selected));
- Library->fields_changed.connect (mem_fun (*this, &SoundFileBox::setup_fields));
+ length.set_alignment (0.0f, 0.0f);
+ format.set_alignment (0.0f, 0.0f);
+ channels.set_alignment (0.0f, 0.0f);
+ samplerate.set_alignment (0.0f, 0.0f);
+ timecode.set_alignment (0.0f, 0.0f);
- show_all();
+ stop_btn.set_no_show_all (true);
stop_btn.hide();
+
+ show_all();
}
void
@@ -132,53 +120,52 @@ SoundFileBox::setup_labels (string filename)
string error_msg;
if(!AudioFileSource::get_soundfile_info (filename, sf_info, error_msg)) {
+ length.set_text (_("Length: n/a"));
+ format.set_text (_("Format: n/a"));
+ channels.set_text (_("Channels: n/a"));
+ samplerate.set_text (_("Samplerate: n/a"));
+ timecode.set_text (_("Timecode: n/a"));
+ tags_entry.set_text ("");
+
+ tags_entry.set_sensitive (false);
+ play_btn.set_sensitive (false);
+ apply_btn.set_sensitive (false);
+
return false;
}
- length.set_alignment (0.0f, 0.0f);
- length.set_text (string_compose(_("Length: %1"), PBD::length2string(sf_info.length, sf_info.samplerate)));
-
- format.set_alignment (0.0f, 0.0f);
+ length.set_text (string_compose(_("Length: %1"), length2string(sf_info.length, sf_info.samplerate)));
format.set_text (sf_info.format_name);
-
- channels.set_alignment (0.0f, 0.0f);
channels.set_text (string_compose(_("Channels: %1"), sf_info.channels));
-
- samplerate.set_alignment (0.0f, 0.0f);
samplerate.set_text (string_compose(_("Samplerate: %1"), sf_info.samplerate));
+ timecode.set_text (string_compose (_("Timecode: %1"), length2string(sf_info.timecode, sf_info.samplerate)));
- timecode.set_alignment (0.0f, 0.0f);
- timecode.set_text (string_compose (_("Timecode: %1"), PBD::length2string(sf_info.timecode, sf_info.samplerate)));
-
- setup_fields ();
-
+ vector<string> tags = Library->get_tags (filename);
+
+ stringstream tag_string;
+ for (vector<string>::iterator i = tags.begin(); i != tags.end(); ++i) {
+ if (i != tags.begin()) {
+ tag_string << ", ";
+ }
+ tag_string << *i;
+ }
+ tags_entry.set_text (tag_string.str());
+
+ tags_entry.set_sensitive (true);
+ if (_session) {
+ play_btn.set_sensitive (true);
+ }
+ apply_btn.set_sensitive (true);
+
return true;
}
-void
-SoundFileBox::setup_fields ()
-{
- ENSURE_GUI_THREAD(mem_fun (*this, &SoundFileBox::setup_fields));
-
- fields->clear ();
-
- vector<string> field_list;
- Library->get_fields(field_list);
-
- vector<string>::iterator i;
- Gtk::TreeModel::iterator iter;
- Gtk::TreeModel::Row row;
- for (i = field_list.begin(); i != field_list.end(); ++i) {
- if (!(*i == _("channels") || *i == _("samplerate") ||
- *i == _("resolution") || *i == _("format"))) {
- iter = fields->append();
- row = *iter;
-
- string value = Library->get_field(path, *i);
- row[label_columns.field] = *i;
- row[label_columns.data] = value;
- }
- }
+bool
+SoundFileBox::tags_entry_left (GdkEventFocus* event)
+{
+ apply_btn_clicked ();
+
+ return true;
}
void
@@ -228,7 +215,6 @@ SoundFileBox::play_btn_clicked ()
newpair.first = path;
newpair.second = boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (srclist, 0, srclist[0]->length(), rname, 0, Region::DefaultFlags, false));
-
res = region_cache.insert (newpair);
the_region = res.first;
}
@@ -252,57 +238,22 @@ SoundFileBox::stop_btn_clicked ()
}
void
-SoundFileBox::add_field_clicked ()
-{
- ArdourPrompter prompter (true);
- string name;
-
- prompter.set_prompt (_("Name for Field"));
- prompter.add_button (Gtk::Stock::ADD, Gtk::RESPONSE_ACCEPT);
- prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
-
- switch (prompter.run ()) {
- case Gtk::RESPONSE_ACCEPT:
- prompter.get_result (name);
- if (name.length()) {
- Library->add_field (name);
- Library->save_changes ();
- }
- break;
-
- default:
- break;
- }
-}
-
-void
-SoundFileBox::remove_field_clicked ()
+SoundFileBox::apply_btn_clicked ()
{
- field_view.get_selection()->selected_foreach_iter(mem_fun(*this, &SoundFileBox::delete_row));
+ string tag_string = tags_entry.get_text ();
- Library->save_changes ();
-}
+ vector<string> tags;
-void
-SoundFileBox::field_edited (const Glib::ustring& str1, const Glib::ustring& str2)
-{
- Gtk::TreeModel::Children rows(fields->children());
- Gtk::TreeModel::Row row(rows[atoi(str1.c_str())]);
-
- Library->set_field (path, row[label_columns.field], str2);
+ if (!PBD::tokenize (tag_string, string(","), std::back_inserter (tags), true)) {
+ warning << _("SoundFileBox: Could not tokenize string: ") << tag_string << endmsg;
+ return;
+ }
+ Library->set_tags (path, tags);
Library->save_changes ();
}
void
-SoundFileBox::delete_row (const Gtk::TreeModel::iterator& iter)
-{
- Gtk::TreeModel::Row row = *iter;
-
- Library->remove_field(row[label_columns.field]);
-}
-
-void
SoundFileBox::audition_status_changed (bool active)
{
ENSURE_GUI_THREAD(bind (mem_fun (*this, &SoundFileBox::audition_status_changed), active));
@@ -312,16 +263,6 @@ SoundFileBox::audition_status_changed (bool active)
}
}
-void
-SoundFileBox::field_selected ()
-{
- if (field_view.get_selection()->count_selected_rows()) {
- remove_field_btn.set_sensitive(true);
- } else {
- remove_field_btn.set_sensitive(false);
- }
-}
-
// this needs to be kept in sync with the ImportMode enum defined in editing.h and editing_syms.h.
static const char *import_mode_strings[] = {
N_("Add to Region list"),
@@ -333,14 +274,41 @@ static const char *import_mode_strings[] = {
SoundFileBrowser::SoundFileBrowser (string title, ARDOUR::Session* s)
: ArdourDialog (title, false),
- chooser (Gtk::FILE_CHOOSER_ACTION_OPEN)
+ chooser (Gtk::FILE_CHOOSER_ACTION_OPEN),
+ found_list (Gtk::ListStore::create(found_list_columns)),
+ found_list_view (found_list),
+ found_search_btn (_("Search"))
{
- get_vbox()->pack_start(chooser);
- chooser.set_preview_widget(preview);
- chooser.set_select_multiple (true);
+ set_default_size (700, 500);
+ Gtk::HBox* hbox = manage(new Gtk::HBox);
+ hbox->pack_start(notebook);
+ hbox->pack_start(preview, Gtk::PACK_SHRINK);
+ get_vbox()->pack_start(*hbox);
+
+ hbox = manage(new Gtk::HBox);
+ hbox->pack_start (found_entry);
+ hbox->pack_start (found_search_btn);
+
+ Gtk::VBox* vbox = manage(new Gtk::VBox);
+ vbox->pack_start (*hbox, Gtk::PACK_SHRINK);
+ vbox->pack_start (found_list_view);
+ found_list_view.append_column(_("Paths"), found_list_columns.pathname);
+
+ notebook.append_page (chooser, _("Files"));
+ notebook.append_page (*vbox, _("Tags"));
+
+ found_list_view.get_selection()->set_mode (Gtk::SELECTION_MULTIPLE);
+ filter.add_custom (Gtk::FILE_FILTER_FILENAME, mem_fun(*this, &SoundFileBrowser::on_custom));
+ chooser.set_filter (filter);
+ chooser.set_select_multiple (true);
chooser.signal_update_preview().connect(mem_fun(*this, &SoundFileBrowser::update_preview));
+ found_list_view.get_selection()->signal_changed().connect(mem_fun(*this, &SoundFileBrowser::found_list_view_selected));
+
+ found_search_btn.signal_clicked().connect(mem_fun(*this, &SoundFileBrowser::found_search_clicked));
+ show_all ();
+
set_session (s);
}
@@ -350,10 +318,54 @@ SoundFileBrowser::set_session (Session* s)
preview.set_session(s);
}
+bool
+SoundFileBrowser::on_custom (const Gtk::FileFilter::Info& filter_info)
+{
+ return AudioFileSource::safe_file_extension(filter_info.filename);
+}
+
void
SoundFileBrowser::update_preview ()
{
- chooser.set_preview_widget_active(preview.setup_labels(chooser.get_filename()));
+ preview.setup_labels(chooser.get_filename());
+}
+
+void
+SoundFileBrowser::found_list_view_selected ()
+{
+ string file;
+
+ Gtk::TreeView::Selection::ListHandle_Path rows = found_list_view.get_selection()->get_selected_rows ();
+
+ if (!rows.empty()) {
+ Gtk::TreeIter iter = found_list->get_iter(*rows.begin());
+ file = (*iter)[found_list_columns.pathname];
+ chooser.set_filename (file);
+ }
+ preview.setup_labels (file);
+}
+
+void
+SoundFileBrowser::found_search_clicked ()
+{
+ string tag_string = found_entry.get_text ();
+
+ vector<string> tags;
+
+ if (!PBD::tokenize (tag_string, string(","), std::back_inserter (tags), true)) {
+ warning << _("SoundFileBrowser: Could not tokenize string: ") << tag_string << endmsg;
+ return;
+ }
+
+ vector<string> results;
+ Library->search_members_and (results, tags);
+
+ found_list->clear();
+ for (vector<string>::iterator i = results.begin(); i != results.end(); ++i) {
+ Gtk::TreeModel::iterator new_row = found_list->append();
+ Gtk::TreeModel::Row row = *new_row;
+ row[found_list_columns.pathname] = *i;
+ }
}
SoundFileChooser::SoundFileChooser (string title, ARDOUR::Session* s)
@@ -362,19 +374,37 @@ SoundFileChooser::SoundFileChooser (string title, ARDOUR::Session* s)
{
add_button (Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+
+ chooser.set_select_multiple (false);
+ found_list_view.get_selection()->set_mode (Gtk::SELECTION_SINGLE);
show_all ();
}
+string
+SoundFileChooser::get_filename ()
+{
+ Gtk::TreeModel::iterator iter;
+ Gtk::TreeModel::Row row;
+
+ switch (notebook.get_current_page()) {
+ case 0:
+ return chooser.get_filename();
+ case 1:
+ iter = found_list_view.get_selection()->get_selected();
+ row = *iter;
+ return row[found_list_columns.pathname];
+ default:
+ /* NOT REACHED */
+ return "";
+ }
+}
+
vector<string> SoundFileOmega::mode_strings;
SoundFileOmega::SoundFileOmega (string title, ARDOUR::Session* s)
: SoundFileBrowser (title, s),
split_check (_("Split Channels"))
{
- if (mode_strings.empty()) {
- mode_strings = I18N (import_mode_strings);
- }
-
ARDOUR_UI::instance()->tooltips().set_tip(split_check,
_("Create a region for each channel"));
@@ -382,24 +412,23 @@ SoundFileOmega::SoundFileOmega (string title, ARDOUR::Session* s)
ARDOUR_UI::instance()->tooltips().set_tip(*btn,
_("Link to an external file"));
- add_button (Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE);
-
btn = add_button (_("Import"), ResponseImport);
ARDOUR_UI::instance()->tooltips().set_tip(*btn,
_("Copy a file to the session folder"));
- Gtk::HBox *box = manage (new Gtk::HBox());
-
+ add_button (Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE);
+
+ if (mode_strings.empty()) {
+ mode_strings = I18N (import_mode_strings);
+ }
Gtkmm2ext::set_popdown_strings (mode_combo, mode_strings);
set_mode (Editing::ImportAsRegion);
- box->pack_start (split_check);
- box->pack_start (mode_combo);
+ get_action_area()->pack_start (split_check);
+ get_action_area()->pack_start (mode_combo);
mode_combo.signal_changed().connect (mem_fun (*this, &SoundFileOmega::mode_changed));
-
- chooser.set_extra_widget (*box);
show_all ();
}
@@ -413,7 +442,22 @@ SoundFileOmega::get_split ()
vector<Glib::ustring>
SoundFileOmega::get_paths ()
{
- return chooser.get_filenames();
+ int n = notebook.get_current_page ();
+
+ if (n == 0) {
+ return chooser.get_filenames ();
+ }
+
+ typedef Gtk::TreeView::Selection::ListHandle_Path ListPath;
+
+ vector<Glib::ustring> results;
+ ListPath rows = found_list_view.get_selection()->get_selected_rows ();
+ for (ListPath::iterator i = rows.begin() ; i != rows.end(); ++i) {
+ Gtk::TreeIter iter = found_list->get_iter(*i);
+ string str = (*iter)[found_list_columns.pathname];
+ results.push_back (str);
+ }
+ return results;
}
void
diff --git a/gtk2_ardour/sfdb_ui.h b/gtk2_ardour/sfdb_ui.h
index d7c2c14014..fb0b7da600 100644
--- a/gtk2_ardour/sfdb_ui.h
+++ b/gtk2_ardour/sfdb_ui.h
@@ -1,6 +1,5 @@
/*
- Copyright (C) 2005 Paul Davis
- Written by Taybin Rutkin
+ Copyright (C) 2005-2006 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,7 +15,6 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
*/
#ifndef __ardour_sfdb_ui_h__
@@ -30,14 +28,12 @@
#include <gtkmm/box.h>
#include <gtkmm/button.h>
#include <gtkmm/checkbutton.h>
+#include <gtkmm/comboboxtext.h>
#include <gtkmm/dialog.h>
#include <gtkmm/entry.h>
#include <gtkmm/filechooserwidget.h>
-#include <gtkmm/comboboxtext.h>
#include <gtkmm/frame.h>
#include <gtkmm/label.h>
-#include <gtkmm/liststore.h>
-#include <gtkmm/treeview.h>
#include <ardour/session.h>
#include <ardour/audiofilesource.h>
@@ -48,117 +44,118 @@
class SoundFileBox : public Gtk::VBox
{
public:
- SoundFileBox ();
- virtual ~SoundFileBox () {};
-
- void set_session (ARDOUR::Session* s);
- bool setup_labels (std::string filename);
+ SoundFileBox ();
+ virtual ~SoundFileBox () {};
+
+ void set_session (ARDOUR::Session* s);
+ bool setup_labels (std::string filename);
protected:
ARDOUR::Session* _session;
std::string path;
-
- struct LabelModelColumns : public Gtk::TreeModel::ColumnRecord
- {
- public:
- Gtk::TreeModelColumn<std::string> field;
- Gtk::TreeModelColumn<std::string> data;
-
- LabelModelColumns() { add(field); add(data); }
- };
-
- LabelModelColumns label_columns;
-
- ARDOUR::SoundFileInfo sf_info;
-
- pid_t current_pid;
-
- Gtk::Label length;
- Gtk::Label format;
- Gtk::Label channels;
- Gtk::Label samplerate;
- Gtk::Label timecode;
-
- Gtk::TreeView field_view;
- Glib::RefPtr<Gtk::ListStore> fields;
- std::string selected_field;
-
- Gtk::Frame border_frame;
-
- Gtk::VBox main_box;
- Gtk::VBox path_box;
- Gtk::HBox top_box;
- Gtk::HBox bottom_box;
-
- Gtk::Button play_btn;
- Gtk::Button stop_btn;
- Gtk::Button add_field_btn;
- Gtk::Button remove_field_btn;
-
- void setup_fields ();
-
- void play_btn_clicked ();
- void stop_btn_clicked ();
- void add_field_clicked ();
- void remove_field_clicked ();
- void field_edited (const Glib::ustring&, const Glib::ustring&);
- void delete_row (const Gtk::TreeModel::iterator& iter);
-
- void field_selected ();
- void audition_status_changed (bool state);
+
+ ARDOUR::SoundFileInfo sf_info;
+
+ pid_t current_pid;
+
+ Gtk::Label length;
+ Gtk::Label format;
+ Gtk::Label channels;
+ Gtk::Label samplerate;
+ Gtk::Label timecode;
+
+ Gtk::Frame border_frame;
+
+ Gtk::Entry tags_entry;
+
+ Gtk::VBox main_box;
+ Gtk::VBox path_box;
+ Gtk::HBox bottom_box;
+
+ Gtk::Button play_btn;
+ Gtk::Button stop_btn;
+ Gtk::Button apply_btn;
+
+ bool tags_entry_left (GdkEventFocus* event);
+ void play_btn_clicked ();
+ void stop_btn_clicked ();
+ void apply_btn_clicked ();
+
+ void audition_status_changed (bool state);
};
class SoundFileBrowser : public ArdourDialog
{
public:
- SoundFileBrowser (std::string title, ARDOUR::Session* _s = 0);
- virtual ~SoundFileBrowser () {};
-
- virtual void set_session (ARDOUR::Session*);
+ SoundFileBrowser (std::string title, ARDOUR::Session* _s = 0);
+ virtual ~SoundFileBrowser () {};
+
+ virtual void set_session (ARDOUR::Session*);
protected:
- Gtk::FileChooserWidget chooser;
- SoundFileBox preview;
-
- void update_preview ();
+ Gtk::FileChooserWidget chooser;
+ Gtk::FileFilter filter;
+ SoundFileBox preview;
+
+ class FoundTagColumns : public Gtk::TreeModel::ColumnRecord
+ {
+ public:
+ Gtk::TreeModelColumn<string> pathname;
+
+ FoundTagColumns() { add(pathname); }
+ };
+
+ FoundTagColumns found_list_columns;
+ Glib::RefPtr<Gtk::ListStore> found_list;
+ Gtk::TreeView found_list_view;
+ Gtk::Entry found_entry;
+ Gtk::Button found_search_btn;
+
+ Gtk::Notebook notebook;
+
+ void update_preview ();
+ void found_list_view_selected ();
+ void found_search_clicked ();
+
+ bool on_custom (const Gtk::FileFilter::Info& filter_info);
};
class SoundFileChooser : public SoundFileBrowser
{
public:
- SoundFileChooser (std::string title, ARDOUR::Session* _s = 0);
- virtual ~SoundFileChooser () {};
-
- std::string get_filename () {return chooser.get_filename();};
+ SoundFileChooser (std::string title, ARDOUR::Session* _s = 0);
+ virtual ~SoundFileChooser () {};
+
+ std::string get_filename ();
};
class SoundFileOmega : public SoundFileBrowser
{
public:
- SoundFileOmega (std::string title, ARDOUR::Session* _s);
- virtual ~SoundFileOmega () {};
-
- /* these are returned by the Dialog::run() method. note
- that builtin GTK responses are all negative, leaving
- positive values for application-defined responses.
- */
-
- const static int ResponseImport = 1;
- const static int ResponseEmbed = 2;
-
- std::vector<Glib::ustring> get_paths ();
- bool get_split ();
-
- void set_mode (Editing::ImportMode);
- Editing::ImportMode get_mode ();
+ SoundFileOmega (std::string title, ARDOUR::Session* _s);
+ virtual ~SoundFileOmega () {};
+
+ /* these are returned by the Dialog::run() method. note
+ that builtin GTK responses are all negative, leaving
+ positive values for application-defined responses.
+ */
+
+ const static int ResponseImport = 1;
+ const static int ResponseEmbed = 2;
+
+ std::vector<Glib::ustring> get_paths ();
+ bool get_split ();
+
+ void set_mode (Editing::ImportMode);
+ Editing::ImportMode get_mode ();
protected:
- Gtk::CheckButton split_check;
- Gtk::ComboBoxText mode_combo;
-
- void mode_changed ();
-
- static std::vector<std::string> mode_strings;
+ Gtk::CheckButton split_check;
+ Gtk::ComboBoxText mode_combo;
+
+ void mode_changed ();
+
+ static std::vector<std::string> mode_strings;
};
#endif // __ardour_sfdb_ui_h__
diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc
index ce0b6a4250..53a0ee4553 100644
--- a/gtk2_ardour/time_axis_view.cc
+++ b/gtk2_ardour/time_axis_view.cc
@@ -761,8 +761,9 @@ TimeAxisView::get_selection_rect (uint32_t id)
for (list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i) {
if ((*i)->id == id) {
+ SelectionRect* ret = (*i);
free_selection_rects.erase (i);
- return (*i);
+ return ret;
}
}
@@ -1068,3 +1069,24 @@ TimeAxisView::color_handler (ColorID id, uint32_t val)
}
}
+TimeAxisView*
+TimeAxisView::covers_y_position (double y)
+{
+ if (hidden()) {
+ return 0;
+ }
+
+ if (y_position <= y && y < (y_position + height)) {
+ return this;
+ }
+
+ for (vector<TimeAxisView*>::iterator i = children.begin(); i != children.end(); ++i) {
+ TimeAxisView* tv;
+
+ if ((tv = (*i)->covers_y_position (y)) != 0) {
+ return tv;
+ }
+ }
+
+ return 0;
+}
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
index 0ba4dc1938..96437a9991 100644
--- a/gtk2_ardour/time_axis_view.h
+++ b/gtk2_ardour/time_axis_view.h
@@ -31,6 +31,8 @@
#include <gtkmm/entry.h>
#include <gtkmm/label.h>
+#include <gtkmm2ext/focus_entry.h>
+
#include <ardour/types.h>
#include <ardour/region.h>
@@ -118,7 +120,7 @@ class TimeAxisView : public virtual AxisView
Gtk::VBox controls_vbox;
Gtk::HBox name_hbox;
Gtk::Frame name_frame;
- Gtk::Entry name_entry;
+ Gtkmm2ext::FocusEntry name_entry;
void hide_name_label ();
void hide_name_entry ();
@@ -152,7 +154,16 @@ class TimeAxisView : public virtual AxisView
virtual void set_height (TrackHeight h);
void reset_height();
- /** Steps through the defined heights for this TrackView.
+ /**
+ * Returns a TimeAxisView* if this object covers y, or one of its children does.
+ * If the covering object is a child axis, then the child is returned.
+ * Returns 0 otherwise.
+ */
+
+ TimeAxisView* covers_y_position (double y);
+
+ /**
+ * Steps through the defined heights for this TrackView.
* Sets bigger to true to step up in size, set to fals eot step smaller.
*
* @param bigger true if stepping should increase in size, false otherwise
@@ -160,7 +171,7 @@ class TimeAxisView : public virtual AxisView
virtual void step_height (bool bigger);
virtual ARDOUR::RouteGroup* edit_group() const { return 0; }
- virtual ARDOUR::Playlist* playlist() const { return 0; }
+ virtual boost::shared_ptr<ARDOUR::Playlist> playlist() const { return boost::shared_ptr<ARDOUR::Playlist> (); }
virtual void set_samples_per_unit (double);
virtual void show_selection (TimeSelection&);
diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc
index b23e7972ae..6af38deaee 100644
--- a/gtk2_ardour/time_axis_view_item.cc
+++ b/gtk2_ardour/time_axis_view_item.cc
@@ -102,7 +102,7 @@ TimeAxisViewItem::TimeAxisViewItem(const string & it_name, ArdourCanvas::Group&
frame_position = start ;
item_duration = duration ;
name_connected = false;
- fill_opacity = 50;
+ fill_opacity = 230;
position_locked = false ;
max_item_duration = ARDOUR::max_frames;
min_item_duration = 0 ;
diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc
index 4d7c133770..887494829e 100644
--- a/gtk2_ardour/utils.cc
+++ b/gtk2_ardour/utils.cc
@@ -46,11 +46,13 @@ using namespace Glib;
using namespace PBD;
ustring
-fit_to_pixels (const ustring& str, int pixel_width, Pango::FontDescription& font, int& actual_width)
+fit_to_pixels (const ustring& str, int pixel_width, Pango::FontDescription& font, int& actual_width, bool with_ellipses)
{
Label foo;
Glib::RefPtr<Pango::Layout> layout = foo.create_pango_layout ("");
-
+ ustring::size_type shorter_by = 0;
+ ustring txt;
+
layout->set_font_description (font);
actual_width = 0;
@@ -59,9 +61,11 @@ fit_to_pixels (const ustring& str, int pixel_width, Pango::FontDescription& font
ustring::iterator last = ustr.end();
--last; /* now points at final entry */
+ txt = ustr;
+
while (!ustr.empty()) {
- layout->set_text (ustr);
+ layout->set_text (txt);
int width, height;
Gtkmm2ext::get_ink_pixel_size (layout, width, height);
@@ -72,9 +76,17 @@ fit_to_pixels (const ustring& str, int pixel_width, Pango::FontDescription& font
}
ustr.erase (last--);
+ shorter_by++;
+
+ if (with_ellipses && shorter_by > 3) {
+ txt = ustr;
+ txt += "...";
+ } else {
+ txt = ustr;
+ }
}
- return ustr;
+ return txt;
}
gint
@@ -224,64 +236,6 @@ get_font_for_style (string widgetname)
return style->get_font();
}
-gint
-pane_handler (GdkEventButton* ev, Gtk::Paned* pane)
-{
- if (ev->window != Gtkmm2ext::get_paned_handle (*pane)) {
- return FALSE;
- }
-
- if (Keyboard::is_delete_event (ev)) {
-
- gint pos;
- gint cmp;
-
- pos = pane->get_position ();
-
- if (dynamic_cast<VPaned*>(pane)) {
- cmp = pane->get_height();
- } else {
- cmp = pane->get_width();
- }
-
- /* we have to use approximations here because we can't predict the
- exact position or sizes of the pane (themes, etc)
- */
-
- if (pos < 10 || abs (pos - cmp) < 10) {
-
- /* already collapsed: restore it (note that this is cast from a pointer value to int, which is tricky on 64bit */
-
- pane->set_position ((intptr_t) pane->get_data ("rpos"));
-
- } else {
-
- int collapse_direction;
-
- /* store the current position */
-
- pane->set_data ("rpos", (gpointer) pos);
-
- /* collapse to show the relevant child in full */
-
- collapse_direction = (intptr_t) pane->get_data ("collapse-direction");
-
- if (collapse_direction) {
- pane->set_position (1);
- } else {
- if (dynamic_cast<VPaned*>(pane)) {
- pane->set_position (pane->get_height());
- } else {
- pane->set_position (pane->get_width());
- }
- }
- }
-
- return TRUE;
- }
-
- return FALSE;
-}
uint32_t
rgba_from_style (string style, uint32_t r, uint32_t g, uint32_t b, uint32_t a, string attr, int state, bool rgba)
{
@@ -544,3 +498,52 @@ longest (vector<string>& strings)
return *longest;
}
+
+bool
+key_is_legal_for_numeric_entry (guint keyval)
+{
+ switch (keyval) {
+ case GDK_minus:
+ case GDK_plus:
+ case GDK_period:
+ case GDK_comma:
+ case GDK_0:
+ case GDK_1:
+ case GDK_2:
+ case GDK_3:
+ case GDK_4:
+ case GDK_5:
+ case GDK_6:
+ case GDK_7:
+ case GDK_8:
+ case GDK_9:
+ case GDK_KP_Add:
+ case GDK_KP_Subtract:
+ case GDK_KP_Decimal:
+ case GDK_KP_0:
+ case GDK_KP_1:
+ case GDK_KP_2:
+ case GDK_KP_3:
+ case GDK_KP_4:
+ case GDK_KP_5:
+ case GDK_KP_6:
+ case GDK_KP_7:
+ case GDK_KP_8:
+ case GDK_KP_9:
+ case GDK_Return:
+ case GDK_BackSpace:
+ case GDK_Delete:
+ case GDK_KP_Enter:
+ case GDK_Home:
+ case GDK_End:
+ case GDK_Left:
+ case GDK_Right:
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
diff --git a/gtk2_ardour/utils.h b/gtk2_ardour/utils.h
index bb2a21d6c3..6d5ff0702d 100644
--- a/gtk2_ardour/utils.h
+++ b/gtk2_ardour/utils.h
@@ -53,7 +53,7 @@ slider_position_to_gain (double pos)
return pow (2.0,(sqrt(sqrt(sqrt(pos)))*198.0-192.0)/6.0);
}
-Glib::ustring fit_to_pixels (const Glib::ustring&, int pixel_width, Pango::FontDescription& font, int& actual_width);
+Glib::ustring fit_to_pixels (const Glib::ustring&, int pixel_width, Pango::FontDescription& font, int& actual_width, bool with_ellipses = false);
gint just_hide_it (GdkEventAny*, Gtk::Window*);
void allow_keyboard_focus (bool);
@@ -65,7 +65,6 @@ ArdourCanvas::Points* get_canvas_points (std::string who, uint32_t npoints);
Pango::FontDescription get_font_for_style (std::string widgetname);
-gint pane_handler (GdkEventButton*, Gtk::Paned*);
uint32_t rgba_from_style (std::string, uint32_t, uint32_t, uint32_t, uint32_t, std::string = "fg", int = Gtk::STATE_NORMAL, bool = true);
void decorate (Gtk::Window& w, Gdk::WMDecoration d);
@@ -81,5 +80,6 @@ Glib::RefPtr<Gdk::Pixbuf> get_icon (const char*);
static std::map<std::string, Glib::RefPtr<Gdk::Pixbuf> > xpm_map;
const char* const *get_xpm_data (std::string path);
std::string longest (std::vector<std::string>&);
+bool key_is_legal_for_numeric_entry (guint keyval);
#endif /* __ardour_gtk_utils_h__ */
diff --git a/gtk2_ardour/visual_time_axis.cc b/gtk2_ardour/visual_time_axis.cc
index 24cafdbe67..20fe13603e 100644
--- a/gtk2_ardour/visual_time_axis.cc
+++ b/gtk2_ardour/visual_time_axis.cc
@@ -375,17 +375,17 @@ VisualTimeAxis::name_entry_changed()
return;
}
+ strip_whitespace_edges(x);
+
if (x.length() == 0) {
name_entry.set_text (time_axis_name);
return;
}
- strip_whitespace_edges(x);
-
if (!editor.get_named_time_axis(x)) {
set_time_axis_name(x, this);
} else {
- ARDOUR_UI::instance()->popup_error (_("a track already exists with that name"));
+ ARDOUR_UI::instance()->popup_error (_("A track already exists with that name"));
name_entry.set_text(time_axis_name);
}
}
diff --git a/gtk2_ardour/waveview.cc b/gtk2_ardour/waveview.cc
index 05cc97701d..92e4fdd24a 100644
--- a/gtk2_ardour/waveview.cc
+++ b/gtk2_ardour/waveview.cc
@@ -268,6 +268,14 @@ Glib::PropertyProxy_ReadOnly<guint> WaveView::property_region_start() const
{
return Glib::PropertyProxy_ReadOnly<guint> (this, "region_start");
}
+Glib::PropertyProxy<gint> WaveView::property_logscaled()
+{
+ return Glib::PropertyProxy<gint> (this, "logscaled");
+}
+Glib::PropertyProxy_ReadOnly<gint> WaveView::property_logscaled() const
+{
+ return Glib::PropertyProxy_ReadOnly<gint> (this, "logscaled");
+}
} // namespace Canvas
diff --git a/gtk2_ardour/waveview.h b/gtk2_ardour/waveview.h
index 15efbbcef5..56d0ed7675 100644
--- a/gtk2_ardour/waveview.h
+++ b/gtk2_ardour/waveview.h
@@ -147,6 +147,8 @@ public:
Glib::PropertyProxy_ReadOnly<gint> property_rectified() const;
Glib::PropertyProxy<guint> property_region_start();
Glib::PropertyProxy_ReadOnly<guint> property_region_start() const;
+ Glib::PropertyProxy<gint> property_logscaled();
+ Glib::PropertyProxy_ReadOnly<gint> property_logscaled() const;
};
} /* namespace Canvas */