Merged with trunk R1612.
git-svn-id: svn://localhost/ardour2/branches/midi@1614 d708f5d6-7413-0410-9779-e7cbd77b26cf
2
Makefile
|
|
@ -1,4 +1,4 @@
|
|||
all: scons cscope
|
||||
all: scons
|
||||
|
||||
scons:
|
||||
scons
|
||||
|
|
|
|||
42
SConstruct
|
|
@ -16,7 +16,7 @@ import SCons.Node.FS
|
|||
SConsignFile()
|
||||
EnsureSConsVersion(0, 96)
|
||||
|
||||
ardour_version = '2.0beta11.1'
|
||||
ardour_version = '2.0beta12'
|
||||
|
||||
subst_dict = { }
|
||||
|
||||
|
|
@ -41,9 +41,11 @@ opts.AddOptions(
|
|||
PathOption('PREFIX', 'Set the install "prefix"', '/usr/local'),
|
||||
BoolOption('SURFACES', 'Build support for control surfaces', 1),
|
||||
BoolOption('SYSLIBS', 'USE AT YOUR OWN RISK: CANCELS ALL SUPPORT FROM ARDOUR AUTHORS: Use existing system versions of various libraries instead of internal ones', 0),
|
||||
BoolOption('UNIVERSAL', 'Compile as universal binary. Requires that external libraries are already universal.', 0),
|
||||
BoolOption('VERSIONED', 'Add revision information to ardour/gtk executable name inside the build directory', 0),
|
||||
BoolOption('VST', 'Compile with support for VST', 0),
|
||||
BoolOption('TRANZPORT', 'Compile with support for Frontier Designs (if libusb is available)', 0)
|
||||
BoolOption('GPROFILE', 'Compile with support for gprofile (Developers only)', 0),
|
||||
BoolOption('TRANZPORT', 'Compile with support for Frontier Designs (if libusb is available)', 1)
|
||||
)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
|
@ -311,7 +313,7 @@ env.Append (BUILDERS = {'VersionBuild' : version_bld})
|
|||
#
|
||||
|
||||
def versioned_builder(target,source,env):
|
||||
w, r = os.popen2( "svn info | awk '/^Revision:/ { print $2}'")
|
||||
w, r = os.popen2( "LANG= svn info | awk '/^Revision:/ { print $2}'")
|
||||
|
||||
last_revision = r.readline().strip()
|
||||
w.close()
|
||||
|
|
@ -530,7 +532,10 @@ env = conf.Finish()
|
|||
#
|
||||
|
||||
opt_flags = []
|
||||
debug_flags = [ '-g' ]
|
||||
if env['GPROFILE'] == 1:
|
||||
debug_flags = [ '-g', '-pg' ]
|
||||
else:
|
||||
debug_flags = [ '-g' ]
|
||||
|
||||
# guess at the platform, used to define compiler flags
|
||||
|
||||
|
|
@ -596,7 +601,7 @@ elif ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_6
|
|||
if env['DIST_TARGET'] != 'i386':
|
||||
|
||||
flag_line = os.popen ("cat /proc/cpuinfo | grep '^flags'").read()[:-1]
|
||||
x86_flags = flag_line.split (": ")[1:][0].split (' ')
|
||||
x86_flags = flag_line.split (": ")[1:][0].split ()
|
||||
|
||||
if "mmx" in x86_flags:
|
||||
opt_flags.append ("-mmmx")
|
||||
|
|
@ -660,13 +665,19 @@ opt_flags[:0] = [
|
|||
"-fomit-frame-pointer",
|
||||
"-ffast-math",
|
||||
"-fstrength-reduce",
|
||||
"-fno-strict-aliasing"
|
||||
"-pipe"
|
||||
]
|
||||
|
||||
if env['DEBUG'] == 1:
|
||||
env.Append(CCFLAGS=" ".join (debug_flags))
|
||||
env.Append(LINKFLAGS=" ".join (debug_flags))
|
||||
else:
|
||||
env.Append(CCFLAGS=" ".join (opt_flags))
|
||||
env.Append(LINKFLAGS=" ".join (opt_flags))
|
||||
|
||||
if env['UNIVERSAL'] == 1:
|
||||
env.Append(CCFLAGS="-arch i386 -arch ppc")
|
||||
env.Append(LINKFLAGS="-arch i386 -arch ppc")
|
||||
|
||||
#
|
||||
# warnings flags
|
||||
|
|
@ -676,8 +687,9 @@ env.Append(CCFLAGS="-Wall")
|
|||
env.Append(CXXFLAGS="-Woverloaded-virtual")
|
||||
|
||||
if env['EXTRA_WARN']:
|
||||
env.Append(CCFLAGS="-Wextra -pedantic")
|
||||
env.Append(CCFLAGS="-Wextra -pedantic -ansi")
|
||||
env.Append(CXXFLAGS="-ansi")
|
||||
# env.Append(CFLAGS="-iso")
|
||||
|
||||
if env['LIBLO']:
|
||||
env.Append(CCFLAGS="-DHAVE_LIBLO")
|
||||
|
|
@ -837,7 +849,7 @@ if env['SYSLIBS']:
|
|||
|
||||
libraries['sndfile-ardour'] = LibraryInfo(LIBS='libsndfile-ardour',
|
||||
LIBPATH='#libs/libsndfile',
|
||||
CPPPATH=['#libs/libsndfile', '#libs/libsndfile/src'])
|
||||
CPPPATH=['#libs/libsndfile/src'])
|
||||
|
||||
# libraries['libglademm'] = LibraryInfo()
|
||||
# libraries['libglademm'].ParseConfig ('pkg-config --cflags --libs libglademm-2.4')
|
||||
|
|
@ -957,11 +969,14 @@ else:
|
|||
# its included in the tarball
|
||||
#
|
||||
|
||||
surface_subdirs = [ 'libs/surfaces/control_protocol', 'libs/surfaces/generic_midi', 'libs/surfaces/tranzport' ]
|
||||
surface_subdirs = [ 'libs/surfaces/control_protocol', 'libs/surfaces/generic_midi', 'libs/surfaces/tranzport', 'libs/surfaces/mackie' ]
|
||||
|
||||
if env['SURFACES']:
|
||||
if have_libusb:
|
||||
env['TRANZPORT'] = 'yes'
|
||||
env['TRANZPORT'] = 1
|
||||
else:
|
||||
env['TRANZPORT'] = 0
|
||||
print 'Disabled building Tranzport code because libusb could not be found'
|
||||
if os.access ('libs/surfaces/sony9pin', os.F_OK):
|
||||
surface_subdirs += [ 'libs/surfaces/sony9pin' ]
|
||||
|
||||
|
|
@ -1076,6 +1091,13 @@ if not conf.CheckFunc('posix_memalign'):
|
|||
env = conf.Finish()
|
||||
|
||||
rcbuild = env.SubstInFile ('ardour.rc','ardour.rc.in', SUBST_DICT = subst_dict)
|
||||
subst_dict['%VERSION%'] = ardour_version[0:3]
|
||||
subst_dict['%EXTRA_VERSION%'] = ardour_version[3:]
|
||||
subst_dict['%REVISION_STRING%'] = ''
|
||||
if os.path.exists('.svn'):
|
||||
subst_dict['%REVISION_STRING%'] = '.' + fetch_svn_revision ('.') + 'svn'
|
||||
|
||||
# specbuild = env.SubstInFile ('ardour.spec','ardour.spec.in', SUBST_DICT = subst_dict)
|
||||
|
||||
the_revision = env.Command ('frobnicatory_decoy', [], create_stored_revision)
|
||||
|
||||
|
|
|
|||
13
ardour.dox
|
|
@ -459,8 +459,7 @@ WARN_LOGFILE =
|
|||
# directories like "/usr/src/myproject". Separate the files or directories
|
||||
# with spaces.
|
||||
|
||||
#INPUT = libs/pbd libs/midi++2 libs/ardour libs/gtkmm2ext gtk2_ardour
|
||||
INPUT = libs/ardour gtk2_ardour
|
||||
INPUT = libs/pbd libs/midi++2 libs/ardour libs/surfaces libs/gtkmm2ext gtk2_ardour
|
||||
|
||||
# If the value of the INPUT tag contains directories, you can use the
|
||||
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
|
||||
|
|
@ -557,7 +556,7 @@ FILTER_SOURCE_FILES = NO
|
|||
# Note: To get rid of all source code in the generated output, make sure also
|
||||
# VERBATIM_HEADERS is set to NO.
|
||||
|
||||
SOURCE_BROWSER = NO
|
||||
SOURCE_BROWSER = YES
|
||||
|
||||
# Setting the INLINE_SOURCES tag to YES will include the body
|
||||
# of functions and classes directly in the documentation.
|
||||
|
|
@ -604,7 +603,7 @@ VERBATIM_HEADERS = YES
|
|||
# of all compounds will be generated. Enable this if the project
|
||||
# contains a lot of classes, structs, unions or interfaces.
|
||||
|
||||
ALPHABETICAL_INDEX = NO
|
||||
ALPHABETICAL_INDEX = YES
|
||||
|
||||
# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
|
||||
# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
|
||||
|
|
@ -767,7 +766,7 @@ COMPACT_LATEX = NO
|
|||
# by the printer. Possible values are: a4, a4wide, letter, legal and
|
||||
# executive. If left blank a4wide will be used.
|
||||
|
||||
PAPER_TYPE = a4wide
|
||||
PAPER_TYPE = letter
|
||||
|
||||
# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
|
||||
# packages that should be included in the LaTeX output.
|
||||
|
|
@ -792,7 +791,7 @@ PDF_HYPERLINKS = NO
|
|||
# plain latex in the generated Makefile. Set this option to YES to get a
|
||||
# higher quality PDF documentation.
|
||||
|
||||
USE_PDFLATEX = NO
|
||||
USE_PDFLATEX = YES
|
||||
|
||||
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
|
||||
# command to the generated LaTeX files. This will instruct LaTeX to keep
|
||||
|
|
@ -1006,7 +1005,7 @@ INCLUDE_FILE_PATTERNS =
|
|||
# undefined via #undef or recursively expanded use the := operator
|
||||
# instead of the = operator.
|
||||
|
||||
PREDEFINED = HAVE_COREAUDIO VST_SUPPORT HAVE_LIBLO FFT_ANALYSIS
|
||||
PREDEFINED = HAVE_LIBLO FFT_ANALYSIS
|
||||
|
||||
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
|
||||
# this tag can be used to specify a list of macro names that should be expanded.
|
||||
|
|
|
|||
|
|
@ -147,7 +147,6 @@ export_range_markers_dialog.cc
|
|||
gain_automation_time_axis.cc
|
||||
gain_meter.cc
|
||||
ghostregion.cc
|
||||
grouped_buttons.cc
|
||||
gtk-custom-hruler.c
|
||||
gtk-custom-ruler.c
|
||||
imageframe.cc
|
||||
|
|
@ -276,6 +275,13 @@ rcu = gtkardour.Program(target = 'rcu', source = rcu_files)
|
|||
tt = gtkmmtests.Program(target = 'tt', source = tt_files)
|
||||
|
||||
my_subst_dict = { }
|
||||
|
||||
#
|
||||
# null substitution just to avoid ardour.bindings being in svn
|
||||
#
|
||||
|
||||
ardourbindings = env.SubstInFile ('ardour.bindings', 'ardour.bindings.in', SUBST_DICT = my_subst_dict);
|
||||
|
||||
my_subst_dict['%INSTALL_PREFIX%'] = final_prefix
|
||||
my_subst_dict['%LIBDIR%'] = env['LIBDIR']
|
||||
my_subst_dict['%VERSION%'] = ardour_version
|
||||
|
|
@ -286,6 +292,7 @@ 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(ardourbindings)
|
||||
Default(ardourdev)
|
||||
Default(ardoursh)
|
||||
|
||||
|
|
@ -329,7 +336,7 @@ env.Alias ('tarball', env.Distribute (env['DISTTREE'],
|
|||
'ardour.sh.in',
|
||||
'ardev_common.sh.in',
|
||||
'ardour2_ui.rc', 'splash.png',
|
||||
'ardour.menus', 'ardour.bindings', 'ardour.colors',
|
||||
'ardour.menus', 'ardour.bindings.in', 'ardour.colors',
|
||||
'editor_xpms'
|
||||
] +
|
||||
gtkardour_files +
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <algorithm>
|
||||
|
|
@ -145,8 +144,13 @@ static const char* authors[] = {
|
|||
N_("Stefan Kersten"),
|
||||
N_("Christopher George"),
|
||||
N_("Robert Jordens"),
|
||||
N_("Dave Robillard"),
|
||||
N_("Hans Fugal"),
|
||||
N_("Brian Ahr"),
|
||||
N_("Nimal Ratnayake"),
|
||||
N_("Mike Täht"),
|
||||
N_("John Anderson"),
|
||||
N_("Nedko Arnaudov"),
|
||||
0
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __ardour_gtk_about_h__
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <vector>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdio>
|
||||
|
|
@ -149,7 +148,7 @@ AddRouteDialog::track_type_chosen ()
|
|||
if (track_button.get_active()) {
|
||||
track_mode_combo.set_sensitive (true);
|
||||
} else {
|
||||
track_mode_combo.set_sensitive (true);
|
||||
track_mode_combo.set_sensitive (false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <gtkmm2ext/gtk_ui.h>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#!/bin/sh
|
||||
dir=`dirname "$0"`
|
||||
. $dir/ardev_common.sh
|
||||
LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
|
||||
exec gdb $EXECUTABLE $*
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
#!/bin/sh
|
||||
. `dirname "$0"`/ardev_common.sh
|
||||
LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
|
||||
exec $EXECUTABLE $*
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
; (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>/Editor/playhead-to-previous-region-end" "<Control>comma")
|
||||
; (gtk_accel_path "<Actions>/redirectmenu/copy" "")
|
||||
; (gtk_accel_path "<Actions>/options/MeterFalloffFaster" "")
|
||||
(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<Control>space")
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
; (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>/Editor/playhead-to-next-region-end" "<Control>period")
|
||||
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-playhead" "")
|
||||
; (gtk_accel_path "<Actions>/Editor/center-edit-cursor" "")
|
||||
; (gtk_accel_path "<Actions>/Editor/Monitoring" "")
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
(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>/Editor/audition-at-mouse" "")
|
||||
(gtk_accel_path "<Actions>/Transport/Forward" "<Control>rightarrow")
|
||||
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-seconds" "")
|
||||
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-frame" "")
|
||||
|
|
@ -93,7 +93,7 @@
|
|||
(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/playhead-to-previous-region-start" "comma")
|
||||
; (gtk_accel_path "<Actions>/Editor/EditCursorMovementOptions" "")
|
||||
; (gtk_accel_path "<Actions>/redirectmenu/activate_all" "")
|
||||
; (gtk_accel_path "<Actions>/Editor/addExternalAudioAsTapeTrack" "")
|
||||
|
|
@ -112,7 +112,6 @@
|
|||
(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>/Editor/ToggleTranzportSurface" "")
|
||||
; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsSemitones" "")
|
||||
; (gtk_accel_path "<Actions>/JACK/JACKLatency128" "")
|
||||
; (gtk_accel_path "<Actions>/Snap/snap-to-beat" "")
|
||||
|
|
@ -124,6 +123,7 @@
|
|||
; (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")
|
||||
|
|
@ -151,6 +151,7 @@
|
|||
(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>/options/ShowSoloMutes" "")
|
||||
; (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")
|
||||
|
|
@ -272,7 +273,7 @@
|
|||
; (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-start" "period")
|
||||
; (gtk_accel_path "<Actions>/options/SendMMC" "")
|
||||
; (gtk_accel_path "<Actions>/Editor/toggle-auto-xfades" "")
|
||||
; (gtk_accel_path "<Actions>/Main/AudioFileFormatHeader" "")
|
||||
|
|
@ -305,6 +306,7 @@
|
|||
; (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>/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")
|
||||
|
|
@ -101,3 +101,6 @@ cTrimHandleLockedStart 0.92 0.06 0.06 0.16
|
|||
cTrimHandleLockedEnd 0.92 0.06 0.06 0.16
|
||||
cTrimHandleStart 0.10 0.00 1.00 0.27
|
||||
cTrimHandleEnd 0.10 0.00 1.00 0.27
|
||||
cEditCursor 0.00 0.00 1.00 1.00
|
||||
cPlayHead 1.00 0.00 0.00 1.00
|
||||
|
||||
|
|
|
|||
|
|
@ -291,8 +291,12 @@
|
|||
<menuitem action='OutputAutoConnectMaster'/>
|
||||
<menuitem action='OutputAutoConnectManual'/>
|
||||
</menu>
|
||||
<menu action='ControlSurfaces'/>
|
||||
<menu action='Monitoring'>
|
||||
<menu action='ControlSurfaces'>
|
||||
<menuitem action='RemoteUserDefined'/>
|
||||
<menuitem action='RemoteMixerDefined'/>
|
||||
<menuitem action='RemoteEditorDefined'/>
|
||||
</menu>
|
||||
<menu action='Monitoring'>
|
||||
<menuitem action='UseHardwareMonitoring'/>
|
||||
<menuitem action='UseSoftwareMonitoring'/>
|
||||
<menuitem action='UseExternalMonitoring'/>
|
||||
|
|
@ -318,6 +322,7 @@
|
|||
<menuitem action='LatchedSolo'/>
|
||||
<menuitem action='SoloInPlace'/>
|
||||
<menuitem action='SoloViaBus'/>
|
||||
<menuitem action='ShowSoloMutes'/>
|
||||
</menu>
|
||||
<menu action='Crossfades'>
|
||||
<menuitem action='toggle-xfades-active'/>
|
||||
|
|
@ -337,6 +342,7 @@
|
|||
<menuitem action='SendMMC'/>
|
||||
<menuitem action='UseMMC'/>
|
||||
<separator/>
|
||||
<menuitem action='UseOSC'/>
|
||||
<menuitem action='StopPluginsWithTransport'/>
|
||||
<menuitem action='DoNotRunPluginsWhileRecording'/>
|
||||
<menuitem action='LatchedRecordEnable'/>
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ style "marker_text"
|
|||
|
||||
style "time_axis_view_item_name"
|
||||
{
|
||||
font_name = "sans 6"
|
||||
font_name = "sans 9"
|
||||
}
|
||||
|
||||
style "default_base" = "medium_text"
|
||||
|
|
@ -185,24 +185,58 @@ style "small_red_active_and_selected_button" = "small_button"
|
|||
bg[SELECTED] = { 1.0, 0, 0}
|
||||
}
|
||||
|
||||
style "track_rec_enable_button" = "small_button"
|
||||
{
|
||||
fg[SELECTED] = { 0.0, 0.0, 0.0 }
|
||||
fg[ACTIVE] = { 0.0, 0.0, 0.0 }
|
||||
fg[PRELIGHT] = { 0.0, 0.0, 0.0 }
|
||||
|
||||
bg[SELECTED] = { 1.0, 0.0, 0.0 }
|
||||
bg[ACTIVE] = { 0.91, 0.68, 0.68}
|
||||
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"
|
||||
|
||||
style "track_rec_enable_button" = "small_button"
|
||||
{
|
||||
}
|
||||
|
||||
style "track_rec_enable_button_active" = "small_button"
|
||||
{
|
||||
fg[SELECTED] = { 0.0, 0.0, 0.0 }
|
||||
fg[ACTIVE] = { 0.0, 0.0, 0.0 }
|
||||
fg[PRELIGHT] = { 0.0, 0.0, 0.0 }
|
||||
fg[NORMAL] = { 0.0, 0.0, 0.0 }
|
||||
|
||||
bg[NORMAL] = { 1.0, 0.0, 0.0 }
|
||||
bg[ACTIVE] = { 1.0, 0.0, 0.0 }
|
||||
bg[SELECTED] = { 1.0, 0.0, 0.0 }
|
||||
bg[PRELIGHT] = { 1.0, 0.0, 0.0 }
|
||||
}
|
||||
|
||||
style "track_rec_enable_button_alternate" = "small_button"
|
||||
{
|
||||
fg[SELECTED] = { 0.0, 0.0, 0.0 }
|
||||
fg[ACTIVE] = { 0.0, 0.0, 0.0 }
|
||||
fg[PRELIGHT] = { 0.0, 0.0, 0.0 }
|
||||
fg[NORMAL] = { 0.0, 0.0, 0.0 }
|
||||
|
||||
bg[NORMAL] = { 0.91, 0.68, 0.68}
|
||||
bg[ACTIVE] = { 0.91, 0.68, 0.68}
|
||||
bg[SELECTED] = { 0.91, 0.68, 0.68}
|
||||
bg[PRELIGHT] = { 0.91, 0.68, 0.68}
|
||||
}
|
||||
|
||||
style "mixer_track_rec_enable_button" = "track_rec_enable_button"
|
||||
{
|
||||
font_name = "sans 7"
|
||||
xthickness = 0
|
||||
ythickness = 0
|
||||
}
|
||||
|
||||
style "mixer_track_rec_enable_button_alternate" = "track_rec_enable_button_alternate"
|
||||
{
|
||||
font_name = "sans 7"
|
||||
xthickness = 0
|
||||
ythickness = 0
|
||||
}
|
||||
|
||||
style "mixer_track_rec_enable_button_active" = "track_rec_enable_button_active"
|
||||
{
|
||||
font_name = "sans 7"
|
||||
xthickness = 0
|
||||
|
|
@ -211,20 +245,33 @@ style "mixer_rec_enable_button" = "track_rec_enable_button"
|
|||
|
||||
style "solo_button" = "small_button"
|
||||
{
|
||||
bg[PRELIGHT] = { 0, 1.0, 0 }
|
||||
bg[ACTIVE] = { 0.66, 0.97, 0.19 }
|
||||
|
||||
fg[PRELIGHT] = { 0, 0, 0 }
|
||||
fg[ACTIVE] = { 0, 0, 0 }
|
||||
}
|
||||
|
||||
style "safe_solo_button" = "small_button"
|
||||
style "solo_button_alternate" = "small_button"
|
||||
{
|
||||
bg[PRELIGHT] = { 0, 1.0, 0 }
|
||||
bg[ACTIVE] = { 0.19, 0.97, 0.69 }
|
||||
bg[NORMAL] = { 0.19, 0.97, 0.69 } # solo-safe
|
||||
bg[ACTIVE] = { 0.19, 0.97, 0.69 } # solo-safe
|
||||
bg[SELECTED] = { 0.19, 0.97, 0.69 } # solo-safe
|
||||
bg[PRELIGHT] = { 0.19, 0.97, 0.69 } # solo-safe
|
||||
|
||||
fg[PRELIGHT] = { 0, 0, 0 }
|
||||
fg[ACTIVE] = { 0, 0, 0 }
|
||||
fg[SELECTED] = { 0, 0, 0 }
|
||||
fg[NORMAL] = { 0, 0, 0 }
|
||||
fg[PRELIGHT] = { 0, 0, 0 }
|
||||
}
|
||||
|
||||
|
||||
style "solo_button_active" = "small_button"
|
||||
{
|
||||
bg[NORMAL] = { 0.66, 0.97, 0.19 } # solo
|
||||
bg[ACTIVE] = { 0.66, 0.97, 0.19 } # solo
|
||||
bg[SELECTED] = { 0.66, 0.97, 0.19 } # solo
|
||||
bg[PRELIGHT] = { 0.66, 0.97, 0.19 } # solo
|
||||
|
||||
fg[ACTIVE] = { 0, 0, 0 }
|
||||
fg[SELECTED] = { 0, 0, 0 }
|
||||
fg[NORMAL] = { 0, 0, 0 }
|
||||
fg[PRELIGHT] = { 0, 0, 0 }
|
||||
}
|
||||
|
||||
style "mixer_solo_button" = "solo_button"
|
||||
|
|
@ -232,27 +279,72 @@ style "mixer_solo_button" = "solo_button"
|
|||
font_name = "sans 7"
|
||||
xthickness = 0
|
||||
ythickness = 0
|
||||
|
||||
}
|
||||
|
||||
style "mixer_safe_solo_button" = "safe_solo_button"
|
||||
style "mixer_solo_button_alternate" = "solo_button_alternate"
|
||||
{
|
||||
font_name = "sans 7"
|
||||
xthickness = 0
|
||||
ythickness = 0
|
||||
}
|
||||
style "mixer_solo_button_active" = "solo_button_active"
|
||||
{
|
||||
font_name = "sans 7"
|
||||
xthickness = 0
|
||||
ythickness = 0
|
||||
|
||||
}
|
||||
|
||||
|
||||
style "mute_button" = "small_button"
|
||||
{
|
||||
bg[PRELIGHT] = { 1.0, 0.65, 0.13 }
|
||||
bg[ACTIVE] = { 1.0, 0.98, 0.53 }
|
||||
|
||||
fg[PRELIGHT] = { 0, 0, 0 }
|
||||
fg[ACTIVE] = { 0, 0, 0 }
|
||||
}
|
||||
|
||||
style "mute_button_alternate" = "small_button"
|
||||
{
|
||||
bg[ACTIVE] = { 1.0, 0.98, 0.53 }
|
||||
bg[NORMAL] = { 1.0, 0.98, 0.53 }
|
||||
bg[SELECTED] = { 1.0, 0.98, 0.53 }
|
||||
bg[PRELIGHT] = { 1.0, 0.98, 0.53 }
|
||||
|
||||
fg[SELECTED] = { 0, 0, 0 }
|
||||
fg[ACTIVE] = { 0, 0, 0 }
|
||||
fg[NORMAL] = { 0, 0, 0 }
|
||||
fg[PRELIGHT] = { 0, 0, 0 }
|
||||
}
|
||||
|
||||
style "mute_button_active" = "small_button"
|
||||
{
|
||||
bg[NORMAL] = { 0.90, 0.89, 0.73 }
|
||||
bg[ACTIVE] = { 0.90, 0.89, 0.73 }
|
||||
bg[PRELIGHT] = { 0.90, 0.89, 0.73 }
|
||||
bg[SELECTED] = { 0.90, 0.89, 0.73 }
|
||||
|
||||
fg[SELECTED] = { 0, 0, 0 }
|
||||
fg[ACTIVE] = { 0, 0, 0 }
|
||||
fg[NORMAL] = { 0, 0, 0 }
|
||||
fg[PRELIGHT] = { 0, 0, 0 }
|
||||
}
|
||||
|
||||
style "mixer_mute_button" = "mute_button"
|
||||
{
|
||||
font_name = "sans 7"
|
||||
xthickness = 0
|
||||
ythickness = 0
|
||||
}
|
||||
|
||||
style "mixer_mute_button_alternate" = "mute_button_alternate"
|
||||
{
|
||||
font_name = "sans 7"
|
||||
xthickness = 0
|
||||
ythickness = 0
|
||||
}
|
||||
|
||||
style "mixer_mute_button_active" = "mute_button_active"
|
||||
{
|
||||
font_name = "sans 7"
|
||||
xthickness = 0
|
||||
ythickness = 0
|
||||
}
|
||||
|
||||
style "multiline_combo" = "small_button"
|
||||
{
|
||||
|
|
@ -291,14 +383,39 @@ style "time_button" = "default_buttons_menus"
|
|||
|
||||
style "transport_button"
|
||||
{
|
||||
}
|
||||
|
||||
style "transport_button_active"
|
||||
{
|
||||
bg[NORMAL] = { 0.50, 1.0, 0.50 }
|
||||
bg[ACTIVE] = { 0.50, 1.0, 0.50 }
|
||||
bg[SELECTED] = { 0.50, 1.0, 0.50 }
|
||||
bg[PRELIGHT] = { 0.50, 1.0, 0.50 }
|
||||
|
||||
fg[NORMAL] = { 0, 0, 0 }
|
||||
fg[PRELIGHT] = { 0, 0, 0 }
|
||||
fg[SELECTED] = { 0, 0, 0 }
|
||||
fg[ACTIVE] = { 0, 0, 0 }
|
||||
}
|
||||
|
||||
style "transport_rec_button"
|
||||
{
|
||||
}
|
||||
|
||||
style "transport_rec_button_active"
|
||||
{
|
||||
bg[ACTIVE] = { 1.0, 0, 0 }
|
||||
bg[PRELIGHT] = { 0.91, 0.68, 0.68 } #blinking rec button color
|
||||
bg[NORMAL] = { 1.0, 0, 0 }
|
||||
bg[SELECTED] = { 1.0, 0, 0 }
|
||||
bg[PRELIGHT] = { 1.0, 0, 0 }
|
||||
}
|
||||
|
||||
style "transport_rec_button_alternate"
|
||||
{
|
||||
bg[PRELIGHT] = { 0.91, 0.68, 0.68 }
|
||||
bg[NORMAL] = { 0.91, 0.68, 0.68 }
|
||||
bg[SELECTED] = { 0.91, 0.68, 0.68 }
|
||||
bg[ACTIVE] = { 0.91, 0.68, 0.68 }
|
||||
}
|
||||
|
||||
style "shuttle_control" = "very_small_text"
|
||||
|
|
@ -1034,361 +1151,366 @@ 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 "*ExportProgress" style "default_buttons_menus"
|
||||
widget "*ExportFileLabel" style "small_bold_text"
|
||||
widget "*ExportFormatLabel" style "medium_bold_text"
|
||||
widget "*ExportHeader" style "small_bold_text"
|
||||
widget "*ExportFileDisplay" style "medium_entry"
|
||||
widget "*ExportFormatDisplay" style "medium_entry"
|
||||
widget "*ExportCheckbox" style "small_entry"
|
||||
widget "*ExportTrackSelector*" style "medium_entry_noselection_bg"
|
||||
widget "*ArdourContextMenu*" style "default_buttons_menus"
|
||||
widget "*EditGroupTitleButton*" style "default_buttons_menus"
|
||||
widget "*MixerGroupTitleButton*" style "default_buttons_menus"
|
||||
widget "*ErrorLogCloseButton" style "default_buttons_menus"
|
||||
widget "*EditorGTKButton*" style "default_buttons_menus"
|
||||
widget "*ToolbarButton" style "default_buttons_menus"
|
||||
widget "*ToolbarButton*" style "default_buttons_menus"
|
||||
widget "*CrossfadeEditButton" style "default_buttons_menus"
|
||||
widget "*CrossfadeEditButton*" style "default_buttons_menus"
|
||||
widget "*TrackHistoryButton*" style "default_buttons_menus"
|
||||
widget "*TrackSizeButton*" style "default_buttons_menus"
|
||||
widget "*TrackPlaylistButton*" style "default_buttons_menus"
|
||||
widget "*TrackAutomationButton*" style "default_buttons_menus"
|
||||
widget "*TrackGroupButton*" style "default_buttons_menus"
|
||||
widget "*TrackMixButton*" style "default_buttons_menus"
|
||||
widget "*TrackVisualButton*" style "default_buttons_menus"
|
||||
widget "*TrackRemoveButton*" style "default_buttons_menus"
|
||||
widget "*BaseButton" style "default_buttons_menus"
|
||||
widget "*TakeButtonLabel" style "default_buttons_menus"
|
||||
widget "*MixerWidthButton" style "default_buttons_menus"
|
||||
widget "*MixerHideButton" style "default_buttons_menus"
|
||||
widget "*MixerSendButton" style "default_buttons_menus"
|
||||
widget "*MixerSendButtonLabel" style "default_buttons_menus"
|
||||
widget "*MixerSendSwitch" style "default_buttons_menus"
|
||||
widget "*MixerInsertButton" style "default_buttons_menus"
|
||||
widget "*MixerInsertButtonLabel" style "default_buttons_menus"
|
||||
widget "*MixerInsertSwitch" style "default_buttons_menus"
|
||||
widget "*MixerMonitorInputButton*" style "very_small_button"
|
||||
widget "*MixerMonitorInputButton.*" style "very_small_button"
|
||||
widget "*MixerIOButton" style "very_small_button"
|
||||
widget "*MixerIOButtonLabel" style "very_small_button"
|
||||
widget "*AddRouteDialogSpinner" style "ardour_adjusters"
|
||||
widget "*AddRouteDialogRadioButton*" style "options_window"
|
||||
widget "*OptionsNotebook" style "options_window"
|
||||
widget "*OptionEditorToggleButton*" style "options_window"
|
||||
widget "*OptionsLabel" style "options_window"
|
||||
widget "*OptionEditorAuditionerLabel" style "options_window"
|
||||
widget "*OptionsEntry" style "option_entry"
|
||||
widget "*InspectorNotebook" style "options_window"
|
||||
widget "*NewSessionDialog" style "options_window"
|
||||
widget "*NewSessionDialogButton*" style "options_window"
|
||||
widget "*MixerSendSwitch*" style "very_small_red_active_and_selected_button"
|
||||
widget "*OptionEditorToggleButton" style "small_red_active_and_selected_button"
|
||||
widget "*NewSessionDialogButton" style "small_red_active_and_selected_button"
|
||||
widget "*MixerRecordEnableButton" style "mixer_rec_enable_button"
|
||||
widget "*MixerRecordEnableButton*" style "mixer_rec_enable_button"
|
||||
widget "*TrackRecordEnableButton" style "track_rec_enable_button"
|
||||
widget "*TrackRecordEnableButton*" style "track_rec_enable_button"
|
||||
widget "*TrackMuteButton*" style "mute_button"
|
||||
widget "*TrackLoopButton*" style "track_loop_button"
|
||||
widget "*PanAutomationLineSelector*" style "multiline_combo"
|
||||
widget "*EditorTimeButton*" style "time_button"
|
||||
widget "*EditorMixerButton*" style "default_buttons_menus"
|
||||
widget "*SoloButton*" style "solo_button"
|
||||
widget "*SoloButton.*" style "solo_button"
|
||||
widget "*SafeSoloButton*" style "safe_solo_button"
|
||||
widget "*SafeSoloButton.*" style "safe_solo_button"
|
||||
widget "*MixerPhaseInvertButton*" style "very_small_button"
|
||||
widget "*MixerPhaseInvertButton.*" style "very_small_button"
|
||||
widget "*MixerAutomationRecordingButton*" style "very_small_button"
|
||||
widget "*MixerAutomationRecordingButton.*" style "very_small_button"
|
||||
widget "*MixerAutomationModeButton*" style "very_small_button"
|
||||
widget "*MixerAutomationModeButton.*" style "very_small_button"
|
||||
widget "*MixerAutomationPlaybackButton*" style "very_small_button"
|
||||
widget "*MixerAutomationPlaybackButton.*" style "very_small_button"
|
||||
widget "*MixerMuteButton*" style "mixer_mute_button"
|
||||
widget "*MixerMuteButton.*" style "mixer_mute_button"
|
||||
widget "*MixerSoloButton*" style "mixer_solo_button"
|
||||
widget "*MixerSoloButton.*" style "mixer_solo_button"
|
||||
widget "*MixerNameButton" style "very_small_button"
|
||||
widget "*MixerNameButtonLabel" style "very_small_button"
|
||||
widget "*MixerGroupButton" style "very_small_button"
|
||||
widget "*MixerGroupButtonLabel" style "very_small_button"
|
||||
widget "*MixerCommentButton" style "very_small_button"
|
||||
widget "*MixerCommentButton*" style "very_small_button"
|
||||
widget "*EditGroupButton" style "very_small_button"
|
||||
widget "*EditGroupButtonLabel" style "very_small_button"
|
||||
widget "*TransportButton" style "transport_button"
|
||||
widget "*TransportButton*" style "transport_button"
|
||||
widget "*ShuttleButton" style "transport_button"
|
||||
widget "*ShuttleButton*" style "transport_button"
|
||||
widget "*ShuttleDisplay" style "transport_button"
|
||||
widget "*ShuttleDisplay*" style "transport_button"
|
||||
widget "*ShuttleControl" style "shuttle_control"
|
||||
widget "*TransportRecButton" style "transport_rec_button"
|
||||
widget "*TransportRecButton*" style "transport_rec_button"
|
||||
widget "*RecordingXrunWarningWindow" style "xrun_warn"
|
||||
widget "*RecordingXrunWarningWindow*" style "xrun_warn"
|
||||
/*widget "*MainMenuBar" style "menu_bar_base"*/
|
||||
widget "*ErrorMessage" style "error_message"
|
||||
widget "*FatalMessage" style "fatal_message"
|
||||
widget "*InfoMessage" style "info_message"
|
||||
widget "*WarningMessage" style "warning_message"
|
||||
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 "*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"
|
||||
widget "*PreRollClock" style "default_clock_display"
|
||||
widget "*PostRollClock" style "default_clock_display"
|
||||
widget "*NudgeClock" style "default_clock_display"
|
||||
widget "*ZoomRangeClock" style "default_clock_display"
|
||||
widget "*SMPTEOffsetClock" style "default_clock_display"
|
||||
widget "*TransportLabel" style "small_bold_text"
|
||||
widget "*TakeLabel" style "small_bold_text"
|
||||
widget "*LocationLabel" style "small_bold_text"
|
||||
widget "*WipeLabel" style "small_bold_text"
|
||||
widget "*TakeTagLabel" style "small_bold_text"
|
||||
widget "*ToolBarLabel" style "small_bold_text"
|
||||
widget "*EditorDisplayLabel" style "small_bold_text"
|
||||
widget "*NewSessionLabel" style "large_text"
|
||||
widget "*GlobalButtonLabel" style "default_buttons_menus"
|
||||
widget "*ClickButton" style "medium_entry"
|
||||
widget "*RegionNameDisplay" style "medium_entry"
|
||||
widget "*PluginDisplay" style "medium_entry"
|
||||
widget "*SelectionDisplay" style "medium_entry"
|
||||
widget "*HistorySelector" style "medium_entry"
|
||||
widget "*LocationSelector" style "medium_entry"
|
||||
widget "*TakeSelector" style "medium_entry"
|
||||
widget "*RegionSelector" style "medium_entry"
|
||||
widget "*SMPTERuler" style "editor_time_ruler"
|
||||
widget "*BBTRuler" style "editor_time_ruler"
|
||||
widget "*FramesRuler" style "editor_time_ruler"
|
||||
widget "*MinSecRuler" style "editor_time_ruler"
|
||||
widget "*BaseFrame" style "base_frame"
|
||||
widget "*AudioBusControlsBaseUnselected" style "audio_bus_base"
|
||||
widget "*AudioBusControlsBaseInactiveUnselected" style "track_controls_inactive"
|
||||
widget "*AudioBusControlsBaseInactiveSelected" style "track_controls_inactive"
|
||||
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 "gain_fader"
|
||||
widget "*AudioBusStripBase" 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"
|
||||
widget "*MidiBusControlsBaseSelected" style "edit_controls_base_selected"
|
||||
widget "*MidiTimeAxisViewControlsBaseUnselected" style "midi_track_base"
|
||||
widget "*MidiTrackStripBase" style "midi_track_base"
|
||||
widget "*MidiTrackControlsBaseUnselected" style "midi_track_base"
|
||||
widget "*MidiTrackFader" style "midi_track_base"
|
||||
widget "*MidiBusStripBase" style "midi_bus_base"
|
||||
widget "*MidiBusFader" style "midi_bus_base"
|
||||
widget "*TrackSeparator" style "track_separator"
|
||||
widget "*TrackEditIndicator0*" style "edit_group_0"
|
||||
widget "*TrackEditIndicator1*" style "edit_group_1"
|
||||
widget "*TrackEditIndicator2*" style "edit_group_2"
|
||||
widget "*TrackEditIndicator3*" style "edit_group_3"
|
||||
widget "*TrackEditIndicator4*" style "edit_group_3"
|
||||
widget "*TrackEditIndicator5*" style "edit_group_3"
|
||||
widget "*TrackEditIndicator6*" style "edit_group_3"
|
||||
widget "*TrackEditIndicator7*" style "edit_group_3"
|
||||
widget "*EditorTrackNameDisplay" style "track_name_display"
|
||||
widget "*EditorTrackNameDisplay*" style "track_name_display"
|
||||
widget "*EditorActiveTrackNameDisplay" style "active_track_name_display"
|
||||
widget "*EditorActiveTrackNameDisplay*" style "active_track_name_display"
|
||||
widget "*CrossfadeEditAuditionButton" style "red_when_active"
|
||||
widget "*CrossfadeEditAuditionButton*" style "red_when_active"
|
||||
widget "*CrossfadeEditCurveButton" style "red_when_active"
|
||||
widget "*CrossfadeEditCurveButton*" style "red_when_active"
|
||||
widget "*CrossfadeEditLabel" style "medium_text"
|
||||
widget "*CrossfadeEditFrame" style "base_frame"
|
||||
widget "*MouseModeButton" style "default_buttons_menus"
|
||||
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"
|
||||
widget "*AudioBusStripBaseInactive" style "track_controls_inactive"
|
||||
widget "*AudioTrackControlsBaseSelected" style "edit_controls_base_selected"
|
||||
widget "*AutomationTrackControlsBase" style "automation_track_controls_base"
|
||||
widget "*AutomationTrackControlsBaseSelected" style "edit_controls_base_selected"
|
||||
/*widget "*EditorMenuBar*" style "black_mackie_menu_bar"
|
||||
widget "*MainMenuBar*" style "black_mackie_menu_bar"*/
|
||||
widget "*ZoomClickBox" style "medium_bold_entry"
|
||||
widget "*PluginParameterLabel" style "medium_text"
|
||||
widget "*PluginNameInfo" style "plugin_name_text"
|
||||
widget "*PluginMakerInfo" style "plugin_maker_text"
|
||||
widget "*PluginParameterInfo" style "medium_text"
|
||||
widget "*MotionControllerValue" style "medium_entry"
|
||||
widget "*ParameterValueDisplay" style "medium_bold_entry"
|
||||
widget "*PluginUIClickBox" style "medium_bold_entry"
|
||||
widget "*PluginUIClickBox*" style "medium_bold_entry"
|
||||
widget "*PluginSlider" style "plugin_slider"
|
||||
widget "*RedirectSelector" style "redirect_list_display"
|
||||
widget "*RedirectSelector.*" style "redirect_list_display"
|
||||
widget "*EditGroupDisplay" style "treeview_display"
|
||||
widget "*TrackListDisplay" style "treeview_display"
|
||||
widget "*RegionListDisplay" style "treeview_display"
|
||||
widget "*NamedSelectionDisplay" style "treeview_display"
|
||||
widget "*SnapshotDisplay" style "treeview_display"
|
||||
widget "*MixerTrackCommentArea" style "option_entry"
|
||||
widget "*MixerPanZone" style "pan_zone"
|
||||
widget "*MixerTrackDisplayList" style "treeview_display"
|
||||
widget "*MixerSnapshotDisplayList" style "treeview_display"
|
||||
widget "*MixerAuxDisplayList" style "treeview_display"
|
||||
widget "*MixerGroupList" style "treeview_display"
|
||||
widget "*RegionEditorLabel" style "medium_text"
|
||||
widget "*RegionEditorSmallLabel" style "small_text"
|
||||
widget "*RegionEditorEntry" style "medium_entry"
|
||||
widget "*RegionEditorClock" style "default_clock_display"
|
||||
widget "*RegionEditorToggleButton" style "paler_red_when_active"
|
||||
widget "*RegionEditorToggleButton*" style "paler_red_when_active"
|
||||
widget "*MixerStripSpeedBase" style "small_entry"
|
||||
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"
|
||||
widget "*MixerStripMeterPreButton*" style "very_small_button"
|
||||
widget "*MixerStripPeakDisplay*" style "red_active_small_entry"
|
||||
widget "*MixerStripPeakDisplayPeak*" style "peak_display_peaked_entry"
|
||||
widget "*MixerStripSelectedFrame" style "selected_strip_frame"
|
||||
widget "*MixerStripFrame" style "base_frame"
|
||||
widget "*HWMonitorButton" style "red_when_active"
|
||||
widget "*HWMonitorButton*" style "red_when_active"
|
||||
widget "*BypassButton" style "red_when_active"
|
||||
widget "*BypassButton*" style "red_when_active"
|
||||
widget "*TransportSoloAlert" style "flashing_alert"
|
||||
widget "*TransportSoloAlert.*" style "flashing_alert"
|
||||
widget "*TransportAuditioningAlert" style "flashing_alert"
|
||||
widget "*TransportAuditioningAlert.*" style "flashing_alert"
|
||||
widget "*FadeCurve" style "medium_bold_entry"
|
||||
widget "*FadeCurve*" style "medium_bold_entry"
|
||||
widget "*IOSelectorButton" style "default_buttons_menus"
|
||||
widget "*IOSelectorButton*" style "default_buttons_menus"
|
||||
widget "*IOSelectorList" style "medium_entry_noselection_fg"
|
||||
widget "*IOSelectorPortList" style "io_selector_port_list"
|
||||
widget "*IOSelectorPortList.*" style "io_selector_port_list"
|
||||
widget "*IOSelectorPortListSelected" style "selected_io_selector_port_list"
|
||||
widget "*IOSelectorPortListSelected.*" style "selected_io_selector_port_list"
|
||||
widget "*IOSelectorNotebook" style "io_selector_notebook"
|
||||
widget "*IOSelectorNotebookTab" style "io_selector_notebook"
|
||||
widget "*IOSelectorFrame" style "base_frame"
|
||||
widget "*ConnectionEditorButton" style "default_buttons_menus"
|
||||
widget "*ConnectionEditorButton*" style "default_buttons_menus"
|
||||
widget "*ConnectionEditorList" style "medium_entry_noselection_fg"
|
||||
widget "*ConnectionEditorConnectionList" style "medium_entry"
|
||||
widget "*ConnectionEditorPortList" style "io_selector_port_list"
|
||||
widget "*ConnectionEditorPortListSelected" style "selected_io_selector_port_list"
|
||||
widget "*ConnectionEditorNotebook" style "io_selector_notebook"
|
||||
widget "*ConnectionEditorNotebookTab" style "io_selector_notebook"
|
||||
widget "*ConnectionEditorFrame" style "base_frame"
|
||||
widget "*RouteParamsListDisplay" style "inspector_track_list_display"
|
||||
widget "*RouteParamsPreListDisplay" style "inspector_redirect_list_display"
|
||||
widget "*RouteParamsPostListDisplay" style "inspector_redirect_list_display"
|
||||
widget "*TearOffArrow" style "tearoff_arrow"
|
||||
widget "*RouteParamsTitleButton" style "medium_text"
|
||||
widget "*RouteParamsTitleLabel" style "medium_text"
|
||||
widget "*PluginAutomateRecordButton" style "small_red_active_and_selected_button"
|
||||
widget "*PluginAutomateRecordButton*" style "small_red_active_and_selected_button"
|
||||
widget "*PluginAutomatePlayButton" style "small_red_active_and_selected_button"
|
||||
widget "*PluginAutomatePlayButton*" style "small_red_active_and_selected_button"
|
||||
widget "*PluginAutomateButton" style "small_button"
|
||||
widget "*PluginAutomateButton*" style "small_button"
|
||||
widget "*PluginSaveButton" style "small_button"
|
||||
widget "*PluginSaveButton*" style "small_button"
|
||||
widget "*PluginLoadButton" style "small_button"
|
||||
widget "*PluginLoadButton*" style "small_button"
|
||||
widget "*FaderMetricsStrip" style "meter_metrics_strip"
|
||||
widget "*MeterMetricsStrip" style "meter_metrics_strip"
|
||||
widget "*MetricDialogFrame" style "base_frame"
|
||||
widget "*MetricEntry" style "medium_bold_entry"
|
||||
widget "*MetricButton" style "default_buttons_menus"
|
||||
widget "*MetricButton.*" style "default_buttons_menus"
|
||||
widget "*MetricLabel" style "medium_text"
|
||||
widget "*TimeStretchButton" style "default_buttons_menus"
|
||||
widget "*TimeStretchButton.*" style "default_buttons_menus"
|
||||
widget "*TimeStretchProgress" style "default_buttons_menus"
|
||||
widget "*ChoiceWindow" style "default_buttons_menus"
|
||||
widget "*ChoicePrompt" style "default_buttons_menus"
|
||||
widget "*ChoiceButton" style "default_buttons_menus"
|
||||
widget "*ChoiceButton*" style "default_buttons_menus"
|
||||
widget "*SelectionModeButton" style "default_buttons_menus"
|
||||
widget "*SelectionModeButton*" style "default_buttons_menus"
|
||||
widget "*TrackLabel" style "medium_text"
|
||||
widget "*TrackPlugName" style "medium_text"
|
||||
widget "*TrackParameterName" style "small_text"
|
||||
widget "*AddRouteDialog*" style "medium_text"
|
||||
widget "*AddRouteDialog.GtkLabel" style "medium_text"
|
||||
widget "*AddRouteDialogChannelChoice" style "medium_bold_entry"
|
||||
widget "*AddRouteDialogSpinner" style "medium_bold_entry"
|
||||
widget "*AddRouteDialogSpinner*" style "medium_bold_entry"
|
||||
widget "*AddRouteDialogRadioButton" style "red_when_active"
|
||||
widget "*AddRouteDialogButton" style "default_buttons_menus"
|
||||
widget "*AddRouteDialogNameTemplateEntry" style "medium_bold_entry"
|
||||
widget "*NewSessionIOLabel" style "larger_bold_text"
|
||||
widget "*NewSessionSR1Label" style "red_medium_text"
|
||||
widget "*NewSessionSR2Label" style "medium_text"
|
||||
widget "*NewSessionChannelChoice" style "medium_bold_entry"
|
||||
widget "*NewSessionMainButton" style "larger_bold_text"
|
||||
widget "*NewSessionMainButton*" style "larger_bold_text"
|
||||
widget "*NewSessionMainLabel" style "larger_bold_text"
|
||||
widget "*LocationEditRowClock" style "location_rows_clock"
|
||||
widget "*LocationEditNameLabel" style "medium_text"
|
||||
widget "*LocationEditSetButton" style "location_row_button"
|
||||
widget "*LocationEditSetButton*" style "location_row_button"
|
||||
widget "*LocationEditGoButton" style "location_row_button"
|
||||
widget "*LocationEditGoButton*" style "location_row_button"
|
||||
widget "*LocationEditCdButton" style "small_red_active_and_selected_button"
|
||||
widget "*LocationEditCdButton*" style "small_red_active_and_selected_button"
|
||||
widget "*LocationEditHideButton" style "small_red_active_and_selected_button"
|
||||
widget "*LocationEditHideButton*" style "small_red_active_and_selected_button"
|
||||
widget "*LocationEditNumberLabel" style "small_text"
|
||||
widget "*LocationLocEditorFrame" style "base_frame"
|
||||
widget "*LocationRangeEditorFrame" style "base_frame"
|
||||
widget "*LocationEditNameEntry" style "option_entry"
|
||||
widget "*LocationAddLocationButton" style "default_buttons_menus"
|
||||
widget "*LocationAddLocationButton*" style "default_buttons_menus"
|
||||
widget "*LocationAddRangeButton" style "default_buttons_menus"
|
||||
widget "*LocationAddRangeButton*" style "default_buttons_menus"
|
||||
widget "*LocationEditRemoveButton" style "location_row_button"
|
||||
widget "*LocationEditRemoveButton*" style "location_row_button"
|
||||
widget "*PanSlider" style "pan_slider"
|
||||
widget "*PanningLinkButton" style "mixer_red_active_button"
|
||||
widget "*PanningLinkButton.*" style "mixer_red_active_button"
|
||||
widget "*PanningLinkDirectionButton" style "very_small_button"
|
||||
widget "*PanningLinkDirectionButton.*" style "very_small_button"
|
||||
widget "*ChannelCountSelector" style "medium_bold_entry"
|
||||
widget "*ChannelCountSelector.GtkArrow" style "default_buttons_menus"
|
||||
widget "*RegionListWholeFile" style "treeview_parent_node"
|
||||
widget "*EditorHScrollbar" style "editor_hscrollbar"
|
||||
|
||||
class "GtkWidget" style "default_base"
|
||||
class "GtkScrollbar" style "ardour_adjusters"
|
||||
class "GtkLabel" style "default_buttons_menus"
|
||||
class "GtkButton" style "ardour_button"
|
||||
class "GtkArrow" style "tearoff_arrow"
|
||||
class "GtkProgressBar" style "ardour_progressbars"
|
||||
class "GtkWidget" style:highest "default_base"
|
||||
class "GtkScrollbar" style:highest "ardour_adjusters"
|
||||
class "GtkLabel" style:highest "default_buttons_menus"
|
||||
class "GtkButton" style:highest "ardour_button"
|
||||
class "GtkArrow" style:highest "tearoff_arrow"
|
||||
class "GtkProgressBar" style:highest "ardour_progressbars"
|
||||
|
||||
widget "*FirstActionMessage" style:highest "first_action_message"
|
||||
widget "*VerboseCanvasCursor" style:highest "verbose_canvas_cursor"
|
||||
widget "*MarkerText" style:highest "marker_text"
|
||||
widget "*TimeAxisViewItemName*" style:highest "time_axis_view_item_name"
|
||||
#widget "*ExportProgress" style:highest "default_buttons_menus"
|
||||
widget "*ExportFileLabel" style:highest "small_bold_text"
|
||||
widget "*ExportFormatLabel" style:highest "medium_bold_text"
|
||||
widget "*ExportHeader" style:highest "small_bold_text"
|
||||
widget "*ExportFileDisplay" style:highest "medium_entry"
|
||||
widget "*ExportFormatDisplay" style:highest "medium_entry"
|
||||
widget "*ExportCheckbox" style:highest "small_entry"
|
||||
widget "*ExportTrackSelector*" style:highest "medium_entry_noselection_bg"
|
||||
widget "*EditModeSelector" style:highest "medium_bold_entry"
|
||||
widget "*SnapTypeSelector" style:highest "medium_bold_entry"
|
||||
widget "*SnapModeSelector" style:highest "medium_bold_entry"
|
||||
widget "*ZoomFocusSelector" style:highest "medium_bold_entry"
|
||||
widget "*ArdourContextMenu*" style:highest "default_buttons_menus"
|
||||
widget "*EditGroupTitleButton*" style:highest "default_buttons_menus"
|
||||
widget "*MixerGroupTitleButton*" style:highest "default_buttons_menus"
|
||||
widget "*ErrorLogCloseButton" style:highest "default_buttons_menus"
|
||||
widget "*EditorGTKButton*" style:highest "default_buttons_menus"
|
||||
widget "*ToolbarButton" style:highest "default_buttons_menus"
|
||||
widget "*ToolbarButton*" style:highest "default_buttons_menus"
|
||||
widget "*CrossfadeEditButton" style:highest "default_buttons_menus"
|
||||
widget "*CrossfadeEditButton*" style:highest "default_buttons_menus"
|
||||
widget "*TrackHistoryButton*" style:highest "default_buttons_menus"
|
||||
widget "*TrackSizeButton*" style:highest "default_buttons_menus"
|
||||
widget "*TrackPlaylistButton*" style:highest "default_buttons_menus"
|
||||
widget "*TrackAutomationButton*" style:highest "default_buttons_menus"
|
||||
widget "*TrackGroupButton*" style:highest "default_buttons_menus"
|
||||
widget "*TrackMixButton*" style:highest "default_buttons_menus"
|
||||
widget "*TrackVisualButton*" style:highest "default_buttons_menus"
|
||||
widget "*TrackRemoveButton*" style:highest "default_buttons_menus"
|
||||
widget "*BaseButton" style:highest "default_buttons_menus"
|
||||
widget "*TakeButtonLabel" style:highest "default_buttons_menus"
|
||||
widget "*MixerWidthButton" style:highest "default_buttons_menus"
|
||||
widget "*MixerHideButton" style:highest "default_buttons_menus"
|
||||
widget "*MixerSendButton" style:highest "default_buttons_menus"
|
||||
widget "*MixerSendButtonLabel" style:highest "default_buttons_menus"
|
||||
widget "*MixerSendSwitch" style:highest "default_buttons_menus"
|
||||
widget "*MixerInsertButton" style:highest "default_buttons_menus"
|
||||
widget "*MixerInsertButtonLabel" style:highest "default_buttons_menus"
|
||||
widget "*MixerInsertSwitch" style:highest "default_buttons_menus"
|
||||
widget "*MixerMonitorInputButton*" style:highest "very_small_button"
|
||||
widget "*MixerMonitorInputButton.*" style:highest "very_small_button"
|
||||
widget "*MixerIOButton" style:highest "very_small_button"
|
||||
widget "*MixerIOButtonLabel" style:highest "very_small_button"
|
||||
widget "*AddRouteDialogSpinner" style:highest "ardour_adjusters"
|
||||
widget "*AddRouteDialogRadioButton*" style:highest "options_window"
|
||||
widget "*OptionsNotebook" style:highest "options_window"
|
||||
widget "*OptionEditorToggleButton*" style:highest "options_window"
|
||||
widget "*OptionsLabel" style:highest "options_window"
|
||||
widget "*OptionEditorAuditionerLabel" style:highest "options_window"
|
||||
widget "*OptionsEntry" style:highest "option_entry"
|
||||
widget "*InspectorNotebook" style:highest "options_window"
|
||||
widget "*NewSessionDialog" style:highest "options_window"
|
||||
widget "*NewSessionDialogButton*" style:highest "options_window"
|
||||
widget "*MixerSendSwitch*" style:highest "very_small_red_active_and_selected_button"
|
||||
widget "*OptionEditorToggleButton" style:highest "small_red_active_and_selected_button"
|
||||
widget "*NewSessionDialogButton" style:highest "small_red_active_and_selected_button"
|
||||
widget "*RecordEnableButton" style:highest "track_rec_enable_button"
|
||||
widget "*RecordEnableButton-active" style:highest "track_rec_enable_button_active"
|
||||
widget "*RecordEnableButton-alternate" style:highest "track_rec_enable_button_alternate"
|
||||
widget "*MixerRecordEnableButton" style:highest "mixer_track_rec_enable_button"
|
||||
widget "*MixerRecordEnableButton-active" style:highest "mixer_track_rec_enable_button_active"
|
||||
widget "*MixerRecordEnableButton-alternate" style:highest "mixer_track_rec_enable_button_alternate"
|
||||
widget "*MuteButton" style:highest "mute_button"
|
||||
widget "*MuteButton-alternate" style:highest "mute_button_alternate"
|
||||
widget "*MuteButton-active" style:highest "mute_button_active"
|
||||
widget "*MixerMuteButton" style:highest "mixer_mute_button"
|
||||
widget "*MixerMuteButton-alternate" style:highest "mixer_mute_button_alternate"
|
||||
widget "*MixerMuteButton-active" style:highest "mixer_mute_button_active"
|
||||
widget "*SoloButton" style:highest "solo_button"
|
||||
widget "*SoloButton-alternate" style:highest "solo_button_alternate"
|
||||
widget "*SoloButton-active" style:highest "solo_button_active"
|
||||
widget "*MixerSoloButton" style:highest "mixer_solo_button"
|
||||
widget "*MixerSoloButton-alternate" style:highest "mixer_solo_button_alternate"
|
||||
widget "*MixerSoloButton-active" style:highest "mixer_solo_button_active"
|
||||
widget "*TrackLoopButton*" style:highest "track_loop_button"
|
||||
widget "*PanAutomationLineSelector*" style:highest "multiline_combo"
|
||||
widget "*EditorTimeButton*" style:highest "time_button"
|
||||
widget "*MixerPhaseInvertButton*" style:highest "very_small_button"
|
||||
widget "*MixerPhaseInvertButton.*" style:highest "very_small_button"
|
||||
widget "*MixerAutomationRecordingButton*" style:highest "very_small_button"
|
||||
widget "*MixerAutomationRecordingButton.*" style:highest "very_small_button"
|
||||
widget "*MixerAutomationModeButton*" style:highest "very_small_button"
|
||||
widget "*MixerAutomationModeButton.*" style:highest "very_small_button"
|
||||
widget "*MixerAutomationPlaybackButton*" style:highest "very_small_button"
|
||||
widget "*MixerAutomationPlaybackButton.*" style:highest "very_small_button"
|
||||
widget "*MixerNameButton" style:highest "very_small_button"
|
||||
widget "*MixerNameButtonLabel" style:highest "very_small_button"
|
||||
widget "*MixerGroupButton" style:highest "very_small_button"
|
||||
widget "*MixerGroupButtonLabel" style:highest "very_small_button"
|
||||
widget "*MixerCommentButton" style:highest "very_small_button"
|
||||
widget "*MixerCommentButton*" style:highest "very_small_button"
|
||||
widget "*EditGroupButton" style:highest "very_small_button"
|
||||
widget "*EditGroupButtonLabel" style:highest "very_small_button"
|
||||
widget "*TransportButton" style:highest "transport_rec_button"
|
||||
widget "*TransportButton-active" style:highest "transport_button_active"
|
||||
widget "*ShuttleButton" style:highest "transport_button"
|
||||
widget "*ShuttleButton*" style:highest "transport_button"
|
||||
widget "*ShuttleDisplay" style:highest "transport_button"
|
||||
widget "*ShuttleDisplay*" style:highest "transport_button"
|
||||
widget "*ShuttleControl" style:highest "shuttle_control"
|
||||
widget "*TransportRecButton" style:highest "transport_rec_button"
|
||||
widget "*TransportRecButton*" style:highest "transport_rec_button"
|
||||
widget "*TransportRecButton-active" style:highest "transport_rec_button_active"
|
||||
widget "*TransportRecButton-active*" style:highest "transport_rec_button_active"
|
||||
widget "*TransportRecButton-alternate" style:highest "transport_rec_button_alternate"
|
||||
widget "*TransportRecButton-alternate*" style:highest "transport_rec_button_alternate"
|
||||
widget "*TransportRecButton*" style:highest "transport_rec_button"
|
||||
widget "*RecordingXrunWarningWindow" style:highest "xrun_warn"
|
||||
widget "*RecordingXrunWarningWindow*" style:highest "xrun_warn"
|
||||
/*widget "*MainMenuBar" style:highest "menu_bar_base"*/
|
||||
widget "*ErrorMessage" style:highest "error_message"
|
||||
widget "*FatalMessage" style:highest "fatal_message"
|
||||
widget "*InfoMessage" style:highest "info_message"
|
||||
widget "*WarningMessage" style:highest "warning_message"
|
||||
widget "*BigClockNonRecording" style:highest "non_recording_big_clock_display"
|
||||
widget "*BigClockRecording" style:highest "recording_big_clock_display"
|
||||
widget "*TransportClockDisplay" style:highest "transport_clock_display"
|
||||
widget "*SecondaryClockDisplay" style:highest "transport_clock_display"
|
||||
widget "*AudioClockFramesUpperInfo" style:highest "tempo_meter_clock_display"
|
||||
widget "*AudioClockFramesLowerInfo" style:highest "tempo_meter_clock_display"
|
||||
widget "*AudioClockSMPTEUpperInfo" style:highest "tempo_meter_clock_display"
|
||||
widget "*AudioClockSMPTELowerInfo" style:highest "tempo_meter_clock_display"
|
||||
widget "*AudioClockBBTUpperInfo" style:highest "tempo_meter_clock_display"
|
||||
widget "*AudioClockBBTLowerInfo" style:highest "tempo_meter_clock_display"
|
||||
widget "*SelectionStartClock" style:highest "default_clock_display"
|
||||
widget "*SelectionEndClock" style:highest "default_clock_display"
|
||||
widget "*EditCursorClock" style:highest "default_clock_display"
|
||||
widget "*PreRollClock" style:highest "default_clock_display"
|
||||
widget "*PostRollClock" style:highest "default_clock_display"
|
||||
widget "*NudgeClock" style:highest "default_clock_display"
|
||||
widget "*ZoomRangeClock" style:highest "default_clock_display"
|
||||
widget "*SMPTEOffsetClock" style:highest "default_clock_display"
|
||||
widget "*TransportLabel" style:highest "small_bold_text"
|
||||
widget "*TakeLabel" style:highest "small_bold_text"
|
||||
widget "*LocationLabel" style:highest "small_bold_text"
|
||||
widget "*WipeLabel" style:highest "small_bold_text"
|
||||
widget "*TakeTagLabel" style:highest "small_bold_text"
|
||||
widget "*ToolBarLabel" style:highest "small_bold_text"
|
||||
widget "*EditorDisplayLabel" style:highest "small_bold_text"
|
||||
widget "*NewSessionLabel" style:highest "large_text"
|
||||
widget "*GlobalButtonLabel" style:highest "default_buttons_menus"
|
||||
widget "*ClickButton" style:highest "medium_entry"
|
||||
widget "*RegionNameDisplay" style:highest "medium_entry"
|
||||
widget "*PluginDisplay" style:highest "medium_entry"
|
||||
widget "*SelectionDisplay" style:highest "medium_entry"
|
||||
widget "*HistorySelector" style:highest "medium_entry"
|
||||
widget "*LocationSelector" style:highest "medium_entry"
|
||||
widget "*TakeSelector" style:highest "medium_entry"
|
||||
widget "*RegionSelector" style:highest "medium_entry"
|
||||
widget "*SMPTERuler" style:highest "editor_time_ruler"
|
||||
widget "*BBTRuler" style:highest "editor_time_ruler"
|
||||
widget "*FramesRuler" style:highest "editor_time_ruler"
|
||||
widget "*MinSecRuler" style:highest "editor_time_ruler"
|
||||
widget "*BaseFrame" style:highest "base_frame"
|
||||
widget "*AudioTrackStripBase" style:highest "audio_track_base"
|
||||
widget "*TimeAxisViewControlsBaseUnselected" style:highest "audio_track_base"
|
||||
widget "*AudioTrackControlsBaseUnselected" style:highest "audio_track_base"
|
||||
widget "*AudioTrackFader" style:highest "gain_fader"
|
||||
widget "*AudioBusStripBase" style:highest "audio_bus_base"
|
||||
widget "*BusControlsBaseUnselected" style:highest "audio_bus_base"
|
||||
widget "*AudioBusFader" style:highest "gain_fader"
|
||||
widget "*TrackSeparator" style:highest "track_separator"
|
||||
widget "*TrackEditIndicator0*" style:highest "edit_group_0"
|
||||
widget "*TrackEditIndicator1*" style:highest "edit_group_1"
|
||||
widget "*TrackEditIndicator2*" style:highest "edit_group_2"
|
||||
widget "*TrackEditIndicator3*" style:highest "edit_group_3"
|
||||
widget "*TrackEditIndicator4*" style:highest "edit_group_3"
|
||||
widget "*TrackEditIndicator5*" style:highest "edit_group_3"
|
||||
widget "*TrackEditIndicator6*" style:highest "edit_group_3"
|
||||
widget "*TrackEditIndicator7*" style:highest "edit_group_3"
|
||||
widget "*EditorTrackNameDisplay" style:highest "track_name_display"
|
||||
widget "*EditorTrackNameDisplay*" style:highest "track_name_display"
|
||||
widget "*EditorActiveTrackNameDisplay" style:highest "active_track_name_display"
|
||||
widget "*EditorActiveTrackNameDisplay*" style:highest "active_track_name_display"
|
||||
widget "*CrossfadeEditAuditionButton" style:highest "red_when_active"
|
||||
widget "*CrossfadeEditAuditionButton*" style:highest "red_when_active"
|
||||
widget "*CrossfadeEditCurveButton" style:highest "red_when_active"
|
||||
widget "*CrossfadeEditCurveButton*" style:highest "red_when_active"
|
||||
widget "*CrossfadeEditLabel" style:highest "medium_text"
|
||||
widget "*CrossfadeEditFrame" style:highest "base_frame"
|
||||
widget "*MouseModeButton" style:highest "default_buttons_menus"
|
||||
widget "*MouseModeButton*" style:highest "default_buttons_menus"
|
||||
widget "*EditorMainCanvas" style:highest "main_canvas_area"
|
||||
widget "*AudioTrackControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
|
||||
widget "*BusControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
|
||||
widget "*AutomationTrackControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
|
||||
widget "*AutomationTrackName" style:highest "automation_track_name"
|
||||
widget "*AudioTrackControlsBaseInactiveSelected" style:highest "track_controls_inactive"
|
||||
widget "*BusControlsBaseInactiveSelected" style:highest "track_controls_inactive"
|
||||
widget "*AutomationTrackControlsBaseInactiveSelected" style:highest "track_controls_inactive"
|
||||
widget "*AudioTrackStripBaseInactive" style:highest "track_controls_inactive"
|
||||
widget "*AudioBusStripBaseInactive" style:highest "track_controls_inactive"
|
||||
widget "*AudioTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
|
||||
widget "*BusControlsBaseSelected" style:highest "edit_controls_base_selected"
|
||||
widget "*AutomationTrackControlsBase" style:highest "automation_track_controls_base"
|
||||
widget "*AutomationTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
|
||||
/*widget "*EditorMenuBar*" style:highest "black_mackie_menu_bar"
|
||||
widget "*MainMenuBar*" style:highest "black_mackie_menu_bar"
|
||||
*/
|
||||
widget "*ZoomClickBox" style:highest "medium_bold_entry"
|
||||
widget "*PluginParameterLabel" style:highest "medium_text"
|
||||
widget "*PluginNameInfo" style:highest "plugin_name_text"
|
||||
widget "*PluginMakerInfo" style:highest "plugin_maker_text"
|
||||
widget "*PluginParameterInfo" style:highest "medium_text"
|
||||
widget "*MotionControllerValue" style:highest "medium_entry"
|
||||
widget "*ParameterValueDisplay" style:highest "medium_bold_entry"
|
||||
widget "*PluginUIClickBox" style:highest "medium_bold_entry"
|
||||
widget "*PluginUIClickBox*" style:highest "medium_bold_entry"
|
||||
widget "*PluginSlider" style:highest "plugin_slider"
|
||||
widget "*RedirectSelector" style:highest "redirect_list_display"
|
||||
widget "*RedirectSelector.*" style:highest "redirect_list_display"
|
||||
widget "*EditGroupDisplay" style:highest "treeview_display"
|
||||
widget "*TrackListDisplay" style:highest "treeview_display"
|
||||
widget "*RegionListDisplay" style:highest "treeview_display"
|
||||
widget "*NamedSelectionDisplay" style:highest "treeview_display"
|
||||
widget "*SnapshotDisplay" style:highest "treeview_display"
|
||||
widget "*MixerTrackCommentArea" style:highest "option_entry"
|
||||
widget "*MixerPanZone" style:highest "pan_zone"
|
||||
widget "*MixerTrackDisplayList" style:highest "treeview_display"
|
||||
widget "*MixerSnapshotDisplayList" style:highest "treeview_display"
|
||||
widget "*MixerAuxDisplayList" style:highest "treeview_display"
|
||||
widget "*MixerGroupList" style:highest "treeview_display"
|
||||
widget "*RegionEditorLabel" style:highest "medium_text"
|
||||
widget "*RegionEditorSmallLabel" style:highest "small_text"
|
||||
widget "*RegionEditorEntry" style:highest "medium_entry"
|
||||
widget "*RegionEditorClock" style:highest "default_clock_display"
|
||||
widget "*RegionEditorToggleButton" style:highest "paler_red_when_active"
|
||||
widget "*RegionEditorToggleButton*" style:highest "paler_red_when_active"
|
||||
widget "*MixerStripSpeedBase" style:highest "small_entry"
|
||||
widget "*MixerStripSpeedBase*" style:highest "small_entry"
|
||||
widget "*MixerStripSpeedBaseNotOne" style:highest "small_red_on_black_entry"
|
||||
widget "*MixerStripSpeedBaseNotOne*" style:highest "small_red_on_black_entry"
|
||||
widget "*MixerStripGainDisplay" style:highest "small_entry"
|
||||
widget "*MixerStripGainDisplay*" style:highest "small_entry"
|
||||
widget "*MixerStripGainUnitButton" style:highest "very_small_button"
|
||||
widget "*MixerStripGainUnitButton*" style:highest "very_small_button"
|
||||
widget "*MixerStripMeterPreButton" style:highest "very_small_button"
|
||||
widget "*MixerStripMeterPreButton*" style:highest "very_small_button"
|
||||
widget "*MixerStripPeakDisplay*" style:highest "red_active_small_entry"
|
||||
widget "*MixerStripPeakDisplayPeak*" style:highest "peak_display_peaked_entry"
|
||||
widget "*MixerStripSelectedFrame" style:highest "selected_strip_frame"
|
||||
widget "*MixerStripFrame" style:highest "base_frame"
|
||||
widget "*HWMonitorButton" style:highest "red_when_active"
|
||||
widget "*HWMonitorButton*" style:highest "red_when_active"
|
||||
widget "*BypassButton" style:highest "red_when_active"
|
||||
widget "*BypassButton*" style:highest "red_when_active"
|
||||
widget "*TransportSoloAlert" style:highest "flashing_alert"
|
||||
widget "*TransportSoloAlert.*" style:highest "flashing_alert"
|
||||
widget "*TransportAuditioningAlert" style:highest "flashing_alert"
|
||||
widget "*TransportAuditioningAlert.*" style:highest "flashing_alert"
|
||||
widget "*FadeCurve" style:highest "medium_bold_entry"
|
||||
widget "*FadeCurve*" style:highest "medium_bold_entry"
|
||||
widget "*IOSelectorButton" style:highest "default_buttons_menus"
|
||||
widget "*IOSelectorButton*" style:highest "default_buttons_menus"
|
||||
widget "*IOSelectorList" style:highest "medium_entry_noselection_fg"
|
||||
widget "*IOSelectorPortList" style:highest "io_selector_port_list"
|
||||
widget "*IOSelectorPortList.*" style:highest "io_selector_port_list"
|
||||
widget "*IOSelectorPortListSelected" style:highest "selected_io_selector_port_list"
|
||||
widget "*IOSelectorPortListSelected.*" style:highest "selected_io_selector_port_list"
|
||||
widget "*IOSelectorNotebook" style:highest "io_selector_notebook"
|
||||
widget "*IOSelectorNotebookTab" style:highest "io_selector_notebook"
|
||||
widget "*IOSelectorFrame" style:highest "base_frame"
|
||||
widget "*ConnectionEditorButton" style:highest "default_buttons_menus"
|
||||
widget "*ConnectionEditorButton*" style:highest "default_buttons_menus"
|
||||
widget "*ConnectionEditorList" style:highest "medium_entry_noselection_fg"
|
||||
widget "*ConnectionEditorConnectionList" style:highest "medium_entry"
|
||||
widget "*ConnectionEditorPortList" style:highest "io_selector_port_list"
|
||||
widget "*ConnectionEditorPortListSelected" style:highest "selected_io_selector_port_list"
|
||||
widget "*ConnectionEditorNotebook" style:highest "io_selector_notebook"
|
||||
widget "*ConnectionEditorNotebookTab" style:highest "io_selector_notebook"
|
||||
widget "*ConnectionEditorFrame" style:highest "base_frame"
|
||||
widget "*RouteParamsListDisplay" style:highest "inspector_track_list_display"
|
||||
widget "*RouteParamsPreListDisplay" style:highest "inspector_redirect_list_display"
|
||||
widget "*RouteParamsPostListDisplay" style:highest "inspector_redirect_list_display"
|
||||
widget "*TearOffArrow" style:highest "tearoff_arrow"
|
||||
widget "*RouteParamsTitleButton" style:highest "medium_text"
|
||||
widget "*RouteParamsTitleLabel" style:highest "medium_text"
|
||||
widget "*PluginAutomateRecordButton" style:highest "small_red_active_and_selected_button"
|
||||
widget "*PluginAutomateRecordButton*" style:highest "small_red_active_and_selected_button"
|
||||
widget "*PluginAutomatePlayButton" style:highest "small_red_active_and_selected_button"
|
||||
widget "*PluginAutomatePlayButton*" style:highest "small_red_active_and_selected_button"
|
||||
widget "*PluginAutomateButton" style:highest "small_button"
|
||||
widget "*PluginAutomateButton*" style:highest "small_button"
|
||||
widget "*PluginSaveButton" style:highest "small_button"
|
||||
widget "*PluginSaveButton*" style:highest "small_button"
|
||||
widget "*PluginLoadButton" style:highest "small_button"
|
||||
widget "*PluginLoadButton*" style:highest "small_button"
|
||||
widget "*FaderMetricsStrip" style:highest "meter_metrics_strip"
|
||||
widget "*MeterMetricsStrip" style:highest "meter_metrics_strip"
|
||||
widget "*MetricDialogFrame" style:highest "base_frame"
|
||||
widget "*MetricEntry" style:highest "medium_bold_entry"
|
||||
widget "*MetricButton" style:highest "default_buttons_menus"
|
||||
widget "*MetricButton.*" style:highest "default_buttons_menus"
|
||||
widget "*MetricLabel" style:highest "medium_text"
|
||||
widget "*TimeStretchButton" style:highest "default_buttons_menus"
|
||||
widget "*TimeStretchButton.*" style:highest "default_buttons_menus"
|
||||
widget "*TimeStretchProgress" style:highest "default_buttons_menus"
|
||||
widget "*ChoiceWindow" style:highest "default_buttons_menus"
|
||||
widget "*ChoicePrompt" style:highest "default_buttons_menus"
|
||||
widget "*ChoiceButton" style:highest "default_buttons_menus"
|
||||
widget "*ChoiceButton*" style:highest "default_buttons_menus"
|
||||
widget "*SelectionModeButton" style:highest "default_buttons_menus"
|
||||
widget "*SelectionModeButton*" style:highest "default_buttons_menus"
|
||||
widget "*TrackLabel" style:highest "medium_text"
|
||||
widget "*TrackPlugName" style:highest "medium_text"
|
||||
widget "*TrackParameterName" style:highest "small_text"
|
||||
widget "*AddRouteDialog*" style:highest "medium_text"
|
||||
widget "*AddRouteDialog.GtkLabel" style:highest "medium_text"
|
||||
widget "*AddRouteDialogChannelChoice" style:highest "medium_bold_entry"
|
||||
widget "*AddRouteDialogSpinner" style:highest "medium_bold_entry"
|
||||
widget "*AddRouteDialogSpinner*" style:highest "medium_bold_entry"
|
||||
widget "*AddRouteDialogRadioButton" style:highest "red_when_active"
|
||||
widget "*AddRouteDialogButton" style:highest "default_buttons_menus"
|
||||
widget "*AddRouteDialogNameTemplateEntry" style:highest "medium_bold_entry"
|
||||
widget "*NewSessionIOLabel" style:highest "larger_bold_text"
|
||||
widget "*NewSessionSR1Label" style:highest "red_medium_text"
|
||||
widget "*NewSessionSR2Label" style:highest "medium_text"
|
||||
widget "*NewSessionChannelChoice" style:highest "medium_bold_entry"
|
||||
widget "*NewSessionMainButton" style:highest "larger_bold_text"
|
||||
widget "*NewSessionMainButton*" style:highest "larger_bold_text"
|
||||
widget "*NewSessionMainLabel" style:highest "larger_bold_text"
|
||||
widget "*LocationEditRowClock" style:highest "location_rows_clock"
|
||||
widget "*LocationEditNameLabel" style:highest "medium_text"
|
||||
widget "*LocationEditSetButton" style:highest "location_row_button"
|
||||
widget "*LocationEditSetButton*" style:highest "location_row_button"
|
||||
widget "*LocationEditGoButton" style:highest "location_row_button"
|
||||
widget "*LocationEditGoButton*" style:highest "location_row_button"
|
||||
widget "*LocationEditCdButton" style:highest "small_red_active_and_selected_button"
|
||||
widget "*LocationEditCdButton*" style:highest "small_red_active_and_selected_button"
|
||||
widget "*LocationEditHideButton" style:highest "small_red_active_and_selected_button"
|
||||
widget "*LocationEditHideButton*" style:highest "small_red_active_and_selected_button"
|
||||
widget "*LocationEditNumberLabel" style:highest "small_text"
|
||||
widget "*LocationLocEditorFrame" style:highest "base_frame"
|
||||
widget "*LocationRangeEditorFrame" style:highest "base_frame"
|
||||
widget "*LocationEditNameEntry" style:highest "option_entry"
|
||||
widget "*LocationAddLocationButton" style:highest "default_buttons_menus"
|
||||
widget "*LocationAddLocationButton*" style:highest "default_buttons_menus"
|
||||
widget "*LocationAddRangeButton" style:highest "default_buttons_menus"
|
||||
widget "*LocationAddRangeButton*" style:highest "default_buttons_menus"
|
||||
widget "*LocationEditRemoveButton" style:highest "location_row_button"
|
||||
widget "*LocationEditRemoveButton*" style:highest "location_row_button"
|
||||
widget "*PanSlider" style:highest "pan_slider"
|
||||
widget "*PanningLinkButton" style:highest "mixer_red_active_button"
|
||||
widget "*PanningLinkButton.*" style:highest "mixer_red_active_button"
|
||||
widget "*PanningLinkDirectionButton" style:highest "very_small_button"
|
||||
widget "*PanningLinkDirectionButton.*" style:highest "very_small_button"
|
||||
widget "*ChannelCountSelector" style:highest "medium_bold_entry"
|
||||
widget "*ChannelCountSelector.GtkArrow" style:highest "default_buttons_menus"
|
||||
widget "*RegionListWholeFile" style:highest "treeview_parent_node"
|
||||
widget "*EditorHScrollbar" style:highest "editor_hscrollbar"
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,64 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2004 Paul Davis
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
|
||||
*/
|
||||
|
||||
#include <gtkmm/stock.h>
|
||||
|
||||
#include "ardour_message.h"
|
||||
#include "i18n.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace Gtk;
|
||||
|
||||
ArdourMessage::ArdourMessage (Gtk::Window* parent,
|
||||
string name, string msg,
|
||||
bool grab_focus, bool auto_run)
|
||||
: ArdourDialog (name),
|
||||
label (msg)
|
||||
{
|
||||
label.set_name (X_("PrompterLabel"));
|
||||
label.set_justify (JUSTIFY_CENTER);
|
||||
label.show ();
|
||||
|
||||
get_vbox()->pack_start (label);
|
||||
|
||||
Button* ok_button = add_button (Stock::OK, RESPONSE_ACCEPT);
|
||||
|
||||
set_name (X_("Prompter"));
|
||||
set_position (Gtk::WIN_POS_MOUSE);
|
||||
set_modal (true);
|
||||
set_type_hint (Gdk::WINDOW_TYPE_HINT_MENU);
|
||||
|
||||
if (grab_focus) {
|
||||
ok_button->grab_focus ();
|
||||
}
|
||||
|
||||
if (parent) {
|
||||
set_transient_for (*parent);
|
||||
}
|
||||
|
||||
if (auto_run) {
|
||||
run ();
|
||||
}
|
||||
}
|
||||
|
||||
ArdourMessage::~ArdourMessage()
|
||||
{
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 1999-2002 Paul Davis
|
||||
Copyright (C) 1999-2007 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
|
||||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#define __STDC_FORMAT_MACROS 1
|
||||
|
|
@ -31,6 +30,8 @@
|
|||
|
||||
#include <iostream>
|
||||
|
||||
#include <sys/resource.h>
|
||||
|
||||
#include <gtkmm/messagedialog.h>
|
||||
#include <gtkmm/accelmap.h>
|
||||
|
||||
|
|
@ -71,7 +72,6 @@
|
|||
#include "mixer_ui.h"
|
||||
#include "prompter.h"
|
||||
#include "opts.h"
|
||||
#include "keyboard_target.h"
|
||||
#include "add_route_dialog.h"
|
||||
#include "new_session_dialog.h"
|
||||
#include "about.h"
|
||||
|
|
@ -91,6 +91,7 @@ ARDOUR_UI *ARDOUR_UI::theArdourUI = 0;
|
|||
|
||||
sigc::signal<void,bool> ARDOUR_UI::Blink;
|
||||
sigc::signal<void> ARDOUR_UI::RapidScreenUpdate;
|
||||
sigc::signal<void> ARDOUR_UI::MidRapidScreenUpdate;
|
||||
sigc::signal<void> ARDOUR_UI::SuperRapidScreenUpdate;
|
||||
sigc::signal<void,nframes_t> ARDOUR_UI::Clock;
|
||||
|
||||
|
|
@ -118,16 +119,34 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
|
|||
|
||||
/* transport */
|
||||
|
||||
time_master_button (_("time\nmaster")),
|
||||
roll_controllable ("transport roll", *this, TransportControllable::Roll),
|
||||
stop_controllable ("transport stop", *this, TransportControllable::Stop),
|
||||
goto_start_controllable ("transport goto start", *this, TransportControllable::GotoStart),
|
||||
goto_end_controllable ("transport goto end", *this, TransportControllable::GotoEnd),
|
||||
auto_loop_controllable ("transport auto loop", *this, TransportControllable::AutoLoop),
|
||||
play_selection_controllable ("transport play selection", *this, TransportControllable::PlaySelection),
|
||||
rec_controllable ("transport rec-enable", *this, TransportControllable::RecordEnable),
|
||||
shuttle_controllable ("shuttle", *this, TransportControllable::ShuttleControl),
|
||||
shuttle_controller_binding_proxy (shuttle_controllable),
|
||||
|
||||
roll_button (roll_controllable),
|
||||
stop_button (stop_controllable),
|
||||
goto_start_button (goto_start_controllable),
|
||||
goto_end_button (goto_end_controllable),
|
||||
auto_loop_button (auto_loop_controllable),
|
||||
play_selection_button (play_selection_controllable),
|
||||
rec_button (rec_controllable),
|
||||
|
||||
shuttle_units_button (_("% ")),
|
||||
|
||||
punch_in_button (_("Punch In")),
|
||||
punch_out_button (_("Punch Out")),
|
||||
auto_return_button (_("Auto Return")),
|
||||
auto_play_button (_("Autuo Play")),
|
||||
auto_play_button (_("Auto Play")),
|
||||
auto_input_button (_("Auto Input")),
|
||||
click_button (_("Click")),
|
||||
time_master_button (_("time\nmaster")),
|
||||
|
||||
auditioning_alert_button (_("AUDITION")),
|
||||
solo_alert_button (_("SOLO")),
|
||||
shown_flag (false)
|
||||
|
|
@ -164,8 +183,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
|
|||
location_ui = 0;
|
||||
open_session_selector = 0;
|
||||
have_configure_timeout = false;
|
||||
have_disk_overrun_displayed = false;
|
||||
have_disk_underrun_displayed = false;
|
||||
have_disk_speed_dialog_displayed = false;
|
||||
_will_create_new_session_automatically = false;
|
||||
session_loaded = false;
|
||||
last_speed_displayed = -1.0f;
|
||||
|
|
@ -249,10 +267,6 @@ ARDOUR_UI::set_engine (AudioEngine& e)
|
|||
AudioFileSource::set_build_peakfiles (true);
|
||||
AudioFileSource::set_build_missing_peakfiles (true);
|
||||
|
||||
if (AudioSource::start_peak_thread ()) {
|
||||
throw failed_constructor();
|
||||
}
|
||||
|
||||
/* set default clock modes */
|
||||
|
||||
primary_clock.set_mode (AudioClock::SMPTE);
|
||||
|
|
@ -290,8 +304,6 @@ ARDOUR_UI::~ARDOUR_UI ()
|
|||
if (add_route_dialog) {
|
||||
delete add_route_dialog;
|
||||
}
|
||||
|
||||
AudioSource::stop_peak_thread ();
|
||||
}
|
||||
|
||||
gint
|
||||
|
|
@ -333,6 +345,63 @@ ARDOUR_UI::configure_handler (GdkEventConfigure* conf)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::set_transport_controllable_state (const XMLNode& node)
|
||||
{
|
||||
const XMLProperty* prop;
|
||||
|
||||
if ((prop = node.property ("roll")) != 0) {
|
||||
roll_controllable.set_id (prop->value());
|
||||
}
|
||||
if ((prop = node.property ("stop")) != 0) {
|
||||
stop_controllable.set_id (prop->value());
|
||||
}
|
||||
if ((prop = node.property ("goto_start")) != 0) {
|
||||
goto_start_controllable.set_id (prop->value());
|
||||
}
|
||||
if ((prop = node.property ("goto_end")) != 0) {
|
||||
goto_end_controllable.set_id (prop->value());
|
||||
}
|
||||
if ((prop = node.property ("auto_loop")) != 0) {
|
||||
auto_loop_controllable.set_id (prop->value());
|
||||
}
|
||||
if ((prop = node.property ("play_selection")) != 0) {
|
||||
play_selection_controllable.set_id (prop->value());
|
||||
}
|
||||
if ((prop = node.property ("rec")) != 0) {
|
||||
rec_controllable.set_id (prop->value());
|
||||
}
|
||||
if ((prop = node.property ("shuttle")) != 0) {
|
||||
shuttle_controllable.set_id (prop->value());
|
||||
}
|
||||
}
|
||||
|
||||
XMLNode&
|
||||
ARDOUR_UI::get_transport_controllable_state ()
|
||||
{
|
||||
XMLNode* node = new XMLNode(X_("TransportControllables"));
|
||||
char buf[64];
|
||||
|
||||
roll_controllable.id().print (buf, sizeof (buf));
|
||||
node->add_property (X_("roll"), buf);
|
||||
stop_controllable.id().print (buf, sizeof (buf));
|
||||
node->add_property (X_("stop"), buf);
|
||||
goto_start_controllable.id().print (buf, sizeof (buf));
|
||||
node->add_property (X_("goto_start"), buf);
|
||||
goto_end_controllable.id().print (buf, sizeof (buf));
|
||||
node->add_property (X_("goto_end"), buf);
|
||||
auto_loop_controllable.id().print (buf, sizeof (buf));
|
||||
node->add_property (X_("auto_loop"), buf);
|
||||
play_selection_controllable.id().print (buf, sizeof (buf));
|
||||
node->add_property (X_("play_selection"), buf);
|
||||
rec_controllable.id().print (buf, sizeof (buf));
|
||||
node->add_property (X_("rec"), buf);
|
||||
shuttle_controllable.id().print (buf, sizeof (buf));
|
||||
node->add_property (X_("shuttle"), buf);
|
||||
|
||||
return *node;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::save_ardour_state ()
|
||||
{
|
||||
|
|
@ -346,6 +415,7 @@ ARDOUR_UI::save_ardour_state ()
|
|||
|
||||
XMLNode* node = new XMLNode (keyboard->get_state());
|
||||
Config->add_extra_xml (*node);
|
||||
Config->add_extra_xml (get_transport_controllable_state());
|
||||
Config->save_state();
|
||||
|
||||
XMLNode enode(static_cast<Stateful*>(editor)->get_state());
|
||||
|
|
@ -365,9 +435,72 @@ ARDOUR_UI::save_ardour_state ()
|
|||
void
|
||||
ARDOUR_UI::startup ()
|
||||
{
|
||||
// relax
|
||||
check_memory_locking();
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::no_memory_warning ()
|
||||
{
|
||||
XMLNode node (X_("no-memory-warning"));
|
||||
Config->add_instant_xml (node, get_user_ardour_path());
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::check_memory_locking ()
|
||||
{
|
||||
#ifdef __APPLE__
|
||||
/* OS X doesn't support mlockall(2), and so testing for memory locking capability there is pointless */
|
||||
return;
|
||||
#else // !__APPLE__
|
||||
|
||||
XMLNode* memory_warning_node = Config->instant_xml (X_("no-memory-warning"), get_user_ardour_path());
|
||||
|
||||
if (engine->is_realtime() && memory_warning_node == 0) {
|
||||
|
||||
struct rlimit limits;
|
||||
int64_t ram;
|
||||
long pages, page_size;
|
||||
|
||||
if ((page_size = sysconf (_SC_PAGESIZE)) < 0 ||(pages = sysconf (_SC_PHYS_PAGES)) < 0) {
|
||||
ram = 0;
|
||||
} else {
|
||||
ram = (int64_t) pages * (int64_t) page_size;
|
||||
}
|
||||
|
||||
if (getrlimit (RLIMIT_MEMLOCK, &limits)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (limits.rlim_cur != RLIM_INFINITY) {
|
||||
|
||||
if (ram == 0 || ((double) limits.rlim_cur / ram) < 0.75) {
|
||||
|
||||
|
||||
MessageDialog msg (_("WARNING: Your system has a limit for maximum amount of locked memory. "
|
||||
"This might cause Ardour to run out of memory before your system "
|
||||
"runs out of memory. \n\n"
|
||||
"You can view the memory limit with 'ulimit -l', "
|
||||
"and it is normally controlled by /etc/security/limits.conf"));
|
||||
|
||||
VBox* vbox = msg.get_vbox();
|
||||
HBox hbox;
|
||||
CheckButton cb (_("Do not show this window again"));
|
||||
|
||||
cb.signal_toggled().connect (mem_fun (*this, &ARDOUR_UI::no_memory_warning));
|
||||
|
||||
hbox.pack_start (cb, true, false);
|
||||
vbox->pack_start (hbox);
|
||||
hbox.show_all ();
|
||||
|
||||
editor->ensure_float (msg);
|
||||
msg.run ();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // !__APPLE__
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ARDOUR_UI::finish()
|
||||
{
|
||||
|
|
@ -490,6 +623,13 @@ ARDOUR_UI::every_point_one_seconds ()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
ARDOUR_UI::every_point_oh_five_seconds ()
|
||||
{
|
||||
MidRapidScreenUpdate(); /* EMIT_SIGNAL */
|
||||
return true;
|
||||
}
|
||||
|
||||
gint
|
||||
ARDOUR_UI::every_point_zero_one_seconds ()
|
||||
{
|
||||
|
|
@ -609,40 +749,6 @@ ARDOUR_UI::update_wall_clock ()
|
|||
|
||||
return TRUE;
|
||||
}
|
||||
void
|
||||
ARDOUR_UI::control_methods_adjusted ()
|
||||
|
||||
{
|
||||
int which_method;
|
||||
|
||||
which_method = (int) online_control_button->adjustment.get_value();
|
||||
switch (which_method) {
|
||||
case 0:
|
||||
allow_mmc_and_local ();
|
||||
break;
|
||||
case 1:
|
||||
allow_mmc_only ();
|
||||
break;
|
||||
case 2:
|
||||
allow_local_only ();
|
||||
break;
|
||||
default:
|
||||
fatal << _("programming error: impossible control method") << endmsg;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ARDOUR_UI::mmc_device_id_adjusted ()
|
||||
|
||||
{
|
||||
#if 0
|
||||
if (mmc) {
|
||||
int dev_id = (int) mmc_id_button->adjustment.get_value();
|
||||
mmc->set_device_id (dev_id);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
gint
|
||||
ARDOUR_UI::session_menu (GdkEventButton *ev)
|
||||
|
|
@ -923,7 +1029,8 @@ ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t
|
|||
if (how_many == 1) {
|
||||
error << _("could not create a new audio track") << endmsg;
|
||||
} else {
|
||||
error << string_compose (_("could not create %1 new audio tracks"), how_many) << endmsg;
|
||||
error << string_compose (_("could only create %1 of %2 new audio %3"),
|
||||
tracks.size(), how_many, (track ? _("tracks") : _("busses"))) << endmsg;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -954,6 +1061,7 @@ ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t
|
|||
}
|
||||
|
||||
catch (...) {
|
||||
cerr << "About to complain about JACK\n";
|
||||
MessageDialog msg (*editor,
|
||||
_("There are insufficient JACK ports available\n\
|
||||
to create a new track or bus.\n\
|
||||
|
|
@ -1101,11 +1209,11 @@ ARDOUR_UI::transport_roll ()
|
|||
|
||||
if (session->get_play_loop()) {
|
||||
session->request_play_loop (false);
|
||||
auto_loop_button.set_active (false);
|
||||
roll_button.set_active (true);
|
||||
auto_loop_button.set_visual_state (1);
|
||||
roll_button.set_visual_state (1);
|
||||
} else if (session->get_play_range ()) {
|
||||
session->request_play_range (false);
|
||||
play_selection_button.set_active (false);
|
||||
play_selection_button.set_visual_state (0);
|
||||
} else if (rolling) {
|
||||
session->request_locate (session->last_transport_start(), true);
|
||||
}
|
||||
|
|
@ -1243,24 +1351,6 @@ ARDOUR_UI::map_transport_state ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::allow_local_only ()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::allow_mmc_only ()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::allow_mmc_and_local ()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::GlobalClickBox::printer (char buf[32], Adjustment &adj, void *arg)
|
||||
{
|
||||
|
|
@ -1282,6 +1372,49 @@ ARDOUR_UI::engine_running ()
|
|||
ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::engine_running));
|
||||
ActionManager::set_sensitive (ActionManager::jack_sensitive_actions, true);
|
||||
ActionManager::set_sensitive (ActionManager::jack_opposite_sensitive_actions, false);
|
||||
|
||||
Glib::RefPtr<Action> action;
|
||||
char* action_name = 0;
|
||||
|
||||
switch (engine->frames_per_cycle()) {
|
||||
case 32:
|
||||
action_name = X_("JACKLatency32");
|
||||
break;
|
||||
case 64:
|
||||
action_name = X_("JACKLatency64");
|
||||
break;
|
||||
case 128:
|
||||
action_name = X_("JACKLatency128");
|
||||
break;
|
||||
case 512:
|
||||
action_name = X_("JACKLatency512");
|
||||
break;
|
||||
case 1024:
|
||||
action_name = X_("JACKLatency1024");
|
||||
break;
|
||||
case 2048:
|
||||
action_name = X_("JACKLatency2048");
|
||||
break;
|
||||
case 4096:
|
||||
action_name = X_("JACKLatency4096");
|
||||
break;
|
||||
case 8192:
|
||||
action_name = X_("JACKLatency8192");
|
||||
break;
|
||||
default:
|
||||
/* XXX can we do anything useful ? */
|
||||
break;
|
||||
}
|
||||
|
||||
if (action_name) {
|
||||
|
||||
action = ActionManager::get_action (X_("JACK"), action_name);
|
||||
|
||||
if (action) {
|
||||
Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic (action);
|
||||
ract->set_active ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1379,7 +1512,7 @@ ARDOUR_UI::_blink (void *arg)
|
|||
void
|
||||
ARDOUR_UI::blink ()
|
||||
{
|
||||
Blink (blink_on = !blink_on); /* EMIT_SIGNAL */
|
||||
Blink (blink_on = !blink_on); /* EMIT_SIGNAL */
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1454,17 +1587,18 @@ ARDOUR_UI::snapshot_session ()
|
|||
{
|
||||
ArdourPrompter prompter (true);
|
||||
string snapname;
|
||||
string now;
|
||||
char timebuf[128];
|
||||
time_t n;
|
||||
struct tm local_time;
|
||||
|
||||
time (&n);
|
||||
now = ctime (&n);
|
||||
now = now.substr (20, 4) + now.substr (3, 16) + " (" + now.substr (0, 3) + ")";
|
||||
localtime_r (&n, &local_time);
|
||||
strftime (timebuf, sizeof(timebuf), "%FT%T", &local_time);
|
||||
|
||||
prompter.set_name ("Prompter");
|
||||
prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
|
||||
prompter.set_prompt (_("Name of New Snapshot"));
|
||||
prompter.set_initial_text (now);
|
||||
prompter.set_initial_text (timebuf);
|
||||
|
||||
switch (prompter.run()) {
|
||||
case RESPONSE_ACCEPT:
|
||||
|
|
@ -1571,18 +1705,18 @@ ARDOUR_UI::transport_rec_enable_blink (bool onoff)
|
|||
switch (session->record_status()) {
|
||||
case Session::Enabled:
|
||||
if (onoff) {
|
||||
rec_button.set_state (1);
|
||||
rec_button.set_visual_state (2);
|
||||
} else {
|
||||
rec_button.set_state (0);
|
||||
rec_button.set_visual_state (0);
|
||||
}
|
||||
break;
|
||||
|
||||
case Session::Recording:
|
||||
rec_button.set_state (2);
|
||||
rec_button.set_visual_state (1);
|
||||
break;
|
||||
|
||||
default:
|
||||
rec_button.set_state (0);
|
||||
rec_button.set_visual_state (0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1595,12 +1729,6 @@ ARDOUR_UI::hide_and_quit (GdkEventAny *ev, ArdourDialog *window)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::start_keyboard_prefix ()
|
||||
{
|
||||
keyboard->start_prefix();
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::save_template ()
|
||||
|
||||
|
|
@ -1627,12 +1755,18 @@ ARDOUR_UI::save_template ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
ARDOUR_UI::new_session (std::string predetermined_path)
|
||||
{
|
||||
string session_name;
|
||||
string session_path;
|
||||
|
||||
if (!engine->connected()) {
|
||||
MessageDialog msg (_("Ardour is not connected to JACK at this time. Creating new sessions is not possible."));
|
||||
msg.run ();
|
||||
return false;
|
||||
}
|
||||
|
||||
int response = Gtk::RESPONSE_NONE;
|
||||
|
||||
new_session_dialog->set_modal(true);
|
||||
|
|
@ -1642,6 +1776,13 @@ ARDOUR_UI::new_session (std::string predetermined_path)
|
|||
|
||||
do {
|
||||
response = new_session_dialog->run ();
|
||||
|
||||
if (!engine->connected()) {
|
||||
new_session_dialog->hide ();
|
||||
MessageDialog msg (_("Ardour is not connected to JACK at this time. Creating new sessions is not possible."));
|
||||
msg.run ();
|
||||
return false;
|
||||
}
|
||||
|
||||
_session_is_new = false;
|
||||
|
||||
|
|
@ -1651,7 +1792,7 @@ ARDOUR_UI::new_session (std::string predetermined_path)
|
|||
quit();
|
||||
}
|
||||
new_session_dialog->hide ();
|
||||
return;
|
||||
return false;
|
||||
|
||||
} else if (response == Gtk::RESPONSE_NONE) {
|
||||
|
||||
|
|
@ -1802,15 +1943,20 @@ ARDOUR_UI::new_session (std::string predetermined_path)
|
|||
uint32_t nphysin = (uint32_t) new_session_dialog->input_limit_count();
|
||||
uint32_t nphysout = (uint32_t) new_session_dialog->output_limit_count();
|
||||
|
||||
build_session (session_path,
|
||||
session_name,
|
||||
cchns,
|
||||
mchns,
|
||||
iconnect,
|
||||
oconnect,
|
||||
nphysin,
|
||||
nphysout,
|
||||
engine->frame_rate() * 60 * 5);
|
||||
if (build_session (session_path,
|
||||
session_name,
|
||||
cchns,
|
||||
mchns,
|
||||
iconnect,
|
||||
oconnect,
|
||||
nphysin,
|
||||
nphysout,
|
||||
engine->frame_rate() * 60 * 5)) {
|
||||
|
||||
response = Gtk::RESPONSE_NONE;
|
||||
new_session_dialog->reset ();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1821,6 +1967,7 @@ ARDOUR_UI::new_session (std::string predetermined_path)
|
|||
show();
|
||||
new_session_dialog->get_window()->set_cursor();
|
||||
new_session_dialog->hide();
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1876,6 +2023,7 @@ ARDOUR_UI::load_session (const string & path, const string & snap_name, string*
|
|||
session->set_clean ();
|
||||
}
|
||||
|
||||
editor->edit_cursor_position (true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1909,7 +2057,8 @@ ARDOUR_UI::build_session (const string & path, const string & snap_name,
|
|||
|
||||
catch (...) {
|
||||
|
||||
error << string_compose(_("Session \"%1 (snapshot %2)\" did not load successfully"), path, snap_name) << endmsg;
|
||||
MessageDialog msg (string_compose(_("Could not create session in \"%1\""), path));
|
||||
msg.run ();
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -2095,9 +2244,17 @@ After cleanup, unused audio files will be moved to a \
|
|||
|
||||
editor->prepare_for_cleanup ();
|
||||
|
||||
/* do not allow flush until a session is reloaded */
|
||||
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Main"), X_("FlushWastebasket"));
|
||||
if (act) {
|
||||
act->set_sensitive (false);
|
||||
}
|
||||
|
||||
if (session->cleanup_sources (rep)) {
|
||||
return;
|
||||
}
|
||||
|
||||
checker.hide();
|
||||
display_cleanup_results (rep,
|
||||
_("cleaned files"),
|
||||
|
|
@ -2109,6 +2266,9 @@ Flushing the wastebasket will \n\
|
|||
release an additional\n\
|
||||
%4 %5bytes of disk space.\n"
|
||||
));
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -2133,7 +2293,7 @@ releasing %4 %5bytes of disk space"));
|
|||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::add_route ()
|
||||
ARDOUR_UI::add_route (Gtk::Window* float_window)
|
||||
{
|
||||
int count;
|
||||
|
||||
|
|
@ -2143,7 +2303,9 @@ ARDOUR_UI::add_route ()
|
|||
|
||||
if (add_route_dialog == 0) {
|
||||
add_route_dialog = new AddRouteDialog;
|
||||
editor->ensure_float (*add_route_dialog);
|
||||
if (float_window) {
|
||||
add_route_dialog->set_transient_for (*float_window);
|
||||
}
|
||||
}
|
||||
|
||||
if (add_route_dialog->is_visible()) {
|
||||
|
|
@ -2261,18 +2423,18 @@ ARDOUR_UI::halt_on_xrun_message ()
|
|||
void
|
||||
ARDOUR_UI::disk_overrun_handler ()
|
||||
{
|
||||
ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::disk_underrun_handler));
|
||||
ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::disk_overrun_handler));
|
||||
|
||||
if (!have_disk_overrun_displayed) {
|
||||
have_disk_overrun_displayed = true;
|
||||
MessageDialog msg (*editor, X_("diskrate dialog"), _("\
|
||||
if (!have_disk_speed_dialog_displayed) {
|
||||
have_disk_speed_dialog_displayed = true;
|
||||
MessageDialog* msg = new MessageDialog (*editor, X_("diskrate dialog"), _("\
|
||||
The disk system on your computer\n\
|
||||
was not able to keep up with Ardour.\n\
|
||||
\n\
|
||||
Specifically, it failed to write data to disk\n\
|
||||
quickly enough to keep up with recording.\n"));
|
||||
msg.run ();
|
||||
have_disk_overrun_displayed = false;
|
||||
msg->signal_response().connect (bind (mem_fun (*this, &ARDOUR_UI::disk_speed_dialog_gone), msg));
|
||||
msg->show_all ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2281,29 +2443,24 @@ ARDOUR_UI::disk_underrun_handler ()
|
|||
{
|
||||
ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::disk_underrun_handler));
|
||||
|
||||
if (!have_disk_underrun_displayed) {
|
||||
have_disk_underrun_displayed = true;
|
||||
MessageDialog msg (*editor,
|
||||
(_("The disk system on your computer\n\
|
||||
if (!have_disk_speed_dialog_displayed) {
|
||||
have_disk_speed_dialog_displayed = true;
|
||||
MessageDialog* msg = new MessageDialog (*editor,
|
||||
_("The disk system on your computer\n\
|
||||
was not able to keep up with Ardour.\n\
|
||||
\n\
|
||||
Specifically, it failed to read data from disk\n\
|
||||
quickly enough to keep up with playback.\n")));
|
||||
msg.run ();
|
||||
have_disk_underrun_displayed = false;
|
||||
quickly enough to keep up with playback.\n"));
|
||||
msg->signal_response().connect (bind (mem_fun (*this, &ARDOUR_UI::disk_speed_dialog_gone), msg));
|
||||
msg->show_all ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::disk_underrun_message_gone ()
|
||||
ARDOUR_UI::disk_speed_dialog_gone (int ignored_response, MessageDialog* msg)
|
||||
{
|
||||
have_disk_underrun_displayed = false;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::disk_overrun_message_gone ()
|
||||
{
|
||||
have_disk_underrun_displayed = false;
|
||||
have_disk_speed_dialog_displayed = false;
|
||||
delete msg;
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -2360,13 +2517,6 @@ ARDOUR_UI::reconnect_to_jack ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::set_jack_buffer_size (nframes_t nframes)
|
||||
{
|
||||
engine->request_buffer_size (nframes);
|
||||
update_sample_rate (0);
|
||||
}
|
||||
|
||||
int
|
||||
ARDOUR_UI::cmdline_new_session (string path)
|
||||
{
|
||||
|
|
@ -2434,6 +2584,11 @@ ARDOUR_UI::use_config ()
|
|||
Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
|
||||
ract->set_active ();
|
||||
}
|
||||
|
||||
XMLNode* node = Config->extra_xml (X_("TransportControllables"));
|
||||
if (node) {
|
||||
set_transport_controllable_state (*node);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -2503,3 +2658,107 @@ ARDOUR_UI::store_clock_modes ()
|
|||
|
||||
|
||||
|
||||
ARDOUR_UI::TransportControllable::TransportControllable (std::string name, ARDOUR_UI& u, ToggleType tp)
|
||||
: Controllable (name), ui (u), type(tp)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::TransportControllable::set_value (float val)
|
||||
{
|
||||
if (type == ShuttleControl) {
|
||||
double fract;
|
||||
|
||||
if (val == 0.5f) {
|
||||
fract = 0.0;
|
||||
} else {
|
||||
if (val < 0.5f) {
|
||||
fract = -((0.5f - val)/0.5f);
|
||||
} else {
|
||||
fract = ((val - 0.5f)/0.5f);
|
||||
}
|
||||
}
|
||||
|
||||
ui.set_shuttle_fract (fract);
|
||||
return;
|
||||
}
|
||||
|
||||
if (val < 0.5f) {
|
||||
/* do nothing: these are radio-style actions */
|
||||
return;
|
||||
}
|
||||
|
||||
char *action = 0;
|
||||
|
||||
switch (type) {
|
||||
case Roll:
|
||||
action = X_("Roll");
|
||||
break;
|
||||
case Stop:
|
||||
action = X_("Stop");
|
||||
break;
|
||||
case GotoStart:
|
||||
action = X_("Goto Start");
|
||||
break;
|
||||
case GotoEnd:
|
||||
action = X_("Goto End");
|
||||
break;
|
||||
case AutoLoop:
|
||||
action = X_("Loop");
|
||||
break;
|
||||
case PlaySelection:
|
||||
action = X_("Play Selection");
|
||||
break;
|
||||
case RecordEnable:
|
||||
action = X_("Record");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (action == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action ("Transport", action);
|
||||
|
||||
if (act) {
|
||||
act->activate ();
|
||||
}
|
||||
}
|
||||
|
||||
float
|
||||
ARDOUR_UI::TransportControllable::get_value (void) const
|
||||
{
|
||||
float val = 0.0f;
|
||||
|
||||
switch (type) {
|
||||
case Roll:
|
||||
break;
|
||||
case Stop:
|
||||
break;
|
||||
case GotoStart:
|
||||
break;
|
||||
case GotoEnd:
|
||||
break;
|
||||
case AutoLoop:
|
||||
break;
|
||||
case PlaySelection:
|
||||
break;
|
||||
case RecordEnable:
|
||||
break;
|
||||
case ShuttleControl:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::TransportControllable::set_id (const string& str)
|
||||
{
|
||||
_id = str;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __ardour_gui_h__
|
||||
|
|
@ -55,6 +54,7 @@
|
|||
#include <gtkmm2ext/gtk_ui.h>
|
||||
#include <gtkmm2ext/click_box.h>
|
||||
#include <gtkmm2ext/stateful_button.h>
|
||||
#include <gtkmm2ext/bindable_button.h>
|
||||
#include <ardour/ardour.h>
|
||||
#include <ardour/session.h>
|
||||
|
||||
|
|
@ -65,7 +65,6 @@
|
|||
class AudioClock;
|
||||
class PublicEditor;
|
||||
class Keyboard;
|
||||
class MeterBridge;
|
||||
class OptionEditor;
|
||||
class Mixer_UI;
|
||||
class ConnectionEditor;
|
||||
|
|
@ -128,7 +127,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
_will_create_new_session_automatically = yn;
|
||||
}
|
||||
|
||||
void new_session(std::string path = string());
|
||||
bool new_session(std::string path = string());
|
||||
gint cmdline_new_session (string path);
|
||||
int unload_session ();
|
||||
void close_session();
|
||||
|
|
@ -156,6 +155,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
|
||||
static sigc::signal<void,bool> Blink;
|
||||
static sigc::signal<void> RapidScreenUpdate;
|
||||
static sigc::signal<void> MidRapidScreenUpdate;
|
||||
static sigc::signal<void> SuperRapidScreenUpdate;
|
||||
static sigc::signal<void,nframes_t> Clock;
|
||||
|
||||
|
|
@ -187,7 +187,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
void store_clock_modes ();
|
||||
void restore_clock_modes ();
|
||||
|
||||
void add_route ();
|
||||
void add_route (Gtk::Window* float_window);
|
||||
|
||||
void session_add_audio_track (int input_channels, int32_t output_channels, ARDOUR::TrackMode mode, uint32_t how_many) {
|
||||
session_add_audio_route (true, input_channels, output_channels, mode, how_many);
|
||||
|
|
@ -277,9 +277,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
GlobalClickBox *crossfade_time_button;
|
||||
vector<string> crossfade_time_strings;
|
||||
|
||||
GlobalClickBox *mmc_id_button;
|
||||
vector<string> mmc_id_strings;
|
||||
|
||||
Gtk::ToggleButton preroll_button;
|
||||
Gtk::ToggleButton postroll_button;
|
||||
|
||||
|
|
@ -289,7 +286,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
int setup_windows ();
|
||||
void setup_transport ();
|
||||
void setup_clock ();
|
||||
void setup_adjustables ();
|
||||
|
||||
static ARDOUR_UI *theArdourUI;
|
||||
|
||||
|
|
@ -317,9 +313,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
void start_blinking ();
|
||||
void stop_blinking ();
|
||||
|
||||
void control_methods_adjusted ();
|
||||
void mmc_device_id_adjusted ();
|
||||
|
||||
void about_signal_response(int response);
|
||||
|
||||
private:
|
||||
|
|
@ -360,18 +353,51 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
Gtk::HBox primary_clock_hbox;
|
||||
Gtk::HBox secondary_clock_hbox;
|
||||
|
||||
Gtkmm2ext::StatefulButton roll_button;
|
||||
Gtkmm2ext::StatefulButton stop_button;
|
||||
Gtkmm2ext::StatefulButton rewind_button;
|
||||
Gtkmm2ext::StatefulButton forward_button;
|
||||
Gtkmm2ext::StatefulButton goto_start_button;
|
||||
Gtkmm2ext::StatefulButton goto_end_button;
|
||||
Gtkmm2ext::StatefulButton auto_loop_button;
|
||||
Gtkmm2ext::StatefulButton play_selection_button;
|
||||
|
||||
Gtkmm2ext::StatefulButton rec_button;
|
||||
struct TransportControllable : public PBD::Controllable {
|
||||
enum ToggleType {
|
||||
Roll = 0,
|
||||
Stop,
|
||||
RecordEnable,
|
||||
GotoStart,
|
||||
GotoEnd,
|
||||
AutoLoop,
|
||||
PlaySelection,
|
||||
ShuttleControl
|
||||
|
||||
};
|
||||
|
||||
TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
|
||||
void set_value (float);
|
||||
float get_value (void) const;
|
||||
|
||||
void set_id (const std::string&);
|
||||
|
||||
ARDOUR_UI& ui;
|
||||
ToggleType type;
|
||||
};
|
||||
|
||||
TransportControllable roll_controllable;
|
||||
TransportControllable stop_controllable;
|
||||
TransportControllable goto_start_controllable;
|
||||
TransportControllable goto_end_controllable;
|
||||
TransportControllable auto_loop_controllable;
|
||||
TransportControllable play_selection_controllable;
|
||||
TransportControllable rec_controllable;
|
||||
TransportControllable shuttle_controllable;
|
||||
BindingProxy shuttle_controller_binding_proxy;
|
||||
|
||||
void set_transport_controllable_state (const XMLNode&);
|
||||
XMLNode& get_transport_controllable_state ();
|
||||
|
||||
BindableButton roll_button;
|
||||
BindableButton stop_button;
|
||||
BindableButton goto_start_button;
|
||||
BindableButton goto_end_button;
|
||||
BindableButton auto_loop_button;
|
||||
BindableButton play_selection_button;
|
||||
BindableButton rec_button;
|
||||
|
||||
Gtk::ToggleButton time_master_button;
|
||||
Gtk::ComboBoxText sync_option_combo;
|
||||
|
||||
void sync_option_changed ();
|
||||
|
|
@ -403,16 +429,19 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
gint shuttle_box_expose (GdkEventExpose*);
|
||||
gint mouse_shuttle (double x, bool force);
|
||||
void use_shuttle_fract (bool force);
|
||||
void set_shuttle_fract (double);
|
||||
|
||||
bool shuttle_grabbed;
|
||||
double shuttle_fract;
|
||||
|
||||
Gtk::ToggleButton punch_in_button;
|
||||
Gtk::ToggleButton punch_out_button;
|
||||
Gtk::ToggleButton auto_return_button;
|
||||
Gtk::ToggleButton auto_play_button;
|
||||
Gtk::ToggleButton auto_input_button;
|
||||
Gtk::ToggleButton click_button;
|
||||
Gtkmm2ext::StatefulToggleButton punch_in_button;
|
||||
Gtkmm2ext::StatefulToggleButton punch_out_button;
|
||||
Gtkmm2ext::StatefulToggleButton auto_return_button;
|
||||
Gtkmm2ext::StatefulToggleButton auto_play_button;
|
||||
Gtkmm2ext::StatefulToggleButton auto_input_button;
|
||||
Gtkmm2ext::StatefulToggleButton click_button;
|
||||
Gtkmm2ext::StatefulToggleButton time_master_button;
|
||||
|
||||
Gtk::ToggleButton auditioning_alert_button;
|
||||
Gtk::ToggleButton solo_alert_button;
|
||||
|
||||
|
|
@ -435,14 +464,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
|
||||
void transport_rec_enable_blink (bool onoff);
|
||||
|
||||
/* These change where we accept control from:
|
||||
MMC, X (local) or both.
|
||||
*/
|
||||
|
||||
void allow_mmc_only ();
|
||||
void allow_mmc_and_local ();
|
||||
void allow_local_only ();
|
||||
|
||||
Gtk::Menu* session_popup_menu;
|
||||
|
||||
struct RecentSessionModelColumns : public Gtk::TreeModel::ColumnRecord {
|
||||
|
|
@ -502,10 +523,12 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
|
||||
gint every_second ();
|
||||
gint every_point_one_seconds ();
|
||||
gint every_point_oh_five_seconds ();
|
||||
gint every_point_zero_one_seconds ();
|
||||
|
||||
sigc::connection second_connection;
|
||||
sigc::connection point_one_second_connection;
|
||||
sigc::connection point_oh_five_second_connection;
|
||||
sigc::connection point_zero_one_second_connection;
|
||||
|
||||
gint session_menu (GdkEventButton *);
|
||||
|
|
@ -589,7 +612,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
/* Keymap handling */
|
||||
|
||||
void install_actions ();
|
||||
void start_keyboard_prefix();
|
||||
|
||||
void toggle_record_enable (uint32_t);
|
||||
|
||||
|
|
@ -613,11 +635,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
struct timeval last_peak_grab;
|
||||
struct timeval last_shuttle_request;
|
||||
|
||||
bool have_disk_overrun_displayed;
|
||||
bool have_disk_underrun_displayed;
|
||||
|
||||
void disk_overrun_message_gone ();
|
||||
void disk_underrun_message_gone ();
|
||||
bool have_disk_speed_dialog_displayed;
|
||||
void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
|
||||
void disk_overrun_handler ();
|
||||
void disk_underrun_handler ();
|
||||
|
||||
|
|
@ -646,10 +665,13 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
void toggle_use_midi_control();
|
||||
void toggle_send_mtc ();
|
||||
|
||||
void toggle_use_osc ();
|
||||
|
||||
void set_input_auto_connect (ARDOUR::AutoConnectOption);
|
||||
void set_output_auto_connect (ARDOUR::AutoConnectOption);
|
||||
void set_solo_model (ARDOUR::SoloModel);
|
||||
void set_monitor_model (ARDOUR::MonitorModel);
|
||||
void set_remote_model (ARDOUR::RemoteModel);
|
||||
|
||||
void toggle_StopPluginsWithTransport();
|
||||
void toggle_DoNotRunPluginsWhileRecording();
|
||||
|
|
@ -658,12 +680,14 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
void toggle_StopTransportAtEndOfSession();
|
||||
void toggle_GainReduceFastTransport();
|
||||
void toggle_LatchedSolo();
|
||||
void toggle_ShowSoloMutes();
|
||||
void toggle_LatchedRecordEnable ();
|
||||
void toggle_RegionEquivalentsOverlap ();
|
||||
|
||||
void mtc_port_changed ();
|
||||
void map_solo_model ();
|
||||
void map_monitor_model ();
|
||||
void map_remote_model ();
|
||||
void map_file_header_format ();
|
||||
void map_file_data_format ();
|
||||
void map_input_auto_connect ();
|
||||
|
|
@ -680,6 +704,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
|
||||
bool can_save_keybindings;
|
||||
bool first_idle ();
|
||||
|
||||
void no_memory_warning ();
|
||||
void check_memory_locking ();
|
||||
};
|
||||
|
||||
#endif /* __ardour_gui_h__ */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <fcntl.h>
|
||||
|
|
@ -38,10 +37,12 @@
|
|||
#include <ardour/route.h>
|
||||
|
||||
#include "ardour_ui.h"
|
||||
#include "keyboard.h"
|
||||
#include "public_editor.h"
|
||||
#include "audio_clock.h"
|
||||
#include "actions.h"
|
||||
#include "utils.h"
|
||||
#include "color_manager.h"
|
||||
|
||||
#include "i18n.h"
|
||||
|
||||
|
|
@ -72,9 +73,10 @@ ARDOUR_UI::setup_windows ()
|
|||
|
||||
setup_clock ();
|
||||
setup_transport();
|
||||
setup_adjustables ();
|
||||
build_menu_bar ();
|
||||
|
||||
color_manager->signal_unmap().connect (bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleColorManager")));
|
||||
|
||||
top_packer.pack_start (menu_bar_base, false, false);
|
||||
top_packer.pack_start (transport_frame, false, false);
|
||||
|
||||
|
|
@ -83,46 +85,14 @@ ARDOUR_UI::setup_windows ()
|
|||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::setup_adjustables ()
|
||||
{
|
||||
adjuster_table.set_homogeneous (true);
|
||||
|
||||
online_control_strings.push_back (_("MMC + Local"));
|
||||
online_control_strings.push_back (_("MMC"));
|
||||
online_control_strings.push_back (_("Local"));
|
||||
|
||||
online_control_button = new GlobalClickBox ("CONTROL",
|
||||
online_control_strings);
|
||||
|
||||
online_control_button->adjustment.signal_value_changed().connect(mem_fun(*this,&ARDOUR_UI::control_methods_adjusted));
|
||||
|
||||
mmc_id_strings.push_back ("1");
|
||||
mmc_id_strings.push_back ("2");
|
||||
mmc_id_strings.push_back ("3");
|
||||
mmc_id_strings.push_back ("4");
|
||||
mmc_id_strings.push_back ("5");
|
||||
mmc_id_strings.push_back ("6");
|
||||
mmc_id_strings.push_back ("7");
|
||||
mmc_id_strings.push_back ("8");
|
||||
mmc_id_strings.push_back ("9");
|
||||
|
||||
mmc_id_button = new GlobalClickBox (_("MMC ID"), mmc_id_strings);
|
||||
|
||||
mmc_id_button->adjustment.signal_value_changed().connect (mem_fun(*this,&ARDOUR_UI::mmc_device_id_adjusted));
|
||||
|
||||
adjuster_table.attach (*online_control_button, 0, 2, 1, 2, FILL|EXPAND, FILL, 5, 5);
|
||||
adjuster_table.attach (*mmc_id_button, 2, 3, 1, 2, FILL, FILL, 5, 5);
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::transport_stopped ()
|
||||
{
|
||||
stop_button.set_active (true);
|
||||
stop_button.set_visual_state (1);
|
||||
|
||||
roll_button.set_active (false);
|
||||
play_selection_button.set_active (false);
|
||||
auto_loop_button.set_active (false);
|
||||
roll_button.set_visual_state (0);
|
||||
play_selection_button.set_visual_state (0);
|
||||
auto_loop_button.set_visual_state (0);
|
||||
|
||||
shuttle_fract = 0;
|
||||
shuttle_box.queue_draw ();
|
||||
|
|
@ -133,22 +103,22 @@ ARDOUR_UI::transport_stopped ()
|
|||
void
|
||||
ARDOUR_UI::transport_rolling ()
|
||||
{
|
||||
stop_button.set_active (false);
|
||||
stop_button.set_visual_state (0);
|
||||
if (session->get_play_range()) {
|
||||
play_selection_button.set_active (true);
|
||||
roll_button.set_active (false);
|
||||
auto_loop_button.set_active (false);
|
||||
play_selection_button.set_visual_state (1);
|
||||
roll_button.set_visual_state (0);
|
||||
auto_loop_button.set_visual_state (0);
|
||||
|
||||
} else if (session->get_play_loop ()) {
|
||||
auto_loop_button.set_active (true);
|
||||
play_selection_button.set_active (false);
|
||||
roll_button.set_active (false);
|
||||
auto_loop_button.set_visual_state (1);
|
||||
play_selection_button.set_visual_state (0);
|
||||
roll_button.set_visual_state (0);
|
||||
|
||||
} else {
|
||||
|
||||
roll_button.set_active (true);
|
||||
play_selection_button.set_active (false);
|
||||
auto_loop_button.set_active (false);
|
||||
roll_button.set_visual_state (1);
|
||||
play_selection_button.set_visual_state (0);
|
||||
auto_loop_button.set_visual_state (0);
|
||||
}
|
||||
|
||||
/* reset shuttle controller */
|
||||
|
|
@ -160,19 +130,19 @@ ARDOUR_UI::transport_rolling ()
|
|||
void
|
||||
ARDOUR_UI::transport_rewinding ()
|
||||
{
|
||||
stop_button.set_active(false);
|
||||
roll_button.set_active (true);
|
||||
play_selection_button.set_active (false);
|
||||
auto_loop_button.set_active (false);
|
||||
stop_button.set_visual_state (0);
|
||||
roll_button.set_visual_state (1);
|
||||
play_selection_button.set_visual_state (0);
|
||||
auto_loop_button.set_visual_state (0);
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::transport_forwarding ()
|
||||
{
|
||||
stop_button.set_active (false);
|
||||
roll_button.set_active (true);
|
||||
play_selection_button.set_active (false);
|
||||
auto_loop_button.set_active (false);
|
||||
stop_button.set_visual_state (0);
|
||||
roll_button.set_visual_state (1);
|
||||
play_selection_button.set_visual_state (0);
|
||||
auto_loop_button.set_visual_state (0);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -207,6 +177,7 @@ ARDOUR_UI::setup_transport ()
|
|||
play_selection_button.set_name ("TransportButton");
|
||||
rec_button.set_name ("TransportRecButton");
|
||||
auto_loop_button.set_name ("TransportButton");
|
||||
|
||||
auto_return_button.set_name ("TransportButton");
|
||||
auto_play_button.set_name ("TransportButton");
|
||||
auto_input_button.set_name ("TransportButton");
|
||||
|
|
@ -215,30 +186,6 @@ ARDOUR_UI::setup_transport ()
|
|||
click_button.set_name ("TransportButton");
|
||||
time_master_button.set_name ("TransportButton");
|
||||
|
||||
vector<Gdk::Color> colors;
|
||||
Gdk::Color c;
|
||||
|
||||
/* record button has 3 color states, so we set 2 extra here */
|
||||
set_color(c, rgba_from_style ("TransportRecButton", 0xff, 0, 0, 0, "bg", Gtk::STATE_PRELIGHT, false ));
|
||||
colors.push_back (c);
|
||||
|
||||
set_color(c, rgba_from_style ("TransportRecButton", 0xff, 0, 0, 0, "bg", Gtk::STATE_ACTIVE, false ));
|
||||
colors.push_back (c);
|
||||
|
||||
rec_button.set_colors (colors);
|
||||
colors.clear ();
|
||||
|
||||
/* other buttons get 2 color states, so add one here */
|
||||
set_color(c, rgba_from_style ("TransportButton", 0x7f, 0xff, 0x7f, 0, "bg", Gtk::STATE_ACTIVE, false ));
|
||||
colors.push_back (c);
|
||||
|
||||
stop_button.set_colors (colors);
|
||||
roll_button.set_colors (colors);
|
||||
auto_loop_button.set_colors (colors);
|
||||
play_selection_button.set_colors (colors);
|
||||
goto_start_button.set_colors (colors);
|
||||
goto_end_button.set_colors (colors);
|
||||
|
||||
stop_button.set_size_request(29, -1);
|
||||
roll_button.set_size_request(29, -1);
|
||||
auto_loop_button.set_size_request(29, -1);
|
||||
|
|
@ -249,7 +196,7 @@ ARDOUR_UI::setup_transport ()
|
|||
|
||||
Widget* w;
|
||||
|
||||
stop_button.set_active (true);
|
||||
stop_button.set_visual_state (1);
|
||||
|
||||
w = manage (new Image (get_icon (X_("transport_start"))));
|
||||
w->show();
|
||||
|
|
@ -298,6 +245,7 @@ ARDOUR_UI::setup_transport ()
|
|||
ARDOUR_UI::instance()->tooltips().set_tip (goto_start_button, _("Go to start of session"));
|
||||
ARDOUR_UI::instance()->tooltips().set_tip (goto_end_button, _("Go to end of session"));
|
||||
ARDOUR_UI::instance()->tooltips().set_tip (auto_loop_button, _("Play loop range"));
|
||||
|
||||
ARDOUR_UI::instance()->tooltips().set_tip (auto_return_button, _("Return to last playback start when stopped"));
|
||||
ARDOUR_UI::instance()->tooltips().set_tip (auto_play_button, _("Start playback after any locate"));
|
||||
ARDOUR_UI::instance()->tooltips().set_tip (auto_input_button, _("Be sensible about input monitoring"));
|
||||
|
|
@ -338,12 +286,7 @@ ARDOUR_UI::setup_transport ()
|
|||
ActionManager::get_action ("Transport", "TogglePunchIn")->connect_proxy (punch_in_button);
|
||||
ActionManager::get_action ("Transport", "TogglePunchOut")->connect_proxy (punch_out_button);
|
||||
|
||||
preroll_button.unset_flags (CAN_FOCUS);
|
||||
preroll_button.set_events (preroll_button.get_events() & ~(Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK));
|
||||
preroll_button.set_name ("TransportButton");
|
||||
|
||||
postroll_button.unset_flags (CAN_FOCUS);
|
||||
postroll_button.set_events (postroll_button.get_events() & ~(Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK));
|
||||
postroll_button.set_name ("TransportButton");
|
||||
|
||||
preroll_clock.set_mode (AudioClock::MinSec);
|
||||
|
|
@ -622,6 +565,10 @@ ARDOUR_UI::shuttle_box_button_press (GdkEventButton* ev)
|
|||
return true;
|
||||
}
|
||||
|
||||
if (shuttle_controller_binding_proxy.button_press_handler (ev)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (Keyboard::is_context_menu_event (ev)) {
|
||||
show_shuttle_context_menu ();
|
||||
return true;
|
||||
|
|
@ -659,8 +606,8 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev)
|
|||
if (Config->get_auto_play() || roll_button.get_state()) {
|
||||
shuttle_fract = SHUTTLE_FRACT_SPEED1;
|
||||
session->request_transport_speed (1.0);
|
||||
stop_button.set_active (false);
|
||||
roll_button.set_active (true);
|
||||
stop_button.set_visual_state (0);
|
||||
roll_button.set_visual_state (1);
|
||||
} else {
|
||||
shuttle_fract = 0;
|
||||
session->request_transport_speed (0.0);
|
||||
|
|
@ -673,8 +620,8 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev)
|
|||
if (session->transport_rolling()) {
|
||||
shuttle_fract = SHUTTLE_FRACT_SPEED1;
|
||||
session->request_transport_speed (1.0);
|
||||
stop_button.set_active (false);
|
||||
roll_button.set_active (true);
|
||||
stop_button.set_visual_state (0);
|
||||
roll_button.set_visual_state (1);
|
||||
} else {
|
||||
shuttle_fract = 0;
|
||||
}
|
||||
|
|
@ -749,6 +696,13 @@ ARDOUR_UI::mouse_shuttle (double x, bool force)
|
|||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::set_shuttle_fract (double f)
|
||||
{
|
||||
shuttle_fract = f;
|
||||
use_shuttle_fract (false);
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::use_shuttle_fract (bool force)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
/* this file exists solely to break compilation dependencies that
|
||||
|
|
|
|||
|
|
@ -62,6 +62,20 @@ ARDOUR_UI::connect_to_session (Session *s)
|
|||
ActionManager::set_sensitive (ActionManager::range_sensitive_actions, false);
|
||||
}
|
||||
|
||||
if (!session->control_out()) {
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action (X_("options"), X_("SoloViaBus"));
|
||||
if (act) {
|
||||
act->set_sensitive (false);
|
||||
}
|
||||
}
|
||||
|
||||
/* allow wastebasket flush again */
|
||||
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Main"), X_("FlushWastebasket"));
|
||||
if (act) {
|
||||
act->set_sensitive (true);
|
||||
}
|
||||
|
||||
/* there are never any selections on startup */
|
||||
|
||||
ActionManager::set_sensitive (ActionManager::region_selection_sensitive_actions, false);
|
||||
|
|
@ -139,6 +153,7 @@ ARDOUR_UI::connect_to_session (Session *s)
|
|||
|
||||
second_connection = Glib::signal_timeout().connect (mem_fun(*this, &ARDOUR_UI::every_second), 1000);
|
||||
point_one_second_connection = Glib::signal_timeout().connect (mem_fun(*this, &ARDOUR_UI::every_point_one_seconds), 100);
|
||||
// point_oh_five_second_connection = Glib::signal_timeout().connect (mem_fun(*this, &ARDOUR_UI::every_point_oh_five_seconds), 50);
|
||||
point_zero_one_second_connection = Glib::signal_timeout().connect (mem_fun(*this, &ARDOUR_UI::every_point_zero_one_seconds), 40);
|
||||
}
|
||||
|
||||
|
|
@ -158,6 +173,7 @@ ARDOUR_UI::unload_session ()
|
|||
editor->hide ();
|
||||
second_connection.disconnect ();
|
||||
point_one_second_connection.disconnect ();
|
||||
point_oh_five_second_connection.disconnect ();
|
||||
point_zero_one_second_connection.disconnect();
|
||||
|
||||
ActionManager::set_sensitive (ActionManager::session_sensitive_actions, false);
|
||||
|
|
@ -322,7 +338,7 @@ int
|
|||
ARDOUR_UI::create_route_params ()
|
||||
{
|
||||
if (route_params == 0) {
|
||||
route_params = new RouteParams_UI (*engine);
|
||||
route_params = new RouteParams_UI ();
|
||||
route_params->set_session (session);
|
||||
route_params->signal_unmap().connect (sigc::bind(sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleInspector")));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
/* This file contains any ARDOUR_UI methods that require knowledge of
|
||||
|
|
@ -35,6 +34,7 @@
|
|||
#include "actions.h"
|
||||
|
||||
#include <ardour/session.h>
|
||||
#include <ardour/audioengine.h>
|
||||
#include <ardour/control_protocol_manager.h>
|
||||
|
||||
#include <control_protocol/control_protocol.h>
|
||||
|
|
@ -54,7 +54,7 @@ ARDOUR_UI::create_editor ()
|
|||
|
||||
{
|
||||
try {
|
||||
editor = new Editor (*engine);
|
||||
editor = new Editor ();
|
||||
}
|
||||
|
||||
catch (failed_constructor& err) {
|
||||
|
|
@ -92,14 +92,15 @@ ARDOUR_UI::install_actions ()
|
|||
|
||||
/* the real actions */
|
||||
|
||||
act = ActionManager::register_action (main_actions, X_("New"), _("New"), bind (mem_fun(*this, &ARDOUR_UI::new_session), string ()));
|
||||
act = ActionManager::register_action (main_actions, X_("New"), _("New"), hide_return (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));
|
||||
act = ActionManager::register_action (main_actions, X_("Close"), _("Close"), mem_fun(*this, &ARDOUR_UI::close_session));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
|
||||
act = ActionManager::register_action (main_actions, X_("AddTrackBus"), _("Add Track/Bus"), mem_fun(*this, &ARDOUR_UI::add_route));
|
||||
act = ActionManager::register_action (main_actions, X_("AddTrackBus"), _("Add Track/Bus"),
|
||||
bind (mem_fun(*this, &ARDOUR_UI::add_route), (Gtk::Window*) 0));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
|
||||
|
||||
|
|
@ -180,7 +181,6 @@ ARDOUR_UI::install_actions ()
|
|||
|
||||
common_actions = ActionGroup::create (X_("Common"));
|
||||
ActionManager::register_action (main_actions, X_("Windows"), _("Windows"));
|
||||
ActionManager::register_action (common_actions, X_("Start-Prefix"), _("start prefix"), mem_fun(*this, &ARDOUR_UI::start_keyboard_prefix));
|
||||
ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (mem_fun(*this, &ARDOUR_UI::finish)));
|
||||
|
||||
/* windows visibility actions */
|
||||
|
|
@ -397,6 +397,11 @@ ARDOUR_UI::install_actions ()
|
|||
act = ActionManager::register_toggle_action (option_actions, X_("UseMIDIcontrol"), _("Use MIDI control"), mem_fun (*this, &ARDOUR_UI::toggle_use_midi_control));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
|
||||
act = ActionManager::register_toggle_action (option_actions, X_("UseOSC"), _("Use OSC"), mem_fun (*this, &ARDOUR_UI::toggle_use_osc));
|
||||
#ifndef HAVE_LIBLO
|
||||
act->set_sensitive (false);
|
||||
#endif
|
||||
|
||||
ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
|
||||
ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
|
||||
ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
|
||||
|
|
@ -410,6 +415,8 @@ ARDOUR_UI::install_actions ()
|
|||
|
||||
act = ActionManager::register_toggle_action (option_actions, X_("LatchedSolo"), _("Latched solo"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedSolo));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
act = ActionManager::register_toggle_action (option_actions, X_("ShowSoloMutes"), _("Show solo muting"), mem_fun (*this, &ARDOUR_UI::toggle_ShowSoloMutes));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
|
||||
/* !!! REMEMBER THAT RADIO ACTIONS HAVE TO BE HANDLED WITH MORE FINESSE THAN SIMPLE TOGGLES !!! */
|
||||
|
||||
|
|
@ -472,6 +479,15 @@ ARDOUR_UI::install_actions ()
|
|||
act = ActionManager::register_radio_action (option_actions, output_auto_connect_group, X_("OutputAutoConnectManual"), _("Manually connect outputs"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_output_auto_connect), (AutoConnectOption) 0)));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
|
||||
RadioAction::Group remote_group;
|
||||
|
||||
act = ActionManager::register_radio_action (option_actions, remote_group, X_("RemoteUserDefined"), _("Remote ID assigned by User"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_remote_model), UserOrdered)));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
act = ActionManager::register_radio_action (option_actions, remote_group, X_("RemoteMixerDefined"), _("Remote ID follows order of Mixer"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_remote_model), MixerOrdered)));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
act = ActionManager::register_radio_action (option_actions, remote_group, X_("RemoteEditorDefined"), _("Remote ID follows order of Editor"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_remote_model), EditorOrdered)));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
|
||||
ActionManager::add_action_group (shuttle_actions);
|
||||
ActionManager::add_action_group (option_actions);
|
||||
ActionManager::add_action_group (jack_actions);
|
||||
|
|
@ -526,6 +542,57 @@ ARDOUR_UI::toggle_control_protocol_feedback (ControlProtocolInfo* cpi, const cha
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::set_jack_buffer_size (nframes_t nframes)
|
||||
{
|
||||
Glib::RefPtr<Action> action;
|
||||
char* action_name = 0;
|
||||
|
||||
switch (nframes) {
|
||||
case 32:
|
||||
action_name = X_("JACKLatency32");
|
||||
break;
|
||||
case 64:
|
||||
action_name = X_("JACKLatency64");
|
||||
break;
|
||||
case 128:
|
||||
action_name = X_("JACKLatency128");
|
||||
break;
|
||||
case 512:
|
||||
action_name = X_("JACKLatency512");
|
||||
break;
|
||||
case 1024:
|
||||
action_name = X_("JACKLatency1024");
|
||||
break;
|
||||
case 2048:
|
||||
action_name = X_("JACKLatency2048");
|
||||
break;
|
||||
case 4096:
|
||||
action_name = X_("JACKLatency4096");
|
||||
break;
|
||||
case 8192:
|
||||
action_name = X_("JACKLatency8192");
|
||||
break;
|
||||
default:
|
||||
/* XXX can we do anything useful ? */
|
||||
break;
|
||||
}
|
||||
|
||||
if (action_name) {
|
||||
|
||||
action = ActionManager::get_action (X_("JACK"), action_name);
|
||||
|
||||
if (action) {
|
||||
Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic (action);
|
||||
|
||||
if (ract && ract->get_active()) {
|
||||
engine->request_buffer_size (nframes);
|
||||
update_sample_rate (0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::build_control_surface_menu ()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
/* This file contains any ARDOUR_UI methods that require knowledge of
|
||||
|
|
@ -35,7 +34,7 @@ ARDOUR_UI::create_mixer ()
|
|||
|
||||
{
|
||||
try {
|
||||
mixer = new Mixer_UI (*engine);
|
||||
mixer = new Mixer_UI ();
|
||||
}
|
||||
|
||||
catch (failed_constructor& err) {
|
||||
|
|
@ -44,3 +43,4 @@ ARDOUR_UI::create_mixer ()
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <pbd/convert.h>
|
||||
|
|
@ -25,6 +24,7 @@
|
|||
|
||||
#include <ardour/configuration.h>
|
||||
#include <ardour/session.h>
|
||||
#include <ardour/osc.h>
|
||||
#include <ardour/audioengine.h>
|
||||
|
||||
#include "ardour_ui.h"
|
||||
|
|
@ -63,6 +63,12 @@ ARDOUR_UI::toggle_use_mmc ()
|
|||
ActionManager::toggle_config_state ("options", "UseMMC", &Configuration::set_mmc_control, &Configuration::get_mmc_control);
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::toggle_use_osc ()
|
||||
{
|
||||
ActionManager::toggle_config_state ("options", "UseOSC", &Configuration::set_use_osc, &Configuration::get_use_osc);
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::toggle_use_midi_control ()
|
||||
{
|
||||
|
|
@ -78,7 +84,7 @@ ARDOUR_UI::toggle_send_midi_feedback ()
|
|||
void
|
||||
ARDOUR_UI::set_native_file_header_format (HeaderFormat hf)
|
||||
{
|
||||
const char *action;
|
||||
const char *action = 0;
|
||||
|
||||
switch (hf) {
|
||||
case BWF:
|
||||
|
|
@ -120,7 +126,7 @@ ARDOUR_UI::set_native_file_header_format (HeaderFormat hf)
|
|||
void
|
||||
ARDOUR_UI::set_native_file_data_format (SampleFormat sf)
|
||||
{
|
||||
const char* action;
|
||||
const char* action = 0;
|
||||
|
||||
switch (sf) {
|
||||
case FormatFloat:
|
||||
|
|
@ -225,6 +231,39 @@ ARDOUR_UI::set_solo_model (SoloModel model)
|
|||
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::set_remote_model (RemoteModel model)
|
||||
{
|
||||
const char* action = 0;
|
||||
|
||||
switch (model) {
|
||||
case UserOrdered:
|
||||
action = X_("RemoteUserDefined");
|
||||
break;
|
||||
case MixerOrdered:
|
||||
action = X_("RemoteMixerDefined");
|
||||
break;
|
||||
case EditorOrdered:
|
||||
action = X_("RemoteEditorDefined");
|
||||
break;
|
||||
|
||||
default:
|
||||
fatal << string_compose (_("programming error: unknown remote model in ARDOUR_UI::set_remote_model: %1"), model) << endmsg;
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action ("options", action);
|
||||
|
||||
if (act) {
|
||||
Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
|
||||
|
||||
if (ract && ract->get_active() && Config->get_remote_model() != model) {
|
||||
Config->set_remote_model (model);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::set_monitor_model (MonitorModel model)
|
||||
{
|
||||
|
|
@ -389,6 +428,12 @@ ARDOUR_UI::toggle_LatchedSolo()
|
|||
ActionManager::toggle_config_state ("options", "LatchedSolo", &Configuration::set_solo_latched, &Configuration::get_solo_latched);
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::toggle_ShowSoloMutes()
|
||||
{
|
||||
ActionManager::toggle_config_state ("options", "ShowSoloMutes", &Configuration::set_show_solo_mutes, &Configuration::get_show_solo_mutes);
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::mtc_port_changed ()
|
||||
{
|
||||
|
|
@ -471,6 +516,33 @@ ARDOUR_UI::map_monitor_model ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::map_remote_model ()
|
||||
{
|
||||
const char* on = 0;
|
||||
|
||||
switch (Config->get_remote_model()) {
|
||||
case UserOrdered:
|
||||
on = X_("RemoteUserDefined");
|
||||
break;
|
||||
case MixerOrdered:
|
||||
on = X_("RemoteMixerDefined");
|
||||
break;
|
||||
case EditorOrdered:
|
||||
on = X_("RemoteEditorDefined");
|
||||
break;
|
||||
}
|
||||
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action ("options", on);
|
||||
if (act) {
|
||||
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
|
||||
|
||||
if (tact && !tact->get_active()) {
|
||||
tact->set_active (true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::map_file_header_format ()
|
||||
{
|
||||
|
|
@ -757,6 +829,19 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
|
|||
if (PARAM_IS ("slave-source")) {
|
||||
|
||||
sync_option_combo.set_active_text (slave_source_to_string (Config->get_slave_source()));
|
||||
|
||||
switch (Config->get_slave_source()) {
|
||||
case None:
|
||||
ActionManager::get_action ("Transport", "ToggleAutoPlay")->set_sensitive (true);
|
||||
ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (true);
|
||||
break;
|
||||
|
||||
default:
|
||||
/* XXX need to make auto-play is off as well as insensitive */
|
||||
ActionManager::get_action ("Transport", "ToggleAutoPlay")->set_sensitive (false);
|
||||
ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (false);
|
||||
break;
|
||||
}
|
||||
|
||||
} else if (PARAM_IS ("send-mtc")) {
|
||||
|
||||
|
|
@ -766,6 +851,18 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
|
|||
|
||||
ActionManager::map_some_state ("options", "SendMMC", &Configuration::get_send_mmc);
|
||||
|
||||
} else if (PARAM_IS ("use-osc")) {
|
||||
|
||||
#ifdef HAVE_LIBLO
|
||||
if (Config->get_use_osc()) {
|
||||
osc->start ();
|
||||
} else {
|
||||
osc->stop ();
|
||||
}
|
||||
#endif
|
||||
|
||||
ActionManager::map_some_state ("options", "UseOSC", &Configuration::get_use_osc);
|
||||
|
||||
} else if (PARAM_IS ("mmc-control")) {
|
||||
ActionManager::map_some_state ("options", "UseMMC", &Configuration::get_mmc_control);
|
||||
} else if (PARAM_IS ("midi-feedback")) {
|
||||
|
|
@ -778,6 +875,8 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
|
|||
ActionManager::map_some_state ("options", "LatchedRecordEnable", &Configuration::get_latched_record_enable);
|
||||
} else if (PARAM_IS ("solo-latched")) {
|
||||
ActionManager::map_some_state ("options", "LatchedSolo", &Configuration::get_solo_latched);
|
||||
} else if (PARAM_IS ("show-solo-mutes")) {
|
||||
ActionManager::map_some_state ("options", "ShowSoloMutes", &Configuration::get_show_solo_mutes);
|
||||
} else if (PARAM_IS ("solo-model")) {
|
||||
map_solo_model ();
|
||||
} else if (PARAM_IS ("auto-play")) {
|
||||
|
|
@ -806,6 +905,8 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
|
|||
ActionManager::map_some_state ("options", "StopTransportAtEndOfSession", &Configuration::get_stop_at_session_end);
|
||||
} else if (PARAM_IS ("monitoring-model")) {
|
||||
map_monitor_model ();
|
||||
} else if (PARAM_IS ("remote-model")) {
|
||||
map_remote_model ();
|
||||
} else if (PARAM_IS ("use-video-sync")) {
|
||||
ActionManager::map_some_state ("Transport", "ToggleVideoSync", &Configuration::get_use_video_sync);
|
||||
} else if (PARAM_IS ("quieten-at-speed")) {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdio> // for sprintf
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __audio_clock_h__
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <pbd/memento_command.h>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __gtk_ardour_audio_region_edit_h__
|
||||
|
|
|
|||
|
|
@ -88,14 +88,37 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView
|
|||
{
|
||||
}
|
||||
|
||||
|
||||
AudioRegionView::AudioRegionView (const AudioRegionView& other)
|
||||
: RegionView (other)
|
||||
, zero_line(0)
|
||||
, fade_in_shape(0)
|
||||
, fade_out_shape(0)
|
||||
, fade_in_handle(0)
|
||||
, fade_out_handle(0)
|
||||
, gain_line(0)
|
||||
, _amplitude_above_axis(1.0)
|
||||
, _flags(0)
|
||||
, fade_color(0)
|
||||
|
||||
{
|
||||
Gdk::Color c;
|
||||
int r,g,b,a;
|
||||
|
||||
UINT_TO_RGBA (other.fill_color, &r, &g, &b, &a);
|
||||
c.set_rgb_p (r/255.0, g/255.0, b/255.0);
|
||||
|
||||
init (c, false);
|
||||
}
|
||||
|
||||
void
|
||||
AudioRegionView::init (Gdk::Color& basic_color, bool wfd)
|
||||
{
|
||||
// FIXME: Some redundancy here with RegionView::init. Need to figure out
|
||||
// where order is important and where it isn't...
|
||||
|
||||
RegionView::init(basic_color, wfd);
|
||||
|
||||
RegionView::init(basic_color, false);
|
||||
|
||||
XMLNode *node;
|
||||
|
||||
_amplitude_above_axis = 1.0;
|
||||
|
|
@ -629,13 +652,16 @@ AudioRegionView::set_samples_per_unit (gdouble spu)
|
|||
{
|
||||
RegionView::set_samples_per_unit (spu);
|
||||
|
||||
for (uint32_t n=0; n < waves.size(); ++n) {
|
||||
waves[n]->property_samples_per_unit() = spu;
|
||||
if (_flags & WaveformVisible) {
|
||||
for (uint32_t n=0; n < waves.size(); ++n) {
|
||||
waves[n]->property_samples_per_unit() = spu;
|
||||
}
|
||||
}
|
||||
|
||||
if (gain_line) {
|
||||
gain_line->reset ();
|
||||
}
|
||||
|
||||
reset_fade_shapes ();
|
||||
}
|
||||
|
||||
|
|
@ -698,6 +724,10 @@ AudioRegionView::set_waveform_visible (bool yn)
|
|||
if (((_flags & WaveformVisible) != yn)) {
|
||||
if (yn) {
|
||||
for (uint32_t n=0; n < waves.size(); ++n) {
|
||||
/* make sure the zoom level is correct, since we don't update
|
||||
this when waveforms are hidden.
|
||||
*/
|
||||
waves[n]->property_samples_per_unit() = samples_per_unit;
|
||||
waves[n]->show();
|
||||
}
|
||||
_flags |= WaveformVisible;
|
||||
|
|
|
|||
|
|
@ -55,6 +55,8 @@ class AudioRegionView : public RegionView
|
|||
double initial_samples_per_unit,
|
||||
Gdk::Color& basic_color);
|
||||
|
||||
AudioRegionView (const AudioRegionView& other);
|
||||
|
||||
~AudioRegionView ();
|
||||
|
||||
virtual void init (Gdk::Color& base_color, bool wait_for_data = false);
|
||||
|
|
@ -159,10 +161,10 @@ class AudioRegionView : public RegionView
|
|||
void compute_colors (Gdk::Color&);
|
||||
void reset_width_dependent_items (double pixel_width);
|
||||
void set_waveview_data_src();
|
||||
|
||||
vector<GnomeCanvasWaveViewCache*> wave_caches;
|
||||
|
||||
void color_handler (ColorID, uint32_t);
|
||||
|
||||
vector<GnomeCanvasWaveViewCache*> wave_caches;
|
||||
};
|
||||
|
||||
#endif /* __gtk_ardour_audio_region_view_h__ */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
@ -116,21 +115,13 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
|
|||
|
||||
_route->panner().Changed.connect (mem_fun(*this, &AudioTimeAxisView::update_pans));
|
||||
|
||||
if (is_track()) {
|
||||
update_control_names ();
|
||||
|
||||
controls_ebox.set_name ("AudioTrackControlsBaseUnselected");
|
||||
controls_base_selected_name = "AudioTrackControlsBaseSelected";
|
||||
controls_base_unselected_name = "AudioTrackControlsBaseUnselected";
|
||||
if (is_audio_track()) {
|
||||
|
||||
/* ask for notifications of any new RegionViews */
|
||||
_view->RegionViewAdded.connect (mem_fun(*this, &AudioTimeAxisView::region_view_added));
|
||||
_view->attach ();
|
||||
|
||||
} else { /* bus */
|
||||
|
||||
controls_ebox.set_name ("AudioBusControlsBaseUnselected");
|
||||
controls_base_selected_name = "AudioBusControlsBaseSelected";
|
||||
controls_base_unselected_name = "AudioBusControlsBaseUnselected";
|
||||
}
|
||||
|
||||
post_construct ();
|
||||
|
|
@ -630,7 +621,19 @@ void
|
|||
AudioTimeAxisView::route_active_changed ()
|
||||
{
|
||||
RouteTimeAxisView::route_active_changed ();
|
||||
update_control_names ();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set up the names of the controls so that they are coloured
|
||||
* correctly depending on whether this route is inactive or
|
||||
* selected.
|
||||
*/
|
||||
|
||||
void
|
||||
AudioTimeAxisView::update_control_names ()
|
||||
{
|
||||
if (is_audio_track()) {
|
||||
if (_route->active()) {
|
||||
controls_ebox.set_name ("AudioTrackControlsBaseUnselected");
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __ardour_audio_time_axis_h__
|
||||
|
|
@ -115,6 +114,7 @@ class AudioTimeAxisView : public RouteTimeAxisView
|
|||
void pan_hidden ();
|
||||
|
||||
void update_pans ();
|
||||
void update_control_names ();
|
||||
|
||||
AutomationTimeAxisView* gain_track;
|
||||
AutomationTimeAxisView* pan_track;
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <sigc++/signal.h>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cmath>
|
||||
|
|
@ -25,6 +24,7 @@
|
|||
|
||||
#include <pbd/stl_delete.h>
|
||||
#include <pbd/memento_command.h>
|
||||
#include <pbd/stacktrace.h>
|
||||
|
||||
#include <ardour/automation_event.h>
|
||||
#include <ardour/curve.h>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __ardour_automation_line_h__
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <sigc++/signal.h>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __ardour_gtk_axis_view_h__
|
||||
|
|
|
|||
|
|
@ -16,7 +16,15 @@
|
|||
|
||||
#include <libgnomecanvas/libgnomecanvas.h>
|
||||
#include <gtk/gtkenums.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include <libart_lgpl/art_misc.h>
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include <libart_lgpl/art_pixbuf.h>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -257,19 +257,20 @@ gnome_canvas_simplerect_bounds (GnomeCanvasItem *item, double *x1, double *y1, d
|
|||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gnome_canvas_simplerect_reset_bounds (GnomeCanvasItem *item)
|
||||
{
|
||||
GnomeCanvasSimpleRect* simplerect;
|
||||
double x1, x2, y1, y2;
|
||||
double old_x1, old_x2, old_y1, old_y2;
|
||||
double a, b, c, d;
|
||||
|
||||
ArtDRect unionrect, old, new;
|
||||
|
||||
old_x1 = item->x1;
|
||||
old_y1 = item->y1;
|
||||
old_x2 = item->x2;
|
||||
old_y2 = item->y2;
|
||||
|
||||
|
||||
gnome_canvas_simplerect_bounds (item, &x1, &y1, &x2, &y2);
|
||||
gnome_canvas_item_i2w (item, &x1, &y1);
|
||||
gnome_canvas_item_i2w (item, &x2, &y2);
|
||||
|
|
@ -287,24 +288,74 @@ gnome_canvas_simplerect_reset_bounds (GnomeCanvasItem *item)
|
|||
gnome_canvas_w2c (GNOME_CANVAS(item->canvas), x2, y2, &simplerect->bbox_lrx, &simplerect->bbox_lry);
|
||||
|
||||
/* now queue redraws for changed areas */
|
||||
|
||||
a = MIN(item->x1, old_x1);
|
||||
b = MAX(item->x1, old_x1);
|
||||
|
||||
a = MIN(a, item->x2);
|
||||
a = MIN(a, old_x2);
|
||||
b = MAX(b, item->x2);
|
||||
b = MAX(b, old_x2);
|
||||
if (item->x1 == old_x1 && item->x2 == old_x2) {
|
||||
|
||||
c = MIN(item->y1, old_y1);
|
||||
d = MAX(item->y1, old_y1);
|
||||
/* no change in x-axis position */
|
||||
|
||||
c = MIN(c,item->y2);
|
||||
c = MIN(c, old_y2);
|
||||
d = MAX(d,item->y2);
|
||||
d = MAX(d, old_y2);
|
||||
if (item->y1 == old_y1) {
|
||||
/* top didn't change, so just draw bottom */
|
||||
|
||||
gnome_canvas_request_redraw (item->canvas, a, c, b + 0.5, d + 0.5);
|
||||
double start_y = MIN (item->y2, old_y2);
|
||||
double end_y = MAX (item->y2, old_y2);
|
||||
|
||||
gnome_canvas_request_redraw (item->canvas, item->x1, start_y - 0.5, item->x2 + 0.5, end_y + 0.5);
|
||||
return;
|
||||
|
||||
} else if (item->y2 == old_y2) {
|
||||
|
||||
/* bottom didn't change, just draw top */
|
||||
|
||||
double start_y = MIN (item->y1, old_y1);
|
||||
double end_y = MAX (item->y1, old_y1);
|
||||
|
||||
gnome_canvas_request_redraw (item->canvas, item->x1, start_y - 0.5, item->x2 + 0.5, end_y + 0.5);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
} else if (item->y1 == old_y1 && item->y2 == old_y2) {
|
||||
|
||||
/* no change in y-axis position */
|
||||
|
||||
if (item->x1 == old_x1) {
|
||||
/* start didn't change, so just draw at the end */
|
||||
|
||||
double start_x = MIN (item->x2, old_x2);
|
||||
double end_x = MAX (item->x2, old_x2);
|
||||
|
||||
gnome_canvas_request_redraw (item->canvas, start_x - 0.5, item->y1, end_x + 0.5, item->y2 + 0.5);
|
||||
return;
|
||||
|
||||
} else if (item->x2 == old_x2) {
|
||||
|
||||
/* end didn't change, so just draw at the start */
|
||||
|
||||
double start_x = MIN (item->x1, old_x1);
|
||||
double end_x = MAX (item->x1, old_x1);
|
||||
|
||||
gnome_canvas_request_redraw (item->canvas, start_x - 0.5, item->y1, end_x + 0.5, item->y2 + 0.5);
|
||||
return;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
new.x0 = x1;
|
||||
new.y0 = y1;
|
||||
new.x1 = x2;
|
||||
new.y1 = y2;
|
||||
|
||||
old.x0 = old_x1;
|
||||
old.y0 = old_y1;
|
||||
old.x1 = old_x2;
|
||||
old.y1 = old_y2;
|
||||
|
||||
art_drect_union (&unionrect, &old, &new);
|
||||
gnome_canvas_request_redraw (item->canvas,
|
||||
unionrect.x0,
|
||||
unionrect.y0,
|
||||
unionrect.x1 + 0.5,
|
||||
unionrect.y1 + 0.5);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -509,7 +560,7 @@ gnome_canvas_simplerect_render (GnomeCanvasItem *item,
|
|||
if (parent_class->render) {
|
||||
(*parent_class->render) (item, buf);
|
||||
}
|
||||
|
||||
|
||||
if (buf->is_bg) {
|
||||
|
||||
#ifdef HARLEQUIN_DEBUGGING
|
||||
|
|
|
|||
|
|
@ -369,7 +369,8 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_
|
|||
end_sample = end_sample + waveview->region_start;
|
||||
#if DEBUG_CACHE
|
||||
// printf("waveview->region_start == %lu\n",waveview->region_start);
|
||||
printf ("=> 0x%x cache @ 0x%x range: %lu - %lu request: %lu - %lu (%lu frames)\n",
|
||||
// c_stacktrace ();
|
||||
printf ("\n\n=> 0x%x cache @ 0x%x range: %lu - %lu request: %lu - %lu (%lu frames)\n",
|
||||
waveview, cache,
|
||||
cache->start, cache->end,
|
||||
start_sample, end_sample, end_sample - start_sample);
|
||||
|
|
@ -413,7 +414,7 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_
|
|||
}
|
||||
|
||||
#if DEBUG_CACHE
|
||||
fprintf (stderr, "\n\nAVAILABLE FRAMES = %lu of %lu, start = %lu, sstart = %lu, cstart = %lu\n",
|
||||
fprintf (stderr, "AVAILABLE FRAMES = %lu of %lu, start = %lu, sstart = %lu, cstart = %lu\n",
|
||||
rf3, waveview->sourcefile_length_function (waveview->data_src, waveview->samples_per_unit),
|
||||
waveview->region_start, start_sample, new_cache_start);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -104,3 +104,6 @@ COLORID(cTrimHandleLockedStart)
|
|||
COLORID(cTrimHandleLockedEnd)
|
||||
COLORID(cTrimHandleStart)
|
||||
COLORID(cTrimHandleEnd)
|
||||
COLORID(cEditCursor)
|
||||
COLORID(cPlayHead)
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <map>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __ardour_gtk_connection_editor_h__
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cmath>
|
||||
|
|
@ -194,7 +193,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d
|
|||
|
||||
for (list<Preset*>::iterator i = fade_in_presets->begin(); i != fade_in_presets->end(); ++i) {
|
||||
|
||||
pxmap = manage (new Image (get_xpm((*i)->xpm)));
|
||||
pxmap = manage (new Image (::get_icon ((*i)->image_name)));
|
||||
pbutton = manage (new Button);
|
||||
pbutton->add (*pxmap);
|
||||
pbutton->set_name ("CrossfadeEditButton");
|
||||
|
|
@ -215,7 +214,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d
|
|||
|
||||
for (list<Preset*>::iterator i = fade_out_presets->begin(); i != fade_out_presets->end(); ++i) {
|
||||
|
||||
pxmap = manage (new Image (get_xpm((*i)->xpm)));
|
||||
pxmap = manage (new Image (::get_icon ((*i)->image_name)));
|
||||
pbutton = manage (new Button);
|
||||
pbutton->add (*pxmap);
|
||||
pbutton->set_name ("CrossfadeEditButton");
|
||||
|
|
@ -832,7 +831,8 @@ CrossfadeEditor::build_presets ()
|
|||
fade_out_presets = new Presets;
|
||||
|
||||
/* FADE OUT */
|
||||
p = new Preset ("hiin.xpm");
|
||||
// p = new Preset ("hiin.xpm");
|
||||
p = new Preset ("crossfade_in_fast-cut");
|
||||
p->push_back (PresetPoint (0, 0));
|
||||
p->push_back (PresetPoint (0.0207373, 0.197222));
|
||||
p->push_back (PresetPoint (0.0645161, 0.525));
|
||||
|
|
@ -843,7 +843,8 @@ CrossfadeEditor::build_presets ()
|
|||
p->push_back (PresetPoint (1, 1));
|
||||
fade_in_presets->push_back (p);
|
||||
|
||||
p = new Preset ("loin.xpm");
|
||||
// p = new Preset ("loin.xpm");
|
||||
p = new Preset ("crossfade_in_transition");
|
||||
p->push_back (PresetPoint (0, 0));
|
||||
p->push_back (PresetPoint (0.389401, 0.0333333));
|
||||
p->push_back (PresetPoint (0.629032, 0.0861111));
|
||||
|
|
@ -853,7 +854,8 @@ CrossfadeEditor::build_presets ()
|
|||
p->push_back (PresetPoint (1, 1));
|
||||
fade_in_presets->push_back (p);
|
||||
|
||||
p = new Preset ("regin.xpm");
|
||||
// p = new Preset ("regin.xpm");
|
||||
p = new Preset ("crossfade_in_constant");
|
||||
p->push_back (PresetPoint (0, 0));
|
||||
p->push_back (PresetPoint (0.0737327, 0.308333));
|
||||
p->push_back (PresetPoint (0.246544, 0.658333));
|
||||
|
|
@ -863,7 +865,8 @@ CrossfadeEditor::build_presets ()
|
|||
p->push_back (PresetPoint (1, 1));
|
||||
fade_in_presets->push_back (p);
|
||||
|
||||
p = new Preset ("regin2.xpm");
|
||||
// p = new Preset ("regin2.xpm");
|
||||
p = new Preset ("crossfade_in_slow-cut");
|
||||
p->push_back (PresetPoint (0, 0));
|
||||
p->push_back (PresetPoint (0.304147, 0.0694444));
|
||||
p->push_back (PresetPoint (0.529954, 0.152778));
|
||||
|
|
@ -873,14 +876,16 @@ CrossfadeEditor::build_presets ()
|
|||
p->push_back (PresetPoint (1, 1));
|
||||
fade_in_presets->push_back (p);
|
||||
|
||||
p = new Preset ("linin.xpm");
|
||||
// p = new Preset ("linin.xpm");
|
||||
p = new Preset ("crossfade_in_dipped");
|
||||
p->push_back (PresetPoint (0, 0));
|
||||
p->push_back (PresetPoint (1, 1));
|
||||
fade_in_presets->push_back (p);
|
||||
|
||||
/* FADE OUT */
|
||||
|
||||
p = new Preset ("hiout.xpm");
|
||||
// p = new Preset ("hiout.xpm");
|
||||
p = new Preset ("crossfade_out_fast-cut");
|
||||
p->push_back (PresetPoint (0, 1));
|
||||
p->push_back (PresetPoint (0.305556, 1));
|
||||
p->push_back (PresetPoint (0.548611, 0.991736));
|
||||
|
|
@ -890,7 +895,8 @@ CrossfadeEditor::build_presets ()
|
|||
p->push_back (PresetPoint (1, 0));
|
||||
fade_out_presets->push_back (p);
|
||||
|
||||
p = new Preset ("regout.xpm");
|
||||
// p = new Preset ("regout.xpm");
|
||||
p = new Preset ("crossfade_out_constant");
|
||||
p->push_back (PresetPoint (0, 1));
|
||||
p->push_back (PresetPoint (0.228111, 0.988889));
|
||||
p->push_back (PresetPoint (0.347926, 0.972222));
|
||||
|
|
@ -900,7 +906,8 @@ CrossfadeEditor::build_presets ()
|
|||
p->push_back (PresetPoint (1, 0));
|
||||
fade_out_presets->push_back (p);
|
||||
|
||||
p = new Preset ("loout.xpm");
|
||||
// p = new Preset ("loout.xpm");
|
||||
p = new Preset ("crossfade_out_transition");
|
||||
p->push_back (PresetPoint (0, 1));
|
||||
p->push_back (PresetPoint (0.023041, 0.697222));
|
||||
p->push_back (PresetPoint (0.0553, 0.483333));
|
||||
|
|
@ -910,7 +917,8 @@ CrossfadeEditor::build_presets ()
|
|||
p->push_back (PresetPoint (1, 0));
|
||||
fade_out_presets->push_back (p);
|
||||
|
||||
p = new Preset ("regout2.xpm");
|
||||
// p = new Preset ("regout2.xpm");
|
||||
p = new Preset ("crossfade_out_slow-fade");
|
||||
p->push_back (PresetPoint (0, 1));
|
||||
p->push_back (PresetPoint (0.080645, 0.730556));
|
||||
p->push_back (PresetPoint (0.277778, 0.289256));
|
||||
|
|
@ -919,7 +927,8 @@ CrossfadeEditor::build_presets ()
|
|||
p->push_back (PresetPoint (1, 0));
|
||||
fade_out_presets->push_back (p);
|
||||
|
||||
p = new Preset ("linout.xpm");
|
||||
// p = new Preset ("linout.xpm");
|
||||
p = new Preset ("crossfade_out_dipped");
|
||||
p->push_back (PresetPoint (0, 1));
|
||||
p->push_back (PresetPoint (1, 0));
|
||||
fade_out_presets->push_back (p);
|
||||
|
|
|
|||
|
|
@ -43,10 +43,9 @@ class CrossfadeEditor : public ArdourDialog
|
|||
};
|
||||
|
||||
struct Preset : public list<PresetPoint> {
|
||||
string xpm;
|
||||
const char* image_name;
|
||||
|
||||
Preset (string x)
|
||||
: xpm (x) {}
|
||||
Preset (const char* x) : image_name (x) {}
|
||||
};
|
||||
|
||||
typedef list<Preset*> Presets;
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <algorithm>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __gtk_ardour_crossfade_view_h__
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
|
|
@ -35,6 +34,7 @@
|
|||
#include <gdkmm/color.h>
|
||||
#include <gdkmm/bitmap.h>
|
||||
|
||||
#include <gtkmm2ext/grouped_buttons.h>
|
||||
#include <gtkmm2ext/gtk_ui.h>
|
||||
#include <gtkmm2ext/tearoff.h>
|
||||
#include <gtkmm2ext/utils.h>
|
||||
|
|
@ -54,7 +54,6 @@
|
|||
|
||||
#include "ardour_ui.h"
|
||||
#include "editor.h"
|
||||
#include "grouped_buttons.h"
|
||||
#include "keyboard.h"
|
||||
#include "marker.h"
|
||||
#include "playlist_selector.h"
|
||||
|
|
@ -69,7 +68,6 @@
|
|||
#include "editing.h"
|
||||
#include "public_editor.h"
|
||||
#include "crossfade_edit.h"
|
||||
#include "audio_time_axis.h"
|
||||
#include "canvas_impl.h"
|
||||
#include "actions.h"
|
||||
#include "gui_thread.h"
|
||||
|
|
@ -172,9 +170,8 @@ check_adjustment (Gtk::Adjustment* adj)
|
|||
|
||||
}
|
||||
|
||||
Editor::Editor (AudioEngine& eng)
|
||||
: engine (eng),
|
||||
|
||||
Editor::Editor ()
|
||||
:
|
||||
/* time display buttons */
|
||||
|
||||
minsec_label (_("Mins:Secs")),
|
||||
|
|
@ -311,6 +308,7 @@ Editor::Editor (AudioEngine& eng)
|
|||
button_release_can_deselect = true;
|
||||
canvas_idle_queued = false;
|
||||
_dragging_playhead = false;
|
||||
_dragging_hscrollbar = false;
|
||||
|
||||
location_marker_color = color_map[cLocationMarker];
|
||||
location_range_color = color_map[cLocationRange];
|
||||
|
|
@ -356,8 +354,8 @@ Editor::Editor (AudioEngine& eng)
|
|||
edit_vscrollbar.set_adjustment (vertical_adjustment);
|
||||
edit_hscrollbar.set_adjustment (horizontal_adjustment);
|
||||
|
||||
edit_hscrollbar.signal_button_press_event().connect (mem_fun(*this, &Editor::hscrollbar_button_press));
|
||||
edit_hscrollbar.signal_button_release_event().connect (mem_fun(*this, &Editor::hscrollbar_button_release));
|
||||
edit_hscrollbar.signal_button_press_event().connect (mem_fun(*this, &Editor::hscrollbar_button_press), false);
|
||||
edit_hscrollbar.signal_button_release_event().connect (mem_fun(*this, &Editor::hscrollbar_button_release), false);
|
||||
edit_hscrollbar.signal_size_allocate().connect (mem_fun(*this, &Editor::hscrollbar_allocate));
|
||||
|
||||
edit_hscrollbar.set_name ("EditorHScrollbar");
|
||||
|
|
@ -511,7 +509,7 @@ Editor::Editor (AudioEngine& eng)
|
|||
|
||||
edit_group_display.set_name ("EditGroupList");
|
||||
edit_group_display.get_selection()->set_mode (SELECTION_SINGLE);
|
||||
edit_group_display.set_headers_visible (false);
|
||||
edit_group_display.set_headers_visible (true);
|
||||
edit_group_display.set_reorderable (false);
|
||||
edit_group_display.set_rules_hint (true);
|
||||
edit_group_display.set_size_request (75, -1);
|
||||
|
|
@ -986,6 +984,7 @@ Editor::handle_new_duration ()
|
|||
|
||||
if (new_end > last_canvas_frame) {
|
||||
last_canvas_frame = new_end;
|
||||
horizontal_adjustment.set_upper (last_canvas_frame / frames_per_unit);
|
||||
reset_scrolling_region ();
|
||||
}
|
||||
|
||||
|
|
@ -1072,7 +1071,7 @@ Editor::connect_to_session (Session *t)
|
|||
|
||||
session_connections.push_back (session->SMPTEOffsetChanged.connect (mem_fun(*this, &Editor::update_just_smpte)));
|
||||
|
||||
session_connections.push_back (session->tempo_map().StateChanged.connect (mem_fun(*this, &Editor::tempo_map_changed)));
|
||||
session_connections.push_back (session->tempo_map().StateChanged.connect (bind (mem_fun(*this, &Editor::tempo_map_changed), false)));
|
||||
|
||||
edit_groups_changed ();
|
||||
|
||||
|
|
@ -1094,8 +1093,7 @@ Editor::connect_to_session (Session *t)
|
|||
}
|
||||
session->locations()->add (loc, false);
|
||||
session->set_auto_loop_location (loc);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
// force name
|
||||
loc->set_name (_("Loop"));
|
||||
}
|
||||
|
|
@ -1108,8 +1106,7 @@ Editor::connect_to_session (Session *t)
|
|||
}
|
||||
session->locations()->add (loc, false);
|
||||
session->set_auto_punch_location (loc);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
// force name
|
||||
loc->set_name (_("Punch"));
|
||||
}
|
||||
|
|
@ -1241,8 +1238,8 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i
|
|||
items.push_back (SeparatorElem());
|
||||
|
||||
items.push_back (MenuElem (_("Linear"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Linear)));
|
||||
items.push_back (MenuElem (_("Slowest"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::LogB)));
|
||||
items.push_back (MenuElem (_("Slow"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Fast)));
|
||||
items.push_back (MenuElem (_("Slowest"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Fast)));
|
||||
items.push_back (MenuElem (_("Slow"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::LogB)));
|
||||
items.push_back (MenuElem (_("Fast"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::LogA)));
|
||||
items.push_back (MenuElem (_("Fastest"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Slow)));
|
||||
break;
|
||||
|
|
@ -1258,10 +1255,10 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i
|
|||
items.push_back (SeparatorElem());
|
||||
|
||||
items.push_back (MenuElem (_("Linear"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Linear)));
|
||||
items.push_back (MenuElem (_("Slowest"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Fast)));
|
||||
items.push_back (MenuElem (_("Slow"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::LogB)));
|
||||
items.push_back (MenuElem (_("Fast"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::LogA)));
|
||||
items.push_back (MenuElem (_("Fastest"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Slow)));
|
||||
items.push_back (MenuElem (_("Slowest"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Slow)));
|
||||
items.push_back (MenuElem (_("Slow"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::LogA)));
|
||||
items.push_back (MenuElem (_("Fast"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::LogB)));
|
||||
items.push_back (MenuElem (_("Fastest"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Fast)));
|
||||
|
||||
break;
|
||||
|
||||
|
|
@ -3032,7 +3029,7 @@ gint
|
|||
Editor::edit_controls_button_release (GdkEventButton* ev)
|
||||
{
|
||||
if (Keyboard::is_context_menu_event (ev)) {
|
||||
ARDOUR_UI::instance()->add_route ();
|
||||
ARDOUR_UI::instance()->add_route (this);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -3181,7 +3178,6 @@ Editor::set_show_measures (bool yn)
|
|||
if ((_show_measures = yn) == true) {
|
||||
draw_measures ();
|
||||
}
|
||||
DisplayControlChanged (ShowMeasures);
|
||||
instant_save ();
|
||||
}
|
||||
}
|
||||
|
|
@ -3204,7 +3200,6 @@ Editor::set_follow_playhead (bool yn)
|
|||
/* catch up */
|
||||
update_current_screen ();
|
||||
}
|
||||
DisplayControlChanged (FollowPlayhead);
|
||||
instant_save ();
|
||||
}
|
||||
}
|
||||
|
|
@ -3290,7 +3285,7 @@ Editor::playlist_deletion_dialog (boost::shared_ptr<Playlist> pl)
|
|||
label.show ();
|
||||
|
||||
dialog.add_button (_("Delete playlist"), RESPONSE_ACCEPT);
|
||||
dialog.add_button (_("Keep playlist"), RESPONSE_CANCEL);
|
||||
dialog.add_button (_("Keep playlist"), RESPONSE_REJECT);
|
||||
dialog.add_button (_("Cancel"), RESPONSE_CANCEL);
|
||||
|
||||
switch (dialog.run ()) {
|
||||
|
|
@ -3621,26 +3616,6 @@ Editor::set_frames_per_unit (double fpu)
|
|||
instant_save ();
|
||||
}
|
||||
|
||||
void
|
||||
Editor::canvas_horizontally_scrolled ()
|
||||
{
|
||||
/* this is the core function that controls horizontal scrolling of the canvas. it is called
|
||||
whenever the horizontal_adjustment emits its "value_changed" signal. it executes in an
|
||||
idle handler.
|
||||
*/
|
||||
|
||||
leftmost_frame = (nframes_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
|
||||
nframes_t rightmost_frame = leftmost_frame + current_page_frames ();
|
||||
|
||||
if (rightmost_frame > last_canvas_frame) {
|
||||
last_canvas_frame = rightmost_frame;
|
||||
reset_scrolling_region ();
|
||||
}
|
||||
|
||||
update_fixed_rulers ();
|
||||
tempo_map_changed (Change (0));
|
||||
}
|
||||
|
||||
void
|
||||
Editor::queue_visual_change (nframes_t where)
|
||||
{
|
||||
|
|
@ -3687,7 +3662,7 @@ Editor::idle_visual_changer ()
|
|||
/* the signal handler will do the rest */
|
||||
} else {
|
||||
update_fixed_rulers();
|
||||
tempo_map_changed (Change (0));
|
||||
tempo_map_changed (Change (0), true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3707,3 +3682,12 @@ Editor::sort_track_selection ()
|
|||
selection->tracks.sort (cmp);
|
||||
}
|
||||
|
||||
nframes_t
|
||||
Editor::edit_cursor_position(bool sync)
|
||||
{
|
||||
if (sync && edit_cursor->current_frame != edit_cursor_clock.current_time()) {
|
||||
edit_cursor_clock.set(edit_cursor->current_frame, true);
|
||||
}
|
||||
|
||||
return edit_cursor->current_frame;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __ardour_editor_h__
|
||||
|
|
@ -61,10 +60,6 @@ namespace Gtkmm2ext {
|
|||
class TearOff;
|
||||
}
|
||||
|
||||
namespace LinuxAudioSystems {
|
||||
class AudioEngine;
|
||||
}
|
||||
|
||||
namespace ARDOUR {
|
||||
class AudioDiskstream;
|
||||
class RouteGroup;
|
||||
|
|
@ -122,7 +117,7 @@ class TimeAxisViewItem ;
|
|||
class Editor : public PublicEditor
|
||||
{
|
||||
public:
|
||||
Editor (ARDOUR::AudioEngine&);
|
||||
Editor ();
|
||||
~Editor ();
|
||||
|
||||
void connect_to_session (ARDOUR::Session *);
|
||||
|
|
@ -147,11 +142,11 @@ class Editor : public PublicEditor
|
|||
void step_mouse_mode (bool next);
|
||||
Editing::MouseMode current_mouse_mode () { return mouse_mode; }
|
||||
|
||||
void add_imageframe_time_axis(const string & track_name, void*) ;
|
||||
void add_imageframe_marker_time_axis(const string & track_name, TimeAxisView* marked_track, void*) ;
|
||||
void add_imageframe_time_axis(const std::string & track_name, void*) ;
|
||||
void add_imageframe_marker_time_axis(const std::string & track_name, TimeAxisView* marked_track, void*) ;
|
||||
void connect_to_image_compositor() ;
|
||||
void scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item) ;
|
||||
TimeAxisView* get_named_time_axis(const string & name) ;
|
||||
TimeAxisView* get_named_time_axis(const std::string & name) ;
|
||||
|
||||
void consider_auditioning (boost::shared_ptr<ARDOUR::Region>);
|
||||
void hide_a_region (boost::shared_ptr<ARDOUR::Region>);
|
||||
|
|
@ -340,6 +335,8 @@ class Editor : public PublicEditor
|
|||
void reset_zoom (double);
|
||||
void reposition_and_zoom (nframes_t, double);
|
||||
|
||||
nframes_t edit_cursor_position(bool);
|
||||
|
||||
protected:
|
||||
void map_transport_state ();
|
||||
void map_position_change (nframes_t);
|
||||
|
|
@ -349,7 +346,6 @@ class Editor : public PublicEditor
|
|||
private:
|
||||
|
||||
ARDOUR::Session *session;
|
||||
ARDOUR::AudioEngine& engine;
|
||||
bool constructed;
|
||||
|
||||
PlaylistSelector* _playlist_selector;
|
||||
|
|
@ -441,6 +437,7 @@ class Editor : public PublicEditor
|
|||
void catch_vanishing_regionview (RegionView *);
|
||||
|
||||
bool set_selected_track (TimeAxisView&, Selection::Operation op = Selection::Set, bool no_remove=false);
|
||||
void select_all_tracks ();
|
||||
|
||||
bool set_selected_control_point_from_click (Selection::Operation op = Selection::Set, bool no_remove=false);
|
||||
bool set_selected_track_from_click (bool press, Selection::Operation op = Selection::Set, bool no_remove=false);
|
||||
|
|
@ -608,7 +605,7 @@ class Editor : public PublicEditor
|
|||
nframes_t current_frame;
|
||||
double length;
|
||||
|
||||
Cursor (Editor&, const string& color, bool (Editor::*)(GdkEvent*,ArdourCanvas::Item*));
|
||||
Cursor (Editor&, bool (Editor::*)(GdkEvent*,ArdourCanvas::Item*));
|
||||
~Cursor ();
|
||||
|
||||
void set_position (nframes_t);
|
||||
|
|
@ -653,6 +650,7 @@ class Editor : public PublicEditor
|
|||
void controls_layout_size_request (Gtk::Requisition*);
|
||||
|
||||
Gtk::HScrollbar edit_hscrollbar;
|
||||
bool _dragging_hscrollbar;
|
||||
|
||||
void reset_hscrollbar_stepping ();
|
||||
|
||||
|
|
@ -1174,7 +1172,7 @@ class Editor : public PublicEditor
|
|||
Gtk::Allocation canvas_allocation;
|
||||
bool canvas_idle_queued;
|
||||
void track_canvas_allocate (Gtk::Allocation alloc);
|
||||
bool track_canvas_idle ();
|
||||
bool track_canvas_size_allocated ();
|
||||
|
||||
void set_edit_cursor (GdkEvent* event);
|
||||
void set_playhead_cursor (GdkEvent* event);
|
||||
|
|
@ -1241,6 +1239,7 @@ class Editor : public PublicEditor
|
|||
void marker_menu_hide ();
|
||||
void marker_menu_loop_range ();
|
||||
void marker_menu_select_all_selectables_using_range ();
|
||||
void marker_menu_select_using_range ();
|
||||
void marker_menu_separate_regions_using_location ();
|
||||
void marker_menu_play_from ();
|
||||
void marker_menu_play_range ();
|
||||
|
|
@ -1275,7 +1274,7 @@ class Editor : public PublicEditor
|
|||
void remove_metric_marks ();
|
||||
void draw_metric_marks (const ARDOUR::Metrics& metrics);
|
||||
|
||||
void tempo_map_changed (ARDOUR::Change);
|
||||
void tempo_map_changed (ARDOUR::Change, bool immediate_redraw);
|
||||
void redisplay_tempo ();
|
||||
|
||||
void snap_to (nframes_t& first, int32_t direction = 0, bool for_mark = false);
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ Editor::register_actions ()
|
|||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
act = ActionManager::register_action (editor_actions, "jump-backward-to-mark", _("Jump Backward to Mark"), mem_fun(*this, &Editor::jump_backward_to_mark));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
act = ActionManager::register_action (editor_actions, "add-location-from-playhead", _("Add Location from Playhead"), mem_fun(*this, &Editor::add_location_from_playhead_cursor));
|
||||
act = ActionManager::register_action (editor_actions, "add-location-from-playhead", _("Add Mark from Playhead"), mem_fun(*this, &Editor::add_location_from_playhead_cursor));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
|
||||
act = ActionManager::register_action (editor_actions, "nudge-forward", _("Nudge Forward"), bind (mem_fun(*this, &Editor::nudge_forward), false));
|
||||
|
|
@ -430,7 +430,7 @@ Editor::toggle_waveform_visibility ()
|
|||
void
|
||||
Editor::toggle_waveforms_while_recording ()
|
||||
{
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleWaveformVisibility"));
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleWaveformsWhileRecording"));
|
||||
if (act) {
|
||||
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
|
||||
set_show_waveforms_recording (tact->get_active());
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <pbd/pthread_utils.h>
|
||||
|
|
@ -40,6 +39,7 @@
|
|||
#include "sfdb_ui.h"
|
||||
#include "editing.h"
|
||||
#include "audio_time_axis.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include "i18n.h"
|
||||
|
||||
|
|
@ -244,6 +244,8 @@ Editor::import_sndfile (vector<ustring> paths, ImportMode mode, AudioTrack* trac
|
|||
while (!(import_status.done || import_status.cancel)) {
|
||||
gtk_main_iteration ();
|
||||
}
|
||||
|
||||
interthread_progress_window->hide ();
|
||||
|
||||
import_status.done = true;
|
||||
interthread_progress_connection.disconnect ();
|
||||
|
|
@ -315,7 +317,8 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_fi
|
|||
choices.push_back (_("Embed all without questions"));
|
||||
|
||||
Gtkmm2ext::Choice rate_choice (
|
||||
string_compose (_("%1\nThis audiofile's sample rate doesn't match the session sample rate!"), path),
|
||||
string_compose (_("%1\nThis audiofile's sample rate doesn't match the session sample rate!"),
|
||||
short_path (path, 40)),
|
||||
choices, false);
|
||||
|
||||
int resx = rate_choice.run ();
|
||||
|
|
@ -367,11 +370,21 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_fi
|
|||
for (int n = 0; n < finfo.channels; ++n)
|
||||
{
|
||||
try {
|
||||
source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable
|
||||
(DataType::AUDIO, *session, path, n,
|
||||
(mode == ImportAsTapeTrack ?
|
||||
AudioFileSource::Destructive :
|
||||
AudioFileSource::Flag (0))));
|
||||
|
||||
/* check if we have this thing embedded already */
|
||||
|
||||
boost::shared_ptr<Source> s;
|
||||
|
||||
if ((s = session->source_by_path_and_channel (path, n)) == 0) {
|
||||
cerr << "source doesn't exist yet\n";
|
||||
source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable
|
||||
(DataType::AUDIO, *session, path, n,
|
||||
(mode == ImportAsTapeTrack ?
|
||||
AudioFileSource::Destructive :
|
||||
AudioFileSource::Flag (0))));
|
||||
} else {
|
||||
source = boost::dynamic_pointer_cast<AudioFileSource> (s);
|
||||
}
|
||||
|
||||
sources.push_back(source);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@ Editor::set_show_waveforms (bool yn)
|
|||
atv->set_show_waveforms (yn);
|
||||
}
|
||||
}
|
||||
DisplayControlChanged (Editing::ShowWaveforms);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -61,6 +60,5 @@ Editor::set_show_waveforms_recording (bool yn)
|
|||
atv->set_show_waveforms_recording (yn);
|
||||
}
|
||||
}
|
||||
DisplayControlChanged (Editing::ShowWaveformsRecording);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <libgnomecanvasmm/init.h>
|
||||
|
|
@ -264,8 +263,20 @@ Editor::initialize_canvas ()
|
|||
double time_width = FLT_MAX/frames_per_unit;
|
||||
time_canvas.set_scroll_region(0.0, 0.0, time_width, time_height);
|
||||
|
||||
edit_cursor = new Cursor (*this, "blue", &Editor::canvas_edit_cursor_event);
|
||||
playhead_cursor = new Cursor (*this, "red", &Editor::canvas_playhead_cursor_event);
|
||||
if (!color_map[cEditCursor]) {
|
||||
warning << _("edit cursor color not defined, check your ardour.colors file!") << endmsg;
|
||||
color_map[cEditCursor] = RGBA_TO_UINT (30,30,30,255);
|
||||
}
|
||||
|
||||
if (!color_map[cPlayHead]) {
|
||||
warning << _("playhead color not defined, check your ardour.colors file!") << endmsg;
|
||||
color_map[cPlayHead] = RGBA_TO_UINT (0,0,0,255);
|
||||
}
|
||||
|
||||
edit_cursor = new Cursor (*this, &Editor::canvas_edit_cursor_event);
|
||||
edit_cursor->canvas_item.property_fill_color_rgba() = color_map[cEditCursor];
|
||||
playhead_cursor = new Cursor (*this, &Editor::canvas_playhead_cursor_event);
|
||||
playhead_cursor->canvas_item.property_fill_color_rgba() = color_map[cPlayHead];
|
||||
|
||||
initial_ruler_update_required = true;
|
||||
track_canvas.signal_size_allocate().connect (mem_fun(*this, &Editor::track_canvas_allocate));
|
||||
|
|
@ -280,7 +291,7 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
|
|||
if (!initial_ruler_update_required) {
|
||||
if (!canvas_idle_queued) {
|
||||
/* call this first so that we do stuff before any pending redraw */
|
||||
Glib::signal_idle().connect (mem_fun (*this, &Editor::track_canvas_idle), false);
|
||||
Glib::signal_idle().connect (mem_fun (*this, &Editor::track_canvas_size_allocated), false);
|
||||
canvas_idle_queued = true;
|
||||
}
|
||||
return;
|
||||
|
|
@ -288,11 +299,11 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
|
|||
|
||||
initial_ruler_update_required = false;
|
||||
|
||||
track_canvas_idle ();
|
||||
track_canvas_size_allocated ();
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::track_canvas_idle ()
|
||||
Editor::track_canvas_size_allocated ()
|
||||
{
|
||||
if (canvas_idle_queued) {
|
||||
canvas_idle_queued = false;
|
||||
|
|
@ -321,7 +332,6 @@ Editor::track_canvas_idle ()
|
|||
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);
|
||||
|
|
@ -363,7 +373,7 @@ Editor::track_canvas_idle ()
|
|||
}
|
||||
|
||||
update_fixed_rulers();
|
||||
tempo_map_changed (Change (0));
|
||||
tempo_map_changed (Change (0), true);
|
||||
|
||||
Resized (); /* EMIT_SIGNAL */
|
||||
|
||||
|
|
@ -698,3 +708,25 @@ Editor::left_track_canvas (GdkEventCrossing *ev)
|
|||
}
|
||||
|
||||
|
||||
void
|
||||
Editor::canvas_horizontally_scrolled ()
|
||||
{
|
||||
/* this is the core function that controls horizontal scrolling of the canvas. it is called
|
||||
whenever the horizontal_adjustment emits its "value_changed" signal. it typically executes in an
|
||||
idle handler, which is important because tempo_map_changed() should issue redraws immediately
|
||||
and not defer them to an idle handler.
|
||||
*/
|
||||
|
||||
leftmost_frame = (nframes_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
|
||||
nframes_t rightmost_frame = leftmost_frame + current_page_frames ();
|
||||
|
||||
if (rightmost_frame > last_canvas_frame) {
|
||||
last_canvas_frame = rightmost_frame;
|
||||
reset_scrolling_region ();
|
||||
}
|
||||
|
||||
update_fixed_rulers ();
|
||||
|
||||
tempo_map_changed (Change (0), !_dragging_hscrollbar);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
@ -25,6 +24,7 @@
|
|||
#include <ardour/audioplaylist.h>
|
||||
|
||||
#include "editor.h"
|
||||
#include "keyboard.h"
|
||||
#include "public_editor.h"
|
||||
#include "audio_region_view.h"
|
||||
#include "audio_streamview.h"
|
||||
|
|
@ -71,7 +71,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
|||
event.button.y = wy;
|
||||
|
||||
nframes_t where = event_frame (&event, 0, 0);
|
||||
temporal_zoom_to_frame (true, where);
|
||||
temporal_zoom_to_frame (false, where);
|
||||
return true;
|
||||
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
|
||||
if (!current_stepping_trackview) {
|
||||
|
|
@ -102,7 +102,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
|||
event.button.y = wy;
|
||||
|
||||
nframes_t where = event_frame (&event, 0, 0);
|
||||
temporal_zoom_to_frame (false, where);
|
||||
temporal_zoom_to_frame (true, where);
|
||||
return true;
|
||||
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
|
||||
if (!current_stepping_trackview) {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
@ -31,7 +30,7 @@ using namespace ARDOUR;
|
|||
using namespace PBD;
|
||||
using namespace Gtk;
|
||||
|
||||
Editor::Cursor::Cursor (Editor& ed, const string& color, bool (Editor::*callbck)(GdkEvent*,ArdourCanvas::Item*))
|
||||
Editor::Cursor::Cursor (Editor& ed, bool (Editor::*callbck)(GdkEvent*,ArdourCanvas::Item*))
|
||||
: editor (ed),
|
||||
canvas_item (*editor.cursor_group),
|
||||
length(1.0)
|
||||
|
|
@ -43,7 +42,6 @@ Editor::Cursor::Cursor (Editor& ed, const string& color, bool (Editor::*callbck)
|
|||
points.push_back(Gnome::Art::Point(1.0, 0.0));
|
||||
|
||||
canvas_item.property_points() = points;
|
||||
canvas_item.property_fill_color() = color; //.c_str());
|
||||
canvas_item.property_width_pixels() = 1;
|
||||
canvas_item.property_first_arrowhead() = TRUE;
|
||||
canvas_item.property_last_arrowhead() = TRUE;
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include "editor.h"
|
||||
|
|
@ -34,17 +33,20 @@ Editor::hscrollbar_allocate (Gtk::Allocation &alloc)
|
|||
bool
|
||||
Editor::hscrollbar_button_press (GdkEventButton *ev)
|
||||
{
|
||||
return true;
|
||||
_dragging_hscrollbar = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::hscrollbar_button_release (GdkEventButton *ev)
|
||||
{
|
||||
_dragging_hscrollbar = false;
|
||||
|
||||
if (session) {
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include "imageframe_view.h"
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <ardour/audioregion.h>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
@ -70,7 +69,7 @@ Editor::keyboard_duplicate_region ()
|
|||
return;
|
||||
}
|
||||
|
||||
float prefix;
|
||||
float prefix = 0;
|
||||
bool was_floating;
|
||||
|
||||
if (get_prefix (prefix, was_floating) == 0) {
|
||||
|
|
@ -83,7 +82,7 @@ Editor::keyboard_duplicate_region ()
|
|||
void
|
||||
Editor::keyboard_duplicate_selection ()
|
||||
{
|
||||
float prefix;
|
||||
float prefix = 0;
|
||||
bool was_floating;
|
||||
|
||||
if (get_prefix (prefix, was_floating) == 0) {
|
||||
|
|
@ -96,7 +95,7 @@ Editor::keyboard_duplicate_selection ()
|
|||
void
|
||||
Editor::keyboard_paste ()
|
||||
{
|
||||
float prefix;
|
||||
float prefix = 0;
|
||||
bool was_floating;
|
||||
|
||||
if (get_prefix (prefix, was_floating) == 0) {
|
||||
|
|
@ -109,7 +108,7 @@ Editor::keyboard_paste ()
|
|||
void
|
||||
Editor::keyboard_insert_region_list_selection ()
|
||||
{
|
||||
float prefix;
|
||||
float prefix = 0;
|
||||
bool was_floating;
|
||||
|
||||
if (get_prefix (prefix, was_floating) == 0) {
|
||||
|
|
@ -122,6 +121,7 @@ Editor::keyboard_insert_region_list_selection ()
|
|||
int
|
||||
Editor::get_prefix (float& val, bool& was_floating)
|
||||
{
|
||||
return Keyboard::the_keyboard().get_prefix (val, was_floating);
|
||||
was_floating = false;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <sigc++/retype.h>
|
||||
|
|
@ -511,6 +510,7 @@ Editor::build_range_marker_menu (bool loop_or_punch)
|
|||
|
||||
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)));
|
||||
items.push_back (MenuElem (_("Select Range"), mem_fun(*this, &Editor::marker_menu_select_using_range)));
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -560,6 +560,24 @@ Editor::marker_menu_hide ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::marker_menu_select_using_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) && (l->end() > l->start())) {
|
||||
set_selection_from_range (*l);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::marker_menu_select_all_selectables_using_range ()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <gtkmm2ext/utils.h>
|
||||
|
|
@ -158,10 +157,13 @@ Editor::set_selected_mixer_strip (TimeAxisView& view)
|
|||
}
|
||||
}
|
||||
|
||||
double current = 0.0;
|
||||
bool currentInitialized = 0;
|
||||
|
||||
void
|
||||
Editor::update_current_screen ()
|
||||
{
|
||||
if (session && engine.running()) {
|
||||
if (session && session->engine().running()) {
|
||||
|
||||
nframes_t frame;
|
||||
|
||||
|
|
@ -178,35 +180,52 @@ Editor::update_current_screen ()
|
|||
playhead_cursor->canvas_item.show();
|
||||
|
||||
if (frame != last_update_frame) {
|
||||
const jack_nframes_t page_width = current_page_frames();
|
||||
|
||||
// Percentage width of the visible range to use as a scroll interval
|
||||
// Idea: snap this to the nearest bar/beat/tick/etc, would make scrolling much
|
||||
// less jarring when zoomed in.. and it would be fun to watch :)
|
||||
static const double scroll_pct = 3.0/4.0;
|
||||
|
||||
const jack_nframes_t rightmost_frame = leftmost_frame + page_width;
|
||||
const jack_nframes_t scroll_interval = (jack_nframes_t)(page_width * scroll_pct);
|
||||
const jack_nframes_t padding = (jack_nframes_t)floor((page_width-scroll_interval) / 2.0);
|
||||
|
||||
if (frame < leftmost_frame + padding || frame > rightmost_frame - padding) {
|
||||
|
||||
#undef CONTINUOUS_SCROLL
|
||||
#ifndef CONTINUOUS_SCROLL
|
||||
if (frame < leftmost_frame || frame > leftmost_frame + current_page_frames()) {
|
||||
|
||||
if (session->transport_speed() < 0) {
|
||||
if (frame > scroll_interval) {
|
||||
center_screen (frame - scroll_interval/2);
|
||||
if (frame > (current_page_frames()/2)) {
|
||||
center_screen (frame-(current_page_frames()/2));
|
||||
} else {
|
||||
center_screen (scroll_interval);
|
||||
center_screen (current_page_frames()/2);
|
||||
}
|
||||
} else {
|
||||
center_screen(frame + scroll_interval/2);
|
||||
center_screen (frame+(current_page_frames()/2));
|
||||
}
|
||||
}
|
||||
|
||||
playhead_cursor->set_position (frame);
|
||||
|
||||
#else // CONTINUOUS_SCROLL
|
||||
|
||||
/* don't do continuous scroll till the new position is in the rightmost quarter of the
|
||||
editor canvas
|
||||
*/
|
||||
|
||||
if (session->transport_speed()) {
|
||||
double target = ((double)frame - (double)current_page_frames()/2.0) / frames_per_unit;
|
||||
if (target <= 0.0) target = 0.0;
|
||||
if ( fabs(target - current) < current_page_frames()/frames_per_unit ) {
|
||||
target = (target * 0.15) + (current * 0.85);
|
||||
} else {
|
||||
/* relax */
|
||||
}
|
||||
//printf("frame: %d, cpf: %d, fpu: %6.6f, current: %6.6f, target : %6.6f\n", frame, current_page_frames(), frames_per_unit, current, target );
|
||||
current = target;
|
||||
horizontal_adjustment.set_value ( current );
|
||||
}
|
||||
|
||||
playhead_cursor->set_position (frame);
|
||||
|
||||
#endif // CONTINUOUS_SCROLL
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
if (frame != last_update_frame) {
|
||||
if (frame < leftmost_frame || frame > leftmost_frame + current_page_frames()) {
|
||||
playhead_cursor->canvas_item.hide();
|
||||
|
|
@ -222,7 +241,7 @@ Editor::update_current_screen ()
|
|||
if (current_mixer_strip) {
|
||||
current_mixer_strip->fast_update ();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cassert>
|
||||
|
|
@ -35,6 +34,7 @@
|
|||
#include "time_axis_view.h"
|
||||
#include "audio_time_axis.h"
|
||||
#include "audio_region_view.h"
|
||||
#include "midi_region_view.h"
|
||||
#include "marker.h"
|
||||
#include "streamview.h"
|
||||
#include "region_gain_line.h"
|
||||
|
|
@ -302,7 +302,9 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
|
|||
|
||||
if (((mouse_mode != MouseObject) &&
|
||||
(mouse_mode != MouseAudition || item_type != RegionItem) &&
|
||||
(mouse_mode != MouseTimeFX || item_type != RegionItem)) ||
|
||||
(mouse_mode != MouseTimeFX || item_type != RegionItem) &&
|
||||
(mouse_mode != MouseRange)) ||
|
||||
|
||||
(event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE || event->button.button > 3)) {
|
||||
|
||||
return;
|
||||
|
|
@ -312,9 +314,11 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
|
|||
|
||||
if ((event->button.state & Keyboard::RelevantModifierKeyMask) && event->button.button != 1) {
|
||||
|
||||
/* no selection action on modified button-2 or button-3 events */
|
||||
|
||||
return;
|
||||
/* almost no selection action on modified button-2 or button-3 events */
|
||||
|
||||
if (item_type != RegionItem && event->button.button != 2) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -325,29 +329,48 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
|
|||
|
||||
switch (item_type) {
|
||||
case RegionItem:
|
||||
commit = set_selected_regionview_from_click (press, op, true);
|
||||
if (mouse_mode != MouseRange) {
|
||||
commit = set_selected_regionview_from_click (press, op, true);
|
||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||
commit = set_selected_track_from_click (press, op, false);
|
||||
}
|
||||
break;
|
||||
|
||||
case RegionViewNameHighlight:
|
||||
case RegionViewName:
|
||||
commit = set_selected_regionview_from_click (press, op, true);
|
||||
if (mouse_mode != MouseRange) {
|
||||
commit = set_selected_regionview_from_click (press, op, true);
|
||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||
commit = set_selected_track_from_click (press, op, false);
|
||||
}
|
||||
break;
|
||||
|
||||
case FadeInHandleItem:
|
||||
case FadeInItem:
|
||||
case FadeOutHandleItem:
|
||||
case FadeOutItem:
|
||||
commit = set_selected_regionview_from_click (press, op, true);
|
||||
if (mouse_mode != MouseRange) {
|
||||
commit = set_selected_regionview_from_click (press, op, true);
|
||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||
commit = set_selected_track_from_click (press, op, false);
|
||||
}
|
||||
break;
|
||||
|
||||
case GainAutomationControlPointItem:
|
||||
case PanAutomationControlPointItem:
|
||||
case RedirectAutomationControlPointItem:
|
||||
commit = set_selected_control_point_from_click (op, false);
|
||||
if (mouse_mode != MouseRange) {
|
||||
commit = set_selected_control_point_from_click (op, false);
|
||||
}
|
||||
break;
|
||||
|
||||
case StreamItem:
|
||||
// commit = set_selected_track_from_click (press, op, true);
|
||||
/* for context click or range selection, select track */
|
||||
if (event->button.button == 3) {
|
||||
commit = set_selected_track_from_click (press, op, true);
|
||||
} else if (event->type == GDK_BUTTON_PRESS && mouse_mode == MouseRange) {
|
||||
commit = set_selected_track_from_click (press, op, false);
|
||||
}
|
||||
break;
|
||||
|
||||
case AutomationTrackItem:
|
||||
|
|
@ -358,26 +381,6 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
|
|||
break;
|
||||
}
|
||||
|
||||
#define SELECT_TRACK_FROM_CANVAS_IN_RANGE_MODE
|
||||
#ifdef SELECT_TRACK_FROM_CANVAS_IN_RANGE_MODE
|
||||
/* in range mode, button 1/2/3 press potentially selects a track */
|
||||
|
||||
if (mouse_mode == MouseRange &&
|
||||
event->type == GDK_BUTTON_PRESS &&
|
||||
event->button.button <= 3) {
|
||||
|
||||
switch (item_type) {
|
||||
case StreamItem:
|
||||
case RegionItem:
|
||||
case AutomationTrackItem:
|
||||
commit = set_selected_track_from_click (true, op, true);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (commit) {
|
||||
commit_reversible_command ();
|
||||
}
|
||||
|
|
@ -1174,23 +1177,25 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
case GainAutomationControlPointItem:
|
||||
case PanAutomationControlPointItem:
|
||||
case RedirectAutomationControlPointItem:
|
||||
cp = static_cast<ControlPoint*>(item->get_data ("control_point"));
|
||||
cp->set_visible (true);
|
||||
|
||||
double at_x, at_y;
|
||||
at_x = cp->get_x();
|
||||
at_y = cp->get_y ();
|
||||
cp->item->i2w (at_x, at_y);
|
||||
at_x += 20.0;
|
||||
at_y += 20.0;
|
||||
if (mouse_mode == MouseGain || mouse_mode == MouseObject) {
|
||||
cp = static_cast<ControlPoint*>(item->get_data ("control_point"));
|
||||
cp->set_visible (true);
|
||||
|
||||
fraction = 1.0 - (cp->get_y() / cp->line.height());
|
||||
|
||||
set_verbose_canvas_cursor (cp->line.get_verbose_cursor_string (fraction), at_x, at_y);
|
||||
show_verbose_canvas_cursor ();
|
||||
|
||||
if (is_drawable()) {
|
||||
track_canvas.get_window()->set_cursor (*fader_cursor);
|
||||
double at_x, at_y;
|
||||
at_x = cp->get_x();
|
||||
at_y = cp->get_y ();
|
||||
cp->item->i2w (at_x, at_y);
|
||||
at_x += 20.0;
|
||||
at_y += 20.0;
|
||||
|
||||
fraction = 1.0 - (cp->get_y() / cp->line.height());
|
||||
|
||||
set_verbose_canvas_cursor (cp->line.get_verbose_cursor_string (fraction), at_x, at_y);
|
||||
show_verbose_canvas_cursor ();
|
||||
|
||||
if (is_drawable()) {
|
||||
track_canvas.get_window()->set_cursor (*fader_cursor);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -1208,13 +1213,15 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
case GainAutomationLineItem:
|
||||
case RedirectAutomationLineItem:
|
||||
case PanAutomationLineItem:
|
||||
{
|
||||
ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
|
||||
if (line)
|
||||
line->property_fill_color_rgba() = color_map[cEnteredAutomationLine];
|
||||
}
|
||||
if (is_drawable()) {
|
||||
track_canvas.get_window()->set_cursor (*fader_cursor);
|
||||
if (mouse_mode == MouseGain || mouse_mode == MouseObject) {
|
||||
{
|
||||
ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
|
||||
if (line)
|
||||
line->property_fill_color_rgba() = color_map[cEnteredAutomationLine];
|
||||
}
|
||||
if (is_drawable()) {
|
||||
track_canvas.get_window()->set_cursor (*fader_cursor);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -1515,7 +1522,10 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
|
|||
*/
|
||||
if (!drag_info.move_threshold_passed) {
|
||||
|
||||
drag_info.move_threshold_passed = (abs ((int) (drag_info.current_pointer_x - drag_info.grab_x)) > 4);
|
||||
bool x_threshold_passed = (abs ((int) (drag_info.current_pointer_x - drag_info.grab_x)) > 4);
|
||||
bool y_threshold_passed = (abs ((int) (drag_info.current_pointer_y - drag_info.grab_y)) > 4);
|
||||
|
||||
drag_info.move_threshold_passed = (x_threshold_passed || y_threshold_passed);
|
||||
|
||||
// and change the initial grab loc/frame if this drag info wants us to
|
||||
|
||||
|
|
@ -2825,60 +2835,34 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
|
||||
drag_info.want_move_threshold = false; // don't copy again
|
||||
|
||||
/* this is committed in the grab finished callback. */
|
||||
|
||||
begin_reversible_command (_("Drag region copy"));
|
||||
|
||||
/* duplicate the region(s) */
|
||||
|
||||
vector<RegionView*> new_regionviews;
|
||||
|
||||
set<boost::shared_ptr<Playlist> > affected_playlists;
|
||||
pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
|
||||
|
||||
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
|
||||
RegionView* rv;
|
||||
|
||||
RegionView* nrv;
|
||||
AudioRegionView* arv = dynamic_cast<AudioRegionView*>(rv);
|
||||
MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(rv);
|
||||
|
||||
rv = (*i);
|
||||
|
||||
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);
|
||||
if (insert_result.second) {
|
||||
session->add_command (new MementoCommand<Playlist>(*to_playlist, &to_playlist->get_state(), 0));
|
||||
}
|
||||
|
||||
latest_regionview = 0;
|
||||
|
||||
sigc::connection c = rtv->view()->RegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view));
|
||||
|
||||
/* create a new region with the same name. */
|
||||
|
||||
boost::shared_ptr<Region> newregion;
|
||||
if (arv)
|
||||
nrv = new AudioRegionView (*arv);
|
||||
else if (mrv)
|
||||
nrv = new MidiRegionView (*mrv);
|
||||
else
|
||||
continue;
|
||||
|
||||
newregion = RegionFactory::create (rv->region());
|
||||
assert(newregion != 0);
|
||||
nrv->get_canvas_group()->show ();
|
||||
|
||||
/* if the original region was locked, we don't care */
|
||||
|
||||
newregion->set_locked (false);
|
||||
|
||||
to_playlist->add_region (newregion, (nframes_t) (rv->region()->position() * rtv->get_diskstream()->speed()));
|
||||
|
||||
c.disconnect ();
|
||||
|
||||
if (latest_regionview) {
|
||||
new_regionviews.push_back (latest_regionview);
|
||||
}
|
||||
new_regionviews.push_back (nrv);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (new_regionviews.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* reset selection to new regionviews */
|
||||
|
||||
selection->set (new_regionviews);
|
||||
|
|
@ -2886,6 +2870,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
/* reset drag_info data to reflect the fact that we are dragging the copies */
|
||||
|
||||
drag_info.data = new_regionviews.front();
|
||||
|
||||
swap_grab (new_regionviews.front()->get_canvas_group (), 0, event->motion.time);
|
||||
}
|
||||
|
||||
|
|
@ -3164,149 +3149,147 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
MOTION
|
||||
************************************************************/
|
||||
|
||||
pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
|
||||
const list<RegionView*>& layered_regions = selection->regions.by_layer();
|
||||
bool do_move;
|
||||
|
||||
for (list<RegionView*>::const_iterator i = layered_regions.begin(); i != layered_regions.end(); ++i) {
|
||||
|
||||
RegionView* rv = (*i);
|
||||
double ix1, ix2, iy1, iy2;
|
||||
int32_t temp_pointer_y_span = pointer_y_span;
|
||||
|
||||
/* get item BBox, which will be relative to parent. so we have
|
||||
to query on a child, then convert to world coordinates using
|
||||
the parent.
|
||||
*/
|
||||
|
||||
rv->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
|
||||
rv->get_canvas_group()->i2w (ix1, iy1);
|
||||
TimeAxisView* tvp2 = trackview_by_y_position (iy1);
|
||||
RouteTimeAxisView* canvas_rtv = dynamic_cast<RouteTimeAxisView*>(tvp2);
|
||||
RouteTimeAxisView* temp_rtv;
|
||||
|
||||
if ((pointer_y_span != 0) && !clamp_y_axis) {
|
||||
y_delta = 0;
|
||||
int32_t x = 0;
|
||||
for (j = height_list.begin(); j!= height_list.end(); j++) {
|
||||
if (x == canvas_rtv->order) {
|
||||
/* we found the track the region is on */
|
||||
if (x != original_pointer_order) {
|
||||
/*this isn't from the same track we're dragging from */
|
||||
temp_pointer_y_span = canvas_pointer_y_span;
|
||||
}
|
||||
while (temp_pointer_y_span > 0) {
|
||||
/* we're moving up canvas-wise,
|
||||
so we need to find the next track height
|
||||
*/
|
||||
if (j != height_list.begin()) {
|
||||
j--;
|
||||
}
|
||||
if (x != original_pointer_order) {
|
||||
/* we're not from the dragged track, so ignore hidden tracks. */
|
||||
if ((*j) == 0) {
|
||||
temp_pointer_y_span++;
|
||||
}
|
||||
}
|
||||
y_delta -= (*j);
|
||||
temp_pointer_y_span--;
|
||||
}
|
||||
while (temp_pointer_y_span < 0) {
|
||||
y_delta += (*j);
|
||||
if (x != original_pointer_order) {
|
||||
if ((*j) == 0) {
|
||||
temp_pointer_y_span--;
|
||||
}
|
||||
}
|
||||
|
||||
if (j != height_list.end()) {
|
||||
j++;
|
||||
}
|
||||
temp_pointer_y_span++;
|
||||
}
|
||||
/* find out where we'll be when we move and set height accordingly */
|
||||
|
||||
tvp2 = trackview_by_y_position (iy1 + y_delta);
|
||||
temp_rtv = dynamic_cast<RouteTimeAxisView*>(tvp2);
|
||||
rv->set_height (temp_rtv->height);
|
||||
|
||||
/* if you un-comment the following, the region colours will follow the track colours whilst dragging,
|
||||
personally, i think this can confuse things, but never mind.
|
||||
*/
|
||||
|
||||
//const GdkColor& col (temp_rtv->view->get_region_color());
|
||||
//rv->set_color (const_cast<GdkColor&>(col));
|
||||
break;
|
||||
}
|
||||
x++;
|
||||
}
|
||||
}
|
||||
|
||||
/* prevent the regionview from being moved to before
|
||||
the zero position on the canvas.
|
||||
*/
|
||||
/* clamp */
|
||||
|
||||
if (x_delta < 0) {
|
||||
if (-x_delta > ix1) {
|
||||
x_delta = -ix1;
|
||||
}
|
||||
} else if ((x_delta > 0) &&(rv->region()->last_frame() > max_frames - x_delta)) {
|
||||
x_delta = max_frames - rv->region()->last_frame();
|
||||
}
|
||||
|
||||
if (drag_info.first_move) {
|
||||
|
||||
/* hide any dependent views */
|
||||
|
||||
rv->get_time_axis_view().hide_dependent_views (*rv);
|
||||
|
||||
/* this is subtle. raising the regionview itself won't help,
|
||||
because raise_to_top() just puts the item on the top of
|
||||
its parent's stack. so, we need to put the trackview canvas_display group
|
||||
on the top, since its parent is the whole canvas.
|
||||
*/
|
||||
|
||||
rv->get_canvas_group()->raise_to_top();
|
||||
rv->get_time_axis_view().canvas_display->raise_to_top();
|
||||
cursor_group->raise_to_top();
|
||||
|
||||
/* freeze the playlists from notifying till
|
||||
the motion is done.
|
||||
*/
|
||||
|
||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (&rv->get_time_axis_view());
|
||||
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 */
|
||||
|
||||
insert_result = motion_frozen_playlists.insert (pl);
|
||||
if (insert_result.second) {
|
||||
pl->freeze();
|
||||
session->add_command(new MementoCommand<Playlist>(*pl, &pl->get_state(), 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
rv->region()->set_opaque(false);
|
||||
}
|
||||
|
||||
if (drag_info.brushing) {
|
||||
mouse_brush_insert_region (rv, pending_region_position);
|
||||
} else {
|
||||
rv->move (x_delta, y_delta);
|
||||
}
|
||||
}
|
||||
|
||||
if (drag_info.first_move) {
|
||||
cursor_group->raise_to_top();
|
||||
if (drag_info.move_threshold_passed) {
|
||||
do_move = true;
|
||||
} else {
|
||||
do_move = false;
|
||||
}
|
||||
} else {
|
||||
do_move = true;
|
||||
}
|
||||
|
||||
if (do_move) {
|
||||
|
||||
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) {
|
||||
|
||||
RegionView* rv = (*i);
|
||||
double ix1, ix2, iy1, iy2;
|
||||
int32_t temp_pointer_y_span = pointer_y_span;
|
||||
|
||||
/* get item BBox, which will be relative to parent. so we have
|
||||
to query on a child, then convert to world coordinates using
|
||||
the parent.
|
||||
*/
|
||||
|
||||
rv->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
|
||||
rv->get_canvas_group()->i2w (ix1, iy1);
|
||||
TimeAxisView* tvp2 = trackview_by_y_position (iy1);
|
||||
RouteTimeAxisView* canvas_rtv = dynamic_cast<RouteTimeAxisView*>(tvp2);
|
||||
RouteTimeAxisView* temp_rtv;
|
||||
|
||||
if ((pointer_y_span != 0) && !clamp_y_axis) {
|
||||
y_delta = 0;
|
||||
int32_t x = 0;
|
||||
for (j = height_list.begin(); j!= height_list.end(); j++) {
|
||||
if (x == canvas_rtv->order) {
|
||||
/* we found the track the region is on */
|
||||
if (x != original_pointer_order) {
|
||||
/*this isn't from the same track we're dragging from */
|
||||
temp_pointer_y_span = canvas_pointer_y_span;
|
||||
}
|
||||
while (temp_pointer_y_span > 0) {
|
||||
/* we're moving up canvas-wise,
|
||||
so we need to find the next track height
|
||||
*/
|
||||
if (j != height_list.begin()) {
|
||||
j--;
|
||||
}
|
||||
if (x != original_pointer_order) {
|
||||
/* we're not from the dragged track, so ignore hidden tracks. */
|
||||
if ((*j) == 0) {
|
||||
temp_pointer_y_span++;
|
||||
}
|
||||
}
|
||||
y_delta -= (*j);
|
||||
temp_pointer_y_span--;
|
||||
}
|
||||
while (temp_pointer_y_span < 0) {
|
||||
y_delta += (*j);
|
||||
if (x != original_pointer_order) {
|
||||
if ((*j) == 0) {
|
||||
temp_pointer_y_span--;
|
||||
}
|
||||
}
|
||||
|
||||
if (j != height_list.end()) {
|
||||
j++;
|
||||
}
|
||||
temp_pointer_y_span++;
|
||||
}
|
||||
/* find out where we'll be when we move and set height accordingly */
|
||||
|
||||
tvp2 = trackview_by_y_position (iy1 + y_delta);
|
||||
temp_rtv = dynamic_cast<RouteTimeAxisView*>(tvp2);
|
||||
rv->set_height (temp_rtv->height);
|
||||
|
||||
/* if you un-comment the following, the region colours will follow the track colours whilst dragging,
|
||||
personally, i think this can confuse things, but never mind.
|
||||
*/
|
||||
|
||||
//const GdkColor& col (temp_rtv->view->get_region_color());
|
||||
//rv->set_color (const_cast<GdkColor&>(col));
|
||||
break;
|
||||
}
|
||||
x++;
|
||||
}
|
||||
}
|
||||
|
||||
/* prevent the regionview from being moved to before
|
||||
the zero position on the canvas.
|
||||
*/
|
||||
/* clamp */
|
||||
|
||||
drag_info.first_move = false;
|
||||
|
||||
if (x_delta < 0) {
|
||||
if (-x_delta > ix1) {
|
||||
x_delta = -ix1;
|
||||
}
|
||||
} else if ((x_delta > 0) &&(rv->region()->last_frame() > max_frames - x_delta)) {
|
||||
x_delta = max_frames - rv->region()->last_frame();
|
||||
}
|
||||
|
||||
if (drag_info.first_move) {
|
||||
|
||||
/* hide any dependent views */
|
||||
|
||||
rv->get_time_axis_view().hide_dependent_views (*rv);
|
||||
|
||||
/* this is subtle. raising the regionview itself won't help,
|
||||
because raise_to_top() just puts the item on the top of
|
||||
its parent's stack. so, we need to put the trackview canvas_display group
|
||||
on the top, since its parent is the whole canvas.
|
||||
*/
|
||||
|
||||
rv->get_canvas_group()->raise_to_top();
|
||||
rv->get_time_axis_view().canvas_display->raise_to_top();
|
||||
cursor_group->raise_to_top();
|
||||
|
||||
rv->fake_set_opaque (true);
|
||||
}
|
||||
|
||||
if (drag_info.brushing) {
|
||||
mouse_brush_insert_region (rv, pending_region_position);
|
||||
} else {
|
||||
rv->move (x_delta, y_delta);
|
||||
}
|
||||
|
||||
} /* foreach region */
|
||||
|
||||
} /* if do_move */
|
||||
|
||||
if (drag_info.first_move && drag_info.move_threshold_passed) {
|
||||
cursor_group->raise_to_top();
|
||||
drag_info.first_move = false;
|
||||
}
|
||||
|
||||
if (x_delta != 0 && !drag_info.brushing) {
|
||||
show_verbose_time_cursor (drag_info.last_frame_position, 10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -3317,7 +3300,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
|
||||
bool nocommit = true;
|
||||
double speed;
|
||||
RouteTimeAxisView* atv;
|
||||
RouteTimeAxisView* rtv;
|
||||
bool regionview_y_movement;
|
||||
bool regionview_x_movement;
|
||||
|
||||
|
|
@ -3346,9 +3329,9 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
/* adjust for track speed */
|
||||
speed = 1.0;
|
||||
|
||||
atv = dynamic_cast<RouteTimeAxisView*> (drag_info.last_trackview);
|
||||
if (atv && atv->get_diskstream()) {
|
||||
speed = atv->get_diskstream()->speed();
|
||||
rtv = dynamic_cast<RouteTimeAxisView*> (drag_info.last_trackview);
|
||||
if (rtv && rtv->get_diskstream()) {
|
||||
speed = rtv->get_diskstream()->speed();
|
||||
}
|
||||
|
||||
regionview_x_movement = (drag_info.last_frame_position != (nframes_t) (rv->region()->position()/speed));
|
||||
|
|
@ -3357,106 +3340,94 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
//printf ("last_frame: %s position is %lu %g\n", rv->get_time_axis_view().name().c_str(), drag_info.last_frame_position, speed);
|
||||
//printf ("last_rackview: %s \n", drag_info.last_trackview->name().c_str());
|
||||
|
||||
char* op_string;
|
||||
|
||||
if (drag_info.copy) {
|
||||
if (drag_info.x_constrained) {
|
||||
op_string = _("fixed time region copy");
|
||||
} else {
|
||||
op_string = _("region copy");
|
||||
}
|
||||
} else {
|
||||
if (drag_info.x_constrained) {
|
||||
op_string = _("fixed time region drag");
|
||||
} else {
|
||||
op_string = _("region drag");
|
||||
}
|
||||
}
|
||||
|
||||
begin_reversible_command (op_string);
|
||||
|
||||
if (regionview_y_movement) {
|
||||
|
||||
/* motion between tracks */
|
||||
|
||||
list<RegionView*> new_selection;
|
||||
|
||||
/* moved to a different audio track. */
|
||||
|
||||
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ) {
|
||||
|
||||
RegionView* rv2 = (*i);
|
||||
|
||||
/* the region that used to be in the old playlist is not
|
||||
moved to the new one - we make a copy of it. as a result,
|
||||
any existing editor for the region should no longer be
|
||||
visible.
|
||||
*/
|
||||
|
||||
if (!drag_info.copy) {
|
||||
rv2->hide_region_editor();
|
||||
}
|
||||
new_selection.push_back (rv2);
|
||||
i++;
|
||||
}
|
||||
list<RegionView*> new_selection;
|
||||
new_selection = selection->regions.by_layer();
|
||||
selection->clear_regions ();
|
||||
|
||||
/* first, freeze the target tracks */
|
||||
for (list<RegionView*>::const_iterator i = new_selection.begin(); i != new_selection.end(); ++i) {
|
||||
|
||||
RegionView* rv = (*i);
|
||||
|
||||
for (list<RegionView*>::const_iterator i = new_selection.begin(); i != new_selection.end();i++ ) {
|
||||
|
||||
boost::shared_ptr<Playlist> from_playlist;
|
||||
boost::shared_ptr<Playlist> to_playlist;
|
||||
|
||||
double ix1, ix2, iy1, iy2;
|
||||
|
||||
(*i)->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
|
||||
(*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();
|
||||
|
||||
/* the from_playlist was frozen in the "first_move" case
|
||||
of the motion handler. the insert can fail,
|
||||
but that doesn't matter. it just means
|
||||
we already have the playlist in the list.
|
||||
*/
|
||||
|
||||
motion_frozen_playlists.insert (from_playlist);
|
||||
|
||||
/* only freeze the to_playlist once */
|
||||
|
||||
insert_result = motion_frozen_playlists.insert(to_playlist);
|
||||
if (insert_result.second) {
|
||||
to_playlist->freeze();
|
||||
session->add_command(new MementoCommand<Playlist>(*to_playlist, &to_playlist->get_state(), 0));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* now do it again with the actual operations */
|
||||
|
||||
for (list<RegionView*>::const_iterator i = new_selection.begin(); i != new_selection.end();i++ ) {
|
||||
|
||||
boost::shared_ptr<Playlist> from_playlist;
|
||||
boost::shared_ptr<Playlist> to_playlist;
|
||||
|
||||
double ix1, ix2, iy1, iy2;
|
||||
|
||||
(*i)->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
|
||||
(*i)->get_canvas_group()->i2w (ix1, iy1);
|
||||
rv->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
|
||||
rv->get_canvas_group()->i2w (ix1, iy1);
|
||||
TimeAxisView* tvp2 = trackview_by_y_position (iy1);
|
||||
RouteTimeAxisView* atv2 = dynamic_cast<RouteTimeAxisView*>(tvp2);
|
||||
|
||||
from_playlist = (*i)->region()->playlist();
|
||||
to_playlist = atv2->playlist();
|
||||
RouteTimeAxisView* rtv2 = dynamic_cast<RouteTimeAxisView*>(tvp2);
|
||||
|
||||
latest_regionview = 0;
|
||||
boost::shared_ptr<Playlist> from_playlist = rv->region()->playlist();
|
||||
boost::shared_ptr<Playlist> to_playlist = rtv2->playlist();
|
||||
|
||||
where = (nframes_t) (unit_to_frame (ix1) * speed);
|
||||
boost::shared_ptr<Region> new_region (RegionFactory::create ((*i)->region()));
|
||||
boost::shared_ptr<Region> new_region (RegionFactory::create (rv->region()));
|
||||
|
||||
from_playlist->remove_region (((*i)->region()));
|
||||
if (!drag_info.copy) {
|
||||
|
||||
/* the region that used to be in the old playlist is not
|
||||
moved to the new one - we make a copy of it. as a result,
|
||||
any existing editor for the region should no longer be
|
||||
visible.
|
||||
*/
|
||||
|
||||
rv->hide_region_editor();
|
||||
rv->fake_set_opaque (false);
|
||||
|
||||
session->add_command (new MementoCommand<Playlist>(*from_playlist, &from_playlist->get_state(), 0));
|
||||
from_playlist->remove_region ((rv->region()));
|
||||
session->add_command (new MementoCommand<Playlist>(*from_playlist, 0, &from_playlist->get_state()));
|
||||
}
|
||||
|
||||
latest_regionview = 0;
|
||||
|
||||
sigc::connection c = atv2->view()->RegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view));
|
||||
sigc::connection c = rtv2->view()->RegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view));
|
||||
session->add_command (new MementoCommand<Playlist>(*to_playlist, &to_playlist->get_state(), 0));
|
||||
to_playlist->add_region (new_region, where);
|
||||
session->add_command (new MementoCommand<Playlist>(*to_playlist, 0, &to_playlist->get_state()));
|
||||
c.disconnect ();
|
||||
|
||||
if (latest_regionview) {
|
||||
selection->add (latest_regionview);
|
||||
}
|
||||
|
||||
if (drag_info.copy) {
|
||||
// get rid of the copy
|
||||
delete rv;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
/* motion within a single track */
|
||||
|
||||
list<RegionView*> regions = selection->regions.by_layer();
|
||||
|
||||
if (drag_info.copy) {
|
||||
selection->clear_regions();
|
||||
}
|
||||
|
||||
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
|
||||
for (list<RegionView*>::iterator i = regions.begin(); i != regions.end(); ++i) {
|
||||
|
||||
rv = (*i);
|
||||
|
||||
|
|
@ -3464,12 +3435,13 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
continue;
|
||||
}
|
||||
|
||||
|
||||
if (regionview_x_movement) {
|
||||
double ownspeed = 1.0;
|
||||
RouteTimeAxisView* atv = dynamic_cast<RouteTimeAxisView*> (&(rv->get_time_axis_view()));
|
||||
rtv = dynamic_cast<RouteTimeAxisView*> (&(rv->get_time_axis_view()));
|
||||
|
||||
if (atv && atv->get_diskstream()) {
|
||||
ownspeed = atv->get_diskstream()->speed();
|
||||
if (rtv && rtv->get_diskstream()) {
|
||||
ownspeed = rtv->get_diskstream()->speed();
|
||||
}
|
||||
|
||||
/* base the new region position on the current position of the regionview.*/
|
||||
|
|
@ -3485,23 +3457,62 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
where = rv->region()->position();
|
||||
}
|
||||
|
||||
rv->get_time_axis_view().reveal_dependent_views (*rv);
|
||||
boost::shared_ptr<Playlist> to_playlist = rv->region()->playlist();
|
||||
|
||||
/* 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);
|
||||
/* add the undo */
|
||||
|
||||
session->add_command (new MementoCommand<Playlist>(*to_playlist, &to_playlist->get_state(), 0));
|
||||
|
||||
if (drag_info.copy) {
|
||||
|
||||
boost::shared_ptr<Region> newregion;
|
||||
boost::shared_ptr<Region> ar;
|
||||
|
||||
if ((ar = boost::dynamic_pointer_cast<AudioRegion>(rv->region())) != 0) {
|
||||
newregion = RegionFactory::create (ar);
|
||||
} else {
|
||||
/* XXX MIDI HERE drobilla */
|
||||
continue;
|
||||
}
|
||||
|
||||
/* add it */
|
||||
|
||||
latest_regionview = 0;
|
||||
sigc::connection c = rtv->view()->RegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view));
|
||||
to_playlist->add_region (newregion, (nframes_t) (where * rtv->get_diskstream()->speed()));
|
||||
c.disconnect ();
|
||||
|
||||
if (latest_regionview) {
|
||||
rtv->reveal_dependent_views (*latest_regionview);
|
||||
selection->add (latest_regionview);
|
||||
}
|
||||
|
||||
/* if the original region was locked, we don't care for the new one */
|
||||
|
||||
newregion->set_locked (false);
|
||||
|
||||
} else {
|
||||
|
||||
/* just change the model */
|
||||
|
||||
rv->region()->set_position (where, (void*) this);
|
||||
|
||||
}
|
||||
|
||||
/* add the redo */
|
||||
|
||||
session->add_command (new MementoCommand<Playlist>(*to_playlist, 0, &to_playlist->get_state()));
|
||||
|
||||
/* get rid of the copy */
|
||||
|
||||
if (drag_info.copy) {
|
||||
delete rv;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
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).get()), 0, & (*p)->get_state()));
|
||||
}
|
||||
|
||||
motion_frozen_playlists.clear ();
|
||||
|
||||
|
||||
if (!nocommit) {
|
||||
commit_reversible_command ();
|
||||
}
|
||||
|
|
@ -3516,10 +3527,10 @@ Editor::region_view_item_click (AudioRegionView& rv, GdkEventButton* event)
|
|||
|
||||
if (Keyboard::modifier_state_contains (event->state, Keyboard::Control)) {
|
||||
TimeAxisView* tv = &rv.get_time_axis_view();
|
||||
RouteTimeAxisView* atv = dynamic_cast<RouteTimeAxisView*>(tv);
|
||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(tv);
|
||||
double speed = 1.0;
|
||||
if (atv && atv->is_track()) {
|
||||
speed = atv->get_diskstream()->speed();
|
||||
if (rtv && rtv->is_track()) {
|
||||
speed = rtv->get_diskstream()->speed();
|
||||
}
|
||||
|
||||
if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::Control|Keyboard::Alt))) {
|
||||
|
|
@ -3976,8 +3987,6 @@ Editor::start_trim (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
nframes_t region_end = (nframes_t) (clicked_regionview->region()->last_frame() / speed);
|
||||
nframes_t region_length = (nframes_t) (clicked_regionview->region()->length() / speed);
|
||||
|
||||
motion_frozen_playlists.clear();
|
||||
|
||||
//drag_info.item = clicked_regionview->get_name_highlight();
|
||||
drag_info.item = item;
|
||||
drag_info.motion_callback = &Editor::trim_motion_callback;
|
||||
|
|
@ -4066,7 +4075,7 @@ 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)->fake_set_opaque(false);
|
||||
(*i)->region()->freeze ();
|
||||
|
||||
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
|
||||
|
|
@ -4261,7 +4270,7 @@ 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);
|
||||
(*i)->fake_set_opaque (true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -4887,14 +4896,14 @@ Editor::mouse_brush_insert_region (RegionView* rv, nframes_t pos)
|
|||
return;
|
||||
}
|
||||
|
||||
RouteTimeAxisView* atv = dynamic_cast<RouteTimeAxisView*>(&arv->get_time_axis_view());
|
||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(&arv->get_time_axis_view());
|
||||
|
||||
if (atv == 0 || !atv->is_track()) {
|
||||
if (rtv == 0 || !rtv->is_track()) {
|
||||
return;
|
||||
}
|
||||
|
||||
boost::shared_ptr<Playlist> playlist = atv->playlist();
|
||||
double speed = atv->get_diskstream()->speed();
|
||||
boost::shared_ptr<Playlist> playlist = rtv->playlist();
|
||||
double speed = rtv->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));
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
|
|
@ -2570,7 +2569,7 @@ Editor::bounce_range_selection ()
|
|||
return;
|
||||
}
|
||||
|
||||
TrackViewList *views = get_valid_views (selection->time.track, selection->time.group);
|
||||
TrackSelection views = selection->tracks;
|
||||
|
||||
nframes_t start = selection->time[clicked_selection].start;
|
||||
nframes_t end = selection->time[clicked_selection].end;
|
||||
|
|
@ -2578,7 +2577,7 @@ Editor::bounce_range_selection ()
|
|||
|
||||
begin_reversible_command (_("bounce range"));
|
||||
|
||||
for (TrackViewList::iterator i = views->begin(); i != views->end(); ++i) {
|
||||
for (TrackViewList::iterator i = views.begin(); i != views.end(); ++i) {
|
||||
|
||||
AudioTimeAxisView* atv;
|
||||
|
||||
|
|
@ -2605,8 +2604,6 @@ Editor::bounce_range_selection ()
|
|||
}
|
||||
|
||||
commit_reversible_command ();
|
||||
|
||||
delete views;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
@ -27,12 +26,14 @@
|
|||
|
||||
#include <ardour/audioregion.h>
|
||||
#include <ardour/audiofilesource.h>
|
||||
#include <ardour/silentfilesource.h>
|
||||
#include <ardour/session_region.h>
|
||||
|
||||
#include <gtkmm2ext/stop_signal.h>
|
||||
|
||||
#include "editor.h"
|
||||
#include "editing.h"
|
||||
#include "keyboard.h"
|
||||
#include "ardour_ui.h"
|
||||
#include "gui_thread.h"
|
||||
#include "actions.h"
|
||||
|
|
@ -85,6 +86,9 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
|
|||
string str;
|
||||
TreeModel::Row row;
|
||||
Gdk::Color c;
|
||||
bool missing_source;
|
||||
|
||||
missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source());
|
||||
|
||||
if (!show_automatic_regions_in_region_list && region->automatic()) {
|
||||
return;
|
||||
|
|
@ -124,7 +128,11 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
|
|||
} else if (region->whole_file()) {
|
||||
|
||||
row = *(region_list_model->append());
|
||||
set_color(c, rgba_from_style ("RegionListWholeFile", 0xff, 0, 0, 0, "fg", Gtk::STATE_NORMAL, false ));
|
||||
if (missing_source) {
|
||||
c.set_rgb(65535,0,0); // FIXME: error color from style
|
||||
} else {
|
||||
set_color(c, rgba_from_style ("RegionListWholeFile", 0xff, 0, 0, 0, "fg", Gtk::STATE_NORMAL, false ));
|
||||
}
|
||||
row[region_list_columns.color_] = c;
|
||||
|
||||
if (region->source()->name()[0] == '/') { // external file
|
||||
|
|
@ -150,6 +158,10 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
|
|||
|
||||
}
|
||||
|
||||
if (missing_source) {
|
||||
str += _(" (MISSING)");
|
||||
}
|
||||
|
||||
row[region_list_columns.name] = str;
|
||||
row[region_list_columns.region] = region;
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <algorithm>
|
||||
|
|
@ -24,11 +23,13 @@
|
|||
#include <cassert>
|
||||
|
||||
#include "editor.h"
|
||||
#include "keyboard.h"
|
||||
#include "ardour_ui.h"
|
||||
#include "audio_time_axis.h"
|
||||
#include "midi_time_axis.h"
|
||||
#include "mixer_strip.h"
|
||||
#include "gui_thread.h"
|
||||
#include "actions.h"
|
||||
|
||||
#include <pbd/unknown_type.h>
|
||||
|
||||
|
|
@ -56,7 +57,7 @@ Editor::handle_new_route (Session::RouteList& routes)
|
|||
boost::shared_ptr<Route> route = (*x);
|
||||
|
||||
if (route->hidden()) {
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (route->default_type() == ARDOUR::DataType::AUDIO)
|
||||
|
|
@ -157,9 +158,10 @@ Editor::remove_route (TimeAxisView *tv)
|
|||
}
|
||||
}
|
||||
/* since the editor mixer goes away when you remove a route, set the
|
||||
* button to inacttive
|
||||
* button to inactive and untick the menu option
|
||||
*/
|
||||
editor_mixer_button.set_active(false);
|
||||
ActionManager::uncheck_toggleaction ("<Actions>/Editor/show-editor-mixer");
|
||||
|
||||
/* and disable if all tracks and/or routes are gone */
|
||||
|
||||
|
|
@ -275,6 +277,8 @@ Editor::redisplay_route_list ()
|
|||
|
||||
}
|
||||
|
||||
full_canvas_height = position;
|
||||
|
||||
/* make sure the cursors stay on top of every newly added track */
|
||||
|
||||
cursor_group->raise_to_top ();
|
||||
|
|
@ -518,11 +522,13 @@ Editor::initial_route_list_display ()
|
|||
void
|
||||
Editor::route_list_change (const Gtk::TreeModel::Path& path,const Gtk::TreeModel::iterator& iter)
|
||||
{
|
||||
session->set_remote_control_ids();
|
||||
redisplay_route_list ();
|
||||
}
|
||||
|
||||
void
|
||||
Editor::route_list_delete (const Gtk::TreeModel::Path& path)
|
||||
{
|
||||
session->set_remote_control_ids();
|
||||
redisplay_route_list ();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdio> // for sprintf, grrr
|
||||
|
|
@ -706,7 +705,7 @@ Editor::update_ruler_visibility ()
|
|||
|
||||
update_fixed_rulers();
|
||||
//update_tempo_based_rulers();
|
||||
tempo_map_changed(Change (0));
|
||||
tempo_map_changed(Change (0), false);
|
||||
|
||||
time_canvas_event_box.show_all();
|
||||
time_button_event_box.show_all();
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: editor.cc 1353 2007-01-18 03:06:15Z paul $
|
||||
*/
|
||||
|
||||
#include <pbd/stacktrace.h>
|
||||
|
|
@ -154,6 +153,11 @@ Editor::extend_selection_to_track (TimeAxisView& view)
|
|||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
Editor::select_all_tracks ()
|
||||
{
|
||||
selection->set (track_views);
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::set_selected_track (TimeAxisView& view, Selection::Operation op, bool no_remove)
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
@ -31,6 +30,7 @@
|
|||
#include <gtkmm2ext/stop_signal.h>
|
||||
|
||||
#include "editor.h"
|
||||
#include "keyboard.h"
|
||||
#include "selection.h"
|
||||
#include "time_axis_view.h"
|
||||
#include "ardour_ui.h"
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdio> // for sprintf, grrr
|
||||
|
|
@ -94,13 +93,13 @@ Editor::draw_metric_marks (const Metrics& metrics)
|
|||
}
|
||||
|
||||
void
|
||||
Editor::tempo_map_changed (Change ignored)
|
||||
Editor::tempo_map_changed (Change ignored, bool immediate_redraw)
|
||||
{
|
||||
if (!session) {
|
||||
return;
|
||||
}
|
||||
|
||||
ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::tempo_map_changed), ignored));
|
||||
ENSURE_GUI_THREAD(bind (mem_fun (*this, &Editor::tempo_map_changed), ignored, immediate_redraw));
|
||||
|
||||
BBT_Time previous_beat, next_beat; // the beats previous to the leftmost frame and after the rightmost frame
|
||||
|
||||
|
|
@ -135,18 +134,27 @@ Editor::tempo_map_changed (Change ignored)
|
|||
current_bbt_points = 0;
|
||||
}
|
||||
|
||||
redisplay_tempo ();
|
||||
if (immediate_redraw) {
|
||||
|
||||
hide_measures ();
|
||||
|
||||
if (session && current_bbt_points) {
|
||||
draw_measures ();
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if (session && current_bbt_points) {
|
||||
Glib::signal_idle().connect (mem_fun (*this, &Editor::lazy_hide_and_draw_measures));
|
||||
} else {
|
||||
hide_measures ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::redisplay_tempo ()
|
||||
{
|
||||
|
||||
if (session && current_bbt_points) {
|
||||
Glib::signal_idle().connect (mem_fun (*this, &Editor::lazy_hide_and_draw_measures));
|
||||
} else {
|
||||
hide_measures ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
|
||||
*/
|
||||
|
||||
|
|
@ -109,7 +108,6 @@ ExportDialog::ExportDialog(PublicEditor& e)
|
|||
src_quality_label (_("Conversion Quality"), 1.0, 0.5),
|
||||
dither_type_label (_("Dither Type"), 1.0, 0.5),
|
||||
cuefile_only_checkbox (_("Export CD Marker File Only")),
|
||||
file_frame (_("Export to File")),
|
||||
file_browse_button (_("Browse")),
|
||||
track_selector_button (_("Specific tracks ..."))
|
||||
{
|
||||
|
|
@ -571,7 +569,7 @@ ExportDialog::save_state()
|
|||
|
||||
row = *ri;
|
||||
track->add_property(X_("channel1"), row[exp_cols.left] ? X_("on") : X_("off"));
|
||||
track->add_property(X_("channel1"), row[exp_cols.right] ? X_("on") : X_("off"));
|
||||
track->add_property(X_("channel2"), row[exp_cols.right] ? X_("on") : X_("off"));
|
||||
|
||||
tracks->add_child_nocopy(*track);
|
||||
}
|
||||
|
|
@ -917,11 +915,9 @@ ExportDialog::do_export ()
|
|||
end_dialog ();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ExportDialog::end_dialog ()
|
||||
{
|
||||
|
||||
if (spec.running) {
|
||||
spec.stop = true;
|
||||
|
||||
|
|
@ -934,7 +930,7 @@ ExportDialog::end_dialog ()
|
|||
}
|
||||
}
|
||||
|
||||
session->engine().freewheel (false);
|
||||
session->finalize_audio_export ();
|
||||
|
||||
hide_all ();
|
||||
|
||||
|
|
@ -950,19 +946,21 @@ ExportDialog::start_export ()
|
|||
}
|
||||
|
||||
/* If the filename hasn't been set before, use the
|
||||
directory above the current session as a default
|
||||
current session's export directory as a default
|
||||
location for the export.
|
||||
*/
|
||||
|
||||
if (file_entry.get_text().length() == 0) {
|
||||
string dir = session->path();
|
||||
string dir = session->export_dir();
|
||||
string::size_type last_slash;
|
||||
|
||||
if ((last_slash = dir.find_last_of ('/')) != string::npos) {
|
||||
if ((last_slash = dir.find_last_of ('/')) != string::npos && last_slash != 0) {
|
||||
dir = dir.substr (0, last_slash+1);
|
||||
}
|
||||
|
||||
dir = dir + "export.wav";
|
||||
if (!wants_dir()) {
|
||||
dir = dir + "export.wav";
|
||||
}
|
||||
|
||||
file_entry.set_text (dir);
|
||||
}
|
||||
|
|
@ -1307,7 +1305,7 @@ ExportDialog::window_closed (GdkEventAny *ignored)
|
|||
void
|
||||
ExportDialog::browse ()
|
||||
{
|
||||
FileChooserDialog dialog("Export to file", FILE_CHOOSER_ACTION_SAVE);
|
||||
FileChooserDialog dialog("Export to file", browse_action());
|
||||
dialog.set_transient_for(*this);
|
||||
dialog.set_filename (file_entry.get_text());
|
||||
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include <gtkmm/progressbar.h>
|
||||
#include <gtkmm/scrolledwindow.h>
|
||||
#include <gtkmm/fileselection.h>
|
||||
#include <gtkmm/filechooser.h>
|
||||
#include <gtkmm/comboboxtext.h>
|
||||
#include <gtkmm/treeview.h>
|
||||
#include <gtkmm/liststore.h>
|
||||
|
|
@ -56,8 +57,11 @@ class ExportDialog : public ArdourDialog
|
|||
virtual void set_range (nframes_t start, nframes_t end);
|
||||
void start_export ();
|
||||
|
||||
virtual Gtk::FileChooserAction browse_action() const { return Gtk::FILE_CHOOSER_ACTION_SAVE; }
|
||||
|
||||
protected:
|
||||
ARDOUR::AudioExportSpecification spec;
|
||||
Gtk::Frame file_frame;
|
||||
|
||||
struct ExportModelColumns : public Gtk::TreeModel::ColumnRecord
|
||||
{
|
||||
|
|
@ -86,6 +90,8 @@ class ExportDialog : public ArdourDialog
|
|||
// audio data. spec has already been filled with user input before calling
|
||||
// this method. The dialog will be closed after this function exited.
|
||||
virtual void export_audio_data() = 0;
|
||||
|
||||
virtual bool wants_dir() { return false; }
|
||||
|
||||
// reads the user input and fills spec with the according values
|
||||
// filepath: complete path to the target file, including filename
|
||||
|
|
@ -138,7 +144,6 @@ class ExportDialog : public ArdourDialog
|
|||
|
||||
Gtk::CheckButton cuefile_only_checkbox;
|
||||
|
||||
Gtk::Frame file_frame;
|
||||
Gtk::Entry file_entry;
|
||||
Gtk::HBox file_hbox;
|
||||
Gtk::Button file_browse_button;
|
||||
|
|
|
|||
|
|
@ -38,12 +38,20 @@ using namespace std;
|
|||
ExportRangeMarkersDialog::ExportRangeMarkersDialog (PublicEditor& editor)
|
||||
: ExportDialog(editor)
|
||||
{
|
||||
set_title (_("ardour: export ranges"));
|
||||
file_frame.set_label (_("Export to Directory"));
|
||||
|
||||
do_not_allow_export_cd_markers();
|
||||
|
||||
total_duration = 0;
|
||||
current_range_marker_index = 0;
|
||||
}
|
||||
|
||||
|
||||
Gtk::FileChooserAction
|
||||
ExportRangeMarkersDialog::browse_action () const
|
||||
{
|
||||
return Gtk::FILE_CHOOSER_ACTION_CREATE_FOLDER;
|
||||
}
|
||||
|
||||
void
|
||||
ExportRangeMarkersDialog::export_audio_data ()
|
||||
|
|
@ -57,7 +65,7 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList&
|
|||
Locations::LocationList::iterator locationIter;
|
||||
current_range_marker_index = 0;
|
||||
init_progress_computing(locations);
|
||||
|
||||
|
||||
for (locationIter = locations.begin(); locationIter != locations.end(); ++locationIter) {
|
||||
Location *currentLocation = (*locationIter);
|
||||
|
||||
|
|
@ -82,7 +90,8 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList&
|
|||
|
||||
// wait until export of this range finished
|
||||
gtk_main_iteration();
|
||||
while(spec.running){
|
||||
|
||||
while (spec.running){
|
||||
if(gtk_events_pending()){
|
||||
gtk_main_iteration();
|
||||
}else {
|
||||
|
|
@ -90,7 +99,6 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList&
|
|||
}
|
||||
}
|
||||
|
||||
getSession().engine().freewheel (false);
|
||||
current_range_marker_index++;
|
||||
}
|
||||
}
|
||||
|
|
@ -140,8 +148,7 @@ ExportRangeMarkersDialog::is_filepath_valid(string &filepath)
|
|||
|
||||
if ( (stat (filepath.c_str(), &statbuf) != 0) ||
|
||||
(!S_ISDIR (statbuf.st_mode)) ) {
|
||||
string txt = _("Please select an existing target directory. Files\n"
|
||||
"are not allowed!");
|
||||
string txt = _("Please select an existing target directory. Files are not allowed!");
|
||||
MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true);
|
||||
msg.run();
|
||||
return false;
|
||||
|
|
@ -173,13 +180,11 @@ ExportRangeMarkersDialog::init_progress_computing(Locations::LocationList& locat
|
|||
Location *currentLocation = (*locationIter);
|
||||
|
||||
if(currentLocation->is_range_marker()){
|
||||
range_markers_durations_aggregated.push_back(
|
||||
duration_before_current_location);
|
||||
range_markers_durations_aggregated.push_back (duration_before_current_location);
|
||||
|
||||
nframes_t duration =
|
||||
currentLocation->end() - currentLocation->start();
|
||||
nframes_t duration = currentLocation->end() - currentLocation->start();
|
||||
|
||||
range_markers_durations.push_back(duration);
|
||||
range_markers_durations.push_back (duration);
|
||||
duration_before_current_location += duration;
|
||||
}
|
||||
}
|
||||
|
|
@ -192,14 +197,12 @@ gint
|
|||
ExportRangeMarkersDialog::progress_timeout ()
|
||||
{
|
||||
double progress = 0.0;
|
||||
|
||||
if(current_range_marker_index >= range_markers_durations.size()){
|
||||
|
||||
if (current_range_marker_index >= range_markers_durations.size()){
|
||||
progress = 1.0;
|
||||
}
|
||||
else{
|
||||
progress =
|
||||
((double) range_markers_durations_aggregated[current_range_marker_index] +
|
||||
(spec.progress * (double) range_markers_durations[current_range_marker_index])) /
|
||||
} else{
|
||||
progress = ((double) range_markers_durations_aggregated[current_range_marker_index] +
|
||||
(spec.progress * (double) range_markers_durations[current_range_marker_index])) /
|
||||
(double) total_duration;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,10 +30,14 @@ class ExportRangeMarkersDialog : public ExportDialog
|
|||
public:
|
||||
ExportRangeMarkersDialog (PublicEditor&);
|
||||
|
||||
Gtk::FileChooserAction browse_action() const;
|
||||
|
||||
protected:
|
||||
virtual bool is_filepath_valid(string &filepath);
|
||||
|
||||
void export_audio_data();
|
||||
|
||||
bool wants_dir() { return true; }
|
||||
|
||||
private:
|
||||
// keeps the duration of all range_markers before the current
|
||||
|
|
|
|||
|
|
@ -31,6 +31,9 @@
|
|||
ExportRegionDialog::ExportRegionDialog (PublicEditor& editor, boost::shared_ptr<ARDOUR::Region> region)
|
||||
: ExportDialog(editor)
|
||||
{
|
||||
set_title (_("ardour: export region"));
|
||||
file_frame.set_label (_("Export to File")),
|
||||
|
||||
audio_region = boost::dynamic_pointer_cast<ARDOUR::AudioRegion>(region);
|
||||
assert(audio_region);
|
||||
|
||||
|
|
|
|||
|
|
@ -21,13 +21,14 @@
|
|||
#include "ardour_ui.h"
|
||||
#include "export_session_dialog.h"
|
||||
|
||||
#include "i18n.h"
|
||||
|
||||
ExportSessionDialog::ExportSessionDialog (PublicEditor& editor)
|
||||
: ExportDialog(editor)
|
||||
{
|
||||
file_frame.set_label (_("Export to File"));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ExportSessionDialog::export_audio_data ()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <ardour/curve.h>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <limits.h>
|
||||
|
|
@ -107,11 +106,11 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
|
|||
gain_display_box.pack_start (gain_display, true, true);
|
||||
|
||||
peak_display.set_name ("MixerStripPeakDisplay");
|
||||
peak_display.set_has_frame (false);
|
||||
peak_display.set_editable (false);
|
||||
// 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.set_text (_("-inf"));
|
||||
peak_display.set_label (_("-inf"));
|
||||
peak_display.unset_flags (Gtk::CAN_FOCUS);
|
||||
|
||||
meter_metric_area.set_name ("MeterMetricsStrip");
|
||||
|
|
@ -161,7 +160,7 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
|
|||
|
||||
using namespace Menu_Helpers;
|
||||
|
||||
gain_astate_menu.items().push_back (MenuElem (_("Off"),
|
||||
gain_astate_menu.items().push_back (MenuElem (_("Manual"),
|
||||
bind (mem_fun (*_io, &IO::set_gain_automation_state), (AutoState) Off)));
|
||||
gain_astate_menu.items().push_back (MenuElem (_("Play"),
|
||||
bind (mem_fun (*_io, &IO::set_gain_automation_state), (AutoState) Play)));
|
||||
|
|
@ -231,11 +230,11 @@ GainMeter::render_metrics (Gtk::Widget& w)
|
|||
Glib::RefPtr<Gdk::Window> win (w.get_window());
|
||||
Glib::RefPtr<Gdk::GC> fg_gc (w.get_style()->get_fg_gc (Gtk::STATE_NORMAL));
|
||||
Glib::RefPtr<Gdk::GC> bg_gc (w.get_style()->get_bg_gc (Gtk::STATE_NORMAL));
|
||||
gint x, y, width, height, depth;
|
||||
gint width, height;
|
||||
int db_points[] = { -50, -40, -20, -30, -10, -3, 0, 4 };
|
||||
char buf[32];
|
||||
|
||||
win->get_geometry (x, y, width, height, depth);
|
||||
win->get_size (width, height);
|
||||
|
||||
Glib::RefPtr<Gdk::Pixmap> pixmap = Gdk::Pixmap::create (win, width, height);
|
||||
|
||||
|
|
@ -274,9 +273,9 @@ GainMeter::meter_metrics_expose (GdkEventExpose *ev)
|
|||
Glib::RefPtr<Gdk::GC> bg_gc (meter_metric_area.get_style()->get_bg_gc (Gtk::STATE_NORMAL));
|
||||
GdkRectangle base_rect;
|
||||
GdkRectangle draw_rect;
|
||||
gint x, y, width, height, depth;
|
||||
gint width, height;
|
||||
|
||||
win->get_geometry (x, y, width, height, depth);
|
||||
win->get_size (width, height);
|
||||
|
||||
base_rect.width = width;
|
||||
base_rect.height = height;
|
||||
|
|
@ -332,10 +331,10 @@ GainMeter::update_meters ()
|
|||
max_peak = mpeak;
|
||||
/* set peak display */
|
||||
if (max_peak <= -200.0f) {
|
||||
peak_display.set_text (_("-inf"));
|
||||
peak_display.set_label (_("-inf"));
|
||||
} else {
|
||||
snprintf (buf, sizeof(buf), "%.1f", max_peak);
|
||||
peak_display.set_text (buf);
|
||||
peak_display.set_label (buf);
|
||||
}
|
||||
|
||||
if (max_peak >= 0.0f) {
|
||||
|
|
@ -452,6 +451,14 @@ GainMeter::setup_meters ()
|
|||
}
|
||||
}
|
||||
|
||||
int
|
||||
GainMeter::get_gm_width ()
|
||||
{
|
||||
Gtk::Requisition sz;
|
||||
hbox.size_request (sz);
|
||||
return sz.width;
|
||||
}
|
||||
|
||||
bool
|
||||
GainMeter::gain_key_press (GdkEventKey* ev)
|
||||
{
|
||||
|
|
@ -491,7 +498,7 @@ GainMeter::reset_peak_display ()
|
|||
}
|
||||
|
||||
max_peak = -INFINITY;
|
||||
peak_display.set_text (_("-Inf"));
|
||||
peak_display.set_label (_("-Inf"));
|
||||
peak_display.set_name ("MixerStripPeakDisplay");
|
||||
}
|
||||
|
||||
|
|
@ -513,7 +520,7 @@ GainMeter::meter_button_release (GdkEventButton* ev, uint32_t which)
|
|||
case 1:
|
||||
meters[which].meter->clear();
|
||||
max_peak = minus_infinity();
|
||||
peak_display.set_text (_("-inf"));
|
||||
peak_display.set_label (_("-inf"));
|
||||
peak_display.set_name ("MixerStripPeakDisplay");
|
||||
break;
|
||||
|
||||
|
|
@ -842,7 +849,7 @@ GainMeter::_astate_string (AutoState state, bool shrt)
|
|||
|
||||
switch (state) {
|
||||
case Off:
|
||||
sstr = (shrt ? "O" : _("O"));
|
||||
sstr = (shrt ? "M" : _("M"));
|
||||
break;
|
||||
case Play:
|
||||
sstr = (shrt ? "P" : _("P"));
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __ardour_gtk_gain_meter_h__
|
||||
|
|
@ -70,6 +69,8 @@ class GainMeter : public Gtk::VBox
|
|||
void set_width (Width);
|
||||
void setup_meters ();
|
||||
|
||||
int get_gm_width ();
|
||||
|
||||
void set_meter_strip_name (const char * name);
|
||||
void set_fader_name (const char * name);
|
||||
|
||||
|
|
@ -85,7 +86,7 @@ class GainMeter : public Gtk::VBox
|
|||
Gtkmm2ext::VSliderController *gain_slider;
|
||||
Gtk::Adjustment gain_adjustment;
|
||||
Gtkmm2ext::FocusEntry gain_display;
|
||||
Gtk::Entry peak_display;
|
||||
Gtk::Button peak_display;
|
||||
Gtk::HBox gain_display_box;
|
||||
Gtk::HBox fader_box;
|
||||
Gtk::DrawingArea meter_metric_area;
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __ardour_gtk_ghost_region_h__
|
||||
|
|
|
|||
BIN
gtk2_ardour/icons/crossfade_in_constant.png
Normal file
|
After Width: | Height: | Size: 693 B |
BIN
gtk2_ardour/icons/crossfade_in_dipped.png
Normal file
|
After Width: | Height: | Size: 667 B |
BIN
gtk2_ardour/icons/crossfade_in_fast-cut.png
Normal file
|
After Width: | Height: | Size: 686 B |
BIN
gtk2_ardour/icons/crossfade_in_slow-cut.png
Normal file
|
After Width: | Height: | Size: 723 B |
BIN
gtk2_ardour/icons/crossfade_in_slow-fade.png
Normal file
|
After Width: | Height: | Size: 730 B |
BIN
gtk2_ardour/icons/crossfade_in_transition.png
Normal file
|
After Width: | Height: | Size: 692 B |
BIN
gtk2_ardour/icons/crossfade_out_constant.png
Normal file
|
After Width: | Height: | Size: 720 B |
BIN
gtk2_ardour/icons/crossfade_out_dipped.png
Normal file
|
After Width: | Height: | Size: 831 B |
BIN
gtk2_ardour/icons/crossfade_out_fast-cut.png
Normal file
|
After Width: | Height: | Size: 737 B |
BIN
gtk2_ardour/icons/crossfade_out_slow-cut.png
Normal file
|
After Width: | Height: | Size: 770 B |
BIN
gtk2_ardour/icons/crossfade_out_slow-fade.png
Normal file
|
After Width: | Height: | Size: 798 B |
BIN
gtk2_ardour/icons/crossfade_out_transition.png
Normal file
|
After Width: | Height: | Size: 737 B |
|
|
@ -4,7 +4,6 @@
|
|||
#include "imageframe_p.h"
|
||||
#include <libgnomecanvasmm/private/shape_p.h>
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
/* rect.c
|
||||
*
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
#include <glibmm.h>
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
/* rect.h
|
||||
*
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
|
|
|
|||