merged with 1697 revision of trunk (which is post-rc1 but pre-rc2
git-svn-id: svn://localhost/ardour2/branches/2.1-staging@1698 d708f5d6-7413-0410-9779-e7cbd77b26cf
2
Makefile
|
|
@ -1,4 +1,4 @@
|
|||
all: scons cscope
|
||||
all: scons
|
||||
|
||||
scons:
|
||||
scons
|
||||
|
|
|
|||
45
SConstruct
|
|
@ -16,7 +16,7 @@ import SCons.Node.FS
|
|||
SConsignFile()
|
||||
EnsureSConsVersion(0, 96)
|
||||
|
||||
ardour_version = '2.0beta11.1'
|
||||
ardour_version = '2.0rc1'
|
||||
|
||||
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()
|
||||
|
|
@ -540,7 +542,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
|
||||
|
||||
|
|
@ -606,7 +611,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")
|
||||
|
|
@ -670,13 +675,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
|
||||
|
|
@ -686,8 +697,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")
|
||||
|
|
@ -726,7 +738,8 @@ prep_libcheck(env, libraries['flac'])
|
|||
libraries['flac'].Append(CCFLAGS="-I/usr/local/include", LINKFLAGS="-L/usr/local/lib")
|
||||
|
||||
conf = Configure (libraries['flac'])
|
||||
conf.CheckLib ('FLAC', 'FLAC__stream_decoder_new', language='CXX')
|
||||
if conf.CheckLib ('FLAC', 'FLAC__stream_decoder_new', language='CXX'):
|
||||
conf.env.Append(CCFLAGS='-DHAVE_FLAC')
|
||||
libraries['flac'] = conf.Finish ()
|
||||
|
||||
# or if that fails...
|
||||
|
|
@ -840,7 +853,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['flowcanvas'] = LibraryInfo(LIBS='flowcanvas', LIBPATH='#/libs/flowcanvas', CPPPATH='#libs/flowcanvas')
|
||||
libraries['soundtouch'] = LibraryInfo()
|
||||
|
|
@ -958,11 +971,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' ]
|
||||
|
||||
|
|
@ -1069,6 +1085,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)
|
||||
|
||||
|
|
|
|||
12
ardour.dox
|
|
@ -459,7 +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/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
|
||||
|
|
@ -556,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.
|
||||
|
|
@ -603,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
|
||||
|
|
@ -766,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.
|
||||
|
|
@ -791,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
|
||||
|
|
@ -1005,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.
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
<Ardour>
|
||||
<MIDI-port tag="%MIDITAG%" device="ardour" type="%MIDITYPE%" mode="duplex"/>
|
||||
<MIDI-port tag="control" device="ardour" type="%MIDITYPE%" mode="duplex"/>
|
||||
<MIDI-port tag="mcu" device="ardour" type="%MIDITYPE%" mode="duplex"/>
|
||||
<Config>
|
||||
<Option name="minimum-disk-io-bytes" value="262144"/>
|
||||
<Option name="track-buffer-seconds" value="5.000000"/>
|
||||
|
|
|
|||
|
|
@ -276,6 +276,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 +293,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 +337,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,14 +144,19 @@ 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
|
||||
};
|
||||
|
||||
static const char* translators[] = {
|
||||
N_("French:\n\tAlain Fréhel <alain.frehel@free.fr>\n\tChristophe Combelles <ccomb@free.fr>\n"),
|
||||
N_("German:\n\tKarsten Petersen <kapet@kapet.de>\n"),
|
||||
N_("German:\n\tKarsten Petersen <kapet@kapet.de>\n\tSebastian Arnold <mail@sebastian-arnold.net>\n"),
|
||||
N_("Italian:\n\tFilippo Pappalardo <filippo@email.it>\n"),
|
||||
N_("Portuguese:\n\tRui Nuno Capela <rncbc@rncbc.org>\n"),
|
||||
N_("Brazilian Portuguese:\n\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\
|
||||
|
|
@ -186,7 +190,7 @@ About::About ()
|
|||
}
|
||||
|
||||
set_translator_credits (t);
|
||||
set_copyright (_("Copyright (C) 1999-2006 Paul Davis\n"));
|
||||
set_copyright (_("Copyright (C) 1999-2007 Paul Davis\n"));
|
||||
set_license (_("Ardour comes with ABSOLUTELY NO WARRANTY\n"
|
||||
"This is free software, and you are welcome to redistribute it\n"
|
||||
"under certain conditions; see the file COPYING for details.\n"));
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -148,7 +147,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>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ export ARDOUR_PATH=gtk2_ardour/icons:gtk2_ardour/pixmaps:gtk2_ardour
|
|||
export GTK_PATH=libs/clearlooks
|
||||
|
||||
|
||||
export LD_LIBRARY_PATH=libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/soundtouch:libs/gtkmm2ext:libs/sigc++2:libs/glibmm2:libs/gtkmm2/atk:libs/gtkmm2/pango:libs/gtkmm2/gdk:libs/gtkmm2/gtk:libs/libgnomecanvasmm:libs/libsndfile:libs/appleutility:$LD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH=libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/soundtouch:libs/gtkmm2ext:libs/sigc++2:libs/glibmm2:libs/gtkmm2/atk:libs/gtkmm2/pango:libs/gtkmm2/gdk:libs/gtkmm2/gtk:libs/libgnomecanvasmm:libs/cairomm:libs/libsndfile:libs/appleutility:$LD_LIBRARY_PATH
|
||||
|
||||
# DYLD_LIBRARY_PATH is for darwin.
|
||||
export DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH
|
||||
|
|
|
|||
|
|
@ -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" "")
|
||||
|
|
@ -152,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")
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
cWaveForm 0.0 0.0 0.0 0.80
|
||||
cWaveFormClip 1.0 0.0 0.0 0.90
|
||||
cMutedWaveForm 0.35 0.35 0.35 1.0
|
||||
cSelectedFrameBase 0.71 0.57 0.66 1.0
|
||||
cFrameBase 0.75 0.75 0.76 1.0
|
||||
|
|
@ -41,7 +42,7 @@ cLocationRange 0.29 0.48 0.35 1.0
|
|||
cLocationCDMarker 0.12 0.91 0.77 1.0
|
||||
cLocationLoop 0.21 0.59 0.31 1.0
|
||||
cLocationPunch 0.49 0.23 0.23 1.0
|
||||
cVerboseCanvasCursor 0 0 0 0.74
|
||||
cVerboseCanvasCursor 0.96 0.95 0.08 0.74
|
||||
cRangeDragBarRect 0.59 0.59 0.59 0.78
|
||||
cRangeDragBarRectFill 0.78 0.82 0.70 0.43
|
||||
cRangeDragRect 0.59 0.59 0.59 0.78
|
||||
|
|
@ -69,6 +70,9 @@ cMeasureLineBeat 0.45 0.45 0.45 0.40
|
|||
cMeasureLineBar 0.55 0.55 0.60 0.55
|
||||
cGhostTrackBaseOutline 0.00 0.00 0.00 1.00
|
||||
cGhostTrackBaseFill 0.27 0.00 0.49 0.50
|
||||
cGhostTrackWave 0.0 3.00 0.0 0.30
|
||||
cGhostTrackWaveClip 1.0 0.0 0.0 0.0
|
||||
cGhostTrackZeroLine 0.9 0.0 0.9 0.40
|
||||
cImageTrackBase 0.87 0.87 0.85 1.00
|
||||
cImageTrackOutline 0.00 0.00 0.00 1.00
|
||||
cMarkerTrackBase 0.87 0.87 0.85 1.00
|
||||
|
|
@ -98,3 +102,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"
|
||||
|
|
@ -184,24 +184,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
|
||||
|
|
@ -210,20 +244,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"
|
||||
|
|
@ -231,27 +278,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"
|
||||
{
|
||||
|
|
@ -290,14 +382,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"
|
||||
|
|
@ -721,11 +838,11 @@ style "track_controls_inactive"
|
|||
|
||||
style "edit_controls_base_selected"
|
||||
{
|
||||
bg[NORMAL] = { 0.56, 0.56, 0.56 }
|
||||
bg[ACTIVE] = { 0.56, 0.56, 0.56 }
|
||||
bg[INSENSITIVE] = { 0.56, 0.56, 0.56 }
|
||||
bg[SELECTED] = { 0.56, 0.56, 0.56 }
|
||||
bg[PRELIGHT] = { 0.56, 0.56, 0.56 }
|
||||
bg[NORMAL] = { 0.60, 0.54, 0.60 }
|
||||
bg[ACTIVE] = { 0.60, 0.54, 0.60 }
|
||||
bg[INSENSITIVE] = { 0.60, 0.54, 0.60 }
|
||||
bg[SELECTED] = { 0.60, 0.54, 0.60 }
|
||||
bg[PRELIGHT] = { 0.60, 0.54, 0.60 }
|
||||
}
|
||||
|
||||
style "automation_track_controls_base"
|
||||
|
|
@ -1014,355 +1131,365 @@ 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 "*EditModeSelector" style "medium_bold_entry"
|
||||
widget "*SnapTypeSelector" style "medium_bold_entry"
|
||||
widget "*SnapModeSelector" style "medium_bold_entry"
|
||||
widget "*ZoomFocusSelector" style "medium_bold_entry"
|
||||
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 "*AudioTrackStripBase" style "audio_track_base"
|
||||
widget "*TimeAxisViewControlsBaseUnselected" style "audio_track_base"
|
||||
widget "*AudioTrackControlsBaseUnselected" style "audio_track_base"
|
||||
widget "*AudioTrackFader" style "gain_fader"
|
||||
widget "*AudioBusStripBase" style "audio_bus_base"
|
||||
widget "*BusControlsBaseUnselected" style "audio_bus_base"
|
||||
widget "*AudioBusFader" style "gain_fader"
|
||||
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 "*BusControlsBaseInactiveUnselected" style "track_controls_inactive"
|
||||
widget "*AutomationTrackControlsBaseInactiveUnselected" style "track_controls_inactive"
|
||||
widget "*AutomationTrackName" style "automation_track_name"
|
||||
widget "*AudioTrackControlsBaseInactiveSelected" style "track_controls_inactive"
|
||||
widget "*BusControlsBaseInactiveSelected" 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 "*BusControlsBaseSelected" 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$
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -45,11 +44,13 @@
|
|||
#include <gtkmm2ext/fastmeter.h>
|
||||
#include <gtkmm2ext/stop_signal.h>
|
||||
#include <gtkmm2ext/popup.h>
|
||||
#include <gtkmm2ext/window_title.h>
|
||||
|
||||
#include <midi++/port.h>
|
||||
#include <midi++/mmc.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
#include <ardour/profile.h>
|
||||
#include <ardour/session_route.h>
|
||||
#include <ardour/port.h>
|
||||
#include <ardour/audioengine.h>
|
||||
|
|
@ -69,7 +70,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"
|
||||
|
|
@ -89,13 +89,12 @@ 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;
|
||||
|
||||
ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
|
||||
|
||||
: Gtkmm2ext::UI ("ardour", argcp, argvp, rcfile),
|
||||
: Gtkmm2ext::UI (X_("Ardour"), argcp, argvp, rcfile),
|
||||
|
||||
primary_clock (X_("primary"), false, X_("TransportClockDisplay"), true, false, true),
|
||||
secondary_clock (X_("secondary"), false, X_("SecondaryClockDisplay"), true, false, true),
|
||||
|
|
@ -117,16 +116,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)
|
||||
|
|
@ -163,15 +180,13 @@ 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;
|
||||
keybindings_path = ARDOUR::find_config_file ("ardour.bindings");
|
||||
|
||||
can_save_keybindings = false;
|
||||
Glib::signal_idle().connect (mem_fun (*this, &ARDOUR_UI::first_idle));
|
||||
|
||||
last_configure_time.tv_sec = 0;
|
||||
last_configure_time.tv_usec = 0;
|
||||
|
|
@ -248,10 +263,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);
|
||||
|
|
@ -289,8 +300,6 @@ ARDOUR_UI::~ARDOUR_UI ()
|
|||
if (add_route_dialog) {
|
||||
delete add_route_dialog;
|
||||
}
|
||||
|
||||
AudioSource::stop_peak_thread ();
|
||||
}
|
||||
|
||||
gint
|
||||
|
|
@ -332,6 +341,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 ()
|
||||
{
|
||||
|
|
@ -345,6 +411,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());
|
||||
|
|
@ -364,26 +431,72 @@ ARDOUR_UI::save_ardour_state ()
|
|||
void
|
||||
ARDOUR_UI::startup ()
|
||||
{
|
||||
if (engine->is_realtime()) {
|
||||
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) {
|
||||
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"));
|
||||
|
||||
if (ram == 0 || ((double) limits.rlim_cur / ram) < 0.75) {
|
||||
|
||||
msg.run ();
|
||||
|
||||
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()
|
||||
{
|
||||
|
|
@ -506,13 +619,6 @@ 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 ()
|
||||
{
|
||||
|
|
@ -536,11 +642,11 @@ ARDOUR_UI::update_sample_rate (nframes_t ignored)
|
|||
nframes_t rate = engine->frame_rate();
|
||||
|
||||
if (fmod (rate, 1000.0) != 0.0) {
|
||||
snprintf (buf, sizeof (buf), _("%.1f kHz / %4.1f msecs"),
|
||||
snprintf (buf, sizeof (buf), _("%.1f kHz / %4.1f ms"),
|
||||
(float) rate/1000.0f,
|
||||
(engine->frames_per_cycle() / (float) rate) * 1000.0f);
|
||||
} else {
|
||||
snprintf (buf, sizeof (buf), _("%u kHz / %4.1f msecs"),
|
||||
snprintf (buf, sizeof (buf), _("%u kHz / %4.1f ms"),
|
||||
rate/1000,
|
||||
(engine->frames_per_cycle() / (float) rate) * 1000.0f);
|
||||
}
|
||||
|
|
@ -553,7 +659,7 @@ void
|
|||
ARDOUR_UI::update_cpu_load ()
|
||||
{
|
||||
char buf[32];
|
||||
snprintf (buf, sizeof (buf), _("DSP: %.1f%%"), engine->get_cpu_load());
|
||||
snprintf (buf, sizeof (buf), _("DSP: %5.1f%%"), engine->get_cpu_load());
|
||||
cpu_load_label.set_text (buf);
|
||||
}
|
||||
|
||||
|
|
@ -632,40 +738,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)
|
||||
|
|
@ -912,7 +984,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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -943,6 +1016,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\
|
||||
|
|
@ -1090,11 +1164,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);
|
||||
}
|
||||
|
|
@ -1232,24 +1306,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)
|
||||
{
|
||||
|
|
@ -1411,7 +1467,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
|
||||
|
|
@ -1481,6 +1537,8 @@ ARDOUR_UI::name_io_setup (AudioEngine& engine,
|
|||
}
|
||||
}
|
||||
|
||||
/** Ask the user for the name of a new shapshot and then take it.
|
||||
*/
|
||||
void
|
||||
ARDOUR_UI::snapshot_session ()
|
||||
{
|
||||
|
|
@ -1604,18 +1662,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;
|
||||
}
|
||||
}
|
||||
|
|
@ -1628,12 +1686,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 ()
|
||||
|
||||
|
|
@ -1660,12 +1712,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);
|
||||
|
|
@ -1675,6 +1733,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;
|
||||
|
||||
|
|
@ -1684,7 +1749,7 @@ ARDOUR_UI::new_session (std::string predetermined_path)
|
|||
quit();
|
||||
}
|
||||
new_session_dialog->hide ();
|
||||
return;
|
||||
return false;
|
||||
|
||||
} else if (response == Gtk::RESPONSE_NONE) {
|
||||
|
||||
|
|
@ -1835,15 +1900,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1854,6 +1924,7 @@ ARDOUR_UI::new_session (std::string predetermined_path)
|
|||
show();
|
||||
new_session_dialog->get_window()->set_cursor();
|
||||
new_session_dialog->hide();
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1909,6 +1980,7 @@ ARDOUR_UI::load_session (const string & path, const string & snap_name, string*
|
|||
session->set_clean ();
|
||||
}
|
||||
|
||||
editor->edit_cursor_position (true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1942,7 +2014,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;
|
||||
}
|
||||
|
||||
|
|
@ -2128,9 +2201,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"),
|
||||
|
|
@ -2142,6 +2223,9 @@ Flushing the wastebasket will \n\
|
|||
release an additional\n\
|
||||
%4 %5bytes of disk space.\n"
|
||||
));
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -2166,7 +2250,7 @@ releasing %4 %5bytes of disk space"));
|
|||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::add_route ()
|
||||
ARDOUR_UI::add_route (Gtk::Window* float_window)
|
||||
{
|
||||
int count;
|
||||
|
||||
|
|
@ -2176,7 +2260,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()) {
|
||||
|
|
@ -2283,18 +2369,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, _("\
|
||||
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 ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2303,29 +2389,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
|
||||
|
|
@ -2449,6 +2530,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
|
||||
|
|
@ -2499,6 +2585,9 @@ ARDOUR_UI::save_keybindings ()
|
|||
bool
|
||||
ARDOUR_UI::first_idle ()
|
||||
{
|
||||
if (session) {
|
||||
session->allow_auto_play (true);
|
||||
}
|
||||
can_save_keybindings = true;
|
||||
return false;
|
||||
}
|
||||
|
|
@ -2518,3 +2607,115 @@ 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;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::setup_profile ()
|
||||
{
|
||||
if (gdk_screen_width() < 1200) {
|
||||
Profile->set_small_screen ();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,7 +155,6 @@ 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;
|
||||
|
||||
|
|
@ -188,7 +186,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);
|
||||
|
|
@ -214,6 +212,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
void set_keybindings_path (std::string path);
|
||||
void save_keybindings ();
|
||||
|
||||
void setup_profile ();
|
||||
|
||||
protected:
|
||||
friend class PublicEditor;
|
||||
|
||||
|
|
@ -272,9 +272,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;
|
||||
|
||||
|
|
@ -284,7 +281,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
int setup_windows ();
|
||||
void setup_transport ();
|
||||
void setup_clock ();
|
||||
void setup_adjustables ();
|
||||
|
||||
static ARDOUR_UI *theArdourUI;
|
||||
|
||||
|
|
@ -312,9 +308,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:
|
||||
|
|
@ -355,18 +348,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 ();
|
||||
|
|
@ -398,16 +424,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;
|
||||
|
||||
|
|
@ -430,14 +459,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 {
|
||||
|
|
@ -497,7 +518,6 @@ 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;
|
||||
|
|
@ -585,7 +605,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
/* Keymap handling */
|
||||
|
||||
void install_actions ();
|
||||
void start_keyboard_prefix();
|
||||
|
||||
void toggle_record_enable (uint32_t);
|
||||
|
||||
|
|
@ -609,11 +628,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 ();
|
||||
|
||||
|
|
@ -639,13 +655,15 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
void toggle_send_midi_feedback ();
|
||||
void toggle_use_mmc ();
|
||||
void toggle_send_mmc ();
|
||||
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();
|
||||
|
|
@ -654,12 +672,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 ();
|
||||
|
|
@ -676,6 +696,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>
|
||||
|
|
@ -35,13 +34,16 @@
|
|||
|
||||
#include <ardour/audioengine.h>
|
||||
#include <ardour/ardour.h>
|
||||
#include <ardour/profile.h>
|
||||
#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 +74,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 +86,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 +104,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 +131,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 +178,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 +187,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 +197,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 +246,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 +287,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);
|
||||
|
|
@ -421,7 +365,9 @@ ARDOUR_UI::setup_transport ()
|
|||
|
||||
HBox* clock_box = manage (new HBox);
|
||||
clock_box->pack_start (primary_clock, false, false);
|
||||
clock_box->pack_start (secondary_clock, false, false);
|
||||
if (!ARDOUR::Profile->get_small_screen()) {
|
||||
clock_box->pack_start (secondary_clock, false, false);
|
||||
}
|
||||
VBox* time_controls_box = manage (new VBox);
|
||||
time_controls_box->pack_start (sync_option_combo, false, false);
|
||||
time_controls_box->pack_start (time_master_button, false, false);
|
||||
|
|
@ -622,6 +568,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;
|
||||
|
|
@ -656,11 +606,11 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev)
|
|||
shuttle_grabbed = false;
|
||||
shuttle_box.remove_modal_grab ();
|
||||
if (Config->get_shuttle_behaviour() == Sprung) {
|
||||
if (Config->get_auto_play() || roll_button.get_state()) {
|
||||
if (Config->get_auto_play() || roll_button.get_visual_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 +623,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;
|
||||
}
|
||||
|
|
@ -682,14 +632,9 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev)
|
|||
return true;
|
||||
|
||||
case 3:
|
||||
default:
|
||||
return true;
|
||||
|
||||
case 4:
|
||||
shuttle_fract += 0.005;
|
||||
break;
|
||||
case 5:
|
||||
shuttle_fract -= 0.005;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
use_shuttle_fract (true);
|
||||
|
|
@ -749,6 +694,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);
|
||||
|
|
@ -132,6 +146,8 @@ ARDOUR_UI::connect_to_session (Session *s)
|
|||
|
||||
AudioClock::ModeChanged.connect (mem_fun (*this, &ARDOUR_UI::store_clock_modes));
|
||||
|
||||
Glib::signal_idle().connect (mem_fun (*this, &ARDOUR_UI::first_idle));
|
||||
|
||||
start_clocking ();
|
||||
start_blinking ();
|
||||
|
||||
|
|
@ -139,7 +155,6 @@ 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);
|
||||
}
|
||||
|
||||
|
|
@ -324,7 +339,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
|
||||
|
|
@ -26,7 +25,10 @@
|
|||
|
||||
#include <pbd/pathscanner.h>
|
||||
|
||||
#include <glibmm/miscutils.h>
|
||||
|
||||
#include <gtkmm2ext/utils.h>
|
||||
#include <gtkmm2ext/window_title.h>
|
||||
|
||||
#include "ardour_ui.h"
|
||||
#include "public_editor.h"
|
||||
|
|
@ -35,6 +37,7 @@
|
|||
#include "actions.h"
|
||||
|
||||
#include <ardour/session.h>
|
||||
#include <ardour/profile.h>
|
||||
#include <ardour/audioengine.h>
|
||||
#include <ardour/control_protocol_manager.h>
|
||||
|
||||
|
|
@ -55,7 +58,7 @@ ARDOUR_UI::create_editor ()
|
|||
|
||||
{
|
||||
try {
|
||||
editor = new Editor (*engine);
|
||||
editor = new Editor ();
|
||||
}
|
||||
|
||||
catch (failed_constructor& err) {
|
||||
|
|
@ -93,14 +96,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);
|
||||
|
||||
|
||||
|
|
@ -181,7 +185,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 */
|
||||
|
|
@ -391,8 +394,11 @@ ARDOUR_UI::install_actions ()
|
|||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
act = ActionManager::register_toggle_action (option_actions, X_("SendMIDIfeedback"), _("Send MIDI feedback"), mem_fun (*this, &ARDOUR_UI::toggle_send_midi_feedback));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
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));
|
||||
|
|
@ -407,6 +413,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 !!! */
|
||||
|
||||
|
|
@ -469,6 +477,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);
|
||||
|
|
@ -680,11 +697,13 @@ ARDOUR_UI::build_menu_bar ()
|
|||
sample_rate_label.set_name ("SampleRate");
|
||||
|
||||
menu_hbox.pack_start (*menu_bar, true, true);
|
||||
menu_hbox.pack_end (wall_clock_box, false, false, 10);
|
||||
menu_hbox.pack_end (disk_space_box, false, false, 10);
|
||||
menu_hbox.pack_end (cpu_load_box, false, false, 10);
|
||||
menu_hbox.pack_end (buffer_load_box, false, false, 10);
|
||||
menu_hbox.pack_end (sample_rate_box, false, false, 10);
|
||||
if (!Profile->get_small_screen()) {
|
||||
menu_hbox.pack_end (wall_clock_box, false, false, 2);
|
||||
menu_hbox.pack_end (disk_space_box, false, false, 4);
|
||||
}
|
||||
menu_hbox.pack_end (cpu_load_box, false, false, 4);
|
||||
menu_hbox.pack_end (buffer_load_box, false, false, 4);
|
||||
menu_hbox.pack_end (sample_rate_box, false, false, 4);
|
||||
|
||||
menu_bar_base.set_name ("MainMenuBar");
|
||||
menu_bar_base.add (menu_hbox);
|
||||
|
|
@ -699,7 +718,10 @@ ARDOUR_UI::setup_clock ()
|
|||
|
||||
big_clock_window->set_border_width (0);
|
||||
big_clock_window->add (big_clock);
|
||||
big_clock_window->set_title (_("ardour: clock"));
|
||||
|
||||
WindowTitle title(Glib::get_application_name());
|
||||
title += _("Clock");
|
||||
big_clock_window->set_title (title.get_string());
|
||||
big_clock_window->set_type_hint (Gdk::WINDOW_TYPE_HINT_MENU);
|
||||
big_clock_window->signal_realize().connect (bind (sigc::ptr_fun (set_decoration), big_clock_window, (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
|
||||
big_clock_window->signal_unmap().connect (bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleBigClock")));
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -64,9 +64,9 @@ ARDOUR_UI::toggle_use_mmc ()
|
|||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::toggle_use_midi_control ()
|
||||
ARDOUR_UI::toggle_use_osc ()
|
||||
{
|
||||
ActionManager::toggle_config_state ("options", "UseMIDIcontrol", &Configuration::set_midi_control, &Configuration::get_midi_control);
|
||||
ActionManager::toggle_config_state ("options", "UseOSC", &Configuration::set_use_osc, &Configuration::get_use_osc);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -78,7 +78,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 +120,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 +225,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 +422,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 +510,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 +823,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,18 +845,30 @@ 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")) {
|
||||
ActionManager::map_some_state ("options", "SendMIDIfeedback", &Configuration::get_midi_feedback);
|
||||
} else if (PARAM_IS ("midi-control")) {
|
||||
ActionManager::map_some_state ("options", "UseMIDIcontrol", &Configuration::get_midi_control);
|
||||
} else if (PARAM_IS ("do-not-record-plugins")) {
|
||||
ActionManager::map_some_state ("options", "DoNotRunPluginsWhileRecording", &Configuration::get_do_not_record_plugins);
|
||||
} else if (PARAM_IS ("latched-record-enable")) {
|
||||
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 +897,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
|
||||
|
|
@ -1074,39 +1073,6 @@ AudioClock::field_button_press_event (GdkEventButton *ev, Field field)
|
|||
return FALSE;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
|
||||
frames = get_frames (field);
|
||||
if (frames != 0) {
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) {
|
||||
frames *= 10;
|
||||
}
|
||||
set (current_time() + frames, true);
|
||||
ValueChanged (); /* EMIT_SIGNAL */
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 5:
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
|
||||
frames = get_frames (field);
|
||||
if (frames != 0) {
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) {
|
||||
frames *= 10;
|
||||
}
|
||||
|
||||
if ((double)current_time() - (double)frames < 0.0) {
|
||||
set (0, true);
|
||||
}
|
||||
else {
|
||||
set (current_time() - frames, true);
|
||||
}
|
||||
|
||||
ValueChanged (); /* EMIT_SIGNAL */
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -25,6 +24,7 @@
|
|||
#include <ardour/utils.h>
|
||||
#include <gtkmm2ext/utils.h>
|
||||
#include <gtkmm2ext/stop_signal.h>
|
||||
#include <gtkmm2ext/window_title.h>
|
||||
#include <cmath>
|
||||
|
||||
#include "audio_region_editor.h"
|
||||
|
|
@ -39,6 +39,7 @@ using namespace ARDOUR;
|
|||
using namespace PBD;
|
||||
using namespace sigc;
|
||||
using namespace std;
|
||||
using namespace Gtkmm2ext;
|
||||
|
||||
AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion> r, AudioRegionView& rv)
|
||||
: RegionEditor (s),
|
||||
|
|
@ -119,9 +120,10 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
|
|||
|
||||
signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), static_cast<Window *> (this)));
|
||||
|
||||
string title = _("ardour: region ");
|
||||
title += _region->name();
|
||||
set_title (title);
|
||||
WindowTitle title(string_compose (_("Region %1"), _region->name()));
|
||||
title += Glib::get_application_name();
|
||||
|
||||
set_title (title.get_string());
|
||||
|
||||
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$
|
||||
*/
|
||||
|
||||
#ifndef __gtk_ardour_audio_region_edit_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>
|
||||
|
|
@ -90,14 +89,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;
|
||||
|
|
@ -607,13 +629,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 ();
|
||||
}
|
||||
|
||||
|
|
@ -653,6 +678,9 @@ AudioRegionView::set_colors ()
|
|||
} else {
|
||||
waves[n]->property_wave_color() = color_map[cWaveForm];
|
||||
}
|
||||
|
||||
waves[n]->property_clip_color() = color_map[cWaveFormClip];
|
||||
waves[n]->property_zero_color() = color_map[cZeroLine];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -676,6 +704,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;
|
||||
|
|
@ -723,8 +755,6 @@ AudioRegionView::set_envelope_visible (bool yn)
|
|||
void
|
||||
AudioRegionView::create_waves ()
|
||||
{
|
||||
bool create_zero_line = true;
|
||||
|
||||
RouteTimeAxisView& atv (*(dynamic_cast<RouteTimeAxisView*>(&trackview))); // ick
|
||||
|
||||
if (!atv.get_diskstream()) {
|
||||
|
|
@ -750,23 +780,11 @@ AudioRegionView::create_waves ()
|
|||
if (audio_region()->source(n)->peaks_ready (bind (mem_fun(*this, &AudioRegionView::peaks_ready_handler), n), data_ready_connection)) {
|
||||
create_one_wave (n, true);
|
||||
} else {
|
||||
create_zero_line = false;
|
||||
}
|
||||
} else {
|
||||
create_one_wave (n, true);
|
||||
}
|
||||
}
|
||||
|
||||
if (create_zero_line) {
|
||||
if (zero_line) {
|
||||
delete zero_line;
|
||||
}
|
||||
zero_line = new ArdourCanvas::SimpleLine (*group);
|
||||
zero_line->property_x1() = (gdouble) 1.0;
|
||||
zero_line->property_x2() = (gdouble) (_region->length() / samples_per_unit) - 1.0;
|
||||
zero_line->property_color_rgba() = (guint) color_map[cZeroLine];
|
||||
manage_zero_line ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -801,6 +819,8 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct)
|
|||
wave->property_samples_per_unit() = samples_per_unit;
|
||||
wave->property_amplitude_above_axis() = _amplitude_above_axis;
|
||||
wave->property_wave_color() = _region->muted() ? color_map[cMutedWaveForm] : color_map[cWaveForm];
|
||||
wave->property_clip_color() = color_map[cWaveFormClip];
|
||||
wave->property_zero_color() = color_map[cZeroLine];
|
||||
wave->property_region_start() = _region->start();
|
||||
wave->property_rectified() = (bool) (_flags & WaveformRectified);
|
||||
wave->property_logscaled() = (bool) (_flags & WaveformLogScaled);
|
||||
|
|
@ -839,6 +859,7 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct)
|
|||
/* all waves created, don't hook into peaks ready anymore */
|
||||
data_ready_connection.disconnect ();
|
||||
|
||||
if(0)
|
||||
if (!zero_line) {
|
||||
zero_line = new ArdourCanvas::SimpleLine (*group);
|
||||
zero_line->property_x1() = (gdouble) 1.0;
|
||||
|
|
@ -1046,6 +1067,8 @@ AudioRegionView::add_ghost (AutomationTimeAxisView& atv)
|
|||
wave->property_samples_per_unit() = samples_per_unit;
|
||||
wave->property_amplitude_above_axis() = _amplitude_above_axis;
|
||||
wave->property_wave_color() = color_map[cGhostTrackWave];
|
||||
wave->property_clip_color() = color_map[cGhostTrackWaveClip];
|
||||
wave->property_zero_color() = color_map[cGhostTrackZeroLine];
|
||||
wave->property_region_start() = _region->start();
|
||||
|
||||
ghost->waves.push_back(wave);
|
||||
|
|
@ -1130,6 +1153,8 @@ AudioRegionView::color_handler (ColorID id, uint32_t val)
|
|||
switch (id) {
|
||||
case cMutedWaveForm:
|
||||
case cWaveForm:
|
||||
case cWaveFormClip:
|
||||
case cZeroLine:
|
||||
set_colors ();
|
||||
break;
|
||||
|
||||
|
|
@ -1137,15 +1162,6 @@ AudioRegionView::color_handler (ColorID id, uint32_t val)
|
|||
case cGainLine:
|
||||
envelope_active_changed();
|
||||
break;
|
||||
|
||||
case cZeroLine:
|
||||
if (zero_line) {
|
||||
zero_line->property_color_rgba() = (guint) color_map[cZeroLine];
|
||||
}
|
||||
break;
|
||||
|
||||
case cGhostTrackWave:
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
@ -143,7 +145,7 @@ class AudioRegionView : public RegionView
|
|||
void reset_width_dependent_items (double pixel_width);
|
||||
void set_waveview_data_src();
|
||||
|
||||
void color_handler (ColorID, uint32_t);
|
||||
void color_handler (ColorID, uint32_t);
|
||||
|
||||
vector<GnomeCanvasWaveViewCache*> wave_caches;
|
||||
vector<ArdourCanvas::WaveView *> waves;
|
||||
|
|
|
|||
|
|
@ -179,6 +179,15 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
|
|||
region_view->set_amplitude_above_axis(_amplitude_above_axis);
|
||||
region_views.push_front (region_view);
|
||||
|
||||
|
||||
/* if its the special single-sample length that we use for rec-regions, make it
|
||||
insensitive to events
|
||||
*/
|
||||
|
||||
if (region->length() == 1) {
|
||||
region_view->set_sensitive (false);
|
||||
}
|
||||
|
||||
/* if this was the first one, then lets query the waveform scale and shape.
|
||||
otherwise, we set it to the current value */
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -108,21 +107,13 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
|
|||
|
||||
_route->panner().Changed.connect (mem_fun(*this, &AudioTimeAxisView::update_pans));
|
||||
|
||||
if (is_audio_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 ();
|
||||
|
|
@ -622,7 +613,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>
|
||||
|
|
@ -1136,6 +1136,13 @@ AutomationLine::set_selected_points (PointSelection& points)
|
|||
|
||||
}
|
||||
|
||||
void AutomationLine::set_colors() {
|
||||
set_line_color( color_map[cAutomationLine] );
|
||||
for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
|
||||
(*i)->show_color (false, !points_visible);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AutomationLine::show_selection ()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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__
|
||||
|
|
@ -160,6 +159,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulThingWithGoin
|
|||
|
||||
XMLNode& get_state (void);
|
||||
int set_state (const XMLNode&);
|
||||
void set_colors();
|
||||
|
||||
protected:
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -163,6 +163,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
|
|||
/* make sure labels etc. are correct */
|
||||
|
||||
automation_state_changed ();
|
||||
ColorChanged.connect (mem_fun (*this, &AutomationTimeAxisView::color_handler));
|
||||
}
|
||||
|
||||
AutomationTimeAxisView::~AutomationTimeAxisView ()
|
||||
|
|
@ -686,7 +687,7 @@ AutomationTimeAxisView::get_selectables (nframes_t start, nframes_t end, double
|
|||
y_position is the "origin" or "top" of the track.
|
||||
*/
|
||||
|
||||
double mybot = y_position + height; // XXX need to include Editor::track_spacing;
|
||||
double mybot = y_position + height;
|
||||
|
||||
if (y_position >= top && mybot <= bot) {
|
||||
|
||||
|
|
@ -787,6 +788,42 @@ AutomationTimeAxisView::exited ()
|
|||
hide_all_but_selected_control_points ();
|
||||
}
|
||||
|
||||
void
|
||||
AutomationTimeAxisView::set_colors () {
|
||||
|
||||
for( list<GhostRegion *>::iterator i=ghosts.begin(); i != ghosts.end(); i++ ) {
|
||||
(*i)->set_colors();
|
||||
}
|
||||
|
||||
for( vector<AutomationLine *>::iterator i=lines.begin(); i != lines.end(); i++ ) {
|
||||
(*i)->set_colors();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
AutomationTimeAxisView::color_handler (ColorID id, uint32_t val) {
|
||||
|
||||
switch (id) {
|
||||
case cGhostTrackWave:
|
||||
case cGhostTrackWaveClip:
|
||||
case cGhostTrackZeroLine:
|
||||
|
||||
case cControlPoint:
|
||||
case cControlPointFill:
|
||||
case cControlPointOutline:
|
||||
case cAutomationLine:
|
||||
set_colors ();
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
AutomationTimeAxisView::set_state (const XMLNode& node)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -122,6 +122,9 @@ class AutomationTimeAxisView : public TimeAxisView {
|
|||
void entered ();
|
||||
void exited ();
|
||||
|
||||
void set_colors ();
|
||||
void color_handler (ColorID, uint32_t);
|
||||
|
||||
static Pango::FontDescription name_font;
|
||||
static bool have_name_font;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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, end_y + 1.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, end_y + 1.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 + 1.5, item->y2);
|
||||
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 + 1.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 - 0.5,
|
||||
unionrect.y0 - 0.5,
|
||||
unionrect.x1 + 1.5,
|
||||
unionrect.y1 + 1.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
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
#include "canvas-waveview.h"
|
||||
#include "rgb_macros.h"
|
||||
|
||||
|
||||
extern void c_stacktrace();
|
||||
|
||||
enum {
|
||||
|
|
@ -49,6 +50,8 @@ enum {
|
|||
PROP_Y,
|
||||
PROP_HEIGHT,
|
||||
PROP_WAVE_COLOR,
|
||||
PROP_CLIP_COLOR,
|
||||
PROP_ZERO_COLOR,
|
||||
PROP_RECTIFIED,
|
||||
PROP_REGION_START,
|
||||
PROP_LOGSCALED,
|
||||
|
|
@ -249,6 +252,20 @@ gnome_canvas_waveview_class_init (GnomeCanvasWaveViewClass *class)
|
|||
0, G_MAXUINT, 0,
|
||||
(G_PARAM_READABLE | G_PARAM_WRITABLE)));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_CLIP_COLOR,
|
||||
g_param_spec_uint ("clip_color", NULL, NULL,
|
||||
0, G_MAXUINT, 0,
|
||||
(G_PARAM_READABLE | G_PARAM_WRITABLE)));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_ZERO_COLOR,
|
||||
g_param_spec_uint ("zero_color", NULL, NULL,
|
||||
0, G_MAXUINT, 0,
|
||||
(G_PARAM_READABLE | G_PARAM_WRITABLE)));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_RECTIFIED,
|
||||
|
|
@ -326,6 +343,8 @@ gnome_canvas_waveview_init (GnomeCanvasWaveView *waveview)
|
|||
waveview->reload_cache_in_render = FALSE;
|
||||
|
||||
waveview->wave_color = RGBA_TO_UINT(44,35,126,255);
|
||||
waveview->clip_color = RGBA_TO_UINT(44,0,0,100);
|
||||
waveview->zero_color = RGBA_TO_UINT(44,0,128,100);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -369,7 +388,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 +433,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
|
||||
|
|
@ -796,6 +816,20 @@ gnome_canvas_waveview_set_property (GObject *object,
|
|||
}
|
||||
break;
|
||||
|
||||
case PROP_CLIP_COLOR:
|
||||
if (waveview->clip_color != g_value_get_uint(value)) {
|
||||
waveview->clip_color = g_value_get_uint(value);
|
||||
redraw = TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case PROP_ZERO_COLOR:
|
||||
if (waveview->zero_color != g_value_get_uint(value)) {
|
||||
waveview->zero_color = g_value_get_uint(value);
|
||||
redraw = TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case PROP_RECTIFIED:
|
||||
if (waveview->rectified != g_value_get_boolean(value)) {
|
||||
waveview->rectified = g_value_get_boolean(value);
|
||||
|
|
@ -908,6 +942,14 @@ gnome_canvas_waveview_get_property (GObject *object,
|
|||
g_value_set_uint (value, waveview->wave_color);
|
||||
break;
|
||||
|
||||
case PROP_CLIP_COLOR:
|
||||
g_value_set_uint (value, waveview->clip_color);
|
||||
break;
|
||||
|
||||
case PROP_ZERO_COLOR:
|
||||
g_value_set_uint (value, waveview->zero_color);
|
||||
break;
|
||||
|
||||
case PROP_RECTIFIED:
|
||||
g_value_set_boolean (value, waveview->rectified);
|
||||
break;
|
||||
|
|
@ -968,6 +1010,8 @@ gnome_canvas_waveview_update (GnomeCanvasItem *item, double *affine, ArtSVP *cli
|
|||
|
||||
UINT_TO_RGBA (waveview->wave_color, &waveview->wave_r, &waveview->wave_g, &waveview->wave_b,
|
||||
&waveview->wave_a);
|
||||
UINT_TO_RGBA (waveview->clip_color, &waveview->clip_r, &waveview->clip_g, &waveview->clip_b,
|
||||
&waveview->clip_a);
|
||||
|
||||
// check_cache (waveview, "end of update");
|
||||
}
|
||||
|
|
@ -983,6 +1027,7 @@ gnome_canvas_waveview_render (GnomeCanvasItem *item,
|
|||
int cache_index;
|
||||
double half_height;
|
||||
int x, end, begin;
|
||||
int zbegin, zend;
|
||||
|
||||
waveview = GNOME_CANVAS_WAVEVIEW (item);
|
||||
|
||||
|
|
@ -997,7 +1042,13 @@ gnome_canvas_waveview_render (GnomeCanvasItem *item,
|
|||
buf->is_bg = FALSE;
|
||||
}
|
||||
|
||||
begin = MAX(waveview->bbox_ulx,buf->rect.x0);
|
||||
begin = MAX(waveview->bbox_ulx, buf->rect.x0);
|
||||
|
||||
if (begin == waveview->bbox_ulx) {
|
||||
zbegin = begin + 1;
|
||||
} else {
|
||||
zbegin = begin;
|
||||
}
|
||||
|
||||
if (waveview->bbox_lrx >= 0) {
|
||||
end = MIN(waveview->bbox_lrx,buf->rect.x1);
|
||||
|
|
@ -1005,6 +1056,12 @@ gnome_canvas_waveview_render (GnomeCanvasItem *item,
|
|||
end = buf->rect.x1;
|
||||
}
|
||||
|
||||
if (end == waveview->bbox_lrx) {
|
||||
zend = end - 1;
|
||||
} else {
|
||||
zend = end;
|
||||
}
|
||||
|
||||
if (begin == end) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -1065,6 +1122,7 @@ gnome_canvas_waveview_render (GnomeCanvasItem *item,
|
|||
|
||||
#define origin half_height
|
||||
|
||||
|
||||
for (x = begin; x < end; x++) {
|
||||
|
||||
double max, min;
|
||||
|
|
@ -1125,11 +1183,11 @@ gnome_canvas_waveview_render (GnomeCanvasItem *item,
|
|||
}
|
||||
|
||||
if (clip_max) {
|
||||
PAINT_VERT(buf, 255, 0, 0, x, pymax, pymax+clip_length);
|
||||
PAINT_VERTA(buf, waveview->clip_r, waveview->clip_g, waveview->clip_b, waveview->clip_a, x, pymax, pymax+clip_length);
|
||||
}
|
||||
|
||||
if (clip_min) {
|
||||
PAINT_VERT(buf, 255, 0, 0, x, pymin-clip_length, pymin);
|
||||
PAINT_VERTA(buf, waveview->clip_r, waveview->clip_g, waveview->clip_b, waveview->clip_a, x, pymin-clip_length, pymin);
|
||||
}
|
||||
|
||||
/* presto, we're done */
|
||||
|
|
@ -1137,6 +1195,15 @@ gnome_canvas_waveview_render (GnomeCanvasItem *item,
|
|||
cache_index++;
|
||||
}
|
||||
|
||||
if (!waveview->rectified) {
|
||||
// Paint zeroline.
|
||||
//PAINT_HORIZA(buf, waveview->zero_r, waveview->zero_g, waveview->zero_b, waveview->zero_a, begin, endi-1, origin );
|
||||
|
||||
unsigned char zero_r, zero_g, zero_b, zero_a;
|
||||
UINT_TO_RGBA( waveview->zero_color, &zero_r, &zero_g, &zero_b, &zero_a );
|
||||
int zeroline_y = (int) rint ((item->y1 + origin) * item->canvas->pixels_per_unit);
|
||||
PAINT_HORIZA(buf, zero_r, zero_g, zero_b, zero_a, zbegin, end, zeroline_y);
|
||||
}
|
||||
#undef origin
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -99,6 +99,8 @@ struct _GnomeCanvasWaveView
|
|||
double height;
|
||||
double half_height;
|
||||
uint32_t wave_color;
|
||||
uint32_t clip_color;
|
||||
uint32_t zero_color;
|
||||
|
||||
char rectified;
|
||||
char logscaled;
|
||||
|
|
@ -113,6 +115,7 @@ struct _GnomeCanvasWaveView
|
|||
int32_t bbox_lrx;
|
||||
int32_t bbox_lry;
|
||||
unsigned char wave_r, wave_g, wave_b, wave_a;
|
||||
unsigned char clip_r, clip_g, clip_b, clip_a;
|
||||
uint32_t samples;
|
||||
uint32_t region_start;
|
||||
int32_t reload_cache_in_render;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
/* no guard clauses here */
|
||||
|
||||
COLORID(cWaveForm)
|
||||
COLORID(cWaveFormClip)
|
||||
COLORID(cMutedWaveForm)
|
||||
COLORID(cSelectedFrameBase)
|
||||
COLORID(cFrameBase)
|
||||
|
|
@ -72,6 +73,8 @@ COLORID(cMeasureLineBar)
|
|||
COLORID(cGhostTrackBaseOutline)
|
||||
COLORID(cGhostTrackBaseFill)
|
||||
COLORID(cGhostTrackWave)
|
||||
COLORID(cGhostTrackWaveClip)
|
||||
COLORID(cGhostTrackZeroLine)
|
||||
COLORID(cImageTrackBase)
|
||||
COLORID(cImageTrackOutline)
|
||||
COLORID(cMarkerTrackBase)
|
||||
|
|
@ -101,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>
|
||||
|
|
@ -31,6 +30,7 @@
|
|||
#include <pbd/stacktrace.h>
|
||||
#include <pbd/memento_command.h>
|
||||
|
||||
#include <glibmm/miscutils.h>
|
||||
#include <gtkmm/image.h>
|
||||
#include <gdkmm/color.h>
|
||||
#include <gdkmm/bitmap.h>
|
||||
|
|
@ -39,6 +39,8 @@
|
|||
#include <gtkmm2ext/gtk_ui.h>
|
||||
#include <gtkmm2ext/tearoff.h>
|
||||
#include <gtkmm2ext/utils.h>
|
||||
#include <gtkmm2ext/window_title.h>
|
||||
#include <gtkmm2ext/choice.h>
|
||||
|
||||
#include <ardour/audio_track.h>
|
||||
#include <ardour/audio_diskstream.h>
|
||||
|
|
@ -170,9 +172,8 @@ check_adjustment (Gtk::Adjustment* adj)
|
|||
|
||||
}
|
||||
|
||||
Editor::Editor (AudioEngine& eng)
|
||||
: engine (eng),
|
||||
|
||||
Editor::Editor ()
|
||||
:
|
||||
/* time display buttons */
|
||||
|
||||
minsec_label (_("Mins:Secs")),
|
||||
|
|
@ -271,7 +272,6 @@ Editor::Editor (AudioEngine& eng)
|
|||
no_route_list_redisplay = false;
|
||||
verbose_cursor_on = true;
|
||||
route_removal = false;
|
||||
track_spacing = 0;
|
||||
show_automatic_regions_in_region_list = true;
|
||||
region_list_sort_type = (Editing::RegionListSortType) 0;
|
||||
have_pending_keyboard_selection = false;
|
||||
|
|
@ -366,12 +366,13 @@ Editor::Editor (AudioEngine& eng)
|
|||
|
||||
edit_cursor_clock.ValueChanged.connect (mem_fun(*this, &Editor::edit_cursor_clock_changed));
|
||||
|
||||
time_canvas_vbox.pack_start (*_ruler_separator, false, false);
|
||||
time_canvas_vbox.pack_start (*minsec_ruler, false, false);
|
||||
time_canvas_vbox.pack_start (*smpte_ruler, false, false);
|
||||
time_canvas_vbox.pack_start (*frames_ruler, false, false);
|
||||
time_canvas_vbox.pack_start (*bbt_ruler, false, false);
|
||||
time_canvas_vbox.pack_start (time_canvas, true, true);
|
||||
time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars));
|
||||
time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars) + 2);
|
||||
|
||||
bbt_label.set_name ("EditorTimeButton");
|
||||
bbt_label.set_size_request (-1, (int)timebar_height);
|
||||
|
|
@ -424,6 +425,9 @@ Editor::Editor (AudioEngine& eng)
|
|||
time_button_event_box.set_name ("TimebarLabelBase");
|
||||
time_button_event_box.signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_label_button_release));
|
||||
|
||||
time_button_frame.add(time_button_event_box);
|
||||
time_button_frame.property_shadow_type() = Gtk::SHADOW_OUT;
|
||||
|
||||
/* these enable us to have a dedicated window (for cursor setting, etc.)
|
||||
for the canvas areas.
|
||||
*/
|
||||
|
|
@ -441,7 +445,7 @@ Editor::Editor (AudioEngine& eng)
|
|||
|
||||
edit_packer.attach (edit_vscrollbar, 0, 1, 1, 3, FILL, FILL|EXPAND, 0, 0);
|
||||
|
||||
edit_packer.attach (time_button_event_box, 1, 2, 0, 1, FILL, FILL, 0, 0);
|
||||
edit_packer.attach (time_button_frame, 0, 2, 0, 1, FILL, FILL, 0, 0);
|
||||
edit_packer.attach (time_canvas_event_box, 2, 3, 0, 1, FILL|EXPAND, FILL, 0, 0);
|
||||
|
||||
edit_packer.attach (controls_layout, 1, 2, 1, 2, FILL, FILL|EXPAND, 0, 0);
|
||||
|
|
@ -510,7 +514,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);
|
||||
|
|
@ -710,7 +714,10 @@ Editor::Editor (AudioEngine& eng)
|
|||
set_icon_list (window_icons);
|
||||
set_default_icon_list (window_icons);
|
||||
}
|
||||
set_title (_("ardour: editor"));
|
||||
|
||||
WindowTitle title(Glib::get_application_name());
|
||||
title += _("Editor");
|
||||
set_title (title.get_string());
|
||||
set_wmclass (X_("ardour_editor"), "Ardour");
|
||||
|
||||
add (vpacker);
|
||||
|
|
@ -1008,24 +1015,21 @@ Editor::update_title ()
|
|||
if (session) {
|
||||
bool dirty = session->dirty();
|
||||
|
||||
string wintitle = _("ardour: editor: ");
|
||||
|
||||
if (dirty) {
|
||||
wintitle += '[';
|
||||
}
|
||||
|
||||
wintitle += session->name();
|
||||
string session_name;
|
||||
|
||||
if (session->snap_name() != session->name()) {
|
||||
wintitle += ':';
|
||||
wintitle += session->snap_name();
|
||||
session_name = session->snap_name();
|
||||
} else {
|
||||
session_name = session->name();
|
||||
}
|
||||
|
||||
if (dirty) {
|
||||
wintitle += ']';
|
||||
session_name = "*" + session_name;
|
||||
}
|
||||
|
||||
set_title (wintitle);
|
||||
WindowTitle title(session_name);
|
||||
title += Glib::get_application_name();
|
||||
set_title (title.get_string());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1072,7 +1076,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 (bind (mem_fun(*this, &Editor::tempo_map_changed), false)));
|
||||
session_connections.push_back (session->tempo_map().StateChanged.connect (mem_fun(*this, &Editor::tempo_map_changed)));
|
||||
|
||||
edit_groups_changed ();
|
||||
|
||||
|
|
@ -1094,8 +1098,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 +1111,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 +1243,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 +1260,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;
|
||||
|
||||
|
|
@ -1629,48 +1631,65 @@ Editor::add_region_context_items (AudioStreamView* sv, boost::shared_ptr<Region>
|
|||
|
||||
items.push_back (SeparatorElem());
|
||||
|
||||
items.push_back (CheckMenuElem (_("Lock"), mem_fun(*this, &Editor::toggle_region_lock)));
|
||||
sigc::connection fooc;
|
||||
|
||||
items.push_back (CheckMenuElem (_("Lock")));
|
||||
region_lock_item = static_cast<CheckMenuItem*>(&items.back());
|
||||
fooc = region_lock_item->signal_activate().connect (mem_fun(*this, &Editor::toggle_region_lock));
|
||||
if (region->locked()) {
|
||||
fooc.block (true);
|
||||
region_lock_item->set_active();
|
||||
fooc.block (false);
|
||||
}
|
||||
items.push_back (CheckMenuElem (_("Mute"), mem_fun(*this, &Editor::toggle_region_mute)));
|
||||
items.push_back (CheckMenuElem (_("Mute")));
|
||||
region_mute_item = static_cast<CheckMenuItem*>(&items.back());
|
||||
fooc = region_mute_item->signal_activate().connect (mem_fun(*this, &Editor::toggle_region_mute));
|
||||
if (region->muted()) {
|
||||
fooc.block (true);
|
||||
region_mute_item->set_active();
|
||||
}
|
||||
items.push_back (CheckMenuElem (_("Opaque"), mem_fun(*this, &Editor::toggle_region_opaque)));
|
||||
region_opaque_item = static_cast<CheckMenuItem*>(&items.back());
|
||||
if (region->opaque()) {
|
||||
region_opaque_item->set_active();
|
||||
fooc.block (false);
|
||||
}
|
||||
|
||||
items.push_back (CheckMenuElem (_("Opaque")));
|
||||
region_opaque_item = static_cast<CheckMenuItem*>(&items.back());
|
||||
fooc = region_opaque_item->signal_activate().connect (mem_fun(*this, &Editor::toggle_region_opaque));
|
||||
if (region->opaque()) {
|
||||
fooc.block (true);
|
||||
region_opaque_item->set_active();
|
||||
fooc.block (false);
|
||||
}
|
||||
|
||||
items.push_back (CheckMenuElem (_("Original position"), mem_fun(*this, &Editor::naturalize)));
|
||||
if (region->at_natural_position()) {
|
||||
items.back().set_sensitive (false);
|
||||
}
|
||||
|
||||
|
||||
items.push_back (SeparatorElem());
|
||||
|
||||
|
||||
if (ar) {
|
||||
|
||||
RegionView* rv = sv->find_view (ar);
|
||||
AudioRegionView* arv = dynamic_cast<AudioRegionView*>(rv);
|
||||
|
||||
|
||||
items.push_back (MenuElem (_("Reset Envelope"), mem_fun(*this, &Editor::reset_region_gain_envelopes)));
|
||||
|
||||
items.push_back (CheckMenuElem (_("Envelope Visible"), mem_fun(*this, &Editor::toggle_gain_envelope_visibility)));
|
||||
items.push_back (CheckMenuElem (_("Envelope Visible")));
|
||||
region_envelope_visible_item = static_cast<CheckMenuItem*> (&items.back());
|
||||
|
||||
fooc = region_envelope_visible_item->signal_activate().connect (mem_fun(*this, &Editor::toggle_gain_envelope_visibility));
|
||||
if (arv->envelope_visible()) {
|
||||
fooc.block (true);
|
||||
region_envelope_visible_item->set_active (true);
|
||||
fooc.block (false);
|
||||
}
|
||||
|
||||
items.push_back (CheckMenuElem (_("Envelope Active"), mem_fun(*this, &Editor::toggle_gain_envelope_active)));
|
||||
|
||||
items.push_back (CheckMenuElem (_("Envelope Active")));
|
||||
region_envelope_active_item = static_cast<CheckMenuItem*> (&items.back());
|
||||
|
||||
fooc = region_envelope_active_item->signal_activate().connect (mem_fun(*this, &Editor::toggle_gain_envelope_active));
|
||||
|
||||
if (ar->envelope_active()) {
|
||||
fooc.block (true);
|
||||
region_envelope_active_item->set_active (true);
|
||||
fooc.block (false);
|
||||
}
|
||||
|
||||
items.push_back (SeparatorElem());
|
||||
|
|
@ -2720,6 +2739,8 @@ Editor::map_transport_state ()
|
|||
if (session->transport_stopped()) {
|
||||
have_pending_keyboard_selection = false;
|
||||
}
|
||||
|
||||
update_loop_range_view (true);
|
||||
}
|
||||
|
||||
/* UNDO/REDO */
|
||||
|
|
@ -2831,32 +2852,34 @@ Editor::history_changed ()
|
|||
void
|
||||
Editor::duplicate_dialog (bool dup_region)
|
||||
{
|
||||
if (dup_region) {
|
||||
if (clicked_regionview == 0) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (selection->time.length() == 0) {
|
||||
return;
|
||||
}
|
||||
if (selection->regions.empty() && (selection->time.length() == 0)) {
|
||||
return;
|
||||
}
|
||||
|
||||
ArdourDialog win ("duplicate dialog");
|
||||
Entry entry;
|
||||
Label label (_("Duplicate how many times?"));
|
||||
Adjustment adjustment (1.0, 1.0, 1000000.0, 1.0, 5.0);
|
||||
SpinButton spinner (adjustment);
|
||||
|
||||
win.get_vbox()->set_spacing (12);
|
||||
win.get_vbox()->pack_start (label);
|
||||
win.add_action_widget (entry, RESPONSE_ACCEPT);
|
||||
|
||||
/* dialogs have ::add_action_widget() but that puts the spinner in the wrong
|
||||
place, visually. so do this by hand.
|
||||
*/
|
||||
|
||||
win.get_vbox()->pack_start (spinner);
|
||||
spinner.signal_activate().connect (sigc::bind (mem_fun (win, &ArdourDialog::response), RESPONSE_ACCEPT));
|
||||
|
||||
label.show ();
|
||||
spinner.show ();
|
||||
|
||||
win.add_button (Stock::OK, RESPONSE_ACCEPT);
|
||||
win.add_button (Stock::CANCEL, RESPONSE_CANCEL);
|
||||
|
||||
win.set_position (WIN_POS_MOUSE);
|
||||
|
||||
entry.set_text ("1");
|
||||
set_size_request_to_display_given_text (entry, X_("12345678"), 20, 15);
|
||||
entry.select_region (0, -1);
|
||||
entry.grab_focus ();
|
||||
|
||||
spinner.grab_focus ();
|
||||
|
||||
switch (win.run ()) {
|
||||
case RESPONSE_ACCEPT:
|
||||
|
|
@ -2865,17 +2888,12 @@ Editor::duplicate_dialog (bool dup_region)
|
|||
return;
|
||||
}
|
||||
|
||||
string text = entry.get_text();
|
||||
float times;
|
||||
float times = adjustment.get_value();
|
||||
|
||||
if (sscanf (text.c_str(), "%f", ×) == 1) {
|
||||
if (dup_region) {
|
||||
RegionSelection regions;
|
||||
regions.add (clicked_regionview);
|
||||
duplicate_some_regions (regions, times);
|
||||
} else {
|
||||
duplicate_selection (times);
|
||||
}
|
||||
if (!selection->regions.empty()) {
|
||||
duplicate_some_regions (selection->regions, times);
|
||||
} else {
|
||||
duplicate_selection (times);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3032,7 +3050,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 +3199,6 @@ Editor::set_show_measures (bool yn)
|
|||
if ((_show_measures = yn) == true) {
|
||||
draw_measures ();
|
||||
}
|
||||
DisplayControlChanged (ShowMeasures);
|
||||
instant_save ();
|
||||
}
|
||||
}
|
||||
|
|
@ -3204,7 +3221,6 @@ Editor::set_follow_playhead (bool yn)
|
|||
/* catch up */
|
||||
update_current_screen ();
|
||||
}
|
||||
DisplayControlChanged (FollowPlayhead);
|
||||
instant_save ();
|
||||
}
|
||||
}
|
||||
|
|
@ -3290,7 +3306,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 ()) {
|
||||
|
|
@ -3374,6 +3390,9 @@ Editor::control_layout_scroll (GdkEventScroll* ev)
|
|||
return false;
|
||||
}
|
||||
|
||||
|
||||
/** A new snapshot has been selected.
|
||||
*/
|
||||
void
|
||||
Editor::snapshot_display_selection_changed ()
|
||||
{
|
||||
|
|
@ -3398,7 +3417,93 @@ Editor::snapshot_display_selection_changed ()
|
|||
bool
|
||||
Editor::snapshot_display_button_press (GdkEventButton* ev)
|
||||
{
|
||||
return false;
|
||||
if (ev->button == 3) {
|
||||
/* Right-click on the snapshot list. Work out which snapshot it
|
||||
was over. */
|
||||
Gtk::TreeModel::Path path;
|
||||
Gtk::TreeViewColumn* col;
|
||||
int cx;
|
||||
int cy;
|
||||
snapshot_display.get_path_at_pos ((int) ev->x, (int) ev->y, path, col, cx, cy);
|
||||
Gtk::TreeModel::iterator iter = snapshot_display_model->get_iter (path);
|
||||
if (iter) {
|
||||
Gtk::TreeModel::Row row = *iter;
|
||||
popup_snapshot_context_menu (ev->button, ev->time, row[snapshot_display_columns.real_name]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/** Pop up the snapshot display context menu.
|
||||
* @param button Button used to open the menu.
|
||||
* @param time Menu open time.
|
||||
* @snapshot_name Name of the snapshot that the menu click was over.
|
||||
*/
|
||||
|
||||
void
|
||||
Editor::popup_snapshot_context_menu (int button, int32_t time, Glib::ustring snapshot_name)
|
||||
{
|
||||
using namespace Menu_Helpers;
|
||||
|
||||
MenuList& items (snapshot_context_menu.items());
|
||||
items.clear ();
|
||||
|
||||
const bool modification_allowed = (session->snap_name() != snapshot_name && session->name() != snapshot_name);
|
||||
|
||||
items.push_back (MenuElem (_("Remove"), bind (mem_fun (*this, &Editor::remove_snapshot), snapshot_name)));
|
||||
if (!modification_allowed) {
|
||||
items.back().set_sensitive (false);
|
||||
}
|
||||
|
||||
items.push_back (MenuElem (_("Rename"), bind (mem_fun (*this, &Editor::rename_snapshot), snapshot_name)));
|
||||
if (!modification_allowed) {
|
||||
items.back().set_sensitive (false);
|
||||
}
|
||||
|
||||
snapshot_context_menu.popup (button, time);
|
||||
}
|
||||
|
||||
void
|
||||
Editor::rename_snapshot (Glib::ustring old_name)
|
||||
{
|
||||
ArdourPrompter prompter(true);
|
||||
|
||||
string new_name;
|
||||
|
||||
prompter.set_name ("Prompter");
|
||||
prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
|
||||
prompter.set_prompt (_("New name of snapshot"));
|
||||
prompter.set_initial_text (old_name);
|
||||
|
||||
if (prompter.run() == RESPONSE_ACCEPT) {
|
||||
prompter.get_result (new_name);
|
||||
if (new_name.length()) {
|
||||
session->rename_state (old_name, new_name);
|
||||
redisplay_snapshots ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Editor::remove_snapshot (Glib::ustring name)
|
||||
{
|
||||
vector<string> choices;
|
||||
|
||||
std::string prompt = string_compose (_("Do you really want to remove snapshot \"%1\" ?\n(cannot be undone)"), name);
|
||||
|
||||
choices.push_back (_("No, do nothing."));
|
||||
choices.push_back (_("Yes, remove it."));
|
||||
|
||||
Gtkmm2ext::Choice prompter (prompt, choices);
|
||||
|
||||
if (prompter.run () == 1) {
|
||||
session->remove_state (name);
|
||||
redisplay_snapshots ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -3667,7 +3772,7 @@ Editor::idle_visual_changer ()
|
|||
/* the signal handler will do the rest */
|
||||
} else {
|
||||
update_fixed_rulers();
|
||||
tempo_map_changed (Change (0), true);
|
||||
redisplay_tempo (true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3687,3 +3792,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);
|
||||
|
|
@ -504,6 +501,7 @@ class Editor : public PublicEditor
|
|||
Gtk::EventBox time_canvas_event_box;
|
||||
Gtk::EventBox track_canvas_event_box;
|
||||
Gtk::EventBox time_button_event_box;
|
||||
Gtk::Frame time_button_frame;
|
||||
|
||||
ArdourCanvas::Group *minsec_group;
|
||||
ArdourCanvas::Group *bbt_group;
|
||||
|
|
@ -560,6 +558,7 @@ class Editor : public PublicEditor
|
|||
gint metric_get_frames (GtkCustomRulerMark **, gdouble, gdouble, gint);
|
||||
gint metric_get_minsec (GtkCustomRulerMark **, gdouble, gdouble, gint);
|
||||
|
||||
Gtk::Widget *_ruler_separator;
|
||||
GtkWidget *_smpte_ruler;
|
||||
GtkWidget *_bbt_ruler;
|
||||
GtkWidget *_frames_ruler;
|
||||
|
|
@ -608,7 +607,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);
|
||||
|
|
@ -771,10 +770,12 @@ class Editor : public PublicEditor
|
|||
SnapshotDisplayModelColumns snapshot_display_columns;
|
||||
Glib::RefPtr<Gtk::ListStore> snapshot_display_model;
|
||||
Gtk::TreeView snapshot_display;
|
||||
Gtk::Menu snapshot_context_menu;
|
||||
|
||||
bool snapshot_display_button_press (GdkEventButton*);
|
||||
void snapshot_display_selection_changed ();
|
||||
void redisplay_snapshots();
|
||||
void popup_snapshot_context_menu (int, int32_t, Glib::ustring);
|
||||
|
||||
/* named selections */
|
||||
|
||||
|
|
@ -796,6 +797,8 @@ class Editor : public PublicEditor
|
|||
void create_named_selection ();
|
||||
void paste_named_selection (float times);
|
||||
void remove_selected_named_selections ();
|
||||
void remove_snapshot (Glib::ustring);
|
||||
void rename_snapshot (Glib::ustring);
|
||||
|
||||
void handle_new_named_selection ();
|
||||
void add_named_selection_to_named_selection_display (ARDOUR::NamedSelection&);
|
||||
|
|
@ -806,7 +809,6 @@ class Editor : public PublicEditor
|
|||
void named_selection_display_selection_changed ();
|
||||
|
||||
/* track views */
|
||||
int track_spacing;
|
||||
TrackViewList track_views;
|
||||
TimeAxisView *trackview_by_y_position (double ypos);
|
||||
|
||||
|
|
@ -1169,9 +1171,13 @@ class Editor : public PublicEditor
|
|||
|
||||
bool canvas_playhead_cursor_event (GdkEvent* event, ArdourCanvas::Item*);
|
||||
bool canvas_edit_cursor_event (GdkEvent* event, ArdourCanvas::Item*);
|
||||
bool track_canvas_event (GdkEvent* event, ArdourCanvas::Item*);
|
||||
bool track_canvas_scroll (GdkEventScroll* event);
|
||||
|
||||
bool track_canvas_scroll_event (GdkEventScroll* event);
|
||||
bool track_canvas_button_press_event (GdkEventButton* event);
|
||||
bool track_canvas_button_release_event (GdkEventButton* event);
|
||||
bool track_canvas_motion_notify_event (GdkEventMotion* event);
|
||||
|
||||
Gtk::Allocation canvas_allocation;
|
||||
bool canvas_idle_queued;
|
||||
void track_canvas_allocate (Gtk::Allocation alloc);
|
||||
|
|
@ -1242,6 +1248,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 ();
|
||||
|
|
@ -1276,8 +1283,8 @@ class Editor : public PublicEditor
|
|||
void remove_metric_marks ();
|
||||
void draw_metric_marks (const ARDOUR::Metrics& metrics);
|
||||
|
||||
void tempo_map_changed (ARDOUR::Change, bool immediate_redraw);
|
||||
void redisplay_tempo ();
|
||||
void tempo_map_changed (ARDOUR::Change);
|
||||
void redisplay_tempo (bool immediate_redraw);
|
||||
|
||||
void snap_to (nframes_t& first, int32_t direction = 0, bool for_mark = false);
|
||||
uint32_t bbt_beat_subdivision;
|
||||
|
|
|
|||
|
|
@ -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,13 +15,19 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <pbd/pthread_utils.h>
|
||||
#include <pbd/basename.h>
|
||||
#include <pbd/shortpath.h>
|
||||
|
||||
#include <gtkmm2ext/choice.h>
|
||||
#include <gtkmm2ext/window_title.h>
|
||||
|
||||
#include <ardour/session.h>
|
||||
#include <ardour/audioplaylist.h>
|
||||
|
|
@ -49,6 +55,7 @@ using namespace ARDOUR;
|
|||
using namespace PBD;
|
||||
using namespace sigc;
|
||||
using namespace Gtk;
|
||||
using namespace Gtkmm2ext;
|
||||
using namespace Editing;
|
||||
using Glib::ustring;
|
||||
|
||||
|
|
@ -170,7 +177,7 @@ Editor::do_embed (vector<ustring> paths, bool split, ImportMode mode, AudioTrack
|
|||
to_embed.size() > 2 ? _("multichannel") : _("stereo")));
|
||||
choices.push_back (_("Import as multiple regions"));
|
||||
|
||||
Gtkmm2ext::Choice chooser (string_compose (_("Paired files detected (%1, %2 ...).\nDo you want to:"),
|
||||
Choice chooser (string_compose (_("Paired files detected (%1, %2 ...).\nDo you want to:"),
|
||||
to_embed[0],
|
||||
to_embed[1]),
|
||||
choices);
|
||||
|
|
@ -216,7 +223,9 @@ Editor::do_embed (vector<ustring> paths, bool split, ImportMode mode, AudioTrack
|
|||
int
|
||||
Editor::import_sndfile (vector<ustring> paths, ImportMode mode, AudioTrack* track, nframes_t& pos)
|
||||
{
|
||||
interthread_progress_window->set_title (string_compose (_("ardour: importing %1"), paths.front()));
|
||||
WindowTitle title = string_compose (_("importing %1"), paths.front());
|
||||
|
||||
interthread_progress_window->set_title (title.get_string());
|
||||
interthread_progress_window->set_position (Gtk::WIN_POS_MOUSE);
|
||||
interthread_progress_window->show_all ();
|
||||
interthread_progress_bar.set_fraction (0.0f);
|
||||
|
|
@ -245,6 +254,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 ();
|
||||
|
|
@ -288,7 +299,7 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_fi
|
|||
linked_path += Glib::path_get_basename (path);
|
||||
|
||||
if (link (path.c_str(), linked_path.c_str()) == 0) {
|
||||
|
||||
|
||||
/* there are many reasons why link(2) might have failed.
|
||||
but if it succeeds, we now have a link in the
|
||||
session sound dir that will protect against
|
||||
|
|
@ -296,6 +307,21 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_fi
|
|||
*/
|
||||
|
||||
path = linked_path;
|
||||
|
||||
} else {
|
||||
|
||||
/* one possible reason is that its already linked */
|
||||
|
||||
if (errno == EEXIST) {
|
||||
struct stat sb;
|
||||
|
||||
if (stat (linked_path.c_str(), &sb) == 0) {
|
||||
if (sb.st_nlink > 1) { // its a hard link, assume its the one we want
|
||||
path = linked_path;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* note that we temporarily truncated _id at the colon */
|
||||
|
|
@ -369,11 +395,20 @@ 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
|
||||
(*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) {
|
||||
source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable
|
||||
(*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>
|
||||
|
|
@ -94,7 +93,13 @@ Editor::initialize_canvas ()
|
|||
track_canvas.set_center_scroll_region (false);
|
||||
track_canvas.set_dither (Gdk::RGB_DITHER_NONE);
|
||||
|
||||
track_canvas.signal_event().connect (bind (mem_fun (*this, &Editor::track_canvas_event), (ArdourCanvas::Item*) 0));
|
||||
/* need to handle 4 specific types of events as catch-alls */
|
||||
|
||||
track_canvas.signal_scroll_event().connect (mem_fun (*this, &Editor::track_canvas_scroll_event));
|
||||
track_canvas.signal_motion_notify_event().connect (mem_fun (*this, &Editor::track_canvas_motion_notify_event));
|
||||
track_canvas.signal_button_press_event().connect (mem_fun (*this, &Editor::track_canvas_button_press_event));
|
||||
track_canvas.signal_button_release_event().connect (mem_fun (*this, &Editor::track_canvas_button_release_event));
|
||||
|
||||
track_canvas.set_name ("EditorMainCanvas");
|
||||
track_canvas.add_events (Gdk::POINTER_MOTION_HINT_MASK|Gdk::SCROLL_MASK);
|
||||
track_canvas.signal_leave_notify_event().connect (mem_fun(*this, &Editor::left_track_canvas));
|
||||
|
|
@ -142,33 +147,33 @@ Editor::initialize_canvas ()
|
|||
range_marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 3.0);
|
||||
transport_marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 4.0);
|
||||
|
||||
tempo_bar = new ArdourCanvas::SimpleRect (*tempo_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
|
||||
tempo_bar = new ArdourCanvas::SimpleRect (*tempo_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
|
||||
tempo_bar->property_fill_color_rgba() = color_map[cTempoBar];
|
||||
tempo_bar->property_outline_pixels() = 0;
|
||||
|
||||
meter_bar = new ArdourCanvas::SimpleRect (*meter_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
|
||||
meter_bar = new ArdourCanvas::SimpleRect (*meter_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
|
||||
meter_bar->property_fill_color_rgba() = color_map[cMeterBar];
|
||||
meter_bar->property_outline_pixels() = 0;
|
||||
|
||||
marker_bar = new ArdourCanvas::SimpleRect (*marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
|
||||
marker_bar = new ArdourCanvas::SimpleRect (*marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
|
||||
marker_bar->property_fill_color_rgba() = color_map[cMarkerBar];
|
||||
marker_bar->property_outline_pixels() = 0;
|
||||
|
||||
range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
|
||||
range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
|
||||
range_marker_bar->property_fill_color_rgba() = color_map[cRangeMarkerBar];
|
||||
range_marker_bar->property_outline_pixels() = 0;
|
||||
|
||||
transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
|
||||
transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
|
||||
transport_marker_bar->property_fill_color_rgba() = color_map[cTransportMarkerBar];
|
||||
transport_marker_bar->property_outline_pixels() = 0;
|
||||
|
||||
range_bar_drag_rect = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
|
||||
range_bar_drag_rect = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
|
||||
range_bar_drag_rect->property_fill_color_rgba() = color_map[cRangeDragBarRectFill];
|
||||
range_bar_drag_rect->property_outline_color_rgba() = color_map[cRangeDragBarRect];
|
||||
range_bar_drag_rect->property_outline_pixels() = 0;
|
||||
range_bar_drag_rect->hide ();
|
||||
|
||||
transport_bar_drag_rect = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
|
||||
transport_bar_drag_rect = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
|
||||
transport_bar_drag_rect ->property_fill_color_rgba() = color_map[cTransportDragRectFill];
|
||||
transport_bar_drag_rect->property_outline_color_rgba() = color_map[cTransportDragRect];
|
||||
transport_bar_drag_rect->property_outline_pixels() = 0;
|
||||
|
|
@ -264,8 +269,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));
|
||||
|
|
@ -310,14 +327,9 @@ Editor::track_canvas_size_allocated ()
|
|||
for (i = track_views.begin(); i != track_views.end(); ++i) {
|
||||
if ((*i)->control_parent) {
|
||||
height += (*i)->effective_height;
|
||||
height += track_spacing;
|
||||
}
|
||||
}
|
||||
|
||||
if (height) {
|
||||
height -= track_spacing;
|
||||
}
|
||||
|
||||
full_canvas_height = height;
|
||||
}
|
||||
|
||||
|
|
@ -362,7 +374,7 @@ Editor::track_canvas_size_allocated ()
|
|||
}
|
||||
|
||||
update_fixed_rulers();
|
||||
tempo_map_changed (Change (0), true);
|
||||
redisplay_tempo (true);
|
||||
|
||||
Resized (); /* EMIT_SIGNAL */
|
||||
|
||||
|
|
@ -380,7 +392,6 @@ Editor::reset_scrolling_region (Gtk::Allocation* alloc)
|
|||
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
||||
if (tv != 0 && !tv->hidden()) {
|
||||
pos += tv->effective_height;
|
||||
pos += track_spacing;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -405,7 +416,6 @@ Editor::controls_layout_size_request (Requisition* req)
|
|||
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
||||
if (tv != 0) {
|
||||
pos += tv->effective_height;
|
||||
pos += track_spacing;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -719,6 +729,6 @@ Editor::canvas_horizontally_scrolled ()
|
|||
|
||||
update_fixed_rulers ();
|
||||
|
||||
tempo_map_changed (Change (0), !_dragging_hscrollbar);
|
||||
redisplay_tempo (!_dragging_hscrollbar);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,16 +15,18 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
#include <cmath>
|
||||
|
||||
#include <pbd/stacktrace.h>
|
||||
|
||||
#include <ardour/audio_diskstream.h>
|
||||
#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 +73,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 +104,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) {
|
||||
|
|
@ -129,43 +131,36 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
|||
}
|
||||
|
||||
bool
|
||||
Editor::track_canvas_event (GdkEvent *event, ArdourCanvas::Item* item)
|
||||
Editor::track_canvas_scroll_event (GdkEventScroll *event)
|
||||
{
|
||||
gint x, y;
|
||||
track_canvas.grab_focus();
|
||||
track_canvas_scroll (event);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* this is the handler for events that are not handled by
|
||||
items.
|
||||
*/
|
||||
bool
|
||||
Editor::track_canvas_button_press_event (GdkEventButton *event)
|
||||
{
|
||||
track_canvas.grab_focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (event->type) {
|
||||
case GDK_MOTION_NOTIFY:
|
||||
/* keep those motion events coming */
|
||||
track_canvas.get_pointer (x, y);
|
||||
return track_canvas_motion (event);
|
||||
|
||||
case GDK_BUTTON_PRESS:
|
||||
track_canvas.grab_focus();
|
||||
break;
|
||||
|
||||
case GDK_BUTTON_RELEASE:
|
||||
switch (event->button.button) {
|
||||
case 4:
|
||||
case 5:
|
||||
button_release_handler (item, event, NoItem);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case GDK_SCROLL:
|
||||
track_canvas.grab_focus();
|
||||
track_canvas_scroll (&event->scroll);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
bool
|
||||
Editor::track_canvas_button_release_event (GdkEventButton *event)
|
||||
{
|
||||
if (drag_info.item) {
|
||||
end_grab (drag_info.item, (GdkEvent*) event);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
bool
|
||||
Editor::track_canvas_motion_notify_event (GdkEventMotion *event)
|
||||
{
|
||||
int x, y;
|
||||
/* keep those motion events coming */
|
||||
track_canvas.get_pointer (x, y);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
@ -214,7 +209,12 @@ Editor::typed_event (ArdourCanvas::Item* item, GdkEvent *event, ItemType type)
|
|||
bool
|
||||
Editor::canvas_region_view_event (GdkEvent *event, ArdourCanvas::Item* item, RegionView *rv)
|
||||
{
|
||||
gint ret = FALSE;
|
||||
bool ret = false;
|
||||
|
||||
if (!rv->sensitive ()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
switch (event->type) {
|
||||
case GDK_BUTTON_PRESS:
|
||||
|
|
@ -290,6 +290,7 @@ bool
|
|||
Editor::canvas_automation_track_event (GdkEvent *event, ArdourCanvas::Item* item, AutomationTimeAxisView *atv)
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
|
||||
switch (event->type) {
|
||||
case GDK_BUTTON_PRESS:
|
||||
|
|
@ -330,6 +331,10 @@ Editor::canvas_fade_in_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRe
|
|||
{
|
||||
/* we handle only button 3 press/release events */
|
||||
|
||||
if (!rv->sensitive()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (event->type) {
|
||||
case GDK_BUTTON_PRESS:
|
||||
clicked_regionview = rv;
|
||||
|
|
@ -362,6 +367,10 @@ Editor::canvas_fade_in_handle_event (GdkEvent *event, ArdourCanvas::Item* item,
|
|||
{
|
||||
bool ret = false;
|
||||
|
||||
if (!rv->sensitive()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (event->type) {
|
||||
case GDK_BUTTON_PRESS:
|
||||
case GDK_2BUTTON_PRESS:
|
||||
|
|
@ -401,6 +410,10 @@ Editor::canvas_fade_out_event (GdkEvent *event, ArdourCanvas::Item* item, AudioR
|
|||
{
|
||||
/* we handle only button 3 press/release events */
|
||||
|
||||
if (!rv->sensitive()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (event->type) {
|
||||
case GDK_BUTTON_PRESS:
|
||||
clicked_regionview = rv;
|
||||
|
|
@ -433,6 +446,10 @@ Editor::canvas_fade_out_handle_event (GdkEvent *event, ArdourCanvas::Item* item,
|
|||
{
|
||||
bool ret = false;
|
||||
|
||||
if (!rv->sensitive()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (event->type) {
|
||||
case GDK_BUTTON_PRESS:
|
||||
case GDK_2BUTTON_PRESS:
|
||||
|
|
@ -499,6 +516,11 @@ Editor::canvas_crossfade_view_event (GdkEvent* event, ArdourCanvas::Item* item,
|
|||
|
||||
}
|
||||
|
||||
/* XXX do not forward double clicks */
|
||||
|
||||
if (event->type == GDK_2BUTTON_PRESS) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* proxy for the upper most regionview */
|
||||
|
||||
|
|
@ -524,10 +546,10 @@ Editor::canvas_crossfade_view_event (GdkEvent* event, ArdourCanvas::Item* item,
|
|||
|
||||
RegionView* rv = atv->view()->find_view (rl->front());
|
||||
|
||||
/* proxy */
|
||||
|
||||
delete rl;
|
||||
|
||||
/* proxy */
|
||||
|
||||
return canvas_region_view_event (event, rv->get_canvas_group(), rv);
|
||||
}
|
||||
}
|
||||
|
|
@ -703,6 +725,10 @@ Editor::canvas_region_view_name_highlight_event (GdkEvent* event, ArdourCanvas::
|
|||
{
|
||||
bool ret = false;
|
||||
|
||||
if (!rv->sensitive()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (event->type) {
|
||||
case GDK_BUTTON_PRESS:
|
||||
case GDK_2BUTTON_PRESS:
|
||||
|
|
@ -739,6 +765,10 @@ Editor::canvas_region_view_name_event (GdkEvent *event, ArdourCanvas::Item* item
|
|||
{
|
||||
bool ret = false;
|
||||
|
||||
if (!rv->sensitive()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (event->type) {
|
||||
case GDK_BUTTON_PRESS:
|
||||
case GDK_2BUTTON_PRESS:
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -24,6 +23,7 @@
|
|||
|
||||
#include <libgnomecanvas/libgnomecanvas.h>
|
||||
#include <gtkmm2ext/gtk_ui.h>
|
||||
#include <gtkmm2ext/window_title.h>
|
||||
|
||||
#include <ardour/location.h>
|
||||
#include <pbd/memento_command.h>
|
||||
|
|
@ -44,6 +44,7 @@ using namespace sigc;
|
|||
using namespace ARDOUR;
|
||||
using namespace PBD;
|
||||
using namespace Gtk;
|
||||
using namespace Gtkmm2ext;
|
||||
|
||||
void
|
||||
Editor::clear_marker_display ()
|
||||
|
|
@ -511,6 +512,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 +562,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 ()
|
||||
{
|
||||
|
|
@ -838,13 +858,16 @@ Editor::marker_menu_rename ()
|
|||
string txt;
|
||||
|
||||
dialog.set_prompt (_("New Name:"));
|
||||
|
||||
|
||||
WindowTitle title(Glib::get_application_name());
|
||||
if (loc->is_mark()) {
|
||||
dialog.set_title (_("ardour: rename mark"));
|
||||
title += _("Rename Mark");
|
||||
} else {
|
||||
dialog.set_title (_("ardour: rename range"));
|
||||
title += _("Rename Range");
|
||||
}
|
||||
|
||||
dialog.set_title(title.get_string());
|
||||
|
||||
dialog.set_name ("MarkRenameWindow");
|
||||
dialog.set_size_request (250, -1);
|
||||
dialog.set_position (Gtk::WIN_POS_MOUSE);
|
||||
|
|
@ -958,8 +981,8 @@ Editor::update_loop_range_view (bool visibility)
|
|||
if (visibility) {
|
||||
transport_loop_range_rect->show();
|
||||
}
|
||||
}
|
||||
else if (visibility) {
|
||||
|
||||
} else if (visibility) {
|
||||
transport_loop_range_rect->hide();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,10 +15,11 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <glibmm/miscutils.h>
|
||||
#include <gtkmm2ext/utils.h>
|
||||
#include <gtkmm2ext/window_title.h>
|
||||
#include <ardour/audioengine.h>
|
||||
|
||||
#include "editor.h"
|
||||
|
|
@ -30,6 +31,8 @@
|
|||
|
||||
#include "i18n.h"
|
||||
|
||||
using namespace Gtkmm2ext;
|
||||
|
||||
void
|
||||
Editor::editor_mixer_button_toggled ()
|
||||
{
|
||||
|
|
@ -158,10 +161,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;
|
||||
|
||||
|
|
@ -179,6 +185,9 @@ Editor::update_current_screen ()
|
|||
|
||||
if (frame != last_update_frame) {
|
||||
|
||||
|
||||
#undef CONTINUOUS_SCROLL
|
||||
#ifndef CONTINUOUS_SCROLL
|
||||
if (frame < leftmost_frame || frame > leftmost_frame + current_page_frames()) {
|
||||
|
||||
if (session->transport_speed() < 0) {
|
||||
|
|
@ -194,27 +203,26 @@ Editor::update_current_screen ()
|
|||
|
||||
playhead_cursor->set_position (frame);
|
||||
|
||||
#undef CONTINUOUS_SCROLL
|
||||
#ifdef CONTINUOUS_SCROLL
|
||||
|
||||
#else // CONTINUOUS_SCROLL
|
||||
|
||||
/* don't do continuous scroll till the new position is in the rightmost quarter of the
|
||||
editor canvas
|
||||
*/
|
||||
|
||||
#if 0
|
||||
if (frame > leftmost_frame + (3 * current_page_frames() / 4)) {
|
||||
|
||||
if (frame > playhead_cursor->current_frame) {
|
||||
nframes_t delta = frame - playhead_cursor->current_frame;
|
||||
horizontal_adjustment.set_value (horizontal_adjustment.get_value() + (delta/frames_per_unit));
|
||||
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 {
|
||||
nframes_t delta = playhead_cursor->current_frame - frame;
|
||||
horizontal_adjustment.set_value (horizontal_adjustment.get_value() - (delta/frames_per_unit));
|
||||
/* 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 );
|
||||
}
|
||||
#else
|
||||
horizontal_adjustment.set_value (frame / frames_per_unit);
|
||||
#endif
|
||||
|
||||
playhead_cursor->set_position (frame);
|
||||
|
||||
#endif // CONTINUOUS_SCROLL
|
||||
|
||||
|
|
@ -340,7 +348,10 @@ Editor::session_going_away ()
|
|||
|
||||
current_mixer_strip = 0;
|
||||
|
||||
set_title (_("ardour: editor"));
|
||||
WindowTitle title(Glib::get_application_name());
|
||||
title += _("Editor");
|
||||
|
||||
set_title (title.get_string());
|
||||
|
||||
session = 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 <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>
|
||||
|
|
@ -32,6 +31,7 @@
|
|||
|
||||
#include <gtkmm2ext/utils.h>
|
||||
#include <gtkmm2ext/choice.h>
|
||||
#include <gtkmm2ext/window_title.h>
|
||||
|
||||
#include <ardour/audioengine.h>
|
||||
#include <ardour/session.h>
|
||||
|
|
@ -68,6 +68,7 @@ using namespace ARDOUR;
|
|||
using namespace PBD;
|
||||
using namespace sigc;
|
||||
using namespace Gtk;
|
||||
using namespace Gtkmm2ext;
|
||||
using namespace Editing;
|
||||
|
||||
/***********************************************************************
|
||||
|
|
@ -499,15 +500,6 @@ Editor::build_region_boundary_cache ()
|
|||
break;
|
||||
}
|
||||
|
||||
} else if (clicked_trackview) {
|
||||
|
||||
TrackViewList t;
|
||||
t.push_back (clicked_trackview);
|
||||
|
||||
if ((r = find_next_region (pos, point, 1, t, &ontrack)) == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if ((r = find_next_region (pos, point, 1, track_views, &ontrack)) == 0) {
|
||||
|
|
@ -1507,19 +1499,13 @@ Editor::insert_region_list_drag (boost::shared_ptr<AudioRegion> region, int x, i
|
|||
return;
|
||||
}
|
||||
|
||||
cerr << "drop target playlist, UC = " << playlist.use_count() << endl;
|
||||
|
||||
snap_to (where);
|
||||
|
||||
begin_reversible_command (_("insert dragged region"));
|
||||
XMLNode &before = playlist->get_state();
|
||||
cerr << "pre add target playlist, UC = " << playlist.use_count() << endl;
|
||||
playlist->add_region (RegionFactory::create (region), where, 1.0);
|
||||
cerr << "post add target playlist, UC = " << playlist.use_count() << endl;
|
||||
session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
|
||||
commit_reversible_command ();
|
||||
|
||||
cerr << "post drop target playlist, UC = " << playlist.use_count() << endl;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1764,7 +1750,10 @@ Editor::rename_region ()
|
|||
return;
|
||||
}
|
||||
|
||||
dialog.set_title (_("ardour: rename region"));
|
||||
WindowTitle title(Glib::get_application_name());
|
||||
title += _("Rename Region");
|
||||
|
||||
dialog.set_title (title.get_string());
|
||||
dialog.set_name ("RegionRenameWindow");
|
||||
dialog.set_size_request (300, -1);
|
||||
dialog.set_position (Gtk::WIN_POS_MOUSE);
|
||||
|
|
@ -1995,6 +1984,12 @@ Editor::separate_region_from_selection ()
|
|||
if ((atv = dynamic_cast<AudioTimeAxisView*> ((*i))) != 0) {
|
||||
|
||||
if (atv->is_audio_track()) {
|
||||
|
||||
/* no edits to destructive tracks */
|
||||
|
||||
if (atv->audio_track()->audio_diskstream()->destructive()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((playlist = atv->playlist()) != 0) {
|
||||
if (!doing_undo) {
|
||||
|
|
@ -2048,6 +2043,12 @@ Editor::separate_regions_using_location (Location& loc)
|
|||
|
||||
if (atv->is_audio_track()) {
|
||||
|
||||
/* no edits to destructive tracks */
|
||||
|
||||
if (atv->audio_track()->audio_diskstream()->destructive()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((playlist = atv->playlist()) != 0) {
|
||||
XMLNode *before;
|
||||
if (!doing_undo) {
|
||||
|
|
@ -2077,75 +2078,76 @@ Editor::separate_regions_using_location (Location& loc)
|
|||
void
|
||||
Editor::crop_region_to_selection ()
|
||||
{
|
||||
if (selection->time.empty()) {
|
||||
if (selection->time.empty() || selection->tracks.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
vector<boost::shared_ptr<Playlist> > playlists;
|
||||
boost::shared_ptr<Playlist> playlist;
|
||||
|
||||
if (clicked_trackview != 0) {
|
||||
|
||||
if ((playlist = clicked_trackview->playlist()) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
playlists.push_back (playlist);
|
||||
|
||||
} else {
|
||||
sort_track_selection ();
|
||||
|
||||
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
||||
|
||||
sort_track_selection ();
|
||||
AudioTimeAxisView* atv;
|
||||
|
||||
if ((atv = dynamic_cast<AudioTimeAxisView*> ((*i))) != 0) {
|
||||
|
||||
if (atv->is_audio_track()) {
|
||||
|
||||
/* no edits to destructive tracks */
|
||||
|
||||
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
||||
if (atv->audio_track()->audio_diskstream()->destructive()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
AudioTimeAxisView* atv;
|
||||
|
||||
if ((atv = dynamic_cast<AudioTimeAxisView*> ((*i))) != 0) {
|
||||
|
||||
if (atv->is_audio_track()) {
|
||||
|
||||
if ((playlist = atv->playlist()) != 0) {
|
||||
playlists.push_back (playlist);
|
||||
}
|
||||
if ((playlist = atv->playlist()) != 0) {
|
||||
playlists.push_back (playlist);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!playlists.empty()) {
|
||||
|
||||
nframes_t start;
|
||||
nframes_t end;
|
||||
nframes_t cnt;
|
||||
|
||||
begin_reversible_command (_("trim to selection"));
|
||||
|
||||
for (vector<boost::shared_ptr<Playlist> >::iterator i = playlists.begin(); i != playlists.end(); ++i) {
|
||||
|
||||
boost::shared_ptr<Region> region;
|
||||
|
||||
start = selection->time.start();
|
||||
|
||||
if ((region = (*i)->top_region_at(start)) == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* now adjust lengths to that we do the right thing
|
||||
if the selection extends beyond the region
|
||||
*/
|
||||
|
||||
start = max (start, region->position());
|
||||
end = min (selection->time.end_frame(), start + region->length() - 1);
|
||||
cnt = end - start + 1;
|
||||
|
||||
XMLNode &before = (*i)->get_state();
|
||||
region->trim_to (start, cnt, this);
|
||||
XMLNode &after = (*i)->get_state();
|
||||
session->add_command (new MementoCommand<Playlist>(*(*i), &before, &after));
|
||||
}
|
||||
|
||||
commit_reversible_command ();
|
||||
if (playlists.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
nframes_t start;
|
||||
nframes_t end;
|
||||
nframes_t cnt;
|
||||
|
||||
begin_reversible_command (_("trim to selection"));
|
||||
|
||||
for (vector<boost::shared_ptr<Playlist> >::iterator i = playlists.begin(); i != playlists.end(); ++i) {
|
||||
|
||||
boost::shared_ptr<Region> region;
|
||||
|
||||
start = selection->time.start();
|
||||
|
||||
if ((region = (*i)->top_region_at(start)) == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* now adjust lengths to that we do the right thing
|
||||
if the selection extends beyond the region
|
||||
*/
|
||||
|
||||
start = max (start, region->position());
|
||||
if (max_frames - start < region->length()) {
|
||||
end = start + region->length() - 1;
|
||||
} else {
|
||||
end = max_frames;
|
||||
}
|
||||
end = min (selection->time.end_frame(), end);
|
||||
cnt = end - start + 1;
|
||||
|
||||
XMLNode &before = (*i)->get_state();
|
||||
region->trim_to (start, cnt, this);
|
||||
XMLNode &after = (*i)->get_state();
|
||||
session->add_command (new MementoCommand<Playlist>(*(*i), &before, &after));
|
||||
}
|
||||
|
||||
commit_reversible_command ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -2527,8 +2529,10 @@ Editor::freeze_route ()
|
|||
if (interthread_progress_window == 0) {
|
||||
build_interthread_progress_window ();
|
||||
}
|
||||
|
||||
interthread_progress_window->set_title (_("ardour: freeze"));
|
||||
|
||||
WindowTitle title(Glib::get_application_name());
|
||||
title += _("Freeze");
|
||||
interthread_progress_window->set_title (title.get_string());
|
||||
interthread_progress_window->set_position (Gtk::WIN_POS_MOUSE);
|
||||
interthread_progress_window->show_all ();
|
||||
interthread_progress_bar.set_fraction (0.0f);
|
||||
|
|
@ -2570,15 +2574,15 @@ 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;
|
||||
nframes_t cnt = end - start + 1;
|
||||
|
||||
|
||||
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;
|
||||
|
||||
|
|
@ -2597,7 +2601,7 @@ Editor::bounce_range_selection ()
|
|||
itt.done = false;
|
||||
itt.cancel = false;
|
||||
itt.progress = false;
|
||||
|
||||
|
||||
XMLNode &before = playlist->get_state();
|
||||
atv->audio_track()->bounce_range (start, cnt, itt);
|
||||
XMLNode &after = playlist->get_state();
|
||||
|
|
@ -2605,8 +2609,6 @@ Editor::bounce_range_selection ()
|
|||
}
|
||||
|
||||
commit_reversible_command ();
|
||||
|
||||
delete views;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -2807,19 +2809,22 @@ Editor::cut_copy_regions (CutCopyOp op)
|
|||
}
|
||||
|
||||
boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion>((*x)->region());
|
||||
boost::shared_ptr<Region> _xx;
|
||||
|
||||
switch (op) {
|
||||
case Cut:
|
||||
if (!ar) break;
|
||||
|
||||
npl->add_region (RegionFactory::create (ar), (*x)->region()->position() - first_position);
|
||||
_xx = RegionFactory::create ((*x)->region());
|
||||
npl->add_region (_xx, (*x)->region()->position() - first_position);
|
||||
pl->remove_region (((*x)->region()));
|
||||
break;
|
||||
|
||||
case Copy:
|
||||
if (!ar) break;
|
||||
|
||||
npl->add_region (RegionFactory::create (ar), (*x)->region()->position() - first_position);
|
||||
|
||||
/* copy region before adding, so we're not putting same object into two different playlists */
|
||||
npl->add_region (RegionFactory::create ((*x)->region()), (*x)->region()->position() - first_position);
|
||||
break;
|
||||
|
||||
case Clear:
|
||||
|
|
@ -2839,10 +2844,11 @@ Editor::cut_copy_regions (CutCopyOp op)
|
|||
foo.push_back ((*i).pl);
|
||||
}
|
||||
|
||||
|
||||
if (!foo.empty()) {
|
||||
cut_buffer->set (foo);
|
||||
}
|
||||
|
||||
|
||||
for (set<PlaylistState, lt_playlist>::iterator pl = freezelist.begin(); pl != freezelist.end(); ++pl) {
|
||||
(*pl).playlist->thaw ();
|
||||
session->add_command (new MementoCommand<Playlist>(*(*pl).playlist, (*pl).before, &(*pl).playlist->get_state()));
|
||||
|
|
|
|||
|
|
@ -15,24 +15,26 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
#include <cmath>
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
#include <pbd/basename.h>
|
||||
|
||||
#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 +87,9 @@ Editor::add_audio_region_to_region_display (boost::shared_ptr<AudioRegion> regio
|
|||
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,18 +129,23 @@ Editor::add_audio_region_to_region_display (boost::shared_ptr<AudioRegion> regio
|
|||
} 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
|
||||
|
||||
if (region->whole_file()) {
|
||||
str = ".../";
|
||||
|
||||
boost::shared_ptr<AudioFileSource> afs = boost::dynamic_pointer_cast<AudioFileSource>(region->source());
|
||||
|
||||
str = ".../";
|
||||
|
||||
if (afs) {
|
||||
str += region_name_from_path (afs->path(), region->n_channels() > 1);
|
||||
str = region_name_from_path (afs->path(), region->n_channels() > 1);
|
||||
} else {
|
||||
str += region->source()->name();
|
||||
}
|
||||
|
|
@ -150,6 +160,18 @@ Editor::add_audio_region_to_region_display (boost::shared_ptr<AudioRegion> regio
|
|||
|
||||
}
|
||||
|
||||
if (region->n_channels() > 1) {
|
||||
std::stringstream foo;
|
||||
foo << region->n_channels ();
|
||||
str += " [";
|
||||
str += foo.str();
|
||||
str += ']';
|
||||
}
|
||||
|
||||
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>
|
||||
|
|
@ -23,10 +22,12 @@
|
|||
#include <cmath>
|
||||
|
||||
#include "editor.h"
|
||||
#include "keyboard.h"
|
||||
#include "ardour_ui.h"
|
||||
#include "audio_time_axis.h"
|
||||
#include "mixer_strip.h"
|
||||
#include "gui_thread.h"
|
||||
#include "actions.h"
|
||||
|
||||
#include <ardour/route.h>
|
||||
#include <ardour/audio_track.h>
|
||||
|
|
@ -52,7 +53,7 @@ Editor::handle_new_route (Session::RouteList& routes)
|
|||
boost::shared_ptr<Route> route = (*x);
|
||||
|
||||
if (route->hidden()) {
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
tv = new AudioTimeAxisView (*this, *session, route, track_canvas);
|
||||
|
|
@ -148,9 +149,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 */
|
||||
|
||||
|
|
@ -257,7 +259,6 @@ Editor::redisplay_route_list ()
|
|||
if (visible) {
|
||||
tv->set_marked_for_display (true);
|
||||
position += tv->show_at (position, n, &edit_controls_vbox);
|
||||
position += track_spacing;
|
||||
} else {
|
||||
tv->hide ();
|
||||
}
|
||||
|
|
@ -266,6 +267,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 ();
|
||||
|
|
@ -509,11 +512,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
|
||||
|
|
@ -56,6 +55,10 @@ Editor::initialize_rulers ()
|
|||
ruler_editor = this;
|
||||
ruler_grabbed_widget = 0;
|
||||
|
||||
_ruler_separator = new Gtk::HSeparator();
|
||||
_ruler_separator->set_size_request(-1, 2);
|
||||
_ruler_separator->show();
|
||||
|
||||
_smpte_ruler = gtk_custom_hruler_new ();
|
||||
smpte_ruler = Glib::wrap (_smpte_ruler);
|
||||
smpte_ruler->set_name ("SMPTERuler");
|
||||
|
|
@ -148,6 +151,11 @@ Editor::ruler_button_press (GdkEventButton* ev)
|
|||
|
||||
switch (ev->button) {
|
||||
case 1:
|
||||
// Since we are about to move the playhead, cancel any running
|
||||
// auditions.
|
||||
if (session->is_auditioning()) {
|
||||
session->cancel_audition ();
|
||||
}
|
||||
/* transport playhead */
|
||||
snap_to (where);
|
||||
session->request_locate (where);
|
||||
|
|
@ -252,12 +260,12 @@ Editor::ruler_mouse_motion (GdkEventMotion* ev)
|
|||
/* need to use the correct x,y, the event lies */
|
||||
time_canvas_event_box.get_window()->get_pointer (x, y, state);
|
||||
|
||||
|
||||
track_canvas.c2w (x, y, wcx, wcy);
|
||||
track_canvas.w2c (wcx, wcy, cx, cy);
|
||||
|
||||
nframes_t where = leftmost_frame + pixel_to_frame (x);
|
||||
time_canvas.c2w (x, y, wcx, wcy);
|
||||
time_canvas.w2c (wcx, wcy, cx, cy);
|
||||
|
||||
wcx = x;
|
||||
nframes_t where = event_frame ((GdkEvent*) ev, &wcx, (double *) 0);
|
||||
cx = wcx;
|
||||
|
||||
/// ripped from maybe_autoscroll, and adapted to work here
|
||||
nframes_t one_page = (nframes_t) rint (canvas_width * frames_per_unit);
|
||||
|
|
@ -299,8 +307,7 @@ Editor::ruler_mouse_motion (GdkEventMotion* ev)
|
|||
break;
|
||||
}
|
||||
|
||||
if (cursor)
|
||||
{
|
||||
if (cursor) {
|
||||
cursor->set_position (where);
|
||||
|
||||
if (cursor == edit_cursor) {
|
||||
|
|
@ -373,7 +380,7 @@ Editor::popup_ruler_menu (nframes_t where, ItemType t)
|
|||
mitem->set_active(true);
|
||||
}
|
||||
|
||||
ruler_items.push_back (CheckMenuElem (X_("Timecode"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_smpte)));
|
||||
ruler_items.push_back (CheckMenuElem (_("Timecode"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_smpte)));
|
||||
mitem = (CheckMenuItem *) &ruler_items.back();
|
||||
if (ruler_shown[ruler_metric_smpte]) {
|
||||
mitem->set_active(true);
|
||||
|
|
@ -601,6 +608,7 @@ Editor::update_ruler_visibility ()
|
|||
frames_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion));
|
||||
minsec_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion));
|
||||
|
||||
ruler_children.insert (canvaspos, Element(*_ruler_separator, PACK_SHRINK, PACK_START));
|
||||
|
||||
if (ruler_shown[ruler_metric_minsec]) {
|
||||
lab_children.push_back (Element(minsec_label, PACK_SHRINK, PACK_START));
|
||||
|
|
@ -626,7 +634,7 @@ Editor::update_ruler_visibility ()
|
|||
visible_timebars++;
|
||||
}
|
||||
|
||||
double tbpos = 0.0;
|
||||
double tbpos = 1.0;
|
||||
double old_unit_pos ;
|
||||
|
||||
if (ruler_shown[ruler_time_meter]) {
|
||||
|
|
@ -705,10 +713,10 @@ Editor::update_ruler_visibility ()
|
|||
|
||||
update_fixed_rulers();
|
||||
//update_tempo_based_rulers();
|
||||
tempo_map_changed(Change (0), false);
|
||||
redisplay_tempo (false);
|
||||
|
||||
time_canvas_event_box.show_all();
|
||||
time_button_event_box.show_all();
|
||||
time_button_frame.show_all();
|
||||
}
|
||||
|
||||
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: 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)
|
||||
|
|
@ -772,7 +776,7 @@ Editor::select_all_within (nframes_t start, nframes_t end, double top, double bo
|
|||
list<Selectable*>::size_type n = 0;
|
||||
TrackViewList touched_tracks;
|
||||
|
||||
for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
|
||||
for (TrackViewList::iterator iter = selection->tracks.begin(); iter != selection->tracks.end(); ++iter) {
|
||||
if ((*iter)->hidden()) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -780,13 +784,18 @@ Editor::select_all_within (nframes_t start, nframes_t end, double top, double bo
|
|||
n = touched.size();
|
||||
|
||||
(*iter)->get_selectables (start, end, top, bot, touched);
|
||||
|
||||
|
||||
if (n != touched.size()) {
|
||||
touched_tracks.push_back (*iter);
|
||||
}
|
||||
}
|
||||
|
||||
if (touched.empty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!touched_tracks.empty()) {
|
||||
|
||||
switch (op) {
|
||||
case Selection::Add:
|
||||
selection->add (touched_tracks);
|
||||
|
|
@ -802,7 +811,7 @@ Editor::select_all_within (nframes_t start, nframes_t end, double top, double bo
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
begin_reversible_command (_("select all within"));
|
||||
switch (op) {
|
||||
case Selection::Add:
|
||||
|
|
@ -818,8 +827,9 @@ Editor::select_all_within (nframes_t start, nframes_t end, double top, double bo
|
|||
/* not defined yet */
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
commit_reversible_command ();
|
||||
|
||||
return !touched.empty();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,28 @@ Editor::draw_metric_marks (const Metrics& metrics)
|
|||
}
|
||||
|
||||
void
|
||||
Editor::tempo_map_changed (Change ignored, bool immediate_redraw)
|
||||
Editor::tempo_map_changed (Change ignored)
|
||||
{
|
||||
if (!session) {
|
||||
return;
|
||||
}
|
||||
|
||||
ENSURE_GUI_THREAD(bind (mem_fun (*this, &Editor::tempo_map_changed), ignored, immediate_redraw));
|
||||
ENSURE_GUI_THREAD(bind (mem_fun (*this, &Editor::tempo_map_changed), ignored));
|
||||
|
||||
redisplay_tempo (false); // redraw rulers and measures
|
||||
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); // redraw metric markers
|
||||
}
|
||||
|
||||
/**
|
||||
* This code was originally in tempo_map_changed, but this is called every time the canvas scrolls horizontally.
|
||||
* That's why this is moved in here. The new tempo_map_changed is called when the ARDOUR::TempoMap actually changed.
|
||||
*/
|
||||
void
|
||||
Editor::redisplay_tempo (bool immediate_redraw)
|
||||
{
|
||||
if (!session) {
|
||||
return;
|
||||
}
|
||||
|
||||
BBT_Time previous_beat, next_beat; // the beats previous to the leftmost frame and after the rightmost frame
|
||||
|
||||
|
|
@ -153,11 +167,6 @@ Editor::tempo_map_changed (Change ignored, bool immediate_redraw)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::redisplay_tempo ()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
Editor::hide_measures ()
|
||||
{
|
||||
|
|
@ -308,8 +317,6 @@ Editor::mouse_add_new_tempo_event (nframes_t frame)
|
|||
commit_reversible_command ();
|
||||
|
||||
map.dump (cerr);
|
||||
|
||||
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -350,8 +357,6 @@ Editor::mouse_add_new_meter_event (nframes_t frame)
|
|||
commit_reversible_command ();
|
||||
|
||||
map.dump (cerr);
|
||||
|
||||
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -402,8 +407,6 @@ Editor::edit_meter_section (MeterSection* section)
|
|||
XMLNode &after = session->tempo_map().get_state();
|
||||
session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
|
||||
commit_reversible_command ();
|
||||
|
||||
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -434,8 +437,6 @@ Editor::edit_tempo_section (TempoSection* section)
|
|||
XMLNode &after = session->tempo_map().get_state();
|
||||
session->add_command (new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
|
||||
commit_reversible_command ();
|
||||
|
||||
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -486,8 +487,6 @@ Editor::real_remove_tempo_marker (TempoSection *section)
|
|||
session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
|
||||
commit_reversible_command ();
|
||||
|
||||
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -522,7 +521,5 @@ Editor::real_remove_meter_marker (MeterSection *section)
|
|||
session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
|
||||
commit_reversible_command ();
|
||||
|
||||
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,6 +26,8 @@
|
|||
#include <pbd/pthread_utils.h>
|
||||
#include <pbd/memento_command.h>
|
||||
|
||||
#include <gtkmm2ext/window_title.h>
|
||||
|
||||
#include "editor.h"
|
||||
#include "audio_time_axis.h"
|
||||
#include "audio_region_view.h"
|
||||
|
|
@ -45,6 +46,7 @@ using namespace ARDOUR;
|
|||
using namespace PBD;
|
||||
using namespace sigc;
|
||||
using namespace Gtk;
|
||||
using namespace Gtkmm2ext;
|
||||
|
||||
Editor::TimeStretchDialog::TimeStretchDialog (Editor& e)
|
||||
: ArdourDialog ("time stretch dialog"),
|
||||
|
|
@ -54,9 +56,12 @@ Editor::TimeStretchDialog::TimeStretchDialog (Editor& e)
|
|||
{
|
||||
set_modal (true);
|
||||
set_position (Gtk::WIN_POS_MOUSE);
|
||||
set_title (_("ardour: timestretch"));
|
||||
set_name (N_("TimeStretchDialog"));
|
||||
|
||||
WindowTitle title(Glib::get_application_name());
|
||||
title += _("Timestretch");
|
||||
set_title(title.get_string());
|
||||
|
||||
get_vbox()->set_spacing (5);
|
||||
get_vbox()->set_border_width (5);
|
||||
get_vbox()->pack_start (upper_button_box);
|
||||
|
|
|
|||
|
|
@ -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$
|
||||
|
||||
*/
|
||||
|
||||
|
|
@ -30,6 +29,8 @@
|
|||
#include <pbd/xml++.h>
|
||||
|
||||
#include <gtkmm2ext/utils.h>
|
||||
#include <gtkmm2ext/window_title.h>
|
||||
|
||||
#include <ardour/export.h>
|
||||
#include <ardour/sndfile_helpers.h>
|
||||
#include <ardour/audio_track.h>
|
||||
|
|
@ -52,6 +53,7 @@ using namespace ARDOUR;
|
|||
using namespace PBD;
|
||||
using namespace sigc;
|
||||
using namespace Gtk;
|
||||
using namespace Gtkmm2ext;
|
||||
|
||||
static const gchar *sample_rates[] = {
|
||||
N_("22.05kHz"),
|
||||
|
|
@ -107,7 +109,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 ..."))
|
||||
{
|
||||
|
|
@ -119,8 +120,11 @@ ExportDialog::ExportDialog(PublicEditor& e)
|
|||
track_and_master_selection_allowed = true;
|
||||
channel_count_selection_allowed = true;
|
||||
export_cd_markers_allowed = true;
|
||||
|
||||
WindowTitle title(Glib::get_application_name());
|
||||
title += _("Export");
|
||||
|
||||
set_title (_("ardour: export"));
|
||||
set_title (title.get_string());
|
||||
set_wmclass (X_("ardour_export"), "Ardour");
|
||||
set_name ("ExportWindow");
|
||||
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
|
||||
|
|
@ -569,7 +573,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);
|
||||
}
|
||||
|
|
@ -918,7 +922,6 @@ ExportDialog::do_export ()
|
|||
void
|
||||
ExportDialog::end_dialog ()
|
||||
{
|
||||
|
||||
if (spec.running) {
|
||||
spec.stop = true;
|
||||
|
||||
|
|
@ -931,7 +934,7 @@ ExportDialog::end_dialog ()
|
|||
}
|
||||
}
|
||||
|
||||
session->engine().freewheel (false);
|
||||
session->finalize_audio_export ();
|
||||
|
||||
hide_all ();
|
||||
|
||||
|
|
@ -947,12 +950,12 @@ 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 && last_slash != 0) {
|
||||
|
|
@ -1306,7 +1309,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
|
||||
{
|
||||
|
|
@ -140,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 {
|
||||
|
|
@ -171,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;
|
||||
}
|
||||
}
|
||||
|
|
@ -190,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,6 +30,8 @@ class ExportRangeMarkersDialog : public ExportDialog
|
|||
public:
|
||||
ExportRangeMarkersDialog (PublicEditor&);
|
||||
|
||||
Gtk::FileChooserAction browse_action() const;
|
||||
|
||||
protected:
|
||||
virtual bool is_filepath_valid(string &filepath);
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -106,11 +105,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");
|
||||
|
|
@ -157,7 +156,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)));
|
||||
|
|
@ -227,11 +226,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);
|
||||
|
||||
|
|
@ -270,9 +269,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;
|
||||
|
|
@ -320,7 +319,7 @@ GainMeter::update_meters ()
|
|||
if ((*i).packed) {
|
||||
peak = _io->peak_input_power (n);
|
||||
|
||||
(*i).meter->set (log_meter (peak), peak);
|
||||
(*i).meter->set (log_meter (peak));
|
||||
|
||||
mpeak = _io->max_peak_power(n);
|
||||
|
||||
|
|
@ -328,10 +327,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) {
|
||||
|
|
@ -448,6 +447,13 @@ GainMeter::setup_meters ()
|
|||
}
|
||||
}
|
||||
|
||||
int
|
||||
GainMeter::get_gm_width ()
|
||||
{
|
||||
Gtk::Requisition sz = hbox.size_request ();
|
||||
return sz.width;
|
||||
}
|
||||
|
||||
bool
|
||||
GainMeter::gain_key_press (GdkEventKey* ev)
|
||||
{
|
||||
|
|
@ -487,7 +493,7 @@ GainMeter::reset_peak_display ()
|
|||
}
|
||||
|
||||
max_peak = -INFINITY;
|
||||
peak_display.set_text (_("-Inf"));
|
||||
peak_display.set_label (_("-Inf"));
|
||||
peak_display.set_name ("MixerStripPeakDisplay");
|
||||
}
|
||||
|
||||
|
|
@ -509,7 +515,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;
|
||||
|
||||
|
|
@ -838,7 +844,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;
|
||||
|
|
|
|||
|
|
@ -69,3 +69,13 @@ GhostRegion::set_height ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
GhostRegion::set_colors ()
|
||||
{
|
||||
for (uint32_t n=0; n < waves.size(); ++n) {
|
||||
waves[n]->property_wave_color() = color_map[cGhostTrackWave];
|
||||
|
||||
waves[n]->property_clip_color() = color_map[cGhostTrackWaveClip];
|
||||
waves[n]->property_zero_color() = color_map[cGhostTrackZeroLine];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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__
|
||||
|
|
@ -42,6 +41,7 @@ struct GhostRegion : public sigc::trackable
|
|||
void set_samples_per_unit (double spu);
|
||||
void set_duration (double units);
|
||||
void set_height ();
|
||||
void set_colors ();
|
||||
|
||||
sigc::signal<void,GhostRegion*> GoingAway;
|
||||
};
|
||||
|
|
|
|||
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 |