most of the 2.X->3.0 commit (up to rev 4299) except for gtk2_ardour/editor_canvas.cc; builds and runs and does a few specific things but expect it to be buggy for a while yet
git-svn-id: svn://localhost/ardour2/branches/3.0@4313 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
30daaebaa2
commit
bc89fe0147
|
@ -1,2 +0,0 @@
|
||||||
Makefile.in
|
|
||||||
Makefile
|
|
|
@ -1,78 +0,0 @@
|
||||||
Paul Davis (Philadelphia, PA) was and is the primary author of Ardour.
|
|
||||||
|
|
||||||
Taybin Rutkin (New York, NY) has contributed lots of code, and was
|
|
||||||
particularly responsible for the use of XML in the state persistence
|
|
||||||
aspect of the program. He also (re)wrote the soundfile library code to
|
|
||||||
use LRDF. In addition he was responsible for the integration of the
|
|
||||||
gettext system and the compose() templates that make Ardour's
|
|
||||||
internationalization possible. He has consistently made suggestions
|
|
||||||
that resulted in significantly more elegant code and design. Taybin
|
|
||||||
also set up and oversees the Mantis bug reporting system used by all
|
|
||||||
of us, and tends to take on "infrastructure" issues such as the switch
|
|
||||||
to SCons as the build system.
|
|
||||||
|
|
||||||
Jesse Chappell (Washington, DC) keeps on making major contributions to
|
|
||||||
Ardour. It almost seems pointless to list the things he has worked on
|
|
||||||
because there is so much of it. They include being able to handle
|
|
||||||
multichannel tracks, a major change in the program's design and
|
|
||||||
capabilities, and many additions/improvements to the GTK GUI,
|
|
||||||
including mouse zoom mode and the route params editor. Jesse was the
|
|
||||||
first person to just "walk in" and understand the Ardour codebase.
|
|
||||||
|
|
||||||
Marcus Andersson (Karlstad, Sweden) contributed a number of useful
|
|
||||||
patches and worked on the dB-related issues in the gain stages and
|
|
||||||
metering, other numeric computations, and much useful debugging, bug
|
|
||||||
reporting and analysis.
|
|
||||||
|
|
||||||
Jeremy Hall (Sterling, VA) contributed several patches and worked
|
|
||||||
intensively on ksi_ardour, the keystroke-based-interface to libardour
|
|
||||||
designed for sight-impaired and GUI-averse users.
|
|
||||||
|
|
||||||
Steve Harris (Southampton, UK) contributed code to handle speed-based
|
|
||||||
interpolation, an area I did not want to get my head around, as well
|
|
||||||
as dithering, panning, metering and other DSP-centric issues. He also
|
|
||||||
wrote the LRDF library used by Ardour's soundfile library code, not to
|
|
||||||
mention dozens of LADSPA plugins that make Ardour a genuinely useful
|
|
||||||
tool.
|
|
||||||
|
|
||||||
Tim Mayberry (Brisbane, Australia) did lots and lots and lots of work
|
|
||||||
on mouse-driven editing.
|
|
||||||
|
|
||||||
Nick Mainsbridge <beatroot@optushome.com.au> is responsible for many
|
|
||||||
improvements to the rulers, and several other tweaks.
|
|
||||||
|
|
||||||
Colin Law wrote the code that supports Ardour's integration with
|
|
||||||
the CMT Animatics engine. He was also very involved in refactoring the
|
|
||||||
GUI code design to support different kinds of tracks, thus laying the
|
|
||||||
groundwork for extending ardour's domain to include MIDI and video.
|
|
||||||
|
|
||||||
Gerard van Dongen (Rotterdam, Netherlands) has done a set of scattered
|
|
||||||
but critical work with a vague focus on the mouse. He has made some
|
|
||||||
particularly important fixes to the incredibly hairy code that draws
|
|
||||||
automation curves. Gerard also helped out with a workshop on Ardour
|
|
||||||
held at the Dutch Electronic Arts Festival, Rotterdam, in November
|
|
||||||
2004.
|
|
||||||
|
|
||||||
Sampo Savolainen became a major contributor of minor patches as Paul
|
|
||||||
began working full time for a while. He fixed numerous bugs, some on
|
|
||||||
mantis and some not, fairly continuously for several months. He then
|
|
||||||
moved on to write SSE assembler routines to handle the CPU-hungry
|
|
||||||
metering and mixing routines.
|
|
||||||
|
|
||||||
Brian Ahr contributed many small fixes for ardour 2.0.
|
|
||||||
|
|
||||||
Smaller (but not necessarily minor) patches were received from the
|
|
||||||
following people:
|
|
||||||
|
|
||||||
Mark Stewart
|
|
||||||
Sam Chessman (Reston, VA)
|
|
||||||
Jack O'Quin (Austin, TX)
|
|
||||||
Matt Krai
|
|
||||||
Ben Bell
|
|
||||||
Thomas Charbonnel (Lyon, France)
|
|
||||||
Robert Jordens
|
|
||||||
Christopher George
|
|
||||||
Rob Holland
|
|
||||||
Joshua Leachman
|
|
||||||
Per Sigmond
|
|
||||||
Nimal Ratnayake
|
|
|
@ -1,78 +0,0 @@
|
||||||
Paul Davis (de Philadelphia, PA) fue y es el principal autor de Ardour.
|
|
||||||
|
|
||||||
Taybin Rutkin (de New York, NY) ha contribuido grandes cantidades de
|
|
||||||
codigo y fue particularmente responsable por el uso de XML en el
|
|
||||||
aspecto de persistencia de estado del programa. Tambien escribio y
|
|
||||||
reescribio el codigo relativo a la libreria soundfile (archivo de
|
|
||||||
sonido) para que use LRDF. Ademas fue responsable por la integracion
|
|
||||||
del sistema gettext y los esquemas compose() que hacen posible la
|
|
||||||
internacionalizacion de Ardour. Ha hecho constantes sugerencias las
|
|
||||||
cuales resultaron en codigo y disenio significativamente mas elegantes.
|
|
||||||
Taybin tambien configuro y administra el sistema Mantis de reporte de
|
|
||||||
bugs (errores de codigo) usado por todos nosotros.
|
|
||||||
|
|
||||||
Jesse Chappell (de Washington, DC) continua haciendo grandes
|
|
||||||
contribuciones a Ardour, particularmente en el hecho de que Ardour sea
|
|
||||||
capaz de manejar pistas multicanal, un cambio mayor en el disenio del
|
|
||||||
programa y capacidades. Tambien hizo muchos agregados y mejoras a la
|
|
||||||
interfaz visual de GTK, incluyendo el modo de zoom mediante mouse y el
|
|
||||||
editor de parametros de ruteo. Jessie fue la primera persona en "pasar"
|
|
||||||
y entender las bases del codigo de Ardour.
|
|
||||||
|
|
||||||
Marcus Andersson (de Karlstad, Sweden) contribuyo un numero de patches
|
|
||||||
(actualizaciones) utiles y trabajo con los problemas relacionados a "dB"
|
|
||||||
en las etapas de gain (volumen) y vumetros, otras computaciones numericas
|
|
||||||
y muy util debugging, reporte de bugs y analisis.
|
|
||||||
|
|
||||||
Jeremy Hall (de Sterling, VA) contribuyo varios patches y trabajo
|
|
||||||
intensamente con ksi_ardour, que es la interfase basada en teclas de la
|
|
||||||
libreria libardour diseniada para no videntes y amantes de lineas de
|
|
||||||
comando (consolas).
|
|
||||||
|
|
||||||
Steve Harris (de Southampton, UK) contribuyo codigo para manejar
|
|
||||||
interpolacion basada en velocidad, un area en la cual no me queria meter,
|
|
||||||
asi como dithering, balance, vumetros y otros temas relacionados con
|
|
||||||
procesamiento de senial. Tambien escribio la libreria LRDF usada por
|
|
||||||
el codigo de Ardour de la libreria soundfile, sin mencionar docenas
|
|
||||||
de plugins LADSPA que hacen a Ardour una herramienta genuinamente util.
|
|
||||||
|
|
||||||
Tim Mayberry (de Brisbane, Australia) hizo mucho, mucho, mucho trabajo
|
|
||||||
en cuanto a edicion basada en mouse.
|
|
||||||
|
|
||||||
Nick Mainsbridge <beatroot@optushome.com.au> es responsable de muchas
|
|
||||||
mejoras a los medidores/lineas/referencias de tiempo.
|
|
||||||
|
|
||||||
Colin Law <> escribio el codigo que soporta la integracion de Ardour
|
|
||||||
al sistema de Animatics CMT. Tambien se ocupo en el redisenio del codigo
|
|
||||||
de la interfase visual para soportar diferentes tipos de pistas.
|
|
||||||
|
|
||||||
Mas pequenios (preo no necesariamente menores) patches fueron recividos
|
|
||||||
de las siguientes personas:
|
|
||||||
|
|
||||||
Mark Stewart
|
|
||||||
Sam Chessman (Reston, VA)
|
|
||||||
Jack O'Quin (Austin, TX)
|
|
||||||
Matt Krai
|
|
||||||
Ben Bell
|
|
||||||
Gerard vanDongen (Rotterdam, Netherlands)
|
|
||||||
Thomas Charbonnel (Lyon, France)
|
|
||||||
Robert Jordens
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Nota de Traduccion (Spanish Translation Note)
|
|
||||||
---------------------------------------------
|
|
||||||
#Nota del tipeo:la letra pronunciada ENIE aparece en este archivo
|
|
||||||
#como ni (letra "n" y letra "i") para mayor compatibilidad con todos
|
|
||||||
#los visores de texto.
|
|
||||||
#Asi mismo no se han aplicado las tildes(acentos).
|
|
||||||
#Estos no son errores de tipeo. Si llegara a encontrar algun otro error
|
|
||||||
#en cualquiera de los archivos con extension ".es" por favor
|
|
||||||
#hagamelo saber a alexkrohn@fastmail.fm
|
|
||||||
# Muchas gracias
|
|
||||||
# Alex
|
|
|
@ -1,7 +0,0 @@
|
||||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
|
||||||
|
|
||||||
Full information on building Ardour can be found at:
|
|
||||||
|
|
||||||
http://ardour.org/building
|
|
||||||
|
|
||||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
|
|
@ -1,215 +0,0 @@
|
||||||
КАК СОБРАТЬ ARDOUR ИЗ ИСХОДНЫХ ТЕКСТОВ
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
Пожалуйста внимание: прежде чем приступить к работе с Ardour, найдите
|
|
||||||
время чтобы подписаться на список рассылки разработчиков. Это очень
|
|
||||||
важно, потому что сообщество людей, использующих, тестирующих и
|
|
||||||
разрабатывающих Ardour, общаются в этом списке рассылки, и я НЕ БУДУ
|
|
||||||
отвечать на вопросы относительно сборки или ошибок в работе Ardour,
|
|
||||||
если они не будут заданы в этом списке. Подробнее об этом читайте на
|
|
||||||
странице http://ardour.sf.net/ или http://ardour.org/, где указано
|
|
||||||
как подписаться на список рассылки.
|
|
||||||
|
|
||||||
Этот документ написан для пользователей, хорошо знающих процесс сборки
|
|
||||||
программного обеспечения из исходных текстов с использованием пакетов
|
|
||||||
GNU automake и autoconf. Если Вы не знакомы с этим, тогда возможно вам
|
|
||||||
придётся подождать до тех пор, пока не появятся релизы Ardour, не требующие
|
|
||||||
сборки из исходных текстов (binary releases).
|
|
||||||
|
|
||||||
1) ПРАВИЛЬНОЕ ИСПОЛЬЗОВАНИЕ GNU AUTOCONF
|
|
||||||
----------------------------------------
|
|
||||||
|
|
||||||
GNU autoconf весьма мощная система, однако у неё имеется как минимум
|
|
||||||
один существенный недостаток. По умолчанию autoconf (aclocal) ведёт
|
|
||||||
поиск требуемых файлов только в ОДНОМ каталоге. Это нормально работает,
|
|
||||||
кроме случаев, когда в системе установлены другие пакеты, размещающие
|
|
||||||
свои файлы autoconf или в каталоге /usr/local/lib/share/aclocal,
|
|
||||||
или /usr/lib/share/aclocal.
|
|
||||||
|
|
||||||
В результате, autoconf часто не может найти файлы, требуемые для сборки
|
|
||||||
Ardour, к тому же у многих пользователей одновременно имеются копии
|
|
||||||
библиотек, установленных разными способами: из исходных текстов (файлы
|
|
||||||
autoconf обычно находятся в каталоге /usr/local/lib...) и из собранных
|
|
||||||
пакетов (в этом случае файлы располагаются в каталоге /usr/lib...).
|
|
||||||
|
|
||||||
Рекомендуется указать расположение каталогов autoconf путем определения
|
|
||||||
в переменной ACLOCAL_FLAGS всех путей поиска.
|
|
||||||
Сначала найдите все aclocal директории:
|
|
||||||
$ locate /aclocal/
|
|
||||||
и проверьте (найдите) все каталоги, содержащие файлы с расширением ".m4" .
|
|
||||||
Затем задайте переменную окружения ACLOCAL_FLAGS, как указано ниже
|
|
||||||
(в качестве примера):
|
|
||||||
|
|
||||||
export ACLOCAL_FLAGS="-I /usr/share/aclocal -I /usr/local/share/aclocal -I /opt/gnome/share/aclocal"
|
|
||||||
|
|
||||||
Вы можете добавить эту строку в файлы .bashrc или .profile в вашем домашнем
|
|
||||||
каталоге, она будет исполняться каждый раз при входе в систему.
|
|
||||||
|
|
||||||
-----
|
|
||||||
Грубое и менее деликатное решение, описанное ниже, подразумевает слияние
|
|
||||||
всех директорий aclocal. Это не может быть рекомендовано, хотя этот
|
|
||||||
вариант также работает.
|
|
||||||
|
|
||||||
Пожалуйста, проверьте содержимое обеих директорий перед тем как делать
|
|
||||||
"слияние", чтобы случайно не стереть корректную версию копий файлов
|
|
||||||
autoconf:
|
|
||||||
|
|
||||||
* Если у вас есть оба каталога:
|
|
||||||
|
|
||||||
cd /usr/lib/share/aclocal
|
|
||||||
cp *.m4 /usr/local/lib/share/aclocal
|
|
||||||
cd ..
|
|
||||||
rm -rf aclocal
|
|
||||||
ln -s /usr/local/lib/share/aclocal .
|
|
||||||
|
|
||||||
* Если имеется только /usr/lib/share/aclocal
|
|
||||||
|
|
||||||
cd /usr/local/lib
|
|
||||||
ln -s /usr/lib/share/aclocal .
|
|
||||||
|
|
||||||
В некоторые дистрибутивах linux aclocal находится в различных местах.
|
|
||||||
|
|
||||||
|
|
||||||
2. КОМПИЛЯЦИЯ
|
|
||||||
-------------
|
|
||||||
|
|
||||||
Перед тем как компилировать Ardour убедитесь, что у вас установлены
|
|
||||||
следующие компоненты:
|
|
||||||
|
|
||||||
* Программы и утилиты:
|
|
||||||
|
|
||||||
gcc/g++ версии 2.95.3 или выше (gcc/g++ 3.x works also)
|
|
||||||
autoconf 2.52 или выше
|
|
||||||
automake 1.5 или выше
|
|
||||||
libtool 1.4.2 или выше
|
|
||||||
gettext 0.11.5 или выше
|
|
||||||
pkgconfig 0.8.0 или выше
|
|
||||||
http://www.freedesktop.org/software/pkgconfig/
|
|
||||||
требуются также lex и yacc.
|
|
||||||
любая версия bison >= 1.35 должна работать.
|
|
||||||
|
|
||||||
* Библиотеки:
|
|
||||||
|
|
||||||
Рекомендуемые версии, которые должны работать, показаны ниже.
|
|
||||||
|
|
||||||
ALSA 0.9.X (CVS или текущий релиз) (http://www.alsa-project.org)
|
|
||||||
|
|
||||||
JACK (http://jackit.sourceforge.net)
|
|
||||||
|
|
||||||
libxml2 2.5.X (http://xmlsoft.org/)
|
|
||||||
|
|
||||||
libart_lgpl 2.3.X
|
|
||||||
|
|
||||||
- обычно является частью gnome-libs, которые как правило
|
|
||||||
уже установлены
|
|
||||||
|
|
||||||
- в противном случае вы можете загрузить библиотеку с FTP-сайта
|
|
||||||
исходных текстов GNOME.
|
|
||||||
- см. ftp://ftp.gnome.org/pub/GNOME/MIRRORS.html
|
|
||||||
и ищите в sources/libart_lgpl
|
|
||||||
|
|
||||||
glib 1.2 (http://www.gtk.org)
|
|
||||||
glib-1.2.8 (включено в большинство дистрибутивов)
|
|
||||||
|
|
||||||
GTK+ 1.2 (http://www.gtk.org)
|
|
||||||
gtk+-1.2.8 (включено в большинство дистрибутивов)
|
|
||||||
|
|
||||||
libsndfile (http://www.zip.com.au/~erikd/libsndfile)
|
|
||||||
libsndfile-1.0 или выше
|
|
||||||
|
|
||||||
libsamplerate (http://www.mega-nerd.com/SRC/)
|
|
||||||
libsamplerate 0.0.13 или выше
|
|
||||||
|
|
||||||
the LADSPA SDK (http://www.ladspa.org/)
|
|
||||||
(см. ниже)
|
|
||||||
|
|
||||||
raptor (http://www.redland.opensource.ac.uk/raptor/)
|
|
||||||
|
|
||||||
lrdf (needs raptor) (http://plugin.org.uk/lrdf/)
|
|
||||||
liblrdf 0.4.0 или выше
|
|
||||||
|
|
||||||
Установка LADSPA
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Сегодня описание интерфейса Linux Audio Developers Simple Plugin API
|
|
||||||
(LADSPA) содержит только заголовочный файл (header file), который
|
|
||||||
уже включён в дерево исходных текстов Ardour.
|
|
||||||
|
|
||||||
Тем не менее, вы можете захотеть установить и модули LADSPA plugins,
|
|
||||||
которые входят в состав полного пакета LADSPA SDK. Его можно найти и
|
|
||||||
загрузить (размер пакета небольшой) по адресу www.ladspa.org.
|
|
||||||
|
|
||||||
Также, я рекомендую загрузить прекрасный набор модулей (plugins) LADSPA
|
|
||||||
от Steve Harris с сайта http://plugin.org.uk/. Это намного повысит
|
|
||||||
полезные возможности Ardour. Со временем появятся и другие модули LADSPA,
|
|
||||||
чтобы быть в курсе - следите за анонсами в списке рассылки Linux Audio
|
|
||||||
Development.
|
|
||||||
|
|
||||||
2A) Компилирование из CVS
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
Загрузите или обновите дерево исходных текстов Ardour из CVS. (В приведённом
|
|
||||||
ниже примере символ '%' означает приглашение командной строки):
|
|
||||||
|
|
||||||
% cd /usr/local/src # в качестве примера, вы можете сделать это где
|
|
||||||
пожелаете
|
|
||||||
% cvs -d:pserver:anoncvs@ardour.org:/cvsroot/ardour login
|
|
||||||
# (нажмите Enter/Return когда появится приглашение
|
|
||||||
к вводу пароля)
|
|
||||||
% cvs -d:pserver:anoncvs@ardour.org:/cvsroot/ardour -z3 co ardour
|
|
||||||
|
|
||||||
2A.1) ЧЕМ РАЗЛИЧАЮТСЯ СПОСОБЫ СБОРКИ ИЗ CVS ?
|
|
||||||
---------------------------------------------
|
|
||||||
Итак, вам нужно решить, являетесь ли вы разработчиком ardour или
|
|
||||||
пользователем. Если вы относите себя к первым из перечисленных, то возможно
|
|
||||||
ускорить работу, собрав библиотеку libardour как разделяемую. Это позволит
|
|
||||||
избавиться от перелинковки после каждого внесения изменений в эту библиотеку.
|
|
||||||
Если вы просто пользователь, этот шаг лишь осложнит вам жизнь. Итак,
|
|
||||||
если вы разработчик, тогда выполните следующую команду:
|
|
||||||
|
|
||||||
touch ardour/libs/ardour/BUILD_FOR_DEVELOPMENT
|
|
||||||
|
|
||||||
Теперь библиотека libardour будет скомпилирована как разделяемая (shared).
|
|
||||||
Также вы должны использовать ключ --enable-development-build в команде
|
|
||||||
configure.
|
|
||||||
|
|
||||||
2A.2) ПОДГОТОВКА К СБОРКЕ ИЗ ИСХОДНЫХ ТЕКСТОВ
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
Создайте autoconf/automake файлы:
|
|
||||||
|
|
||||||
% cd ardour
|
|
||||||
% sh autogen.sh
|
|
||||||
|
|
||||||
Теперь переходим к пункту 3.
|
|
||||||
|
|
||||||
2B) СБОРКА ИЗ АРХИВА ИСХОДНЫХ ТЕКСТОВ (tar.gz)
|
|
||||||
----------------------------------------------
|
|
||||||
|
|
||||||
Всё как обычно, загрузите и распакуйте архив. Файлы исходных текстов
|
|
||||||
будут находиться в каталоге с именем ardour-<номер версии>.
|
|
||||||
|
|
||||||
3) КАК СКОМПИЛИРОВАТЬ
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
./configure (с любыми опциями которые пожелаете)
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
||||||
Если вы являетесь разработчиком и намереваетесь поработать над libardour,
|
|
||||||
используйте опцию --enable-development-build, которая включает динамическую
|
|
||||||
линковку ardour и его библиотек. Это позволит сэкономить время, так как
|
|
||||||
позволит избежать медленной процедуры статической линковки каждый раз, как
|
|
||||||
вы поменяете что-либо в libardour.
|
|
||||||
|
|
||||||
Если вы хотите скомпилировать Ardour так, чтобы в дальнейшем его можно
|
|
||||||
было запустить в отладчике, используйте опцию --disable-optimize.
|
|
||||||
В противном случае Ardour будет собран с максимальной оптимизацией,
|
|
||||||
что помешает эффективной отладке.
|
|
||||||
|
|
||||||
Как обычно в команде ./configure вы можете использовать опции --prefix
|
|
||||||
и --sysconfdir, чтобы изменить расположение файлов программы. Они будут
|
|
||||||
помещены по указанным путям командой "make install".
|
|
||||||
|
|
||||||
Компилирование исходных текстов может занять некоторое время. К примеру,
|
|
||||||
с ключом - j3 на системе dual PII-450 занимает около 20 минут.
|
|
|
@ -1,62 +0,0 @@
|
||||||
In addition to those listed in the AUTHORS file, the following people
|
|
||||||
are among those who offered financial support, design insights and
|
|
||||||
ideas, encouragement, feedback, bug reports and much more during
|
|
||||||
Ardour's pre-release development. They generally suffered from days of
|
|
||||||
frustration, and withstood hundreds of CVS revisions without
|
|
||||||
complaint.
|
|
||||||
|
|
||||||
No thanks or praise is sufficient for their contributions to Ardour.
|
|
||||||
|
|
||||||
(in no particular order)
|
|
||||||
|
|
||||||
Joe Hartley
|
|
||||||
Marek Peteraj
|
|
||||||
Ryan Gallagher
|
|
||||||
Rob Holland
|
|
||||||
Jan Depner
|
|
||||||
Bryan Koschmann
|
|
||||||
Patrick Shirkey
|
|
||||||
Rob Fell
|
|
||||||
Ant <avan@uwm.edu>
|
|
||||||
Chris Ross
|
|
||||||
Joshua Pritikin
|
|
||||||
Rohan Drape
|
|
||||||
Johan De Groote
|
|
||||||
Bob Ham
|
|
||||||
Petter Sundlöf
|
|
||||||
|
|
||||||
I would particularly like to recognize:
|
|
||||||
|
|
||||||
Frank Carmickle
|
|
||||||
- first financial supporter of Ardour,
|
|
||||||
instigator of ardour/ksi.
|
|
||||||
|
|
||||||
Ron Parker (Minneapolis, MN)
|
|
||||||
- first user of Ardour in a commercial studio,
|
|
||||||
financial contributor, major initiator of
|
|
||||||
MTC and MMC functionality.
|
|
||||||
|
|
||||||
DuWayne Holsbeck
|
|
||||||
- an early financial and infrastructure sponsor
|
|
||||||
|
|
||||||
Havoc Pennington & Owen Taylor
|
|
||||||
- provided much assistance in understanding, diagnosing and
|
|
||||||
cajoling GTK+.
|
|
||||||
|
|
||||||
Tom Pincince (Shasta, CA)
|
|
||||||
- provided continuous, excellent design insights and
|
|
||||||
rationalizations, as well as info on the operation of some
|
|
||||||
existing DAW's.
|
|
||||||
|
|
||||||
I would also like to thank Jim Hamilton of Rittenhouse Recording,
|
|
||||||
Philadelphia, for the partnership, friendship and foresight he showed
|
|
||||||
in allowing me to use the studio as the development basis for
|
|
||||||
Ardour. I met Jim playing a jazz drumkit at a fundraiser to celebrate
|
|
||||||
the 30th anniversary of our children's nursery school. Since then, he
|
|
||||||
has continued to open my eyes to both music itself, the process of
|
|
||||||
making music, and the life of a working musician. Jim's the best and
|
|
||||||
most inventive percussionist I have ever seen, and one of the best
|
|
||||||
I've ever heard. He has always believed in the social and philosphical
|
|
||||||
implications of Ardour, and his support and interest have been vital
|
|
||||||
in Ardour's development. Although as of this writing, Rittenhouse
|
|
||||||
Recording is not running Ardour, its only a matter of time!
|
|
|
@ -1,82 +0,0 @@
|
||||||
Ademas de aquellos que aparecen mencionados en el archivo AUTHORS.es,
|
|
||||||
las siguientes personas estan entre aquellas que ofrecieron soporte
|
|
||||||
financiero, observaciones de disenio e ideas, animo, aportes, reportes
|
|
||||||
de bugs (errores en codigo) y mucho mas durante el desarrollo del
|
|
||||||
pre lanzamiento de Ardour. Generalmente, ellos sufrieron de dias de
|
|
||||||
frustracion y soportaron cientas de revisiones de CVS sin quejas.
|
|
||||||
|
|
||||||
Ninguna plegaria o agradecimiento posible es suficiente por sus
|
|
||||||
contribuciones a Ardour.
|
|
||||||
|
|
||||||
(en ningun orden en particular)
|
|
||||||
|
|
||||||
Joe Hartley
|
|
||||||
Marek Peteraj
|
|
||||||
Ryan Gallagher
|
|
||||||
Rob Holland
|
|
||||||
Jan Depner
|
|
||||||
Bryan Koschmann
|
|
||||||
Patrick Shirkey
|
|
||||||
Rob Fell
|
|
||||||
Ant <avan@uwm.edu>
|
|
||||||
Chris Ross
|
|
||||||
Joshua Pritikin
|
|
||||||
Rohan Drape
|
|
||||||
Johan De Groote
|
|
||||||
Bob Ham
|
|
||||||
|
|
||||||
Quisiera destacar particularmente a:
|
|
||||||
|
|
||||||
Frank Carmickle
|
|
||||||
- primer brinadador de soporte financiero a Ardour,
|
|
||||||
instigador de ardour/ksi.
|
|
||||||
|
|
||||||
Ron Parker (de Minneapolis, MN)
|
|
||||||
- primer usuario de Ardour en un estudio comercial,
|
|
||||||
contribuidor financiero, iniciador mayor de
|
|
||||||
funcionalidad MTC and MMC.
|
|
||||||
|
|
||||||
DuWayne Holsbeck
|
|
||||||
- dominio de disenio de sponsors linuxaudiosystems.com ,
|
|
||||||
configuro la base de datos bugzilla y mas.
|
|
||||||
|
|
||||||
Havoc Pennington & Owen Taylor
|
|
||||||
- brindaron mucha asistencia en cuanto a comprension,
|
|
||||||
diagnostico y simplificacion de GTK+.
|
|
||||||
|
|
||||||
Tom Pincince (de Shasta, CA)
|
|
||||||
- contribuyo continuas y exceles observaciones de disenio y
|
|
||||||
racionalizaciones, asi como informacion acerca de
|
|
||||||
estaciones de trabajo de audio digital existentes.
|
|
||||||
|
|
||||||
Tambien quisiera agradecer a Jim Hamilton de Rittenhouse Recording,
|
|
||||||
Philadelphia, for el companierismo, amistad y vision que demostro
|
|
||||||
al permitirme usar el estudio como base de desarrollo para Ardour.
|
|
||||||
Conoci a Jim tocando percusion jazz en un evento de recaudacion de
|
|
||||||
fondos para celebrar el 30imo aniversario de la guarderia escolar de
|
|
||||||
nuestros hijos. Desde entonces me ha abierto los ojos a ambos, la musica
|
|
||||||
misma, el proceso de hacer musica y la vida de un musico trabajando.
|
|
||||||
Jim es el mejor y mas inventivo percusionista que haya visto, y uno
|
|
||||||
de los mejores que he oido. El siempre ha creido en las implicaciones
|
|
||||||
filosoficas y sociales de Ardoury su soporte e interes han sido vitales
|
|
||||||
en el desarrollo de Ardour. Es solo cuestion de tiempo hasta que
|
|
||||||
Rittenhouse Recording use Ardour.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Nota de Traduccion (Spanish Translation Note)
|
|
||||||
---------------------------------------------
|
|
||||||
#Nota del tipeo:la letra pronunciada ENIE aparece en este archivo
|
|
||||||
#como ni (letra "n" y letra "i") para mayor compatibilidad con todos
|
|
||||||
#los visores de texto.
|
|
||||||
#Asi mismo no se han aplicado las tildes(acentos).
|
|
||||||
#Estos no son errores de tipeo. Si llegara a encontrar algun otro error
|
|
||||||
#en cualquiera de los archivos con extension ".es" por favor
|
|
||||||
#hagamelo saber a alexkrohn@fastmail.fm
|
|
||||||
# Muchas gracias
|
|
||||||
# Alex
|
|
|
@ -1,613 +0,0 @@
|
||||||
The Ardour FAQ
|
|
||||||
January 23, 2004
|
|
||||||
|
|
||||||
--Problems--
|
|
||||||
1.1. Why can't I get configure to run when ...
|
|
||||||
1.2. I'm getting syntax errors during build.
|
|
||||||
1.3. I get the warning: "Gtk-WARNING **: Unable to locate image file in
|
|
||||||
1.4. What's an xrun?
|
|
||||||
1.5. The region area overlaps the buttons in the editor.
|
|
||||||
1.6. Ardour keeps freezing. Here's the strace...
|
|
||||||
1.7. What is "ardev" and why is it a shell script?
|
|
||||||
1.8. How do I debug this thing?
|
|
||||||
1.9. I want Ardour to run faster.
|
|
||||||
|
|
||||||
--Features--
|
|
||||||
2.1. Are plugins supported?
|
|
||||||
2.2. Are VST plugins supported?
|
|
||||||
2.3. Does Ardour run on non-Linux systems?
|
|
||||||
2.4. Ardour needs to have this feature now.
|
|
||||||
2.5. Why doesn't Ardour support MP3s?
|
|
||||||
2.6. Does Ardour support MIDI?
|
|
||||||
2.7. What soundfile formats are supported?
|
|
||||||
2.8. Can I use multiple cards?
|
|
||||||
2.9. How do I save captures across partitions?
|
|
||||||
|
|
||||||
--Usability--
|
|
||||||
3.1. How do I pan stereo outputs?
|
|
||||||
3.2. Where's the patch bay?
|
|
||||||
3.3. How do I do stuff?
|
|
||||||
|
|
||||||
--Misc--
|
|
||||||
4.1. What's the deal with JACK, LAAGA, and Audioengine?
|
|
||||||
4.2. Is Ardour internationalized?
|
|
||||||
4.3. How do I get support?
|
|
||||||
4.4. Well, where's the manual?
|
|
||||||
4.5. Why are all these libraries included? I already have ...
|
|
||||||
4.6. Why not another frontend to libardour? Why not QT?
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
--Problems--
|
|
||||||
1.1. Why can't I get configure to run when ...
|
|
||||||
|
|
||||||
You can only run configure at the top level of the Ardour source
|
|
||||||
tree. You don't want to know why this is true. Don't try to work
|
|
||||||
around it.
|
|
||||||
|
|
||||||
1.2. I'm getting syntax errors during build.
|
|
||||||
|
|
||||||
This probably means that you are using an out of date library. Or you
|
|
||||||
might be using a very new library that has changed its API. Check the
|
|
||||||
version number. If it is lower than what is listed in the BUILD file,
|
|
||||||
update your library. If it is higher than what is listed in the BUILD file,
|
|
||||||
email the mailing list. Note that you have to be a member of the mailing
|
|
||||||
list to send mail to it, which is done to prevent the list from receiving
|
|
||||||
much spam.
|
|
||||||
|
|
||||||
1.3. I get the warning: "Gtk-WARNING **: Unable to locate image file in
|
|
||||||
pixmap_path: "set-next-button.xpm"
|
|
||||||
|
|
||||||
The most common cause of this error is simply that you have not set
|
|
||||||
the pixmap pathname correctly. It can be specified in the Ardour
|
|
||||||
config file. See the BUILD file.
|
|
||||||
|
|
||||||
1.4. What's an xrun?
|
|
||||||
|
|
||||||
It's a generic term used to describe a situation where the software
|
|
||||||
did not keep up with the hardware, either by feeding it data, or by
|
|
||||||
collecting data from it. It generally means that you're having
|
|
||||||
trouble with latency. This can be caused by several factors. You
|
|
||||||
could have a misconfigured system, you might be trying to do to much,
|
|
||||||
or both.
|
|
||||||
|
|
||||||
If you're haven't read http://www.linuxdj.com/audio/lad/resourceslatency.php3,
|
|
||||||
then your system is probably misconfigured.
|
|
||||||
|
|
||||||
If you are running many many tracks, with multiple LADSPA plugins, then it
|
|
||||||
is possible that your system just can't keep up with what you want to do.
|
|
||||||
Either simplify your music, or upgrade your machine. A dual processor does
|
|
||||||
wonders.
|
|
||||||
|
|
||||||
You can test your setup with the latencytest tool, available at
|
|
||||||
http://www.linuxdj.com .
|
|
||||||
|
|
||||||
Jan Depner's HOWTO is loaded with latency tuning tips for Ardour:
|
|
||||||
http://myweb.cableone.net/eviltwin69/ALSA_JACK_ARDOUR.html
|
|
||||||
|
|
||||||
1.5. The region area overlaps the buttons in the editor.
|
|
||||||
|
|
||||||
Make sure that you are using the appropriate font size for your monitor's
|
|
||||||
resolution. If you are running at 1024x768 or below, you should use the
|
|
||||||
75dpi package, not the 100dpi. This is usually set in /etc/X11/XF86Config.
|
|
||||||
|
|
||||||
1.6. Ardour keeps freezing. Here's the strace...
|
|
||||||
|
|
||||||
The results from strace aren't very useful. To provide helpful information
|
|
||||||
to the developers, run Ardour under gdb. If you don't know how to use
|
|
||||||
gdb, this isn't the time to learn. If you do know how to use gdb, read
|
|
||||||
section 1.8.
|
|
||||||
|
|
||||||
1.7. What is "ardev" and why is it a shell script?
|
|
||||||
|
|
||||||
This is only applicable if configure was run with --enable-development-build.
|
|
||||||
|
|
||||||
To speed up the process of developing Ardour, we do not statically
|
|
||||||
link Ardour and its library, libardour. Instead, we use dynamic
|
|
||||||
linking, which allows the developers to avoid the (very) long
|
|
||||||
relinking step when they make certain kinds of changes to libardour.
|
|
||||||
|
|
||||||
This means that the executable image for Ardour relies on the system
|
|
||||||
being able to find libardour whenever you start it. Rather than leave
|
|
||||||
this to chance and/or the whims of your system adminstrator (probably
|
|
||||||
yourself), we instead use a short shell script to make sure that the
|
|
||||||
connection between the two of them can be established.
|
|
||||||
|
|
||||||
This has almost zero impact on any aspect of Ardour's operation. The
|
|
||||||
only noticeable effect is that it makes debugging slightly more
|
|
||||||
difficult. See 1.8 for more on this.
|
|
||||||
|
|
||||||
1.8. How do I debug this thing?
|
|
||||||
|
|
||||||
+-------------------------------------------------------------------------+
|
|
||||||
| NOTE: Newer versions of gdb and/or glibc and/or the kernel have broken
|
|
||||||
| gdb in a critical way that make it impossible to run ardour. The gdb
|
|
||||||
| development group claim to have fixed this, but on many
|
|
||||||
| distributions, the version that is provided is still broken.
|
|
||||||
|
|
|
||||||
| Under such circumstances, you will have to get a core dump from
|
|
||||||
| ardour, and then use gdb to analyse the core dump, rather than
|
|
||||||
| using gdb as a "live tool".
|
|
||||||
|
|
|
||||||
| Many distributions set the default core dump size to 0, to prevent
|
|
||||||
| core dumps completely. So the first step is to do enter this
|
|
||||||
| at your shell prompt (in a terminal window):
|
|
||||||
|
|
|
||||||
| ulimit -c 9999999999
|
|
||||||
|
|
|
||||||
| Then run ardour in whatever way causes a crash. after the crash
|
|
||||||
| you should find a file called "core" in your working directory.
|
|
||||||
| then run:
|
|
||||||
|
|
|
||||||
| gdb ardour core
|
|
||||||
|
|
|
||||||
| When the gdb> prompt appears, type
|
|
||||||
|
|
|
||||||
| backtrace
|
|
||||||
|
|
|
||||||
| Collect the output, and file it as an attachment to a Mantis
|
|
||||||
| bug report at http://ardour.org/mantis
|
|
||||||
|
|
|
||||||
| Thanks for helping to improve Ardour.
|
|
||||||
+------------------------------------------------------------------------+
|
|
||||||
|
|
||||||
A) How to start gdb ....
|
|
||||||
|
|
||||||
A1) IF YOU DID NOT USE --enable-development-build
|
|
||||||
|
|
||||||
You can use gdb the usual way:
|
|
||||||
|
|
||||||
% cd /where/you/built/ardour
|
|
||||||
% gdb ardour
|
|
||||||
|
|
||||||
|
|
||||||
A2) IF YOU USE --enable-development-build
|
|
||||||
|
|
||||||
The first and most basic thing you need to know is how to invoke
|
|
||||||
gdb. Because of the dynamic linking between Ardour and its library you
|
|
||||||
can't just invoke Ardour and get it to work. Besides, "ardour" itself
|
|
||||||
is a shell script (see 1.10 for more on this). So, what you need to do
|
|
||||||
is to invoke gdb with LD_LIBRARY_PATH set to point to the place where
|
|
||||||
libardour is installed, and use the name of actual executable image.
|
|
||||||
|
|
||||||
If you installed in the default location, this command will invoke gdb
|
|
||||||
correctly:
|
|
||||||
|
|
||||||
env LD_LIBRARY_PATH=/usr/local/lib/ardour gdb /usr/local/lib/ardour/ardourx
|
|
||||||
|
|
||||||
If you used a --prefix argument during the build process so that
|
|
||||||
Ardour would be installed somewhere other than under /usr/local, then
|
|
||||||
replace /usr/local in the command above with whatever "prefix" you
|
|
||||||
used.
|
|
||||||
|
|
||||||
You could easily make the above a shell alias or a 1 line shell script
|
|
||||||
if you think you'll be debugging Ardour with gdb a lot.
|
|
||||||
|
|
||||||
A3) ABOUT LADSPA PLUGINS AND GDB
|
|
||||||
|
|
||||||
Moving all your LADSPA plugins out of the way will make gdb very much
|
|
||||||
quicker to start. For example, if you normally keep them in
|
|
||||||
/usr/local/lib/ladspa, you could do something like:
|
|
||||||
|
|
||||||
mkdir /usr/local/lib/LADSPA
|
|
||||||
mv /usr/local/lib/ladpsa/* /usr/local/lib/LADSPA
|
|
||||||
|
|
||||||
gdb doesn't do very well when forced to handle dozens of dynamically
|
|
||||||
loaded objects, as typically happens with LADSPA plugins.
|
|
||||||
|
|
||||||
It might be easier to redefine LADSPA_PATH to a dummy path.
|
|
||||||
|
|
||||||
B) What to do with gdb
|
|
||||||
|
|
||||||
When Ardour has crashed or is "stuck", issue the following command
|
|
||||||
to gdb (you will need to use Ctrl-C if its "stuck" to get back to the
|
|
||||||
gdb command prompt):
|
|
||||||
|
|
||||||
thread apply all bt
|
|
||||||
|
|
||||||
collect the output from this, and then go to
|
|
||||||
|
|
||||||
http://ardour.org/mantis
|
|
||||||
|
|
||||||
and file a new bug report with the output attached. This will allow
|
|
||||||
us to get the most out of your misfortune.
|
|
||||||
|
|
||||||
If you compiled ardour from source and want to be even more helpful,
|
|
||||||
recompile it after running
|
|
||||||
|
|
||||||
./configure --disable-optimize
|
|
||||||
|
|
||||||
at the top level. This will make the debugging output more useful.
|
|
||||||
|
|
||||||
1.9. I want Ardour to run faster.
|
|
||||||
|
|
||||||
The --enable-optimize flag is enabled by default which turns
|
|
||||||
on compiler features that can make Ardour run up to 50% faster.
|
|
||||||
If you downloaded Ardour as a binary package, it should have been
|
|
||||||
compiled with that flag already.
|
|
||||||
|
|
||||||
--Features--
|
|
||||||
2.1. Are plugins supported?
|
|
||||||
|
|
||||||
LADSPA plugins are supported. To use them, click the middle mouse
|
|
||||||
button in the top box at the top of the mixerstrip you wish to have a
|
|
||||||
plugin for. This opens up a window which lists all the plugins. Double
|
|
||||||
click on the one you wish to use. In the mixer window, click on the
|
|
||||||
plugin to toggle it on and off, option-click to edit its values, or
|
|
||||||
shift-click to remove it.
|
|
||||||
|
|
||||||
2.2. Are VST plugins supported?
|
|
||||||
|
|
||||||
There are several issues here:
|
|
||||||
|
|
||||||
1) Generic VST support
|
|
||||||
|
|
||||||
Many people have asked about VST support within Ardour. Work has been
|
|
||||||
done on this, but there are both license issues and technical
|
|
||||||
ones. The licensing issues seem relatively easy to resolve.
|
|
||||||
|
|
||||||
On the technical front, given that the goal is to not require VST
|
|
||||||
developers to build new native Linux versions of their plugins, the
|
|
||||||
most promising approach involves using Wine to support native
|
|
||||||
Windows VST plugins. It is already possible to run most VST plugins as
|
|
||||||
JACK clients and thus use them as inserts with Ardour, but the process
|
|
||||||
of doing so is not what most users would term "convenient".
|
|
||||||
|
|
||||||
However, Wine cannot currently be used within a complex
|
|
||||||
multithreaded application. The Wine development team are working on
|
|
||||||
this, and as a rough guess, I'd expect progress within about 6 months
|
|
||||||
(i.e end of 2003). At that time, it will be possible to use most VST
|
|
||||||
plugins that have their own GUI ("editor") from within Ardour.
|
|
||||||
|
|
||||||
However, initially, this functionality will be available only as
|
|
||||||
part of a for-cost distribution of Ardour.
|
|
||||||
|
|
||||||
2) Specific plugins
|
|
||||||
|
|
||||||
a) executable format issues
|
|
||||||
|
|
||||||
Plugins are pieces of executable code. The format used for
|
|
||||||
the files that store this code is different under windows
|
|
||||||
and macos than it is for linux. Some people have managed
|
|
||||||
to find workarounds for this --- there are reports of people
|
|
||||||
running windows-derived buzz plugins under linux, but nobody
|
|
||||||
has looked into trying it with vst plugins.
|
|
||||||
|
|
||||||
Linux also runs on a lot more hardware than windows or MacOS.
|
|
||||||
We assume that when you say linux, you mean "linux on an intel
|
|
||||||
compatible processor", but keep in mind that to most of us,
|
|
||||||
linux means more than that --- it includes the PPC, Sparc, Alpha,
|
|
||||||
ARM, MIPS and many other chip architectures. Of that list,
|
|
||||||
only PPC has any VST plugin support at all.
|
|
||||||
|
|
||||||
This problem would go away if a VST plugin was available as source
|
|
||||||
code, but to my knowledge, only 1 is (freeverb).
|
|
||||||
|
|
||||||
b) OS dependency issues
|
|
||||||
|
|
||||||
Most VST plugin writers do not follow Steinberg's design advice,
|
|
||||||
and write plugins that have operating system dependencies. As
|
|
||||||
a result, even if you could find a way to actually use, say,
|
|
||||||
a windows-format VST plugin on Linux on an Intel machine, the
|
|
||||||
plugin would contain calls to operating system services that
|
|
||||||
don't exist (in the same way) under Linux.
|
|
||||||
|
|
||||||
So, the basic answer is "no". I am an active member of the VST-plugins
|
|
||||||
mailing list, and I try to encourage people who write free plugins to
|
|
||||||
make their source code available so that we can use it under Linux, as
|
|
||||||
well as reminding people to try to avoid operating system dependencies
|
|
||||||
in their plugins. I think this mostly falls on deaf ears.
|
|
||||||
|
|
||||||
2.3. Does Ardour run on non-Linux systems?
|
|
||||||
|
|
||||||
Ardour depends on the JACK system to access the sound hardware. Jack
|
|
||||||
has (as of this writing) support for Linux, Solaris, and MacOSX. There
|
|
||||||
have not been any reports of running Ardour on any platforms besides Linux
|
|
||||||
though.
|
|
||||||
|
|
||||||
In addition, Ardour has abstracted the JACK dependency, so it can be ported
|
|
||||||
to use another sound library. But at the time, it only uses the JACK
|
|
||||||
library. The JACK website is http://jackit.sf.net/.
|
|
||||||
|
|
||||||
2.4. Ardour needs to have this feature now.
|
|
||||||
|
|
||||||
Paul accepts donations through his paypal account. The feature will
|
|
||||||
(probably) be added more quickly if you pay him. Contact him first.
|
|
||||||
|
|
||||||
2.5. Why doesn't Ardour support MP3s?
|
|
||||||
|
|
||||||
Ardour is meant for serious audio work. MP3 is a lossy format
|
|
||||||
unsuitable for this. Ardour does export sessions to wav format, which
|
|
||||||
is trivial to convert to MP3.
|
|
||||||
|
|
||||||
2.6. Does Ardour support MIDI?
|
|
||||||
|
|
||||||
Ardour currently supports MIDI in the sense of:
|
|
||||||
|
|
||||||
* functioning as a MIDI Timecode master (it generates MTC)
|
|
||||||
* functioning as a MIDI Timecode slave (experimental; send reports!)
|
|
||||||
* understanding MIDI Machine Control
|
|
||||||
* allowing the user to bind GUI controls (sliders, etc.) to
|
|
||||||
MIDI Continuous Controller and NoteOn/NoteOff messages
|
|
||||||
|
|
||||||
It does not offer any facilities for editing or arranging or recording
|
|
||||||
or playing MIDI data. There has been talk of integrating Midi
|
|
||||||
Mountain, an excellent midi editor. There hasn't been any progress in
|
|
||||||
this direction lately, mostly due to other areas that need to be fixed
|
|
||||||
up. It's not a trivial affair if the integration is going to proceed
|
|
||||||
in a way leaves the result feeling "natural".
|
|
||||||
|
|
||||||
2.7. What soundfile formats are supported?
|
|
||||||
|
|
||||||
It depends on what version of libsndfile is installed. This link lists the
|
|
||||||
latest formats: http://www.mega-nerd.com/libsndfile/#Features
|
|
||||||
|
|
||||||
Please note that Ardour requires the 1.x series of libsndfile.
|
|
||||||
|
|
||||||
2.8. Can I use multiple cards?
|
|
||||||
|
|
||||||
In a word: maybe.
|
|
||||||
|
|
||||||
The sync issues that arise even between the same make and model of a card
|
|
||||||
aren't worth the effort of fixing. If you want to have more than two
|
|
||||||
channels, buy a professional card.
|
|
||||||
|
|
||||||
On the other hand, if you already have two professional cards with word-sync,
|
|
||||||
you might be able to get them to work. This is several layers removed from
|
|
||||||
Ardour; the proper place to ask for help is at http://www.alsa-project.org .
|
|
||||||
|
|
||||||
There is more information at http://www.linuxdj.com/audio/quality/#multi
|
|
||||||
|
|
||||||
2.9. How do I save captures across partitions?
|
|
||||||
|
|
||||||
Ardour lets you specify multiple directories to save captured audio
|
|
||||||
in. In the options editor, in the session path box, specify the full
|
|
||||||
paths of the directories you wish to use, seperated by colons (:).
|
|
||||||
These can be on different partitions or even different disks. Using
|
|
||||||
this "software RAID"-like setup can greatly increase your disk
|
|
||||||
bandwidth.
|
|
||||||
|
|
||||||
--Usability--
|
|
||||||
3.1. How do I pan stereo outputs?
|
|
||||||
|
|
||||||
Panning works over JACK ports. So even if you have two outputs
|
|
||||||
connected to one port, Ardour doesn't consider this to be stereo. You
|
|
||||||
need to make sure that you have two ports, and then add one (or more)
|
|
||||||
destination to each port.
|
|
||||||
|
|
||||||
You need to think of the ports as if they were physical sockets to
|
|
||||||
which you can connect as many plugs as you want. A single port means
|
|
||||||
mono, even though you can send the signal to many different
|
|
||||||
places. Two ports means stereo, even though the right and left signals
|
|
||||||
can each go to any number of different places.
|
|
||||||
|
|
||||||
3.2. Where's the patch bay?
|
|
||||||
|
|
||||||
There is no separate dedicated patch bay. Patch bay functionality
|
|
||||||
is integral to the mixer. The mixer can have any number of inputs,
|
|
||||||
any number of busses, etc. In other words, it *is* the patchbay.
|
|
||||||
|
|
||||||
3.3. How do I do stuff?
|
|
||||||
|
|
||||||
Region Dragging (object mode)
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
click-drag => moves region
|
|
||||||
shift-click-drag => moves region with time position held constant
|
|
||||||
(i.e. across tracks)
|
|
||||||
ctl-click-drag => moves a copy of the region
|
|
||||||
ctl-shift-click-drag => time-constrained movement of a copy of the
|
|
||||||
region
|
|
||||||
snapmod-click-drag => ignores current snap setting
|
|
||||||
|
|
||||||
Region Alignment (clicks without motion)
|
|
||||||
----------------
|
|
||||||
|
|
||||||
[ all alignment uses:
|
|
||||||
|
|
||||||
1) current region selection, if it exists
|
|
||||||
2) else the edit cursor
|
|
||||||
]
|
|
||||||
|
|
||||||
ctl-click => aligns start of region
|
|
||||||
ctl-shift-click => aligns end of region
|
|
||||||
ctl-alt-click => aligns sync point of region
|
|
||||||
|
|
||||||
Marks
|
|
||||||
-----
|
|
||||||
|
|
||||||
click in tempo track to create a new tempo mark
|
|
||||||
click in meter track to create a new meter mark
|
|
||||||
click in marker track to create a new marker
|
|
||||||
regular edit op for tempo/meter allows editing
|
|
||||||
regular delete op for all markers (except initial
|
|
||||||
tempo/meter markers)
|
|
||||||
snapmod-click-drag to move a marker while ignoring
|
|
||||||
current snap mode
|
|
||||||
|
|
||||||
Editing
|
|
||||||
-------
|
|
||||||
|
|
||||||
default is ctl-button3 click
|
|
||||||
|
|
||||||
|
|
||||||
Deletion
|
|
||||||
--------
|
|
||||||
|
|
||||||
default is shift-button3 click
|
|
||||||
|
|
||||||
Context Menu
|
|
||||||
------------
|
|
||||||
|
|
||||||
button3 click
|
|
||||||
|
|
||||||
Snap Modifier
|
|
||||||
-------------
|
|
||||||
|
|
||||||
default is mod3 (typically meta/windows/start key). using
|
|
||||||
ctl or shift or alt will cause problems. you can also
|
|
||||||
use combinations, but again, combinations using ctl and shift
|
|
||||||
will cause problems. mod3 or mod4 are probably your best
|
|
||||||
choices.
|
|
||||||
|
|
||||||
Selection (RANGE MODE required)
|
|
||||||
---------
|
|
||||||
|
|
||||||
click on a region => make a region selection
|
|
||||||
shift-click on a region => add region to region selection
|
|
||||||
click-drag => make a range selection
|
|
||||||
shift-click-drag => add to range selection
|
|
||||||
ctrl-click-drag => move selection
|
|
||||||
|
|
||||||
Separation
|
|
||||||
----------
|
|
||||||
|
|
||||||
in range mode:
|
|
||||||
|
|
||||||
a) make a single range selection
|
|
||||||
|
|
||||||
then, to split existing region apart
|
|
||||||
|
|
||||||
b) right click => Selection => Separate region
|
|
||||||
|
|
||||||
OR, to creates a new region without splitting original
|
|
||||||
|
|
||||||
b) switch to object mode
|
|
||||||
c) click on selection and drag
|
|
||||||
|
|
||||||
|
|
||||||
solo/mute/rec-enable
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
to toggle solo/mute/RE for EVERYTHING:
|
|
||||||
|
|
||||||
ctl-shift-click on a solo/mute/RE button
|
|
||||||
|
|
||||||
to solo/mute/RE mix group (when group is not active)
|
|
||||||
|
|
||||||
ctl-click on solo/mute button
|
|
||||||
|
|
||||||
to toggle solo-safe status (which appears to not work
|
|
||||||
correctly right now)
|
|
||||||
|
|
||||||
shift-click on solo button
|
|
||||||
|
|
||||||
to momentarily engage solo while pressing a mouse button
|
|
||||||
|
|
||||||
use button2 instead of button1
|
|
||||||
|
|
||||||
|
|
||||||
gain sliders
|
|
||||||
------------
|
|
||||||
|
|
||||||
shift-click to reset to 0dB
|
|
||||||
ctl-click-drag for finer scale
|
|
||||||
ctl-alt-click-drag for even finer scale
|
|
||||||
|
|
||||||
panners
|
|
||||||
-------
|
|
||||||
|
|
||||||
(stereo): shift-click to reset to center
|
|
||||||
|
|
||||||
--Misc--
|
|
||||||
4.1. What's the deal with JACK?
|
|
||||||
|
|
||||||
JACK is the Jack Audio Connection Kit. There is a basic problem with
|
|
||||||
audio+MIDI apps on Linux at this time: they are not able to exchange
|
|
||||||
data with each other in situations where low latency is a system goal.
|
|
||||||
There are systems (aRts, MidiShare, parts of alsa-lib) that allow data
|
|
||||||
sharing, but not when the latencies get down below 20ms.
|
|
||||||
|
|
||||||
JACK is an API that solves this problem. Also, and quite importantly,
|
|
||||||
JACK drastically simplifies the programming of audio applications.
|
|
||||||
Applications that use JACK do not need to know anything about audio
|
|
||||||
hardware. They do not interact with it directly in any way
|
|
||||||
whatsoever. All they do is provide a few callbacks to the server they
|
|
||||||
connect with; the primary callback is responsible for producing and/or
|
|
||||||
consuming a specified amount of data whenever it is called. This is a
|
|
||||||
'callback' model, and is extremely different from ALSA, OSS, and
|
|
||||||
several other audio APIs. It is, however, very similar to Apple's
|
|
||||||
CoreAudio, Steinberg's ASIO, the PortAudio library, and most plugin
|
|
||||||
APIs. See http://jackit.sf.net/
|
|
||||||
|
|
||||||
4.2. Is Ardour internationalized?
|
|
||||||
Parts of Ardour are. Work is ongoing to fully internationlize Ardour. If
|
|
||||||
you speak a language besides English, feel free to volunteer to help
|
|
||||||
translate.
|
|
||||||
|
|
||||||
These languages have translations:
|
|
||||||
|
|
||||||
gtk-ardour:
|
|
||||||
French, German, Italian, Portuguese, Brazilian Portuguese, and Russian
|
|
||||||
|
|
||||||
libardour:
|
|
||||||
Italian
|
|
||||||
|
|
||||||
4.3. How do I get support?
|
|
||||||
|
|
||||||
Ardour is a volunteer project. There is no one devoted to providing
|
|
||||||
support. However, there is a members only mailing list where someone
|
|
||||||
might answer your question. You can join at Ardour's website:
|
|
||||||
|
|
||||||
http://ardour.org/
|
|
||||||
|
|
||||||
There is also the IRC #ardour channel on the FreeNode network.
|
|
||||||
|
|
||||||
Alternatively, you can pay Paul for specific support. Check with him
|
|
||||||
for hourly rates.
|
|
||||||
|
|
||||||
4.4. Well, where's the manual?
|
|
||||||
|
|
||||||
Currently, the existing documentation is sparse. You might want to check out
|
|
||||||
the Protools reference; Ardour is rather similar to it. Also, Paul wants
|
|
||||||
users to be able to complete the Mackie HDR tutorial using Ardour; so that
|
|
||||||
is another manual to check out. Both are available online from
|
|
||||||
<a href=http://digidesign.com/support/documents.html>DigiDesign</a> and <a
|
|
||||||
href=http://mackie.com>Mackie</a>.
|
|
||||||
|
|
||||||
There is the begining of a manual in Ardour's manual directory. Feel
|
|
||||||
free to create your own HOWTOs, tips and tricks sheets, tutorials, or
|
|
||||||
whatever you feel like adding.
|
|
||||||
|
|
||||||
A couple people have written some documentation to get people started with
|
|
||||||
Ardour. It is available at http://www.djcj.org/LAU/ardour/
|
|
||||||
|
|
||||||
4.5. Why are all these libraries included? I already have ...
|
|
||||||
|
|
||||||
Yes, we know that it's quite likely that you already have gtkmm or
|
|
||||||
sigc++ installed on your machine, let alone others. There
|
|
||||||
are 2 problems.
|
|
||||||
|
|
||||||
Ardour requires either the latest version of these libraries or even a
|
|
||||||
version with a patch that has not yet been incorporated into a release
|
|
||||||
of the library. Rather than require you to get the library source,
|
|
||||||
patch it, recompile and install it, Ardour keeps its own copy, builds
|
|
||||||
a static, private version of the library and links against it. That
|
|
||||||
way, we don't have to worry about crashes caused by you having the
|
|
||||||
wrong version of the library.
|
|
||||||
|
|
||||||
The second problem is more general. C++ does not yet have a unified
|
|
||||||
"Application Binary Interface", even on a single process
|
|
||||||
architecture+OS combination. This is unlikely to ever change (it was
|
|
||||||
encouraged by the inventor of C++). This means that libraries compiled
|
|
||||||
with one compiler are not always compatible with applications compiled
|
|
||||||
with another compiler. By "another compiler", we can mean something as
|
|
||||||
subtle as a different version of g++. Worse, because many C++
|
|
||||||
libraries feature inlined code, we even need to be sure you compile
|
|
||||||
against exactly the same version of the library as other parts of
|
|
||||||
Ardour will use. Even worse, there are compile time flags you or
|
|
||||||
someone else could give to a C++ compiler that would make the library
|
|
||||||
incompatible in subtle ways with code compiled with different flags.
|
|
||||||
|
|
||||||
After a year of trying to address these problems "the normal way", the
|
|
||||||
Ardour team gave up and decided to include every necessary library
|
|
||||||
that is written in C++ and/or has patches required. You may not like
|
|
||||||
this very much, but trust us, you would like the alternative even
|
|
||||||
less.
|
|
||||||
|
|
||||||
4.6. Why not another frontend to libardour? Why not QT?
|
|
||||||
|
|
||||||
The GTK+ frontend to libardour is almost 7 times the size of libardour. GUIs
|
|
||||||
for these sort of programs are very large and detail orientated. It would be
|
|
||||||
a waste of time to try to reimplement Ardour with another widget set. This is
|
|
||||||
also why there won't be a native port of Ardour to MacOS X.
|
|
|
@ -1,139 +0,0 @@
|
||||||
ARDOUR README.es
|
|
||||||
|
|
||||||
Paul Davis <paul@linuxaudiosystems.com> June 2003
|
|
||||||
|
|
||||||
Bienvenido a Ardour. Este programa aun esta bajo desarrollo,
|
|
||||||
pero ha llegado a un estado en el cual es productivo y util tener
|
|
||||||
a otras personas probandolo y tal vez (con suerte!) arreglando errores
|
|
||||||
y agregando nuevas caracteristicas.
|
|
||||||
|
|
||||||
**** SEGURIDAD *******************************************************
|
|
||||||
|
|
||||||
Para ejecutar Ardour con la mas baja latencia posible, es necesario usar
|
|
||||||
POSIX Real-Time Scheduling (tiempo Real) como tambien bloquear toda la
|
|
||||||
memoria que usa en la memoria fisica de la RAM. Estos requerimientos solo
|
|
||||||
se pueden cumplir si Ardour es ejecutado con privilegios de usuario root.
|
|
||||||
|
|
||||||
Por otro lado, esto no es tan malo. Si no planea instalar a Ardour
|
|
||||||
usando el comando "setuid root"(lo cual no funcionaria de todas formas),
|
|
||||||
entonces alguna persona que use su estacion de trabajo debera tener
|
|
||||||
que haber "ganado" privilegios de acceso root para hacerlo funcionar
|
|
||||||
de esa forma.Si esa otra persona ya tiene acceso de tipo root, Ardour
|
|
||||||
es la menor de sus preocupaciones. Asi que, relajese. Usaremos
|
|
||||||
capabilities (privilegios root) una vez que los Kernels de Linux empiecen
|
|
||||||
a aparecer con estas ya activadas, aunque esto no ayudara mucho a la
|
|
||||||
seguridad, ya que las mencionadas "capabilities" habilitarian a cualquier
|
|
||||||
hacker astatuto a hacer lo que quiciera.
|
|
||||||
|
|
||||||
Alternativamente, usted puede elegir ejecutar a Ardour sin Scheduling
|
|
||||||
de Tiempo Real, lo cual no es tan terrible. Simplemente no va a ser util
|
|
||||||
en situaciones que demandan baja latencia, las cuales son deseables en
|
|
||||||
la mayoria de los ambientes de estudios.
|
|
||||||
Note que esto pierde importancia en el caso que usted disponga de
|
|
||||||
hardware de audio capaz de hacer "monitorizacion por hardware". Esto
|
|
||||||
hace recaer gran parte del peso de procesamiento sobre el dispositivo
|
|
||||||
de audio y no sobre el CPU como es el caso de la "monitorizacion por
|
|
||||||
software". En el caso de monitorizacion por hardware, la falta de baja
|
|
||||||
latencia hara que los controles de la interfaz visual de Ardour
|
|
||||||
reaccionen con menos fluidez, sin embargo la monitorizacion durante la
|
|
||||||
captura sera excelente.
|
|
||||||
|
|
||||||
**** COMPATIBILIDAD DE HARDWARE *************************************
|
|
||||||
|
|
||||||
Ardour usa JACK para todo el manejo de entradas y salidas de audio,
|
|
||||||
lo cual provee conecciones directas al hardware de audio y a otras
|
|
||||||
aplicaciones compatibles con JACK. Este no es el lugar mas apropiado
|
|
||||||
para discutir acerca de JACK, pero en caso de que se estubiera
|
|
||||||
preguntando:
|
|
||||||
|
|
||||||
Aunque JACK usa la libreria ALSA 0.9.0, JACK la aprovecha de una forma
|
|
||||||
que ninguna otra aplicacion lo ha hecho hasta ahora y, tambien intenta
|
|
||||||
usar ciertas caracteristicas de hardware que nuevamente, ninguna de las
|
|
||||||
actuales aplicaciones usa. Como resultado, aunque una completa
|
|
||||||
portabilidad a todo el hardware soportado por ALSA es un objetivo
|
|
||||||
eventualmente realizable, puede ser que nazcan problemas relacionados
|
|
||||||
con la compatibildad de hardware. Por favor recuerde que mi objetivo
|
|
||||||
principal con JCK es el de crear un sistema profesional de audio y, con
|
|
||||||
Ardour, una estacion de trabajo de audio digital profesional. Si estos
|
|
||||||
terminan siendo utiles para personas con placas de 2/4 canales, muy bien,
|
|
||||||
pero ese no es mi foco de interes principal.
|
|
||||||
|
|
||||||
Otro punto importante es que su dispositivo de sonido debe soportar
|
|
||||||
full duplex de entrada/salida (reproduccion y grabacion simultaneas)
|
|
||||||
con el mismo formato para la captura y la reproduccion (no se puede
|
|
||||||
usar una frecuencia de muestreo de 44.1 khz para reproducir y una
|
|
||||||
de 48khz para grabar, ambas deben ser iguales, lo mismo sucede para
|
|
||||||
la resolucion en bits. Esto significa, por ejemplo, que la placa
|
|
||||||
SoundBlaster AWE no puede ser usada con JACK en modo full duplex.
|
|
||||||
-Esta placa solo soporta fullduplex si una de las dos (grabacion o
|
|
||||||
reproduccion) usa 8 bits y la otra 16 bits.
|
|
||||||
Este tipo de limitacion existe solo en algunas placas y, de ser asi
|
|
||||||
no son adecuadas para el uso en aplicaciones como JACK y ARDOUR por
|
|
||||||
otras razones.
|
|
||||||
|
|
||||||
Hasta la fecha, JACK fue probado con las siguientes interfaces de audio:
|
|
||||||
|
|
||||||
RME Hammerfall (Digi9652) (26 channels in, 26 channels out)
|
|
||||||
RME Hammerfall DSP (hdsp) (26 channels in, 26 channels out)
|
|
||||||
RME Hammerfall Light (Digi9636) (18 channels in, 18 channels out)
|
|
||||||
Midiman Delta series (ice1712 chipset) (12 channels in, 10 channels out)
|
|
||||||
|
|
||||||
Varios chips de sonido de nivel de consumidor (relativamente baratas),
|
|
||||||
tipicamente con 2 canales de entrada y 2/4 de salida,incluyendo:
|
|
||||||
|
|
||||||
Hoontech 4Dwave-NX (chipset Trident)
|
|
||||||
Ensoniq 5880
|
|
||||||
Soundblaster 32
|
|
||||||
Soundblaster 64
|
|
||||||
Creative SBLive64
|
|
||||||
|
|
||||||
y muchas mas.
|
|
||||||
|
|
||||||
Asi que, basicamente, parece funcionar con practicamente todas aquellas
|
|
||||||
placas que son soportadas por ALSA, lo cual es el objetivo.
|
|
||||||
|
|
||||||
**********************************************************************
|
|
||||||
|
|
||||||
REPORTES DE ERRORES EN CODIGO (BUGS)
|
|
||||||
-------------------------------------
|
|
||||||
|
|
||||||
Los bugs deben ser reportados a http://ardour.org/mantis/ . Es mas probable
|
|
||||||
que estos sean recordados y analizados alli. Por favor, chequee alli la lista
|
|
||||||
de bugs ya reportados para asegurarse que el que usted encontro no haya sido
|
|
||||||
reportado aun o haya sido resuelto en CVS.
|
|
||||||
|
|
||||||
PARA COMPILAR ARDOUR
|
|
||||||
--------------------
|
|
||||||
Vea el archivo "BUILD" (por ahora en ingles, espaniol mas adelante).
|
|
||||||
|
|
||||||
EJECUTANDO ARDOUR
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
NOTA: Debe haber ya un server JACK corriendo antes de ejecutar Ardour
|
|
||||||
---------------------------------------------------------------
|
|
||||||
|
|
||||||
* Escribiendo ardour en una consola y presionando ENTER o INTRO deberia iniciar
|
|
||||||
el programa.
|
|
||||||
|
|
||||||
* "ardour --help" muestra las opciones disponibles desde la linea de comando
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Nota de Traduccion (Spanish Translation Note)
|
|
||||||
---------------------------------------------
|
|
||||||
#Nota del tipeo:la letra pronunciada ENIE aparece en este archivo
|
|
||||||
#como ni (letra "n" y letra "i") para mayor compatibilidad con todos
|
|
||||||
#los visores de texto.
|
|
||||||
#Asi mismo no se han aplicado las tildes(acentos).
|
|
||||||
#Estos no son errores de tipeo. Si llegara a encontrar algun otro error
|
|
||||||
#en cualquiera de los archivos con extension ".es" por favor
|
|
||||||
#hagamelo saber a alexkrohn@fastmail.fm
|
|
||||||
# Muchas gracias
|
|
||||||
# Alex
|
|
||||||
|
|
|
@ -1,113 +0,0 @@
|
||||||
ARDOUR -- LISEZ-MOI
|
|
||||||
|
|
||||||
Paul Davis <paul@linuxaudiosystems.com> Juin 2003
|
|
||||||
|
|
||||||
Bienvenue sur Ardour. Ce programme est encore en cours de développement,
|
|
||||||
mais a atteint un état où il peut être utile et productif afin que
|
|
||||||
d'autres personnes puissent le tester et peut-être (je l'espère !) corriger
|
|
||||||
les bogues et ajouter des fonctionnalités.
|
|
||||||
|
|
||||||
**** SÉCURITÉ *******************************************************
|
|
||||||
|
|
||||||
Afin d'utiliser Ardour avec un temps de latence le plus bas possible,
|
|
||||||
il est nécessaire d'utiliser l'ordonnancement temps réel POSIX ainsi
|
|
||||||
que de verrouiller toute la mémoire qu'il utilise en mémoire vive physique.
|
|
||||||
Ces pré requis ne peuvent être atteint que lorsque Ardour est lancé
|
|
||||||
avec les privilèges du super-utilisateur (root).
|
|
||||||
|
|
||||||
D'un autre côté, ce n'est pas si grave que ça. Si vous n'essayez pas
|
|
||||||
de l'installer en setuid root (ce qui ne marchera pas de toute façon),
|
|
||||||
alors les utilisateurs devront avoir obtenu l'accès root pour pouvoir le
|
|
||||||
lancer comme cela. S'ils ont déjà l'accès root, Ardour est bien le dernier
|
|
||||||
de vos problèmes. Donc tranquillisez-vous. Nous utiliserons les "capacités"
|
|
||||||
(capabilities en anglais, NdT) quand les noyaux Linux arriverons avec
|
|
||||||
leur support activé, bien que les capacités en question autoriserons
|
|
||||||
toujours un cracker mal intentionné à faire à peu près n'importe quoi.
|
|
||||||
|
|
||||||
L'alternative est de lancer Ardour sans ordonnancement temps-réel, dans
|
|
||||||
ce cas, il n'y a plus de souci. Ardour ne sera juste plus très utile
|
|
||||||
dans des conditions de faible latence, ce qui est désirable dans la
|
|
||||||
plupart des environnements de studio. Notez que cela n'est pas si important
|
|
||||||
lorsque vous avez du matériel audio qui est capable de faire du
|
|
||||||
"monitoring matériel" -- dans ce cas, un temps de latence trop important
|
|
||||||
provoquera juste des temps de réponse un peu longs pour l'interface
|
|
||||||
utilisateur d'Ardour, mais le monitoring pendant l'enregistrement
|
|
||||||
sera excellent.
|
|
||||||
|
|
||||||
|
|
||||||
**** COMPATIBILITÉ MATÉRIELLE *****************************************
|
|
||||||
|
|
||||||
Ardour utilise JACK pour toutes ses entrés/sorties audio, fournissant
|
|
||||||
ainsi des connexions transparentes au matériel audio ainsi qu'à d'autres
|
|
||||||
applications. Cela n'est pas du tout l'endroit pour parler de JACK,
|
|
||||||
mais dans le cas où vous vous poseriez la question :
|
|
||||||
|
|
||||||
Bien que JACK utilise l'API (Application Programming Interface, NdT) ALSA
|
|
||||||
0.9.0, il utilise cette API d'une manière que nulle autre application
|
|
||||||
ne l'a jamais fait jusqu'à présent, et essaie aussi d'utiliser certaines
|
|
||||||
possibilités matérielles qui également n'ont jamais été employées par
|
|
||||||
d'autres applications. En conséquence, bien que la portabilité complète de
|
|
||||||
tout matériel supporté par ALSA est un objectif très atteignable, il peut
|
|
||||||
y avoir des problèmes concernant la compatibilité matérielle. Veuillez
|
|
||||||
garder en mémoire que le but principal avec JACK est d'obtenir
|
|
||||||
un système audio professionnel, et avec Ardour, d'obtenir une station
|
|
||||||
de travail audio-numérique professionnelle. S'ils parviennent à être
|
|
||||||
utilisés par des gens avec des cartes audio ayant 2/4 canaux, génial,
|
|
||||||
mais ce n'est pas ma priorité.
|
|
||||||
|
|
||||||
Un autre problème important est que votre interface audio doit supporter
|
|
||||||
l'entrée/sortie en mode full duplex avec le même format d'échantillonage
|
|
||||||
pour l'enregistrement que pour la restitution. Cela veut dire, par exemple,
|
|
||||||
que la SoundBlaster AWE ne peut être utilisée par JACK en mode full duplex
|
|
||||||
-- elle supporte seulement l'entrée/sortie en full duplex si l'une des
|
|
||||||
deux directions (enregistrement ou restitution) est en 8 bits et
|
|
||||||
que l'autre est en 16 bits. Très peu de cartes ont cette limitation,
|
|
||||||
et si c'est le cas, elles ne sont de toute façon pas adéquates pour des
|
|
||||||
utilisations avec des applications telles que JACK ou Ardour pour d'autres
|
|
||||||
raisons.
|
|
||||||
|
|
||||||
À ce jour, JACK a été utilisé avec :
|
|
||||||
|
|
||||||
RME Hammerfall (Digi9652) (26 canaux en entrée, 26 canaux en sortie)
|
|
||||||
RME Hammerfall DSP (hdsp) (26 canaux en entrée, 26 canaux en sortie)
|
|
||||||
RME Hammerfall Light (Digi9636) (18 canaux en entrée, 18 canaux en sortie)
|
|
||||||
Midiman Delta series (ice1712 chipset) (12 canaux en entrée, 10 canaux en sortie)
|
|
||||||
|
|
||||||
Diverses interface audio grand public, généralement avec deux canaux d'entrée, deux
|
|
||||||
canaux de sortie, incluant :
|
|
||||||
|
|
||||||
Hoontech 4Dwave-NX (Trident chipset)
|
|
||||||
Ensoniq 5880
|
|
||||||
Soundblaster 32
|
|
||||||
Soundblaster 64
|
|
||||||
Creative SBLive64
|
|
||||||
|
|
||||||
et bien d'autres.
|
|
||||||
|
|
||||||
Donc, pour résumer, il semble fonctionner pour toute carte supporté par ALSA, ce qui
|
|
||||||
est le but.
|
|
||||||
|
|
||||||
**********************************************************************
|
|
||||||
|
|
||||||
RAPPORT DE BOGUES
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Les bogues doivent être rapportés sur http://ardour.org/mantis/. Ils seront
|
|
||||||
certainement plus à même d'être conservés et traités à cet endroit. Veuillez
|
|
||||||
consulter les bogues existant afin d'être sûr que le votre n'a pas déjà été
|
|
||||||
rapporté et/ou corrigé dans le CVS.
|
|
||||||
|
|
||||||
|
|
||||||
COMPILER ARDOUR
|
|
||||||
---------------
|
|
||||||
Veuillez consulter le fichier "BUILD".
|
|
||||||
|
|
||||||
|
|
||||||
LANCER ARDOUR
|
|
||||||
-------------
|
|
||||||
|
|
||||||
NOTE : Vous devez avoir un serveur JACK lancé avant de lancer Ardour.
|
|
||||||
--------------------------------------------------------------
|
|
||||||
|
|
||||||
Taper "ardour" devrait sans doute avoir quelque effet. "ardour --help" liste
|
|
||||||
les options disponibles.
|
|
|
@ -1,276 +0,0 @@
|
||||||
ARDOUR README.it
|
|
||||||
|
|
||||||
Paul Davis <paul@linuxaudiosystems.com> June 2003
|
|
||||||
Italian Traslation by Vieri Verze <poe@softhome.net> August 2002
|
|
||||||
Update by Filippo Pappalardo <filippo@email.it> December 2003
|
|
||||||
|
|
||||||
Benvenuti in Ardour. Sebbene questo programma sia ancora in via di
|
|
||||||
sviluppo, e` pronto a rendervi produttivi, permettervi di testarlo
|
|
||||||
e (si spera!) risolvere i bug e aggiungere nuove caratteristiche.
|
|
||||||
|
|
||||||
**** SICUREZZA *******************************************************
|
|
||||||
|
|
||||||
Per eseguire Ardour con la latenza piu` bassa e` necessario usare il
|
|
||||||
POSIX Real-Time Scheduling e disporre di tutta la memoria di cui ha
|
|
||||||
bisogno sotto forma di RAM fisica. Queste richieste possono essere
|
|
||||||
soddisfatte soltanto se Ardour viene eseguito con i privilegi di root.
|
|
||||||
|
|
||||||
D'altra parte non tutto il male viene per nuocere. Se non installate
|
|
||||||
Ardour con setuid root (che comunque non funziona), gli altri avranno
|
|
||||||
bisogno dei privilegi di root per eseguirlo. Se li hanno Ardour e` il
|
|
||||||
vostro ultimo problema. Quindi rilassatevi. Implementeremo le
|
|
||||||
capabilities non appena il kernel le supportera`, benche` questo non
|
|
||||||
aiuti molto la sicurezza, dal momento che un cracker intelligente
|
|
||||||
potra` comunque fare di tutto.
|
|
||||||
|
|
||||||
In alternativa, potete scegliere di esguire Ardour senza il RT
|
|
||||||
scheduling e non avrete nessun problema. Non sara` molto utile nelle
|
|
||||||
situazioni in cui e` necessaria una bassa latenza. Praticamente nella
|
|
||||||
maggior parte dei casi. Ricordatevi che tutto questo e` irrilevante se
|
|
||||||
possedete una scheda audio capace di fare "hardware monitoring".
|
|
||||||
In questo caso una latenza piu` alta rendera` un po` lenti i controlli
|
|
||||||
della UI di Ardour, mentre il monitoring durante la capture saranno
|
|
||||||
eccellenti.
|
|
||||||
|
|
||||||
**** COMPATIBILITA` HARDWARE *****************************************
|
|
||||||
|
|
||||||
Ardour usa il server audio JACK per tutte le operazioni di I/O. In
|
|
||||||
questo modo fornisce un impareggiabile sistema di comunicazione con il
|
|
||||||
substrato hardware audio e le altre applicazioni. Non è certamente
|
|
||||||
questo il luogo per discutere di JACK, ma se vi state chiedendo:
|
|
||||||
|
|
||||||
JACK usa le ALSA 0.9.0 API. La particolarita` e` che le sfrutta in
|
|
||||||
un modo completamente nuovo soprattutto per quanto riguarda l' uso
|
|
||||||
dell' hardware. Come risultato, benche` il totale supporto delle
|
|
||||||
periferiche h/w da parte di ALSA sia un successo facilmente ottenibile,
|
|
||||||
potrebbero esserci problemi concernenti la compatiblita` h/w. Bisogna
|
|
||||||
tenere presente che il mio scopo principale e` di creare con JACK un
|
|
||||||
sistem audio professionale, e con Ardour un sistema professionale di
|
|
||||||
HDR. Se puo` essere utile a utenti con schede a 2/4 canali, ben venga,
|
|
||||||
ma ricordate che questo non e` l' interesse primo.
|
|
||||||
|
|
||||||
Un altro aspetto importante e` che la vostra interfaccia audio deve
|
|
||||||
supportare l' I/O in full duplex nello stesso formato sia in registrazione
|
|
||||||
che suonando. Significa, per esempio, che una Soundblaster AWE non
|
|
||||||
potra` essere usata con JACK in modalita` full duplex, a meno che una
|
|
||||||
delle due direzioni (registrazione o playback) e` a 8 bit e l' altra a 16.
|
|
||||||
Sono poche le schede che hanno questo tipo di limitazione, e non sono
|
|
||||||
generalmente adatte ad essere usate con JACK e Ardour per altri motivi.
|
|
||||||
|
|
||||||
Ad oggi, Ardour ha girato con:
|
|
||||||
|
|
||||||
RME Hammerfall (Digi9652) (26 canali in, 26 canali out)
|
|
||||||
RME Hammerfall Light (Digi9636) (18 canali in, 18 canali out)
|
|
||||||
Midiman Delta series (ice1712 chipset) (12 canali in, 10 canali out)
|
|
||||||
|
|
||||||
Diverse interfacce di fascia consumer, solitamente a 2 canali in,
|
|
||||||
2/4 canali out, incluse:
|
|
||||||
|
|
||||||
Hoontech 4Dwave-NX (Trident chipset)
|
|
||||||
Ensoniq 5880
|
|
||||||
Soundblaster 32
|
|
||||||
Soundblaster 64
|
|
||||||
Creative SBLive64
|
|
||||||
|
|
||||||
Al momento sembra funzionare con tutte le schede supportate da ALSA,
|
|
||||||
che e` l'obiettivo proposto.
|
|
||||||
|
|
||||||
**** SEGNALARE UN BUG ************************************************
|
|
||||||
|
|
||||||
I bug vanno segnalati ad http://ardour.org/mantis/ . Dove è
|
|
||||||
probabile che vengano presi in considerazione e trattati. Prima di
|
|
||||||
segnalare un bug è opportuno accertarsi che non sia gia` stato
|
|
||||||
segnalato e/o eliminato in cvs.
|
|
||||||
|
|
||||||
**** COMPILAZIONE E INSTALLAZIONE ************************************
|
|
||||||
|
|
||||||
1) GNU AUTOCONF RATIONALIZATION
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
GNU autoconf e` un sistema intelligente, ma ha una grande lacuna.
|
|
||||||
Di default, autoconf (adesso aclocal) controlla UNA sola directory
|
|
||||||
alla ricerca dei file di cui ha bisogno. Sarebbe OK se non venissero
|
|
||||||
installati altri pacchetti che qualche volta mettono i loro file di
|
|
||||||
autoconf in /usr/local/lib/share/aclocal e altre volte in
|
|
||||||
/usr/lib/share/aclocal.
|
|
||||||
|
|
||||||
Succede che autoconf non riesce a trovare i file di cui ha bisogno per
|
|
||||||
costruire Ardour, dal momento che molta gente ha una moltitudine di
|
|
||||||
librerie installate dalla distribuzione (i file di autoconf finiscono
|
|
||||||
in /usr/local/lib...) e dai pacchetti pre-costruiti (in questo caso i
|
|
||||||
pacchetti finiscono solitamente in /usr/lib...).
|
|
||||||
|
|
||||||
Per la vostra tranquillita`, vi raccomando di eseguire i seguenti passi
|
|
||||||
da root. Controllate i contenuti di entrambe le direcroty prima di
|
|
||||||
eseguire questi comandi in modo da non cancellare accidentalmente la
|
|
||||||
corretta versione di un file autoconf:
|
|
||||||
|
|
||||||
* Se avete esntrambe le directory:
|
|
||||||
|
|
||||||
cd /usr/lib/share/aclocal
|
|
||||||
cp *.m4 /usr/local/lib/share/aclocal
|
|
||||||
cd ..
|
|
||||||
rm -rf aclocal
|
|
||||||
ln -s /usr/local/lib/share/aclocal .
|
|
||||||
|
|
||||||
* Se avete solo /usr/lib/share/aclocal
|
|
||||||
|
|
||||||
cd /usr/local/lib
|
|
||||||
ln -s /usr/lib/share/aclocal .
|
|
||||||
|
|
||||||
Alcune distribuzioni hanno aclocal in altre directory. YMMV.
|
|
||||||
|
|
||||||
2. COMPILARE
|
|
||||||
------------
|
|
||||||
|
|
||||||
Prima di compilare Ardour, accertatevi di avere installato:
|
|
||||||
|
|
||||||
* Strumenti:
|
|
||||||
|
|
||||||
gcc/g++ 2.95.3 o superiore (funziona anche gcc/g++ 3.x)
|
|
||||||
autoconf 2.52 o superiore
|
|
||||||
automake 1.5 o superiore
|
|
||||||
libtool 1.4.2 o superiore
|
|
||||||
gettext 0.11.5 o superiore
|
|
||||||
pkgconfig 0.8.0 o superiore
|
|
||||||
http://www.freedesktop.org/software/pkgconfig/
|
|
||||||
|
|
||||||
sono necessari anche lex e yacc
|
|
||||||
andra` bene qualsiasi versione di bison >= 1.35
|
|
||||||
|
|
||||||
* Librerie:
|
|
||||||
|
|
||||||
Le versioni raccomandate, quando necessario, sono presenti sotto le
|
|
||||||
versioni generiche.
|
|
||||||
|
|
||||||
ALSA 0.9.X (CVS o snapshot release) (http://www.alsa-project.org)
|
|
||||||
|
|
||||||
JACK (http://jackit.sourceforge.net)
|
|
||||||
|
|
||||||
libxml2 2.5.X (http://xmlsoft.org/)
|
|
||||||
|
|
||||||
libart_lgpl 2.3.X
|
|
||||||
|
|
||||||
- available as part of gnome-libs, which you may already
|
|
||||||
have on your system.
|
|
||||||
|
|
||||||
- also available via download from GNOME source FTP sites.
|
|
||||||
- see ftp://ftp.gnome.org/pub/GNOME/MIRRORS.htmland then
|
|
||||||
follow to sources/libart_lgpl
|
|
||||||
|
|
||||||
glib 1.2 (http://www.gtk.org)
|
|
||||||
glib-1.2.8 (inclusa nella maggior parte delle distribuzioni)
|
|
||||||
|
|
||||||
GTK+ 1.2 (http://www.gtk.org)
|
|
||||||
gtk+-1.2.8 (inclusa nella maggior parte delle distribuzioni)
|
|
||||||
|
|
||||||
libsndfile (http://www.zip.com.au/~erikd/libsndfile)
|
|
||||||
libsndfile-0.0-28
|
|
||||||
|
|
||||||
libsamplerate (http://www.mega-nerd.com/SRC/)
|
|
||||||
libsamplerate 0.0.13 o superiore
|
|
||||||
|
|
||||||
the LADSPA SDK (http://www.ladspa.org/)
|
|
||||||
(Guardate sotto)
|
|
||||||
|
|
||||||
raptor (http://www.redland.opensource.ac.uk/raptor/)
|
|
||||||
|
|
||||||
lrdf (richiede raptor) (http://plugin.org.uk/lrdf/)
|
|
||||||
liblrdf 0.3.1 or higher
|
|
||||||
|
|
||||||
Ottenere LADSPA
|
|
||||||
|
|
||||||
Nota: La Linux Audio Developers Simple Plugin API (LADSPA) consiste
|
|
||||||
in realta` di un semplice file header, già incluso nei sorgenti di
|
|
||||||
Ardour
|
|
||||||
|
|
||||||
Vorrete usare anche i suoi plugins, percui andate oltre e scaricate
|
|
||||||
l' intero pacchetto (non e` grande), da www.ladspa.org.
|
|
||||||
|
|
||||||
Vi raccomando di scaricare un eccelente set di plugins per LADSPA,
|
|
||||||
programmati da Steve Harris. Il link e` http://plugin.org.uk/.
|
|
||||||
Trasformeranno Ardour in una appicazione vermante utile. Altri plugins
|
|
||||||
di LADSPA sono in programmazione percui tenete d' occhio la Linux
|
|
||||||
Audio Development mailing list.
|
|
||||||
|
|
||||||
2A) COMPILARE DA CVS
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
Posizionatevi nel path in cui volete copiare i CVS di Ardour (la '%'
|
|
||||||
e` il vostro shell prompt):
|
|
||||||
|
|
||||||
% cd /usr/local/src # e` un esempio, potete scegliere un path qualsiasi
|
|
||||||
% cvs -d:pserver:anoncvs@ardour.org:/cvsroot/ardour login
|
|
||||||
# (premete enter/return quando vi sara` chiesta
|
|
||||||
la password)
|
|
||||||
% cvs -d:pserver:anoncvs@ardour.org:/cvsroot/ardour -z3 co ardour
|
|
||||||
|
|
||||||
2A.1) CHE TIPO DI COMPILAZIONE?
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
Il prossimo passo è quello di decidere se si vuole una installazione per
|
|
||||||
sviluppatori o per semplici utenti. Se siete sviluppatori, potrebbe essere
|
|
||||||
una buona idea compilare libardour come libreria condivisa, cosi` da evitare
|
|
||||||
di collegare l'eseguibile ogni volta che cambiate versione di libreria.
|
|
||||||
Se siete semplici utenti, questo renderebbe solo la vita più difficile.
|
|
||||||
In caso siate sviluppatori dunque eseguite:
|
|
||||||
|
|
||||||
touch ardour/libs/ardour/BUILD_FOR_DEVELOPMENT
|
|
||||||
|
|
||||||
Questo fara` si` che libardour sia compilata come libreria condivisa. Dovreste
|
|
||||||
conseguentemente passare il parametro --enable-development-build a configure.
|
|
||||||
|
|
||||||
2A.2) PREPARARE IL SISTEMA PER LA COMPILAZIONE
|
|
||||||
----------------------------------------------
|
|
||||||
|
|
||||||
Ora costruite i file autoconf/automake:
|
|
||||||
|
|
||||||
% cd ardour
|
|
||||||
% sh autogen.sh
|
|
||||||
|
|
||||||
Andate al passo 3.
|
|
||||||
|
|
||||||
2B) COMPILARE DA UN TARBALL
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
Come al solito: prelevate e scompattate il tarball. La directory creata,
|
|
||||||
ardour-<versione>, e` chiamata piu` sotto "$AD".
|
|
||||||
|
|
||||||
3) COME COMPILARE
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
./configure (con tutte i parametri che vorrete passare)
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
||||||
Se siete uno sviluppatore che intende lavorare su libardour, potreste
|
|
||||||
voler usare il parametro --enable-development-build, che colleghera`
|
|
||||||
dinamicamente l'eseguibile a libardour, risparmiando molto tempo
|
|
||||||
nell'evitare un collegamento statico da effettuare ogni volta che si
|
|
||||||
operano cambiamenti su libardour.
|
|
||||||
|
|
||||||
Se volete compilare ardour in modo che possiate farne il `debugging`,
|
|
||||||
dovreste usare anche il parametro --disable-optimize. Senza questo
|
|
||||||
Ardour viene compilato con ottimizzazioni estreme ed il risultato non
|
|
||||||
può essere oggetto di `debugging` in modo efficace.
|
|
||||||
|
|
||||||
Come tutti gli script di configurazione, se non volete che
|
|
||||||
l' installazione avvenga ne "solito posto", aggiungete un --prefix al
|
|
||||||
comando ./configure. Potreste anche considerare di aggiungere un
|
|
||||||
parametro --sysconfdir, dal momento che `make install` tenterà di
|
|
||||||
installare tutti i file di configurazione in un percorso che tiene
|
|
||||||
conti di questo parametro.
|
|
||||||
|
|
||||||
La compilazione ci mette un po`. Eseguendo make -j3 su un dual PII-450
|
|
||||||
l'intero processo impiega circa 10-15 minuti.
|
|
||||||
|
|
||||||
4. ESEGUIRE ARDOUR
|
|
||||||
------------------
|
|
||||||
|
|
||||||
NOTA: Dovete prima di tutto eseguire il server JACK.
|
|
||||||
----------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
Se avete eseguito "make install", allora potete digitare "ardour" e
|
|
||||||
qualcosa succedera`. Col comando "ardour --help" otterrete una
|
|
||||||
lista delle possibili opzioni.
|
|
|
@ -1,108 +0,0 @@
|
||||||
ARDOUR README.ru
|
|
||||||
|
|
||||||
Paul Davis <paul@linuxaudiosystems.com> June 2003
|
|
||||||
Russian translation by Igor Blinov <pitstop@nm.ru> November 2003
|
|
||||||
|
|
||||||
Вас приветствует Ardour. Эта программа находится в стадии разработки,
|
|
||||||
но уже может использоваться на практике, к тому же полезно когда
|
|
||||||
другие люди тестируют её, если случается (почти уверен!) исправляют
|
|
||||||
ошибки и расширяют функциональные возможности.
|
|
||||||
|
|
||||||
**** БЕЗОПАСНОСТЬ ***************************************************
|
|
||||||
|
|
||||||
Работа Ardour требует минимальное время реакции на события (low latency),
|
|
||||||
что требует использования POSIX-подсистемы реального времени (POSIX
|
|
||||||
Real-Time Scheduling) и вдобавок блокирует всю используемую память
|
|
||||||
в ОЗУ (RAM). Эти требования выполнимы, только если Ardour запущен с
|
|
||||||
привилегиями пользователя root.
|
|
||||||
|
|
||||||
С другой стороны всё не так уж и плохо. Если вы не можете установить
|
|
||||||
флаг setuid root (который помогает не во всех случаях), тогда
|
|
||||||
необходимо повысить свои привилегии до root для того, чтобы с этими
|
|
||||||
правами запустить Ardour. Если вы уже имеете доступ как пользователь
|
|
||||||
root, в таком случае запуск Ardour будет наименьшей проблемой. Итак.
|
|
||||||
В работе используются некоторые возможности ядра linux, которые не
|
|
||||||
способствует безопасности, так как они могут помочь злоумышленнику
|
|
||||||
в его планах.
|
|
||||||
|
|
||||||
В другом варианте вы можете запустить Ardour без приоритета реального
|
|
||||||
времени и забыть про сказанное выше. Однако, это неудобно для ситуаций,
|
|
||||||
в которых требуется малое время задержки сигнала, что желательно в обычной
|
|
||||||
студийной работе. Замечу, что это не так важно, если ваше аппаратное
|
|
||||||
обеспечение поддерживает функцию "hardware monitoring" - в этом случае
|
|
||||||
возросшая задержка сигнала увеличивает время реакции при воздействии
|
|
||||||
на управляющие элементы графического интерфейса Ardour, зато контроль
|
|
||||||
(мониторинг) сигнала в процессе записи будет замечательным.
|
|
||||||
|
|
||||||
**** ТРЕБОВАНИЯ К АППАРАТУРЕ ****************************************
|
|
||||||
|
|
||||||
Ardour в своей работе для ввода/вывода аудиоданных использует JACK,
|
|
||||||
который обеспечивает идеальное подключение приложений к ресурсам
|
|
||||||
аппаратуры для работы со звуком. Мы не будем здесь обсуждать JACK,
|
|
||||||
но сказанное ниже позволит избежать недоразумений:
|
|
||||||
|
|
||||||
Несмотря на то, что JACK работает через ALSA 0.9.0 API, он использует
|
|
||||||
его таким образом, что другие приложения в этот момент не могут
|
|
||||||
работать с ним, к тому же задействуются некоторые особенности
|
|
||||||
аппаратуры, неиспользуемые другими приложениями. Полная совместимость
|
|
||||||
со всеми звуковыми картами, поддерживаемыми ALSA, является достижимой
|
|
||||||
и очень желательной целью. Следствием этого может явиться поддержка
|
|
||||||
оборудования с возможностями окружающего звука (surround sound).
|
|
||||||
Однако, моя основная цель - это построение на основе JACK
|
|
||||||
профессионального звукового сервера с Ardour в качестве не менее
|
|
||||||
профессиональной звукозаписывающей системы (HDR). Если это окажется
|
|
||||||
полезным для владельцев обычных 2/4 канальных звуковых карт, то это
|
|
||||||
великолепно, но я не заостряю внимание на этом.
|
|
||||||
|
|
||||||
Следующим важным моментом является то, что ваша звуковая карта должна
|
|
||||||
поддерживать полнодуплексный режим работы, причём одновременно в одном
|
|
||||||
формате аудиоданных, как на ввод, так и на вывод. Так, к примеру, карта
|
|
||||||
SoundBlaster AWE не может использоваться с JACK в полнодуплексном
|
|
||||||
режиме - ею поддерживается только такой полнодуплексный режим, в котором
|
|
||||||
одно из двух направлений (запись или воспроизведение сигнала) работает
|
|
||||||
в формате 8 бит данных, а другое в формате 16 бит. Очень немногие карты
|
|
||||||
имеют это ограничение, и в этом случае они обычно не подходят для работы
|
|
||||||
с такими приложениями как JACK или Ardour.
|
|
||||||
|
|
||||||
На сегодняшний день, JACK работает со следующими звуковыми картами:
|
|
||||||
|
|
||||||
RME Hammerfall (Digi9652) (26 входов, 26 выходов)
|
|
||||||
RME Hammerfall Light (Digi9636) (18 входов, 18 выходов)
|
|
||||||
Midiman Delta series (ice1712 chipset) (12 входов, 10 выходов)
|
|
||||||
|
|
||||||
широко распространённые звуковые карты, обычно 2 входных канала,
|
|
||||||
2/4 выходных канала, включая:
|
|
||||||
|
|
||||||
Hoontech 4Dwave-NX (Trident chipset)
|
|
||||||
Ensoniq 5880
|
|
||||||
Soundblaster 32
|
|
||||||
Soundblaster 64
|
|
||||||
Creative SBLive64
|
|
||||||
|
|
||||||
и многие другие.
|
|
||||||
|
|
||||||
Впоследствии он будет работать со всеми звуковыми картами, поддерживаемыми
|
|
||||||
ALSA. Это одно из направлений разработки.
|
|
||||||
|
|
||||||
**********************************************************************
|
|
||||||
|
|
||||||
СООБЩЕНИЯ ОБ ОШИБКАХ
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
Чтобы сообщить об обнаруженых вами ошибках в работе программы воспользуйтесь
|
|
||||||
ссылкой http://ardour.org/mantis/ . Возможно о них было сообщено ранее.
|
|
||||||
Пожалуйста, проверьте существующие сообщения, чтобы убедиться в том, что
|
|
||||||
об обнаруженной вами ошибке уже не сообщалось и/или она не исправлена в CVS.
|
|
||||||
|
|
||||||
СБОРКА ARDOUR
|
|
||||||
-------------
|
|
||||||
Подробное описание в файле "BUILD".
|
|
||||||
|
|
||||||
ЗАПУСК ARDOUR
|
|
||||||
-------------
|
|
||||||
|
|
||||||
ЗАМЕЧАНИЕ: Вы должны запустить JACK сервер прежде, чем откроете Ardour.
|
|
||||||
------------------------------------------------------------
|
|
||||||
Если вы выполнили команду "make install", тогда набрав на клавиатуре
|
|
||||||
"ardour" получите желаемый результат. "ardour --help" выводит список
|
|
||||||
доступных ключей программы.
|
|
|
@ -1,232 +0,0 @@
|
||||||
ARDOUR TO-DO: $Id$
|
|
||||||
----------------------------------------------------------------------
|
|
||||||
|
|
||||||
ITEMS REQUIRED FOR 1.0
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
* Automation
|
|
||||||
- must be able to apply a fade to a selected range
|
|
||||||
* Drag handles for region/xfade curves
|
|
||||||
|
|
||||||
* ensure I/O port is selected in connection dialog
|
|
||||||
* add a small buffer near the left edge of the editor canvas to
|
|
||||||
make mouse operations near that edge easier to get right
|
|
||||||
* context menus everywhere
|
|
||||||
- edit groups
|
|
||||||
- mix groups
|
|
||||||
- track lists
|
|
||||||
- region list
|
|
||||||
- click button
|
|
||||||
|
|
||||||
(miscellany)
|
|
||||||
|
|
||||||
* propagate name changes to equivalent regions in region list
|
|
||||||
* destroy region removes equivalent regions from region list
|
|
||||||
* fix edit group visibility toggle
|
|
||||||
|
|
||||||
META ITEMS
|
|
||||||
----------
|
|
||||||
|
|
||||||
* there must be a manual
|
|
||||||
|
|
||||||
POST 1.0 WORK
|
|
||||||
-------------
|
|
||||||
* make region state of a playlist be position,length,layer, and save
|
|
||||||
that for BoundsChange or Layer change.
|
|
||||||
* automation modes (from protools):
|
|
||||||
- relative trim
|
|
||||||
- etc.
|
|
||||||
* 2-step file expunge
|
|
||||||
* allow sends/inserts and perhaps plugins to be named
|
|
||||||
* popup a big panner
|
|
||||||
* mix groups (adding new kinds of relationships to the groups, as per
|
|
||||||
old ideas from tom pincince)
|
|
||||||
* add meter range control
|
|
||||||
* change meter tap point
|
|
||||||
* cassowary-based constraints for edit groups
|
|
||||||
* serializing the edit history (i have a plan for this now)
|
|
||||||
* gtk2 port
|
|
||||||
* like, totally rock, dude.
|
|
||||||
* make rulers reorderable
|
|
||||||
* set of useful click sounds
|
|
||||||
* use snapshot mechanism to provide persistent undo/redo
|
|
||||||
- needs better integration of automation state
|
|
||||||
into session state.
|
|
||||||
* duplicate-with-gap
|
|
||||||
* panner multichannel backend code
|
|
||||||
* select new port display when its created
|
|
||||||
* copy/paste io configurations
|
|
||||||
* Better temporal navigation
|
|
||||||
* new region via plugin.
|
|
||||||
* digital input trim.
|
|
||||||
* possibly allow metering max-level adjustment at run-time
|
|
||||||
* use multi-loop-take ala Samplitude/PT
|
|
||||||
* song mode autonames for locate points
|
|
||||||
intro, verse1, verse N, chorus, bridge, outro/tag
|
|
||||||
* different clock display modes:
|
|
||||||
elapsed
|
|
||||||
remaining
|
|
||||||
time since location start
|
|
||||||
time till location end
|
|
||||||
* handle missing audio sources when loading
|
|
||||||
* option/action to snap selection to zero crossings
|
|
||||||
* pitch shift?
|
|
||||||
|
|
||||||
- Some global solo routing buttons and a sine/noise generator to
|
|
||||||
test all the connections. Possibly a talkback input and
|
|
||||||
control. Pretty much like the equivalent strip on a analog
|
|
||||||
console.
|
|
||||||
|
|
||||||
WAITING FOR GTK+/gtkmm 2.0:
|
|
||||||
---------------------------
|
|
||||||
general gtkmmext::ui solution to delete_event in recursive Gtk::Main::run()
|
|
||||||
float<->ulong conversion in a GtkAdjustment (GTK2 uses doubles)
|
|
||||||
* fix the problems caused by range (float) limits on Locations.
|
|
||||||
figure out how to get frames/timebars to extend to max_frames.
|
|
||||||
|
|
||||||
UNDO ITEMS
|
|
||||||
----------
|
|
||||||
track height?
|
|
||||||
capture?
|
|
||||||
I/O connection state, etc.
|
|
||||||
|
|
||||||
BUGS
|
|
||||||
----
|
|
||||||
|
|
||||||
initial Tempo marker can be dragged
|
|
||||||
duplicate region names can be created automatically
|
|
||||||
|
|
||||||
THREAD QUESTIONS
|
|
||||||
----------------
|
|
||||||
- which thread should:
|
|
||||||
- change playlists on a diskstream?
|
|
||||||
- change diskstreams on a track? (we don't support that in the UI)
|
|
||||||
|
|
||||||
- can we reliably construct a copy of the RT state, instead of
|
|
||||||
using locks everywhere?
|
|
||||||
|
|
||||||
NOTES FROM THE MAILING LISTS
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
-- gerard --
|
|
||||||
|
|
||||||
Region gain has some bugs. They dissappear when trimming. Don't always
|
|
||||||
playback correctly.
|
|
||||||
|
|
||||||
I had some strange things with a chunk where the last region seemed to use
|
|
||||||
the audio file as a peakfile. It played back correctly, but it showed up
|
|
||||||
frames_per_peak too large.
|
|
||||||
|
|
||||||
-- gerard2 ---
|
|
||||||
|
|
||||||
Automation.
|
|
||||||
I see that automation editing is in the TODO. How about the whole deal:
|
|
||||||
Changing it during aplay. relative or absolute, latch (is that the word) or
|
|
||||||
momentary override etc
|
|
||||||
Is this for >1.0 ? It is not that important for me but maybe for some
|
|
||||||
folks...
|
|
||||||
|
|
||||||
Better metering configurability. Post/pre etc.
|
|
||||||
|
|
||||||
Gui interface consistency.
|
|
||||||
|
|
||||||
more keyboard shortcuts for f.i. (are they hard to add?):
|
|
||||||
-arrow keys to move selection from region to region
|
|
||||||
-seperate region. This one can be the same for split region, if there is
|
|
||||||
a range selected seperate, if not split.
|
|
||||||
|
|
||||||
|
|
||||||
Should playhead also snap to grid?
|
|
||||||
|
|
||||||
Adding/removing snapshots through snapshot pane.
|
|
||||||
|
|
||||||
I would prefer to move the pre and post roll adjustments to the options
|
|
||||||
menu, and have a start/end/duration of selection clocks.
|
|
||||||
|
|
||||||
A way to deal with misbehaving plugins. They shouldn't be able to freeze
|
|
||||||
ardour.
|
|
||||||
|
|
||||||
What is the current (and planned) edit-group functionality? It doesn't seem
|
|
||||||
to much.
|
|
||||||
|
|
||||||
-----
|
|
||||||
|
|
||||||
make use of transients a run-time option
|
|
||||||
panning for export
|
|
||||||
|
|
||||||
mute automation event
|
|
||||||
|
|
||||||
region length/end editor clocks don't modify position
|
|
||||||
|
|
||||||
should we allow N-channels regions to be inserted into non-N-channel routes?
|
|
||||||
|
|
||||||
auto-crossfades are unreliable/hard to predict/confusing
|
|
||||||
reset declick curves when doing a region copy (only if auto-crossfading?)
|
|
||||||
|
|
||||||
audio clock editing
|
|
||||||
- make drag work again
|
|
||||||
- use tick field
|
|
||||||
|
|
||||||
post fader plug/inserts get into a very inconsistent state wrt active/not active
|
|
||||||
mixer strip widths are not persistent across state save/restore
|
|
||||||
automation-read updates in mixer-strip in editor
|
|
||||||
don't initiate MIDI binding if there is no MMC control
|
|
||||||
export to audiofile
|
|
||||||
- exports tracks not marked for export (?)
|
|
||||||
- contains clicks/pops even with no SRC/dither (FIXED?)
|
|
||||||
|
|
||||||
timefx region length error (check back with audacity crew)
|
|
||||||
send gain control is clicky.
|
|
||||||
some regionview names don't seem sensitive to canvas events
|
|
||||||
splice mode needs to work correctly all the time, at the right times
|
|
||||||
removing a port then adding a new one can cause duplicate names
|
|
||||||
plugin automation buttons don't update from a plugin signal
|
|
||||||
how to handle multichannel selections
|
|
||||||
apparently selected location on startup of locations window, or
|
|
||||||
when creating new location from selection is *not* selected
|
|
||||||
source/region naming/region list display
|
|
||||||
|
|
||||||
LONG TERM CHECKING
|
|
||||||
------------------
|
|
||||||
RT-ness of all RT-thread STL usage
|
|
||||||
|
|
||||||
GUI DETAILS
|
|
||||||
-----------
|
|
||||||
Use mouse wheel events (button4/5)
|
|
||||||
Remove regions from region list
|
|
||||||
Some location window ops need dbl click, some don't
|
|
||||||
|
|
||||||
|
|
||||||
CHROME
|
|
||||||
------
|
|
||||||
make prompters look nicer still.
|
|
||||||
make ladspa plugin selector look nicer
|
|
||||||
don't popup "no group" when there are no groups (mixer strip).
|
|
||||||
fix bug in Gtkmmext with wrapping on Gtkmmext::ClickBox
|
|
||||||
make region editors look nicer
|
|
||||||
region editor audition button doesn't pop up after audition is finished
|
|
||||||
allow same color for all streamviews
|
|
||||||
|
|
||||||
AUDIO STREAM
|
|
||||||
------------
|
|
||||||
|
|
||||||
[ These are JACK TODO's ]
|
|
||||||
|
|
||||||
* need to ensure that cards like the Hammerfall are really set
|
|
||||||
to the correct sample rate when connected to an external
|
|
||||||
clock source.
|
|
||||||
* ::connect_to_session() should indicate a problem if the
|
|
||||||
sample rate is wrong ....
|
|
||||||
|
|
||||||
MIDI Machine Control
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
* handle stupid Mackie TC buttons
|
|
||||||
* send MMC rec-enable messages
|
|
||||||
* allow control (MMC/Local) selection to work
|
|
||||||
* make sure that MMC ID works
|
|
||||||
|
|
||||||
EDITOR, etc.
|
|
||||||
------------
|
|
||||||
|
|
||||||
* "use location to define selection"
|
|
|
@ -1,27 +0,0 @@
|
||||||
If you would like to see Ardour in your native langauge, please contact
|
|
||||||
the Ardour development mailing list. It's members only, but can be joined
|
|
||||||
at http://ardour.org.
|
|
||||||
|
|
||||||
Many thanks to these translators for making Ardour available in other
|
|
||||||
languages:
|
|
||||||
|
|
||||||
French: Alain Fréhel <alain.frehel@free.fr>
|
|
||||||
Christophe Combelles <ccomb@free.fr>
|
|
||||||
|
|
||||||
German: Karsten Petersen <kapet@kapet.de>
|
|
||||||
|
|
||||||
Italian: Filippo Pappalardo <filippo@email.it>
|
|
||||||
|
|
||||||
Portuguese: Rui Nuno Capela <rncbc@rncbc.org>
|
|
||||||
|
|
||||||
Brazilian Portuguese: Alexander da Franca Fernandes <alexander@nautae.eti.br>
|
|
||||||
Chris Ross <chris@tebibyte.org>
|
|
||||||
|
|
||||||
Russian: Igor Blinov <pitstop@nm.ru>
|
|
||||||
|
|
||||||
Spanish: Alex Krohn <alexkrohn@fastmail.fm>
|
|
||||||
|
|
||||||
Swedish: Petter Sundlöf <petter.sundlof@gmail.com>
|
|
||||||
|
|
||||||
Polish: Piotr Zaryk <pzaryk@gmail.com>
|
|
||||||
|
|
4
README
4
README
|
@ -1,5 +1,3 @@
|
||||||
Please see the DOCUMENTATION directory.
|
Please see the Ardour web site at http://ardour.org/ for all documentation.
|
||||||
|
|
||||||
If you plan to compile ardour from scratch, BUILD is required reading.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
119
SConstruct
119
SConstruct
|
@ -49,6 +49,7 @@ opts.AddOptions(
|
||||||
BoolOption('NLS', 'Set to turn on i18n support', 1),
|
BoolOption('NLS', 'Set to turn on i18n support', 1),
|
||||||
PathOption('PREFIX', 'Set the install "prefix"', '/usr/local'),
|
PathOption('PREFIX', 'Set the install "prefix"', '/usr/local'),
|
||||||
BoolOption('SURFACES', 'Build support for control surfaces', 1),
|
BoolOption('SURFACES', 'Build support for control surfaces', 1),
|
||||||
|
BoolOption('WIIMOTE', 'Build the wiimote control surface', 0),
|
||||||
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('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('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('VERSIONED', 'Add revision information to ardour/gtk executable name inside the build directory', 0),
|
||||||
|
@ -285,9 +286,9 @@ def create_stored_revision (target = None, source = None, env = None):
|
||||||
print "Using packaged svn revision"
|
print "Using packaged svn revision"
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
print "Your source does not include revision information."
|
if not os.path.exists('libs/ardour/ardour/svn_revision.h'):
|
||||||
print "Please check out the code from a repository or use a properly packaged version!"
|
print "This release of ardour is missing libs/ardour/ardour/svn_revision.h. Blame the packager."
|
||||||
sys.exit (-1)
|
sys.exit (-1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
text = "#include <ardour/svn_revision.h>\n"
|
text = "#include <ardour/svn_revision.h>\n"
|
||||||
|
@ -605,6 +606,9 @@ if env['LV2']:
|
||||||
else:
|
else:
|
||||||
print 'LV2 support is not enabled. Build with \'scons LV2=1\' to enable.'
|
print 'LV2 support is not enabled. Build with \'scons LV2=1\' to enable.'
|
||||||
|
|
||||||
|
if not env['WIIMOTE']:
|
||||||
|
print 'WIIMOTE not enabled. Build with \'scons WIIMOTE=1\' to enable support.'
|
||||||
|
|
||||||
libraries['jack'] = LibraryInfo()
|
libraries['jack'] = LibraryInfo()
|
||||||
libraries['jack'].ParseConfig('pkg-config --cflags --libs jack')
|
libraries['jack'].ParseConfig('pkg-config --cflags --libs jack')
|
||||||
|
|
||||||
|
@ -736,8 +740,14 @@ elif ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_6
|
||||||
|
|
||||||
build_host_supports_sse = 0
|
build_host_supports_sse = 0
|
||||||
|
|
||||||
debug_flags.append ("-DARCH_X86")
|
#
|
||||||
opt_flags.append ("-DARCH_X86")
|
# ARCH_X86 means anything in the x86 family from i386 to x86_64
|
||||||
|
# USE_X86_64_ASM is used to distingush 32 and 64 bit assembler
|
||||||
|
#
|
||||||
|
|
||||||
|
if (re.search ("(i[0-9]86|x86_64)", config[config_cpu]) != None):
|
||||||
|
debug_flags.append ("-DARCH_X86")
|
||||||
|
opt_flags.append ("-DARCH_X86")
|
||||||
|
|
||||||
if config[config_kernel] == 'linux' :
|
if config[config_kernel] == 'linux' :
|
||||||
|
|
||||||
|
@ -869,15 +879,15 @@ if env['LIBLO']:
|
||||||
def prep_libcheck(topenv, libinfo):
|
def prep_libcheck(topenv, libinfo):
|
||||||
if topenv['IS_OSX']:
|
if topenv['IS_OSX']:
|
||||||
#
|
#
|
||||||
# rationale: GTK-Quartz uses jhbuild and installs to $HOME/gtk/inst by default.
|
# rationale: GTK-Quartz uses jhbuild and installs to ~/gtk/inst by default.
|
||||||
# All libraries needed should be built against this location
|
# All libraries needed should be built against this location
|
||||||
|
|
||||||
if topenv['GTKOSX']:
|
if topenv['GTKOSX']:
|
||||||
GTKROOT = os.path.expanduser ('~/gtk/inst')
|
GTKROOT = os.path.expanduser ('~/gtk/inst')
|
||||||
libinfo.Append(CPPPATH= GTKROOT + "/include", LIBPATH= GTKROOT + "/lib")
|
libinfo.Append(CPPPATH= GTKROOT + "/include", LIBPATH= GTKROOT + "/lib")
|
||||||
libinfo.Append(CXXFLAGS="-I" + GTKROOT + "/include", LINKFLAGS="-L" + GTKROOT + "/lib")
|
libinfo.Append(CXXFLAGS="-I" + GTKROOT + "/include", LINKFLAGS="-L" + GTKROOT + "/lib")
|
||||||
#libinfo.Append(CPPPATH="/opt/local/include", LIBPATH="/opt/local/lib")
|
|
||||||
#libinfo.Append(CXXFLAGS="-I/opt/local/include", LINKFLAGS="-L/opt/local/lib")
|
|
||||||
|
|
||||||
prep_libcheck(env, env)
|
prep_libcheck(env, env)
|
||||||
|
|
||||||
|
@ -934,6 +944,45 @@ else:
|
||||||
|
|
||||||
libraries['usb'] = conf.Finish ()
|
libraries['usb'] = conf.Finish ()
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check for wiimote dependencies
|
||||||
|
|
||||||
|
if env['WIIMOTE']:
|
||||||
|
wiimoteConf = env.Configure ( )
|
||||||
|
if not wiimoteConf.CheckHeader('cwiid.h'):
|
||||||
|
print 'WIIMOTE configured but you are missing libcwiid!'
|
||||||
|
sys.exit(1)
|
||||||
|
if not wiimoteConf.CheckHeader('bluetooth/bluetooth.h'):
|
||||||
|
print 'WIIMOTE configured but you are missing the libbluetooth headers which you need to compile wiimote support!'
|
||||||
|
sys.exit(1)
|
||||||
|
wiimoteConf.Finish()
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check for FLAC
|
||||||
|
|
||||||
|
libraries['flac'] = LibraryInfo ()
|
||||||
|
prep_libcheck(env, libraries['flac'])
|
||||||
|
libraries['flac'].Append(CPPPATH="/usr/local/include", LIBPATH="/usr/local/lib")
|
||||||
|
|
||||||
|
#
|
||||||
|
# june 1st 2007: look for a function that is in FLAC 1.1.2 and not in later versions
|
||||||
|
# since the version of libsndfile we have internally does not support
|
||||||
|
# the new API that libFLAC has adopted
|
||||||
|
#
|
||||||
|
|
||||||
|
conf = Configure (libraries['flac'])
|
||||||
|
if conf.CheckLib ('FLAC', 'FLAC__seekable_stream_decoder_init', language='CXX'):
|
||||||
|
conf.env.Append(CCFLAGS='-DHAVE_FLAC')
|
||||||
|
use_flac = True
|
||||||
|
else:
|
||||||
|
use_flac = False
|
||||||
|
|
||||||
|
libraries['flac'] = conf.Finish ()
|
||||||
|
|
||||||
|
# or if that fails...
|
||||||
|
#libraries['flac'] = LibraryInfo (LIBS='FLAC')
|
||||||
|
|
||||||
# boost (we don't link against boost, just use some header files)
|
# boost (we don't link against boost, just use some header files)
|
||||||
|
|
||||||
libraries['boost'] = LibraryInfo ()
|
libraries['boost'] = LibraryInfo ()
|
||||||
|
@ -1040,6 +1089,11 @@ else:
|
||||||
|
|
||||||
env = conf.Finish()
|
env = conf.Finish()
|
||||||
|
|
||||||
|
if env['GTKOSX']:
|
||||||
|
clearlooks_version = 'libs/clearlooks-newer'
|
||||||
|
else:
|
||||||
|
clearlooks_version = 'libs/clearlooks-older'
|
||||||
|
|
||||||
if env['SYSLIBS']:
|
if env['SYSLIBS']:
|
||||||
|
|
||||||
syslibdeps = \
|
syslibdeps = \
|
||||||
|
@ -1124,7 +1178,7 @@ if env['SYSLIBS']:
|
||||||
# 'libs/flowcanvas',
|
# 'libs/flowcanvas',
|
||||||
'libs/gtkmm2ext',
|
'libs/gtkmm2ext',
|
||||||
'gtk2_ardour',
|
'gtk2_ardour',
|
||||||
'libs/clearlooks'
|
clearlooks_version
|
||||||
]
|
]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -1143,6 +1197,9 @@ else:
|
||||||
libraries['pangomm'] = LibraryInfo(LIBS='pangomm',
|
libraries['pangomm'] = LibraryInfo(LIBS='pangomm',
|
||||||
LIBPATH='#libs/gtkmm2/pango',
|
LIBPATH='#libs/gtkmm2/pango',
|
||||||
CPPPATH='#libs/gtkmm2/pango')
|
CPPPATH='#libs/gtkmm2/pango')
|
||||||
|
libraries['cairomm'] = LibraryInfo(LIBS='cairomm',
|
||||||
|
LIBPATH='#libs/cairomm',
|
||||||
|
CPPPATH='#libs/cairomm')
|
||||||
libraries['atkmm'] = LibraryInfo(LIBS='atkmm',
|
libraries['atkmm'] = LibraryInfo(LIBS='atkmm',
|
||||||
LIBPATH='#libs/gtkmm2/atk',
|
LIBPATH='#libs/gtkmm2/atk',
|
||||||
CPPPATH='#libs/gtkmm2/atk')
|
CPPPATH='#libs/gtkmm2/atk')
|
||||||
|
@ -1206,22 +1263,23 @@ else:
|
||||||
'libs/libgnomecanvasmm',
|
'libs/libgnomecanvasmm',
|
||||||
'libs/gtkmm2ext',
|
'libs/gtkmm2ext',
|
||||||
'gtk2_ardour',
|
'gtk2_ardour',
|
||||||
'libs/clearlooks',
|
'libs/cairomm',
|
||||||
'libs/cairomm'
|
clearlooks_version
|
||||||
]
|
]
|
||||||
|
|
||||||
#
|
#
|
||||||
# * always build the LGPL control protocol lib, since we link against it from libardour
|
# * always build the LGPL control protocol lib, since we link against it from libardour
|
||||||
# * ditto for generic MIDI
|
# * ditto for generic MIDI
|
||||||
# * tranzport checks whether it should build internally, but we need here so that
|
# * tranzport & wiimote check whether they should build internally, but we need them here
|
||||||
# its included in the tarball
|
# so that they are included in the tarball
|
||||||
#
|
#
|
||||||
|
|
||||||
surface_subdirs = [ 'libs/surfaces/control_protocol',
|
surface_subdirs = [ 'libs/surfaces/control_protocol',
|
||||||
'libs/surfaces/generic_midi',
|
'libs/surfaces/generic_midi',
|
||||||
'libs/surfaces/tranzport',
|
'libs/surfaces/tranzport',
|
||||||
'libs/surfaces/mackie',
|
'libs/surfaces/mackie',
|
||||||
'libs/surfaces/powermate'
|
'libs/surfaces/powermate',
|
||||||
|
'libs/surfaces/wiimote'
|
||||||
]
|
]
|
||||||
|
|
||||||
if env['SURFACES']:
|
if env['SURFACES']:
|
||||||
|
@ -1337,6 +1395,21 @@ if not conf.CheckFunc('posix_memalign'):
|
||||||
|
|
||||||
env = conf.Finish()
|
env = conf.Finish()
|
||||||
|
|
||||||
|
# Which GTK tooltips API
|
||||||
|
|
||||||
|
gtktestenv = env.Clone ()
|
||||||
|
gtktestenv.Merge ([
|
||||||
|
libraries['gtk2']
|
||||||
|
])
|
||||||
|
|
||||||
|
conf = gtktestenv.Configure ()
|
||||||
|
|
||||||
|
if conf.CheckFunc('gtk_widget_set_tooltip_text'):
|
||||||
|
env.Append (CXXFLAGS='-DGTK_NEW_TOOLTIP_API')
|
||||||
|
|
||||||
|
conf.Finish ()
|
||||||
|
|
||||||
|
|
||||||
# generate the per-user and system rc files from the same source
|
# generate the per-user and system rc files from the same source
|
||||||
|
|
||||||
sysrcbuild = env.SubstInFile ('ardour_system.rc','ardour.rc.in', SUBST_DICT = subst_dict)
|
sysrcbuild = env.SubstInFile ('ardour_system.rc','ardour.rc.in', SUBST_DICT = subst_dict)
|
||||||
|
@ -1384,12 +1457,10 @@ env.Distribute (env['DISTTREE'],
|
||||||
'icons/icon/ardour_icon_tango_48px_blue.png',
|
'icons/icon/ardour_icon_tango_48px_blue.png',
|
||||||
'icons/icon/ardour_icon_tango_48px_red.png'
|
'icons/icon/ardour_icon_tango_48px_red.png'
|
||||||
] +
|
] +
|
||||||
glob.glob ('DOCUMENTATION/AUTHORS*') +
|
glob.glob ('ardour.1*') +
|
||||||
glob.glob ('DOCUMENTATION/CONTRIBUTORS*') +
|
glob.glob ('libs/clearlooks-newer/*.c') +
|
||||||
glob.glob ('DOCUMENTATION/TRANSLATORS*') +
|
glob.glob ('libs/clearlooks-newer/*.h') +
|
||||||
glob.glob ('DOCUMENTATION/BUILD*') +
|
glob.glob ('libs/clearlooks-newer/SConscript')
|
||||||
glob.glob ('DOCUMENTATION/FAQ*') +
|
|
||||||
glob.glob ('DOCUMENTATION/README*')
|
|
||||||
)
|
)
|
||||||
|
|
||||||
srcdist = env.Tarball(env['TARBALL'], [ env['DISTTREE'], the_revision ])
|
srcdist = env.Tarball(env['TARBALL'], [ env['DISTTREE'], the_revision ])
|
||||||
|
|
|
@ -39,13 +39,33 @@
|
||||||
<Option name="periodic-safety-backups" value="1"/>
|
<Option name="periodic-safety-backups" value="1"/>
|
||||||
<Option name="periodic-safety-backup-interval" value="120"/>
|
<Option name="periodic-safety-backup-interval" value="120"/>
|
||||||
<Option name="show-track-meters" value="1"/>
|
<Option name="show-track-meters" value="1"/>
|
||||||
<Option name="default-narrow_ms" value="0"/>
|
<Option name="default-narrow_ms" value="0"/>
|
||||||
<Option name="smpte-format" value="6"/>
|
<Option name="smpte-format" value="6"/>
|
||||||
<Option name="font-scale" value="102400"/>
|
<Option name="font-scale" value="102400"/>
|
||||||
|
<Option name="auto-return" value="1"/>
|
||||||
|
<Option name="solo-latched" value="0"/>
|
||||||
|
<Option name="link-region-and-track-selection" value="1"/>
|
||||||
|
<Option name="send-mtc" value="1"/>
|
||||||
|
<Option name="tape-machine-mode" value="1"/>
|
||||||
|
<Option name="monitoring-model" value="1"/>
|
||||||
</Config>
|
</Config>
|
||||||
|
|
||||||
<extra>
|
<extra>
|
||||||
<RulerVisibility smpte="yes" bbt="yes" frames="no" minsec="no" tempo="yes" meter="yes" marker="yes" rangemarker="no" transportmarker="yes" cdmarker="no"/>
|
<RulerVisibility smpte="yes" bbt="yes" frames="no" minsec="no" tempo="yes" meter="yes" marker="yes" rangemarker="no" transportmarker="yes" cdmarker="no"/>
|
||||||
<Keyboard edit-button="3" edit-modifier="4" delete-button="3" delete-modifier="1" snap-modifier="32"/>
|
<Keyboard edit-button="3" edit-modifier="4" delete-button="3" delete-modifier="1" snap-modifier="32"/>
|
||||||
|
<AudioSetup>
|
||||||
|
<periods val="2"/>
|
||||||
|
<priority val="60"/>
|
||||||
|
<ports val="256"/>
|
||||||
|
<realtime val="1"/>
|
||||||
|
<samplerate val="44100Hz"/>
|
||||||
|
<periodsize val="256"/>
|
||||||
|
<driver val="CoreAudio"/>
|
||||||
|
<interface val="Aggregate Device"/>
|
||||||
|
<inputdevice val="Aggregate Device"/>
|
||||||
|
<outputdevice val="Aggregate Device"/>
|
||||||
|
</AudioSetup>
|
||||||
|
|
||||||
</extra>
|
</extra>
|
||||||
</Ardour>
|
</Ardour>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,214 @@
|
||||||
|
; ardour-2.2 GtkAccelMap rc-file -*- scheme -*-
|
||||||
|
; this file is a hand-edited map that is processed by scons
|
||||||
|
; to produce a real accelmap.
|
||||||
|
;
|
||||||
|
|
||||||
|
;; punctuation
|
||||||
|
(gtk_accel_path "<Actions>/Editor/center-playhead" "Escape")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>period")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/record-roll" "<%PRIMARY%>space")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%PRIMARY%>,")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%SECONDARY%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-end-relative" "<%PRIMARY%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-start" "<%LEVEL4%><%SECONDARY%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%LEVEL4%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%SECONDARY%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "less")
|
||||||
|
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "asciicircum")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>asciicircum")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>space")
|
||||||
|
|
||||||
|
;; letters
|
||||||
|
|
||||||
|
;; OBERE ZEILE
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
|
||||||
|
(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-playhead" "w")
|
||||||
|
;; note that ctrl-w is special and consumed by the keyboard snooper
|
||||||
|
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
|
||||||
|
(gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/export-region" "<%PRIMARY%><%TERTIARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
|
||||||
|
; (gtk_accel_path "<Actions>/Common/goto-editor" "<%SECONDARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%><%TERTIARY%>z")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/reverse-region" "<%LEVEL4%>r")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleThemeManager" "<%WINDOW%>t")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/pitch-shift-region" "<%LEVEL4%>t")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/split-region" "y")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/insert-region" "i")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/invert-selection" "<%TERTIARY%>i")
|
||||||
|
(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
|
||||||
|
(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/naturalize-region" "<%LEVEL4%>o")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/TogglePunch" "p")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
|
||||||
|
|
||||||
|
;; MITTELZEILE
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-front" "a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%>a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%><%SECONDARY%>a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/play-selected-regions" "s")
|
||||||
|
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
|
||||||
|
(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-back" "d")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/duplicate-region" "<%PRIMARY%>d")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%PRIMARY%><%TERTIARY%>d")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
|
||||||
|
(gtk_accel_path "<Actions>/Common/toggle-rhythm-ferret" "<%WINDOW%>f")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
|
||||||
|
; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-forward" "h")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%SECONDARY%>k")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%SECONDARY%>l")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Loop" "l")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/lock-region" "<%LEVEL4%>l")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
|
||||||
|
|
||||||
|
;; UNTERE ZEILE
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/zoom-to-region" "z")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/zoom-to-session" "<%SECONDARY%>z")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>z")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-separate" "x")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/crop" "c")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%SECONDARY%>c")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "b")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%SECONDARY%>b")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
|
||||||
|
(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
|
||||||
|
(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
|
||||||
|
(gtk_accel_path "<Actions>/Common/toggle-editor-mixer-on-top" "<%SECONDARY%>m")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "KP_Enter")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
|
||||||
|
|
||||||
|
;; arrow keys, navigation etc.
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<%SECONDARY%>Return")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-delete" "BackSpace")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>Delete")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-backward-to-grid" "<%TERTIARY%><%LEVEL4%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%SECONDARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%TERTIARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%><%SECONDARY%>leftarrow")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-forward-to-grid" "<%TERTIARY%><%LEVEL4%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%SECONDARY%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%TERTIARY%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%><%SECONDARY%>rightarrow")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
|
||||||
|
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%PRIMARY%><%TERTIARY%>End")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%>End")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%><%TERTIARY%>Home")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%TERTIARY%>Home")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/move-selected-tracks-up" "<%TERTIARY%>uparrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-next-route" "downarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/move-selected-tracks-down" "<%TERTIARY%>downarrow")
|
||||||
|
|
||||||
|
;; keypad
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-1" "KP_1")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cut-region-gain" "KP_Subtract")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/boost-region-gain" "KP_Add")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
|
||||||
|
|
||||||
|
;; F-N keys
|
||||||
|
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/start-range" "F1")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/finish-range" "F2")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/step-mouse-mode" "F1")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F2")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; numbers
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "4")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "5")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "6")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleClick" "7")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "8")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%LEVEL4%>8")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>8")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "9")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-punch-from-region" "<%LEVEL4%>9")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "<%LEVEL4%>0")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
|
|
@ -0,0 +1,214 @@
|
||||||
|
; ardour-2.2 GtkAccelMap rc-file -*- scheme -*-
|
||||||
|
; this file is a hand-edited map that is processed by scons
|
||||||
|
; to produce a real accelmap.
|
||||||
|
;
|
||||||
|
|
||||||
|
;; punctuation
|
||||||
|
(gtk_accel_path "<Actions>/Editor/center-playhead" "Escape")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>period")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/record-roll" "<%PRIMARY%>space")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%PRIMARY%>,")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%SECONDARY%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-end-relative" "<%PRIMARY%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-start" "<%LEVEL4%><%SECONDARY%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%LEVEL4%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%SECONDARY%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "less")
|
||||||
|
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "asciicircum")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>asciicircum")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>space")
|
||||||
|
|
||||||
|
;; letters
|
||||||
|
|
||||||
|
;; OBERE ZEILE
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
|
||||||
|
(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-playhead" "w")
|
||||||
|
;; note that ctrl-w is special and consumed by the keyboard snooper
|
||||||
|
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
|
||||||
|
(gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/export-region" "<%PRIMARY%><%TERTIARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
|
||||||
|
; (gtk_accel_path "<Actions>/Common/goto-editor" "<%SECONDARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%><%TERTIARY%>z")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/reverse-region" "<%LEVEL4%>r")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleThemeManager" "<%SECONDARY%>t")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/pitch-shift-region" "<%LEVEL4%>t")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/split-region" "y")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/insert-region" "i")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/invert-selection" "<%TERTIARY%>i")
|
||||||
|
(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
|
||||||
|
(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/naturalize-region" "<%LEVEL4%>o")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/TogglePunch" "p")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
|
||||||
|
|
||||||
|
;; MITTELZEILE
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-front" "a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%>a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%><%SECONDARY%>a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/play-selected-regions" "s")
|
||||||
|
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
|
||||||
|
(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-back" "d")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/duplicate-region" "<%PRIMARY%>d")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%PRIMARY%><%TERTIARY%>d")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
|
||||||
|
(gtk_accel_path "<Actions>/Common/toggle-rhythm-ferret" "<%SECONDARY%>f")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
|
||||||
|
; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-forward" "h")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%SECONDARY%>k")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%SECONDARY%>l")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Loop" "l")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/lock-region" "<%LEVEL4%>l")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
|
||||||
|
|
||||||
|
;; UNTERE ZEILE
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/zoom-to-region" "z")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/zoom-to-session" "<%SECONDARY%>z")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>z")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-separate" "x")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/crop" "c")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%SECONDARY%>c")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "b")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%SECONDARY%>b")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
|
||||||
|
(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
|
||||||
|
(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
|
||||||
|
(gtk_accel_path "<Actions>/Common/toggle-editor-mixer-on-top" "<%SECONDARY%>m")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
|
||||||
|
|
||||||
|
;; arrow keys, navigation etc.
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<%SECONDARY%>Return")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-delete" "BackSpace")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>BackSpace")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-backward-to-grid" "<%TERTIARY%><%LEVEL4%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%SECONDARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%TERTIARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%><%SECONDARY%>leftarrow")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-forward-to-grid" "<%TERTIARY%><%LEVEL4%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%SECONDARY%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%TERTIARY%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%><%SECONDARY%>rightarrow")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
|
||||||
|
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%PRIMARY%><%TERTIARY%>End")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%>End")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%><%TERTIARY%>Home")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%TERTIARY%>Home")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/move-selected-tracks-up" "<%TERTIARY%>uparrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-next-route" "downarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/move-selected-tracks-down" "<%TERTIARY%>downarrow")
|
||||||
|
|
||||||
|
;; keypad
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-1" "KP_1")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cut-region-gain" "j")
|
||||||
|
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/boost-region-gain" "k")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
|
||||||
|
|
||||||
|
;; F-N keys
|
||||||
|
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/start-range" "F1")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/finish-range" "F2")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/step-mouse-mode" "F1")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F2")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; numbers
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "4")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "5")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "6")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleClick" "7")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "8")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%LEVEL4%>8")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>8")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "9")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-punch-from-region" "<%LEVEL4%>9")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "<%LEVEL4%>0")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
;
|
;
|
||||||
|
|
||||||
;; punctuation
|
;; punctuation
|
||||||
|
(gtk_accel_path "<Actions>/Editor/center-playhead" "Escape")
|
||||||
(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
|
(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
|
||||||
(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space")
|
(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>period")
|
||||||
(gtk_accel_path "<Actions>/Transport/record-roll" "<%PRIMARY%>space")
|
(gtk_accel_path "<Actions>/Transport/record-roll" "<%PRIMARY%>space")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%SECONDARY%>less")
|
(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%SECONDARY%>less")
|
||||||
|
@ -16,23 +16,20 @@
|
||||||
(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%SECONDARY%>less")
|
(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%SECONDARY%>less")
|
||||||
(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "less")
|
(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "less")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
|
||||||
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
|
||||||
(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "asciicircum")
|
(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "asciicircum")
|
||||||
(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>asciicircum")
|
(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>asciicircum")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
|
(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
|
||||||
(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
|
(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "bracketright")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%PRIMARY%><%SECONDARY%>bracketright")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>bracketright")
|
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "bracketleft")
|
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
|
(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
|
||||||
(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
|
(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>space")
|
||||||
|
|
||||||
;; letters
|
;; letters
|
||||||
|
|
||||||
;; OBERE ZEILE
|
;; OBERE ZEILE
|
||||||
|
@ -40,25 +37,26 @@
|
||||||
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
|
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
|
||||||
(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
|
(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
|
||||||
(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
|
(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-playhead" "w")
|
||||||
;; note that ctrl-w is special and consumed by the keyboard snooper
|
;; note that ctrl-w is special and consumed by the keyboard snooper
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>space")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/play-selected-regions" "s")
|
|
||||||
(gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w")
|
(gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w")
|
||||||
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
|
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
|
||||||
(gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e")
|
(gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
|
(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/export-region" "<%PRIMARY%><%TERTIARY%>e")
|
||||||
(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
|
(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
|
||||||
; (gtk_accel_path "<Actions>/Common/goto-editor" "<%SECONDARY%>e")
|
; (gtk_accel_path "<Actions>/Common/goto-editor" "<%SECONDARY%>e")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>e")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%><%TERTIARY%>z")
|
(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%><%TERTIARY%>z")
|
||||||
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
|
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
|
||||||
(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
|
(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/reverse-region" "<%LEVEL4%>r")
|
||||||
(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
|
(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
|
||||||
(gtk_accel_path "<Actions>/Editor/split-region" "y")
|
(gtk_accel_path "<Actions>/Common/ToggleThemeManager" "<%WINDOW%>t")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/pitch-shift-region" "<%LEVEL4%>t")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/split-region" "z")
|
||||||
(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
|
(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
|
||||||
(gtk_accel_path "<Actions>/Editor/insert-region" "i")
|
(gtk_accel_path "<Actions>/Editor/insert-region" "i")
|
||||||
(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
|
(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
|
||||||
|
@ -66,19 +64,24 @@
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%SECONDARY%>o")
|
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%SECONDARY%>o")
|
||||||
(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
|
(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
|
||||||
(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
|
(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
|
||||||
(gtk_accel_path "<Actions>/Editor/set-playhead" "w")
|
(gtk_accel_path "<Actions>/Editor/naturalize-region" "<%LEVEL4%>o")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/TogglePunch" "p")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
|
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
|
||||||
|
|
||||||
;; MITTELZEILE
|
;; MITTELZEILE
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/trim-front" "a")
|
(gtk_accel_path "<Actions>/Editor/trim-front" "a")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
|
(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
|
||||||
(gtk_accel_path "<Actions>/Editor/trim-back" "d")
|
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%>a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%><%SECONDARY%>a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/play-selected-regions" "s")
|
||||||
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
|
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
|
||||||
(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
|
(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-back" "d")
|
||||||
(gtk_accel_path "<Actions>/Editor/duplicate-region" "<%PRIMARY%>d")
|
(gtk_accel_path "<Actions>/Editor/duplicate-region" "<%PRIMARY%>d")
|
||||||
(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%PRIMARY%><%TERTIARY%>d")
|
(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%PRIMARY%><%TERTIARY%>d")
|
||||||
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
|
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
|
||||||
|
(gtk_accel_path "<Actions>/Common/toggle-rhythm-ferret" "<%WINDOW%>f")
|
||||||
; (gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
|
; (gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
|
||||||
; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
|
; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
|
||||||
(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
|
(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
|
||||||
|
@ -86,25 +89,27 @@
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%SECONDARY%>k")
|
(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%SECONDARY%>k")
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%SECONDARY%>l")
|
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%SECONDARY%>l")
|
||||||
(gtk_accel_path "<Actions>/Transport/Loop" "l")
|
(gtk_accel_path "<Actions>/Transport/Loop" "l")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/lock-region" "<%LEVEL4%>l")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
|
(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
|
||||||
|
|
||||||
;; UNTERE ZEILE
|
;; UNTERE ZEILE
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/zoom-to-region" "z")
|
(gtk_accel_path "<Actions>/Editor/zoom-to-region" "y")
|
||||||
(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
|
(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
|
||||||
(gtk_accel_path "<Actions>/Editor/zoom-to-session" "<%SECONDARY%>z")
|
(gtk_accel_path "<Actions>/Editor/zoom-to-session" "<%SECONDARY%>y")
|
||||||
(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>z")
|
(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>y")
|
||||||
(gtk_accel_path "<Actions>/Editor/editor-separate" "x")
|
(gtk_accel_path "<Actions>/Editor/editor-separate" "x")
|
||||||
(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
|
(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
|
||||||
(gtk_accel_path "<Actions>/Editor/crop" "c")
|
(gtk_accel_path "<Actions>/Editor/crop" "c")
|
||||||
(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
|
(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%SECONDARY%>c")
|
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%SECONDARY%>c")
|
||||||
(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
|
(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "b")
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%SECONDARY%>b")
|
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%SECONDARY%>b")
|
||||||
(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
|
(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
|
||||||
(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
|
(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
|
||||||
(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
|
(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
|
||||||
(gtk_accel_path "<Actions>/Common/goto-mixer" "<%SECONDARY%>m")
|
(gtk_accel_path "<Actions>/Common/toggle-editor-mixer-on-top" "<%SECONDARY%>m")
|
||||||
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "KP_Enter")
|
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "KP_Enter")
|
||||||
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
|
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
|
||||||
|
|
||||||
|
@ -116,26 +121,35 @@
|
||||||
(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>Delete")
|
(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>Delete")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
|
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-backward-to-grid" "<%TERTIARY%><%LEVEL4%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
|
||||||
(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
|
(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%SECONDARY%>leftarrow")
|
(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%SECONDARY%>leftarrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%TERTIARY%>leftarrow")
|
(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%TERTIARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%><%SECONDARY%>leftarrow")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
|
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
|
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-forward-to-grid" "<%TERTIARY%><%LEVEL4%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
|
||||||
(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
|
(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%SECONDARY%>rightarrow")
|
(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%SECONDARY%>rightarrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%TERTIARY%>rightarrow")
|
(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%TERTIARY%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%><%SECONDARY%>rightarrow")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
|
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
|
||||||
|
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
|
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
|
||||||
(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
|
(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
|
(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%>End")
|
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%PRIMARY%><%TERTIARY%>End")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%><%PRIMARY%>End")
|
(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%>End")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
|
(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%TERTIARY%>Home")
|
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%><%TERTIARY%>Home")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%TERTIARY%>Home")
|
(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%TERTIARY%>Home")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
|
(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
|
||||||
|
@ -152,37 +166,50 @@
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
|
(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
|
(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
|
(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
|
||||||
(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%>KP_4")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
|
(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
|
(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
|
||||||
(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%>KP_6")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
|
(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
|
(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
|
(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
|
||||||
(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
|
(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cut-region-gain" "KP_Subtract")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
|
(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/boost-region-gain" "KP_Add")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
|
(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
|
||||||
|
|
||||||
;; F-N keys
|
;; F-N keys
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/start-range" "F1")
|
; (gtk_accel_path "<Actions>/Editor/start-range" "F1")
|
||||||
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
|
||||||
(gtk_accel_path "<Actions>/Editor/finish-range" "F2")
|
; (gtk_accel_path "<Actions>/Editor/finish-range" "F2")
|
||||||
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
|
||||||
(gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
|
; (gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F11")
|
(gtk_accel_path "<Actions>/Editor/step-mouse-mode" "F1")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all" "F14")
|
(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F2")
|
||||||
(gtk_accel_path "<Actions>/Editor/invert-selection" "F15")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "F16")
|
|
||||||
|
|
||||||
|
|
||||||
;; numbers
|
;; numbers
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
|
(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
|
||||||
(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
|
(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
|
||||||
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
|
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
|
||||||
(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "4")
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "4")
|
||||||
(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "5")
|
||||||
(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "9")
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "6")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleClick" "7")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "8")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%LEVEL4%>8")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>8")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "9")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-punch-from-region" "<%LEVEL4%>9")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "<%LEVEL4%>0")
|
||||||
(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
|
(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
@ -246,7 +273,6 @@
|
||||||
; (gtk_accel_path "<Actions>/Editor/View" "")
|
; (gtk_accel_path "<Actions>/Editor/View" "")
|
||||||
; (gtk_accel_path "<Actions>/Editor/ZoomFocus" "")
|
; (gtk_accel_path "<Actions>/Editor/ZoomFocus" "")
|
||||||
; (gtk_accel_path "<Actions>/Editor/center-edit-cursor" "")
|
; (gtk_accel_path "<Actions>/Editor/center-edit-cursor" "")
|
||||||
; (gtk_accel_path "<Actions>/Editor/center-playhead" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "")
|
; (gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "")
|
||||||
; (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "")
|
; (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "")
|
||||||
; (gtk_accel_path "<Actions>/Editor/playhead-to-range-end" "")
|
; (gtk_accel_path "<Actions>/Editor/playhead-to-range-end" "")
|
||||||
|
@ -330,9 +356,9 @@
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-seconds" "")
|
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-seconds" "")
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-thirds" "")
|
; (gtk_accel_path "<Actions>/Snap/snap-to-thirds" "")
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-thirtyseconds" "")
|
; (gtk_accel_path "<Actions>/Snap/snap-to-thirtyseconds" "")
|
||||||
; (gtk_accel_path "<Actions>/Transport/PlaySelection" "")
|
; (gtk_accel_path "<Actions>/Transport/Playwion" "")
|
||||||
; (gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
|
; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
|
||||||
; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
|
; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
|
||||||
; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
|
; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
|
||||||
|
@ -384,19 +410,19 @@
|
||||||
; (gtk_accel_path "<Actions>/options/UseMMC" "")
|
; (gtk_accel_path "<Actions>/options/UseMMC" "")
|
||||||
; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
|
; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
|
||||||
; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
|
; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/activate" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/activate" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/activate_all" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/activate_all" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/clear" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/clear" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/copy" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/copy" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/cut" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/cut" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/deactivate" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/deactivate" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/deactivate_all" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/deactivate_all" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/deselectall" "<%PRIMARY%><%TERTIARY%>a")
|
; (gtk_accel_path "<Actions>/redirectmenu/deselectall" "<%PRIMARY%><%TERTIARY%>a")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/edit" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/edit" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/newinsert" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/newinsert" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/newplugin" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/newplugin" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/newsend" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/newsend" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/paste" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/paste" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/rename" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/rename" "")
|
||||||
; (gtk_accel_path "<Actions>/processormenu/selectall" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/selectall" "")
|
||||||
;(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")
|
;(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")
|
|
@ -0,0 +1,213 @@
|
||||||
|
; ardour-2.2 GtkAccelMap rc-file -*- scheme -*-
|
||||||
|
; this file is a hand-edited map that is processed by scons
|
||||||
|
; to produce a real accelmap.
|
||||||
|
;
|
||||||
|
|
||||||
|
;; punctuation
|
||||||
|
(gtk_accel_path "<Actions>/Editor/center-playhead" "Escape")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>period")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/record-roll" "<%PRIMARY%>space")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%SECONDARY%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-end-relative" "<%PRIMARY%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-start" "<%LEVEL4%><%SECONDARY%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%LEVEL4%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%SECONDARY%>less")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "less")
|
||||||
|
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "asciicircum")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>asciicircum")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>space")
|
||||||
|
|
||||||
|
;; letters
|
||||||
|
|
||||||
|
;; OBERE ZEILE
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
|
||||||
|
(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-playhead" "w")
|
||||||
|
;; note that ctrl-w is special and consumed by the keyboard snooper
|
||||||
|
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
|
||||||
|
(gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/export-region" "<%PRIMARY%><%TERTIARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
|
||||||
|
; (gtk_accel_path "<Actions>/Common/goto-editor" "<%SECONDARY%>e")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%><%TERTIARY%>z")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/reverse-region" "<%LEVEL4%>r")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleThemeManager" "<%SECONDARY%>t")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/pitch-shift-region" "<%LEVEL4%>t")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/split-region" "z")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/insert-region" "i")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/invert-selection" "<%TERTIARY%>i")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%SECONDARY%>o")
|
||||||
|
(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
|
||||||
|
(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/naturalize-region" "<%LEVEL4%>o")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/TogglePunch" "p")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
|
||||||
|
|
||||||
|
;; MITTELZEILE
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-front" "a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%>a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%><%SECONDARY%>a")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/play-selected-regions" "s")
|
||||||
|
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
|
||||||
|
(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/trim-back" "d")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/duplicate-region" "<%PRIMARY%>d")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%PRIMARY%><%TERTIARY%>d")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
|
||||||
|
(gtk_accel_path "<Actions>/Common/toggle-rhythm-ferret" "<%SECONDARY%>f")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
|
||||||
|
; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-forward" "h")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%SECONDARY%>k")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%SECONDARY%>l")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Loop" "l")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/lock-region" "<%LEVEL4%>l")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
|
||||||
|
|
||||||
|
;; UNTERE ZEILE
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/zoom-to-region" "y")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/zoom-to-session" "<%SECONDARY%>y")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>y")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-separate" "x")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/crop" "c")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%SECONDARY%>c")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "b")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%SECONDARY%>b")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
|
||||||
|
(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
|
||||||
|
(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
|
||||||
|
(gtk_accel_path "<Actions>/Common/toggle-editor-mixer-on-top" "<%SECONDARY%>m")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
|
||||||
|
|
||||||
|
;; arrow keys, navigation etc.
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<%SECONDARY%>Return")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/editor-delete" "BackSpace")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>BackSpace")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-backward-to-grid" "<%TERTIARY%><%LEVEL4%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%SECONDARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%TERTIARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%><%SECONDARY%>leftarrow")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/playhead-forward-to-grid" "<%TERTIARY%><%LEVEL4%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%SECONDARY%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%TERTIARY%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%><%SECONDARY%>rightarrow")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
|
||||||
|
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%PRIMARY%><%TERTIARY%>End")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%>End")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%><%TERTIARY%>Home")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%TERTIARY%>Home")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/move-selected-tracks-up" "<%TERTIARY%>uparrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/select-next-route" "downarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/move-selected-tracks-down" "<%TERTIARY%>downarrow")
|
||||||
|
|
||||||
|
;; keypad
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-1" "KP_1")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cut-region-gain" "j")
|
||||||
|
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/boost-region-gain" "k")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
|
||||||
|
|
||||||
|
;; F-N keys
|
||||||
|
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/start-range" "F1")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/finish-range" "F2")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/step-mouse-mode" "F1")
|
||||||
|
(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F2")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; numbers
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "4")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "5")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "6")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleClick" "7")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "8")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%LEVEL4%>8")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>8")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "9")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-punch-from-region" "<%LEVEL4%>9")
|
||||||
|
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "<%LEVEL4%>0")
|
||||||
|
(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
|
||||||
|
|
|
@ -1,346 +0,0 @@
|
||||||
; ardour GtkAccelMap rc-file -*- scheme -*-
|
|
||||||
; this file is an automated accelerator map dump
|
|
||||||
;
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
|
|
||||||
(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
|
|
||||||
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Pullup" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/zoom-to-session" "")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKReconnect" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Autoconnect" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Edit" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "grave")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>grave")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/copy" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/MeterFalloffFaster" "")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/record-roll" "<%TERTIARY%>space")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/SortByRegionLength" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/MeterFalloffSlowest" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/deactivate_all" "")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/SortByRegionPosition" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/ZoomFocus" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%SECONDARY%>i")
|
|
||||||
; (gtk_accel_path "<Actions>/options/MeterFalloffSlow" "")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/rlHide" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/Metering" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
|
|
||||||
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-playhead" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/center-edit-cursor" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Monitoring" "")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/deactivate" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/LatchedRecordEnable" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
|
|
||||||
; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsPercentage" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/Close" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/New" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/EditSelectRangeOptions" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Transport/ToggleTimeMaster" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-thirds" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%TERTIARY%>a")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/Export" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%>KP_Right")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Smpte30" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/playhead-to-range-start" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Subframes" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Smpte2997drop" "")
|
|
||||||
(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%SECONDARY%>n")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%LEVEL4%>a")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKDisconnect" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/MeterFalloffFast" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/FileDataFormatFloat" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-region-end" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
|
|
||||||
; (gtk_accel_path "<Actions>/options/StopRecordingOnXrun" "")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/SortDescending" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/DoNotRunPluginsWhileRecording" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/PullupNone" "")
|
|
||||||
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-range" "r")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%>KP_Left")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/AudioFileFormatData" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/MeterFalloffFastest" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/play-selected-regions" "w")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>w")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-seconds" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-frame" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/ExportSelection" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/StopPluginsWithTransport" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-next-route" "downarrow")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-minutes" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/FlushWastebasket" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/nudge-forward" "h")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/SortByRegionEndinFile" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/ToggleMeasureVisibility" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-center" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
|
|
||||||
; (gtk_accel_path "<Actions>/options/LatchedSolo" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/MeterHoldOff" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/OutputAutoConnectMaster" "")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKLatency64" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/insert-region" "i")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/center-playhead" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-region-start" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/View" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Layering" "")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKLatency4096" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Smpte30drop" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-edit" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/EditCursorMovementOptions" "")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/activate_all" "")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/paste" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Smpte25" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/RegionEquivalentsOverlap" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/MeteringFallOffRate" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/UseHardwareMonitoring" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Smpte24" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-mark" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/CrossfadesShort" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Smpte5994" "")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKLatency8192" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/toggle-xfades-visible" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/start-range" "F1")
|
|
||||||
; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsSemitones" "")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKLatency128" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-beat" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/RegionEditOps" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/snap-magnetic" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/playhead-to-range-end" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/scroll-playhead-forward" "<%TERTIARY%>rightarrow")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "<%SECONDARY%>less")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/align-regions-sync" "less")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/EditSelectRegionOptions" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/crop" "c")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/newsend" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceSubMenu" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/MeterFalloff" "")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/rlRemove" "")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%TERTIARY%>Home")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/scroll-playhead-backward" "<%TERTIARY%>leftarrow")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/split-region" "z")
|
|
||||||
; (gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-thirtyseconds" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-minutes" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/Windows" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/CleanupUnused" "")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/deselectall" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/SoloViaBus" "")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/rlAudition" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/PullupPlus4Plus1" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-region-boundary" "")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACK" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/editor-separate" "F4")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/SortAscending" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/Help" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/UseExternalMonitoring" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Smpte23976" "")
|
|
||||||
(gtk_accel_path "<Actions>/Common/goto-editor" "<%WINDOW%>e")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all" "F14")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/invert-selection" "F15")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>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" "<%TERTIARY%><%PRIMARY%>p")
|
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F11")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileLength" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Timecode" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Transport/PlaySelection" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/PullupMinus4Minus1" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>e")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileName" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/finish-range" "F2")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-range-between-cursors" "F16")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/Loop" "l")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/CrossfadesFull" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up")
|
|
||||||
; (gtk_accel_path "<Actions>/options/SendMTC" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%PRIMARY%>l")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
|
|
||||||
; (gtk_accel_path "<Actions>/options/SoloInPlace" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/Options" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/MeterFalloffMedium" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/SaveTemplate" "")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/SortByRegionStartinFile" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/GainReduceFastTransport" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Common/ToggleInspector" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<%SECONDARY%>Return")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/LayerMoveAddHigher" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Smpte60" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/Open" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-left" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/TransportOptions" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/ControlSurfaces" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/FileHeaderFormatBWF" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Smpte2997" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/ToggleWaveformVisibility" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%>r")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/ExportSession" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/InputAutoConnectPhysical" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-edit-cursor" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/Latency" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/rename" "")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/rlShowAuto" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%PRIMARY%>p")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/Session" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/AudioFileFormat" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Transport/Transport" "")
|
|
||||||
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-timefx" "t")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/SortByRegionName" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/KeyMouse Actions" "")
|
|
||||||
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-frame" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/SnapTo" "")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Crossfades" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/PullupPlus4" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/MeteringHoldTime" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/PullupPlus1" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Smpte24976" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/FileDataFormat24bit" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/SnapMode" "")
|
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%WINDOW%>o")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/PullupMinus4" "")
|
|
||||||
(gtk_accel_path "<Actions>/Common/goto-mixer" "<%WINDOW%>m")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileCreationDate" "")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/activate" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/PullupMinus1" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/snap-normal" "")
|
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%WINDOW%>b")
|
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%WINDOW%>k")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-asixteenthbeat" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%PRIMARY%>d")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/edit" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/duplicate-region" "d")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%SECONDARY%>d")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKLatency2048" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/ToggleWaveformsWhileRecording" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-right" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>Delete")
|
|
||||||
; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE" "")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_0")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%>End")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/cut" "")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/newinsert" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/UseMMC" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/MeterFalloffOff" "")
|
|
||||||
;(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/PullupMinus4Plus1" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/MeterHold" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-cd-frame" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/StopTransportAtEndOfSession" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/Cleanup" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/Snapshot" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Transport/ToggleVideoSync" "")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFilesystem" "")
|
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%WINDOW%>c")
|
|
||||||
; (gtk_accel_path "<Actions>/Common/About" "")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKLatency32" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
|
|
||||||
; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE64" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/rlShowAll" "")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
|
|
||||||
; (gtk_accel_path "<Actions>/RegionList/SortByRegionTimestamp" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/OutputAutoConnectPhysical" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/SendMMC" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/toggle-auto-xfades" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/AudioFileFormatHeader" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/MeterHoldShort" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/MeterHoldMedium" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Subframes80" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
|
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%WINDOW%>l")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurface" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/editor-delete" "BackSpace")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "F16")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/LayerAddHigher" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Solo" "")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKLatency1024" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/ExportRangeMarkers" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/toggle-xfades-active" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-bar" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/LayerLaterHigher" "")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/selectall" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-quarters" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
|
|
||||||
; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/Subframes100" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "<%SECONDARY%>m")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "m")
|
|
||||||
; (gtk_accel_path "<Actions>/options/OutputAutoConnectManual" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-region-sync" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/clear" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceFeedback" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Editor/PullupPlus4Minus1" "")
|
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKLatency512" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Main/Recent" "")
|
|
||||||
; (gtk_accel_path "<Actions>/processormenu/newplugin" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/InputAutoConnectManual" "")
|
|
||||||
; (gtk_accel_path "<Actions>/options/MeterHoldLong" "")
|
|
||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-seconds" "")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/trim-front" "a")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/trim-back" "s")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-1" "KP_1")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "4")
|
|
||||||
(gtk_accel_path "<Actions>/Transport/focus-on-clock" "KP_Divide")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "bracketright")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "bracketleft")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%PRIMARY%><%SECONDARY%>bracketright")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>bracketright")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/toggle-zoom" "o")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/zoom-to-region" "y")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/pitch-shift-region" "F5")
|
|
||||||
(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
|
|
||||||
|
|
|
@ -204,6 +204,7 @@ midi_streamview.cc
|
||||||
midi_time_axis.cc
|
midi_time_axis.cc
|
||||||
mixer_strip.cc
|
mixer_strip.cc
|
||||||
mixer_ui.cc
|
mixer_ui.cc
|
||||||
|
nag.cc
|
||||||
new_session_dialog.cc
|
new_session_dialog.cc
|
||||||
option_editor.cc
|
option_editor.cc
|
||||||
opts.cc
|
opts.cc
|
||||||
|
@ -402,8 +403,28 @@ for style in ['', 'BOLD', 'ITALIC']:
|
||||||
key = '%' + key + '%'
|
key = '%' + key + '%'
|
||||||
my_font_dict[key] = fontstyle
|
my_font_dict[key] = fontstyle
|
||||||
|
|
||||||
ardour_dark_theme = env.SubstInFile ('ardour3_ui_dark.rc', 'ardour3_ui_dark.rc.in', SUBST_DICT = my_font_dict)
|
#
|
||||||
ardour_light_theme = env.SubstInFile ('ardour3_ui_light.rc', 'ardour3_ui_light.rc.in', SUBST_DICT = my_font_dict)
|
# create menus based on build platform
|
||||||
|
#
|
||||||
|
|
||||||
|
if env['GTKOSX']:
|
||||||
|
ardour_menus = env.Command ('ardour.menus', 'ardour.menus.in', "cpp -E -P -DGTKOSX -DTOP_MENUBAR ardour.menus.in ardour.menus", chdir=1)
|
||||||
|
else:
|
||||||
|
ardour_menus = env.Command ('ardour.menus', 'ardour.menus.in', "cpp -E -P ardour.menus.in ardour.menus", chdir=1)
|
||||||
|
|
||||||
|
ardour_dark_theme = env.SubstInFile ('ardour3_ui_dark.rc',
|
||||||
|
'ardour3_ui_dark.rc.in',
|
||||||
|
SUBST_DICT = my_font_dict)
|
||||||
|
ardour_light_theme = env.SubstInFile ('ardour3_ui_light.rc',
|
||||||
|
'ardour3_ui_light.rc.in',
|
||||||
|
SUBST_DICT = my_font_dict)
|
||||||
|
|
||||||
|
ardour_dark_sae_theme = env.SubstInFile ('ardour3_ui_dark_sae.rc',
|
||||||
|
'ardour3_ui_dark_sae.rc.in',
|
||||||
|
SUBST_DICT = my_font_dict)
|
||||||
|
ardour_light_sae_theme = env.SubstInFile ('ardour3_ui_light_sae.rc',
|
||||||
|
'ardour3_ui_light_sae.rc.in',
|
||||||
|
SUBST_DICT = my_font_dict)
|
||||||
|
|
||||||
my_subst_dict = { }
|
my_subst_dict = { }
|
||||||
|
|
||||||
|
@ -436,7 +457,7 @@ else:
|
||||||
keybindings_dict['%LEVEL4%'] = env['WINDOWS_KEY']
|
keybindings_dict['%LEVEL4%'] = env['WINDOWS_KEY']
|
||||||
keybindings_dict['%WINDOW%'] = 'Alt'
|
keybindings_dict['%WINDOW%'] = 'Alt'
|
||||||
|
|
||||||
for b in [ 'SAE-de', 'SAE-us', 'mnemonic-us', 'ergonomic-us' ]:
|
for b in [ 'SAE-de-keypad', 'SAE-de-nokeypad', 'SAE-us-keypad', 'SAE-us-nokeypad', 'mnemonic-us', 'ergonomic-us' ]:
|
||||||
target_file = b + '.bindings'
|
target_file = b + '.bindings'
|
||||||
src_file = target_file + '.in'
|
src_file = target_file + '.in'
|
||||||
Default (env.SubstInFile (target_file, src_file, SUBST_DICT = keybindings_dict))
|
Default (env.SubstInFile (target_file, src_file, SUBST_DICT = keybindings_dict))
|
||||||
|
@ -455,6 +476,9 @@ Default(ardourdev)
|
||||||
Default(ardoursh)
|
Default(ardoursh)
|
||||||
Default(ardour_dark_theme)
|
Default(ardour_dark_theme)
|
||||||
Default(ardour_light_theme)
|
Default(ardour_light_theme)
|
||||||
|
Default(ardour_dark_sae_theme)
|
||||||
|
Default(ardour_light_sae_theme)
|
||||||
|
Default(ardour_menus)
|
||||||
|
|
||||||
if env['VST']:
|
if env['VST']:
|
||||||
Default(ardourlib)
|
Default(ardourlib)
|
||||||
|
@ -480,12 +504,17 @@ if env['NLS']:
|
||||||
# configuration files
|
# configuration files
|
||||||
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), ardour_dark_theme))
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), ardour_dark_theme))
|
||||||
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), ardour_light_theme))
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), ardour_light_theme))
|
||||||
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), ardour_dark_sae_theme))
|
||||||
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), ardour_light_sae_theme))
|
||||||
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour3_ui_default.conf'))
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour3_ui_default.conf'))
|
||||||
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour.menus'))
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour.menus'))
|
||||||
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour-sae.menus'))
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour-sae.menus'))
|
||||||
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ergonomic-us.bindings'))
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ergonomic-us.bindings'))
|
||||||
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'mnemonic-us.bindings'))
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'mnemonic-us.bindings'))
|
||||||
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'SAE-de.bindings'))
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'SAE-de-keypad.bindings'))
|
||||||
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'SAE-us-keypad.bindings'))
|
||||||
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'SAE-de-nokeypad.bindings'))
|
||||||
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'SAE-us-nokeypad.bindings'))
|
||||||
# data files
|
# data files
|
||||||
env.Alias('install', env.Install(os.path.join(install_prefix, 'share', 'ardour3'), 'splash.png'))
|
env.Alias('install', env.Install(os.path.join(install_prefix, 'share', 'ardour3'), 'splash.png'))
|
||||||
env.Alias('install', env.Install(os.path.join(install_prefix, 'share', 'ardour3', 'pixmaps'), pixmap_files))
|
env.Alias('install', env.Install(os.path.join(install_prefix, 'share', 'ardour3', 'pixmaps'), pixmap_files))
|
||||||
|
@ -539,12 +568,19 @@ env.Alias ('tarball', env.Distribute (env['DISTTREE'],
|
||||||
'ardour.sh.in',
|
'ardour.sh.in',
|
||||||
'ardev_common.sh.in',
|
'ardev_common.sh.in',
|
||||||
'ardev', 'ardbg',
|
'ardev', 'ardbg',
|
||||||
'ardour3_ui_dark.rc.in', 'ardour3_ui_light.rc.in', 'splash.png',
|
'ardour3_ui_dark.rc.in',
|
||||||
'ardour.menus', 'ardour-sae.menus',
|
'ardour3_ui_light.rc.in',
|
||||||
|
'ardour3_ui_dark_sae.rc.in',
|
||||||
|
'ardour3_ui_light_sae.rc.in',
|
||||||
|
'splash.png',
|
||||||
|
'ardour.menus.in',
|
||||||
|
'ardour-sae.menus',
|
||||||
'mnemonic-us.bindings.in',
|
'mnemonic-us.bindings.in',
|
||||||
'ergonomic-us.bindings.in',
|
'ergonomic-us.bindings.in',
|
||||||
'SAE-us.bindings.in',
|
'SAE-us-keypad.bindings.in',
|
||||||
'SAE-de.bindings.in',
|
'SAE-us-nokeypad.bindings.in',
|
||||||
|
'SAE-de-keypad.bindings.in',
|
||||||
|
'SAE-de-nokeypad.bindings.in',
|
||||||
'ardour3_ui_default.conf',
|
'ardour3_ui_default.conf',
|
||||||
'editor_xpms',
|
'editor_xpms',
|
||||||
'ardour2.xml',
|
'ardour2.xml',
|
||||||
|
@ -556,6 +592,7 @@ env.Alias ('tarball', env.Distribute (env['DISTTREE'],
|
||||||
icon_files +
|
icon_files +
|
||||||
skipped_files +
|
skipped_files +
|
||||||
audiounit_files +
|
audiounit_files +
|
||||||
|
lv2_files +
|
||||||
gtkosx_files +
|
gtkosx_files +
|
||||||
x11_files +
|
x11_files +
|
||||||
freesound_files +
|
freesound_files +
|
||||||
|
|
|
@ -120,52 +120,56 @@ static const gchar * paypal_xpm[] = {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char* authors[] = {
|
static const char* authors[] = {
|
||||||
N_("Paul Davis"),
|
|
||||||
N_("Jesse Chappell"),
|
|
||||||
N_("Taybin Rutkin"),
|
|
||||||
N_("Marcus Andersson"),
|
|
||||||
N_("Jeremy Hall"),
|
|
||||||
N_("Steve Harris"),
|
|
||||||
N_("Tim Mayberry"),
|
|
||||||
N_("Mark Stewart"),
|
|
||||||
N_("Sam Chessman"),
|
|
||||||
N_("Jack O'Quin"),
|
|
||||||
N_("Matt Krai"),
|
|
||||||
N_("Ben Bell"),
|
|
||||||
N_("Gerard van Dongen"),
|
|
||||||
N_("Thomas Charbonnel"),
|
|
||||||
N_("Nick Mainsbridge"),
|
|
||||||
N_("Colin Law"),
|
|
||||||
N_("Sampo Savolainen"),
|
|
||||||
N_("Joshua Leach"),
|
|
||||||
N_("Rob Holland"),
|
|
||||||
N_("Per Sigmond"),
|
|
||||||
N_("Doug Mclain"),
|
|
||||||
N_("Petter Sundlöf"),
|
|
||||||
N_("Thorsten Wilms"),
|
|
||||||
N_("Ben Loftis"),
|
|
||||||
N_("Stefan Kersten"),
|
|
||||||
N_("Christopher George"),
|
|
||||||
N_("Robert Jordens"),
|
|
||||||
N_("Dave Robillard"),
|
|
||||||
N_("Hans Baier"),
|
|
||||||
N_("Hans Fugal"),
|
|
||||||
N_("Brian Ahr"),
|
N_("Brian Ahr"),
|
||||||
N_("Nimal Ratnayake"),
|
|
||||||
N_("Mike Täht"),
|
|
||||||
N_("John Anderson"),
|
N_("John Anderson"),
|
||||||
|
N_("Marcus Andersson"),
|
||||||
N_("Nedko Arnaudov"),
|
N_("Nedko Arnaudov"),
|
||||||
N_("Carl Hetherington"),
|
N_("Hans Baier"),
|
||||||
|
N_("Ben Bell"),
|
||||||
|
N_("Sakari Bergen"),
|
||||||
|
N_("Chris Cannam"),
|
||||||
|
N_("Jesse Chappell"),
|
||||||
|
N_("Thomas Charbonnel"),
|
||||||
|
N_("Sam Chessman"),
|
||||||
|
N_("Paul Davis"),
|
||||||
|
N_("Gerard van Dongen"),
|
||||||
N_("Colin Fletcher"),
|
N_("Colin Fletcher"),
|
||||||
N_("Roland Stigge"),
|
N_("Hans Fugal"),
|
||||||
|
N_("Christopher George"),
|
||||||
|
N_("Jeremy Hall"),
|
||||||
N_("Audun Halland"),
|
N_("Audun Halland"),
|
||||||
|
N_("Steve Harris"),
|
||||||
|
N_("Carl Hetherington"),
|
||||||
|
N_("Rob Holland"),
|
||||||
|
N_("Robert Jordens"),
|
||||||
|
N_("Stefan Kersten"),
|
||||||
N_("Armand Klenk"),
|
N_("Armand Klenk"),
|
||||||
0
|
N_("Matt Krai"),
|
||||||
|
N_("Colin Law"),
|
||||||
|
N_("Joshua Leach"),
|
||||||
|
N_("Ben Loftis"),
|
||||||
|
N_("Nick Mainsbridge"),
|
||||||
|
N_("Tim Mayberry"),
|
||||||
|
N_("Doug Mclain"),
|
||||||
|
N_("Jack O'Quin"),
|
||||||
|
N_("Nimal Ratnayake"),
|
||||||
|
N_("Dave Robillard"),
|
||||||
|
N_("Taybin Rutkin"),
|
||||||
|
N_("Sampo Savolainen"),
|
||||||
|
N_("Per Sigmond"),
|
||||||
|
N_("Lincoln Spiteri"),
|
||||||
|
N_("Mark Stewart"),
|
||||||
|
N_("Roland Stigge"),
|
||||||
|
N_("Petter Sundlöf"),
|
||||||
|
N_("Mike Täht"),
|
||||||
|
N_("Thorsten Wilms"),
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char* translators[] = {
|
static const char* translators[] = {
|
||||||
N_("French:\n\tAlain Fréhel <alain.frehel@free.fr>\n\tChristophe Combelles <ccomb@free.fr>\n"),
|
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\tSebastian Arnold <mail@sebastian-arnold.net>\n"),
|
N_("German:\n\tKarsten Petersen <kapet@kapet.de>\
|
||||||
|
\n\tSebastian Arnold <mail@sebastian-arnold.net>\
|
||||||
|
\n\tRobert Schwede<schwede@ironshark.com>\n"),
|
||||||
N_("Italian:\n\tFilippo Pappalardo <filippo@email.it>\n"),
|
N_("Italian:\n\tFilippo Pappalardo <filippo@email.it>\n"),
|
||||||
N_("Portuguese:\n\tRui Nuno Capela <rncbc@rncbc.org>\n"),
|
N_("Portuguese:\n\tRui Nuno Capela <rncbc@rncbc.org>\n"),
|
||||||
N_("Brazilian Portuguese:\n\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\
|
N_("Brazilian Portuguese:\n\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\
|
||||||
|
|
|
@ -4,14 +4,18 @@ cd `dirname "$0"`/..
|
||||||
|
|
||||||
export ARDOUR_PATH=gtk2_ardour/icons:gtk2_ardour/pixmaps:gtk2_ardour:.
|
export ARDOUR_PATH=gtk2_ardour/icons:gtk2_ardour/pixmaps:gtk2_ardour:.
|
||||||
export ARDOUR_DATA_PATH=gtk2_ardour:.
|
export ARDOUR_DATA_PATH=gtk2_ardour:.
|
||||||
export GTK_PATH=libs/clearlooks
|
if test -d $HOME/gtk/inst ; then
|
||||||
|
echo USING NEW CLEARLOOKS
|
||||||
|
export GTK_PATH=~/.ardour2:libs/clearlooks-newer
|
||||||
|
else
|
||||||
|
echo USING OLD CLEARLOOKS
|
||||||
|
export GTK_PATH=~/.ardour2:libs/clearlooks-older
|
||||||
|
fi
|
||||||
export VAMP_PATH=libs/vamp-plugins:$VAMP_PATH
|
export VAMP_PATH=libs/vamp-plugins:$VAMP_PATH
|
||||||
|
|
||||||
export LD_LIBRARY_PATH=libs/vamp-sdk:libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/rubberband: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:libs/cairomm:libs/taglib:libs/evoral:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=libs/vamp-sdk:libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/rubberband: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:libs/cairomm:libs/taglib:libs/evoral:$LD_LIBRARY_PATH
|
||||||
|
|
||||||
# DYLD_LIBRARY_PATH is for darwin.
|
# DYLD_LIBRARY_PATH is for darwin.
|
||||||
export DYLD_FALLBACK_LIBRARY_PATH=$LD_LIBRARY_PATH
|
export DYLD_FALLBACK_LIBRARY_PATH=$LD_LIBRARY_PATH
|
||||||
# For the internal clearlooks engine
|
|
||||||
export GTK_PATH=$PWD/libs/clearlooks:~/.ardour3
|
|
||||||
|
|
||||||
EXECUTABLE=gtk2_ardour/ardour-%VERSION%
|
EXECUTABLE=gtk2_ardour/ardour-%VERSION%
|
||||||
|
|
|
@ -161,6 +161,9 @@
|
||||||
<menuitem action='toggle-fade-in-active'/>
|
<menuitem action='toggle-fade-in-active'/>
|
||||||
<menuitem action='set-fade-out-length'/>
|
<menuitem action='set-fade-out-length'/>
|
||||||
<menuitem action='toggle-fade-out-active'/>
|
<menuitem action='toggle-fade-out-active'/>
|
||||||
|
<separator/>
|
||||||
|
<menuitem action='toggle-selected-region-fades'/>
|
||||||
|
<menuitem action='toggle-region-fades'/>
|
||||||
</menu>
|
</menu>
|
||||||
<menu action="SelectMenu">
|
<menu action="SelectMenu">
|
||||||
<menuitem action='select-all'/>
|
<menuitem action='select-all'/>
|
||||||
|
@ -172,10 +175,14 @@
|
||||||
<menuitem action='select-all-within-cursors'/>
|
<menuitem action='select-all-within-cursors'/>
|
||||||
<menuitem action='select-all-in-punch-range'/>
|
<menuitem action='select-all-in-punch-range'/>
|
||||||
<menuitem action='select-all-in-loop-range'/>
|
<menuitem action='select-all-in-loop-range'/>
|
||||||
|
<separator/>
|
||||||
|
<menuitem action='select-next-route'/>
|
||||||
|
<menuitem action='select-prev-route'/>
|
||||||
</menu>
|
</menu>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
||||||
<menu action='TrackMenu'>
|
<menu action='TrackMenu'>
|
||||||
|
<menuitem action='remove-track'/>
|
||||||
<menuitem action='AddTrackBus'/>
|
<menuitem action='AddTrackBus'/>
|
||||||
<menuitem action="move-selected-tracks-up"/>
|
<menuitem action="move-selected-tracks-up"/>
|
||||||
<menuitem action="move-selected-tracks-down"/>
|
<menuitem action="move-selected-tracks-down"/>
|
||||||
|
@ -193,7 +200,6 @@
|
||||||
<menuitem action='logarithmic-waveforms'/>
|
<menuitem action='logarithmic-waveforms'/>
|
||||||
</menu>
|
</menu>
|
||||||
<menuitem action='toggle-track-active'/>
|
<menuitem action='toggle-track-active'/>
|
||||||
<menuitem action='remove-track'/>
|
|
||||||
</menu>
|
</menu>
|
||||||
|
|
||||||
<menu action='RegionMenu'>
|
<menu action='RegionMenu'>
|
||||||
|
@ -266,8 +272,8 @@
|
||||||
</menu>
|
</menu>
|
||||||
|
|
||||||
<menu action="WindowMenu">
|
<menu action="WindowMenu">
|
||||||
<menuitem action='goto-editor'/>
|
|
||||||
<menuitem action='goto-mixer'/>
|
<menuitem action='toggle-editor-mixer-on-top'/>
|
||||||
<menuitem action='ToggleLocations'/>
|
<menuitem action='ToggleLocations'/>
|
||||||
<menuitem action='ToggleKeyEditor'/>
|
<menuitem action='ToggleKeyEditor'/>
|
||||||
<menuitem action='ToggleThemeManager'/>
|
<menuitem action='ToggleThemeManager'/>
|
||||||
|
@ -306,17 +312,16 @@
|
||||||
<menuitem action='edit-at-selected-marker'/>
|
<menuitem action='edit-at-selected-marker'/>
|
||||||
</menu>
|
</menu>
|
||||||
<menu action='KeyMouseActions'>
|
<menu action='KeyMouseActions'>
|
||||||
<menuitem action='select-next-route'/>
|
|
||||||
<menuitem action='select-prev-route'/>
|
|
||||||
<menuitem action='focus-on-clock'/>
|
<menuitem action='focus-on-clock'/>
|
||||||
<menuitem action='GotoZero'/>
|
<menuitem action='GotoZero'/>
|
||||||
<menuitem action='GotoStart'/>
|
<menuitem action='GotoStart'/>
|
||||||
<menuitem action='GotoEnd'/>
|
<menuitem action='GotoEnd'/>
|
||||||
|
<separator/>
|
||||||
|
<menuitem action='step-mouse-mode'/>
|
||||||
<menuitem action='set-mouse-mode-object'/>
|
<menuitem action='set-mouse-mode-object'/>
|
||||||
<menuitem action='set-mouse-mode-range'/>
|
|
||||||
<menuitem action='set-mouse-mode-gain'/>
|
|
||||||
<menuitem action='set-mouse-mode-zoom'/>
|
<menuitem action='set-mouse-mode-zoom'/>
|
||||||
<menuitem action='set-mouse-mode-timefx'/>
|
<menuitem action='set-mouse-mode-timefx'/>
|
||||||
|
<separator/>
|
||||||
<menuitem action='cycle-edit-point'/>
|
<menuitem action='cycle-edit-point'/>
|
||||||
<menuitem action='cycle-edit-point-with-marker'/>
|
<menuitem action='cycle-edit-point-with-marker'/>
|
||||||
<menuitem action='toggle-edit-mode'/>
|
<menuitem action='toggle-edit-mode'/>
|
||||||
|
@ -331,7 +336,6 @@
|
||||||
|
|
||||||
</menubar>
|
</menubar>
|
||||||
|
|
||||||
<<<<<<< .working
|
|
||||||
<popup action="RulerMenuPopup">
|
<popup action="RulerMenuPopup">
|
||||||
<menuitem action="toggle-minsec-ruler"/>
|
<menuitem action="toggle-minsec-ruler"/>
|
||||||
<menuitem action="toggle-samples-ruler"/>
|
<menuitem action="toggle-samples-ruler"/>
|
||||||
|
@ -345,21 +349,8 @@
|
||||||
</popup>
|
</popup>
|
||||||
|
|
||||||
<popup name='processormenu'>
|
<popup name='processormenu'>
|
||||||
=======
|
<menuitem action='delete'/>
|
||||||
<popup action="RulerMenuPopup">
|
|
||||||
<menuitem action="toggle-minsec-ruler"/>
|
|
||||||
<menuitem action="toggle-samples-ruler"/>
|
|
||||||
<menuitem action="toggle-bbt-ruler"/>
|
|
||||||
<separator/>
|
<separator/>
|
||||||
<menuitem action="toggle-meter-ruler"/>
|
|
||||||
<menuitem action="toggle-tempo-ruler"/>
|
|
||||||
<menuitem action="toggle-loop-punch-ruler"/>
|
|
||||||
<menuitem action="toggle-cd-marker-ruler"/>
|
|
||||||
<menuitem action="toggle-marker-ruler"/>
|
|
||||||
</popup>
|
|
||||||
|
|
||||||
<popup name='redirectmenu'>
|
|
||||||
>>>>>>> .merge-right.r3622
|
|
||||||
<menuitem action='newplugin'/>
|
<menuitem action='newplugin'/>
|
||||||
<menuitem action='newinsert'/>
|
<menuitem action='newinsert'/>
|
||||||
<menuitem action='newsend'/>
|
<menuitem action='newsend'/>
|
||||||
|
@ -369,7 +360,6 @@
|
||||||
<menuitem action='cut'/>
|
<menuitem action='cut'/>
|
||||||
<menuitem action='copy'/>
|
<menuitem action='copy'/>
|
||||||
<menuitem action='paste'/>
|
<menuitem action='paste'/>
|
||||||
<menuitem action='delete'/>
|
|
||||||
<separator/>
|
<separator/>
|
||||||
<menuitem action='rename'/>
|
<menuitem action='rename'/>
|
||||||
<separator/>
|
<separator/>
|
||||||
|
|
|
@ -10,18 +10,15 @@
|
||||||
<menuitem action='Save'/>
|
<menuitem action='Save'/>
|
||||||
<menuitem action='Snapshot'/>
|
<menuitem action='Snapshot'/>
|
||||||
<menuitem action='SaveTemplate'/>
|
<menuitem action='SaveTemplate'/>
|
||||||
<menu name='Metadata' action='Metadata'>
|
|
||||||
<menuitem action='EditMetadata'/>
|
|
||||||
<menuitem action='ImportMetadata'/>
|
|
||||||
</menu>
|
|
||||||
<separator/>
|
<separator/>
|
||||||
<menuitem action='AddTrackBus'/>
|
<menuitem action='AddTrackBus'/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<menuitem action='addExistingAudioFiles'/>
|
<menuitem action='addExistingAudioFiles'/>
|
||||||
<menuitem action='importFromSession'/>
|
|
||||||
<separator/>
|
<separator/>
|
||||||
<menu name='Export' action='Export'>
|
<menu name='Export' action='Export'>
|
||||||
<menuitem action='ExportAudio'/>
|
<menuitem action='ExportSession'/>
|
||||||
|
<menuitem action='ExportSelection'/>
|
||||||
|
<menuitem action='ExportRangeMarkers'/>
|
||||||
</menu>
|
</menu>
|
||||||
<separator/>
|
<separator/>
|
||||||
<menu name='Cleanup' action='Cleanup'>
|
<menu name='Cleanup' action='Cleanup'>
|
||||||
|
@ -29,6 +26,10 @@
|
||||||
<menuitem action='FlushWastebasket'/>
|
<menuitem action='FlushWastebasket'/>
|
||||||
</menu>
|
</menu>
|
||||||
<separator/>
|
<separator/>
|
||||||
|
#ifdef GTKOSX
|
||||||
|
<menuitem action='ToggleOptionsEditor'/>
|
||||||
|
<menuitem action='About'/>
|
||||||
|
#endif
|
||||||
<menuitem action='Quit'/>
|
<menuitem action='Quit'/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
||||||
|
@ -59,6 +60,7 @@
|
||||||
<menuitem action='TransitionToReverse'/>
|
<menuitem action='TransitionToReverse'/>
|
||||||
<separator/>
|
<separator/>
|
||||||
|
|
||||||
|
|
||||||
<menu action="MovePlayHeadMenu">
|
<menu action="MovePlayHeadMenu">
|
||||||
<menuitem action='set-playhead'/>
|
<menuitem action='set-playhead'/>
|
||||||
<menuitem action='playhead-to-edit'/>
|
<menuitem action='playhead-to-edit'/>
|
||||||
|
@ -85,7 +87,6 @@
|
||||||
<menuitem action='GotoStart'/>
|
<menuitem action='GotoStart'/>
|
||||||
<menuitem action='GotoEnd'/>
|
<menuitem action='GotoEnd'/>
|
||||||
<menuitem action='GotoWallClock'/>
|
<menuitem action='GotoWallClock'/>
|
||||||
|
|
||||||
</menu>
|
</menu>
|
||||||
|
|
||||||
<menu action="MoveActiveMarkMenu">
|
<menu action="MoveActiveMarkMenu">
|
||||||
|
@ -194,6 +195,7 @@
|
||||||
<menuitem action='select-prev-route'/>
|
<menuitem action='select-prev-route'/>
|
||||||
<menuitem action='brush-at-mouse'/>
|
<menuitem action='brush-at-mouse'/>
|
||||||
<separator/>
|
<separator/>
|
||||||
|
<menuitem action='step-mouse-mode'/>
|
||||||
<menuitem action='set-mouse-mode-object'/>
|
<menuitem action='set-mouse-mode-object'/>
|
||||||
<menuitem action='set-mouse-mode-range'/>
|
<menuitem action='set-mouse-mode-range'/>
|
||||||
<menuitem action='set-mouse-mode-gain'/>
|
<menuitem action='set-mouse-mode-gain'/>
|
||||||
|
@ -209,6 +211,10 @@
|
||||||
<separator/>
|
<separator/>
|
||||||
<menuitem action='break-drag'/>
|
<menuitem action='break-drag'/>
|
||||||
</menu>
|
</menu>
|
||||||
|
#ifndef GTKOSX
|
||||||
|
<separator/>
|
||||||
|
<menuitem action='ToggleOptionsEditor'/>
|
||||||
|
#endif
|
||||||
</menu>
|
</menu>
|
||||||
|
|
||||||
<menu action='RegionMenu'>
|
<menu action='RegionMenu'>
|
||||||
|
@ -236,6 +242,11 @@
|
||||||
<menuitem action='duplicate-region'/>
|
<menuitem action='duplicate-region'/>
|
||||||
<menuitem action='multi-duplicate-region'/>
|
<menuitem action='multi-duplicate-region'/>
|
||||||
<menuitem action='region-fill-track'/>
|
<menuitem action='region-fill-track'/>
|
||||||
|
<separator/>
|
||||||
|
<menuitem action='loop-region'/>
|
||||||
|
<menuitem action='set-punch-from-region'/>
|
||||||
|
<menuitem action='add-range-marker-from-region'/>
|
||||||
|
<menuitem action='add-range-markers-from-region'/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
||||||
<menu action='TrackMenu'>
|
<menu action='TrackMenu'>
|
||||||
|
@ -379,7 +390,6 @@
|
||||||
|
|
||||||
<menuitem action='ToggleMaximalEditor'/>
|
<menuitem action='ToggleMaximalEditor'/>
|
||||||
<menuitem action='show-editor-mixer'/>
|
<menuitem action='show-editor-mixer'/>
|
||||||
<menuitem action='show-editor-list'/>
|
|
||||||
<menuitem action='ToggleMeasureVisibility'/>
|
<menuitem action='ToggleMeasureVisibility'/>
|
||||||
<menuitem action='toggle-waveform-visible'/>
|
<menuitem action='toggle-waveform-visible'/>
|
||||||
<menuitem action='ToggleWaveformsWhileRecording'/>
|
<menuitem action='ToggleWaveformsWhileRecording'/>
|
||||||
|
@ -406,11 +416,10 @@
|
||||||
<separator/>
|
<separator/>
|
||||||
<menuitem action='goto-editor'/>
|
<menuitem action='goto-editor'/>
|
||||||
<menuitem action='goto-mixer'/>
|
<menuitem action='goto-mixer'/>
|
||||||
<menuitem action='ToggleOptionsEditor'/>
|
<menuitem action='toggle-editor-mixer-on-top'/>
|
||||||
<menuitem action='ToggleInspector'/>
|
<menuitem action='ToggleInspector'/>
|
||||||
<menuitem action='ToggleLocations'/>
|
<menuitem action='ToggleLocations'/>
|
||||||
<menuitem action='ToggleKeyEditor'/>
|
<menuitem action='ToggleKeyEditor'/>
|
||||||
<menuitem action='ToggleBundleManager'/>
|
|
||||||
<menuitem action='ToggleThemeManager'/>
|
<menuitem action='ToggleThemeManager'/>
|
||||||
<menuitem action='ToggleBigClock'/>
|
<menuitem action='ToggleBigClock'/>
|
||||||
<menuitem action='toggle-rhythm-ferret'/>
|
<menuitem action='toggle-rhythm-ferret'/>
|
||||||
|
@ -432,7 +441,6 @@
|
||||||
</menu>
|
</menu>
|
||||||
<menu action='SyncMenu'>
|
<menu action='SyncMenu'>
|
||||||
<menuitem action='SendMTC'/>
|
<menuitem action='SendMTC'/>
|
||||||
<menuitem action='SendMidiClock'/>
|
|
||||||
<menuitem action='SendMMC'/>
|
<menuitem action='SendMMC'/>
|
||||||
<menuitem action='UseMMC'/>
|
<menuitem action='UseMMC'/>
|
||||||
</menu>
|
</menu>
|
||||||
|
@ -513,6 +521,7 @@
|
||||||
<menuitem action='SoloInPlace'/>
|
<menuitem action='SoloInPlace'/>
|
||||||
<menuitem action='SoloViaBus'/>
|
<menuitem action='SoloViaBus'/>
|
||||||
<menuitem action='ShowSoloMutes'/>
|
<menuitem action='ShowSoloMutes'/>
|
||||||
|
<menuitem action='SoloMuteOverride'/>
|
||||||
</menu>
|
</menu>
|
||||||
<menu action='Crossfades'>
|
<menu action='Crossfades'>
|
||||||
<menuitem action='toggle-xfades-active'/>
|
<menuitem action='toggle-xfades-active'/>
|
||||||
|
@ -539,6 +548,7 @@
|
||||||
<menu action='MiscOptions'>
|
<menu action='MiscOptions'>
|
||||||
<menuitem action='UseOSC'/>
|
<menuitem action='UseOSC'/>
|
||||||
<menuitem action='StopPluginsWithTransport'/>
|
<menuitem action='StopPluginsWithTransport'/>
|
||||||
|
<menuitem action='NewPluginsActive'/>
|
||||||
<menuitem action='DoNotRunPluginsWhileRecording'/>
|
<menuitem action='DoNotRunPluginsWhileRecording'/>
|
||||||
<menuitem action='LatchedRecordEnable'/>
|
<menuitem action='LatchedRecordEnable'/>
|
||||||
<menuitem action='RegionEquivalentsOverlap'/>
|
<menuitem action='RegionEquivalentsOverlap'/>
|
||||||
|
@ -551,9 +561,9 @@
|
||||||
<menuitem action='PrimaryClockDeltaEditCursor'/>
|
<menuitem action='PrimaryClockDeltaEditCursor'/>
|
||||||
<menuitem action='SecondaryClockDeltaEditCursor'/>
|
<menuitem action='SecondaryClockDeltaEditCursor'/>
|
||||||
<menuitem action='OnlyCopyImportedFiles'/>
|
<menuitem action='OnlyCopyImportedFiles'/>
|
||||||
<menuitem action='ShowTrackMeters'/>
|
|
||||||
<menuitem action='DefaultNarrowMS'/>
|
<menuitem action='DefaultNarrowMS'/>
|
||||||
<menuitem action='link-region-and-track-selection'/>
|
<menuitem action='link-region-and-track-selection'/>
|
||||||
|
<menuitem action='NameNewMarkers'/>
|
||||||
<menuitem action='RubberbandingSnapsToGrid'/>
|
<menuitem action='RubberbandingSnapsToGrid'/>
|
||||||
<menuitem action='AutoAnalyseAudio'/>
|
<menuitem action='AutoAnalyseAudio'/>
|
||||||
<menuitem action='toggle-region-fades'/>
|
<menuitem action='toggle-region-fades'/>
|
||||||
|
@ -579,7 +589,7 @@
|
||||||
<menuitem action="toggle-loop-punch-ruler"/>
|
<menuitem action="toggle-loop-punch-ruler"/>
|
||||||
</popup>
|
</popup>
|
||||||
|
|
||||||
<popup name='processormenu'>
|
<popup name='redirectmenu'>
|
||||||
<menuitem action='newplugin'/>
|
<menuitem action='newplugin'/>
|
||||||
<menuitem action='newinsert'/>
|
<menuitem action='newinsert'/>
|
||||||
<menuitem action='newsend'/>
|
<menuitem action='newsend'/>
|
|
@ -18,6 +18,25 @@ if [ "$MLOCK_LIMIT" != "unlimited" ]; then
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
## Glib atomic test
|
||||||
|
|
||||||
|
GLIB=$(ldd %INSTALL_PREFIX%/%LIBDIR%/ardour2/ardour-%VERSION% 2> /dev/null | grep glib-2.0 | sed 's/.*=> \([^ ]*\) .*/\1/')
|
||||||
|
|
||||||
|
if [ "$GLIB" = "" ]; then
|
||||||
|
echo "WARNING: Could not check your glib-2.0 for mutex locking atomic operations."
|
||||||
|
echo ""
|
||||||
|
elif [ $(nm -D --radix=dec --defined-only -S $GLIB | grep -w g_atomic_int_add | cut -d ' ' -f 2) -gt 32 ]; then
|
||||||
|
echo "WARNING: Your system contains a suspect libglib-2.0. Your version might be built"
|
||||||
|
echo " to use mutex locking atomic operations. This is a fallback solution to"
|
||||||
|
echo " a more robust hardware supported atomicity. It might cause reduced "
|
||||||
|
echo " performance and/or deadlocks. Please contact your distribution support"
|
||||||
|
echo " about this issue."
|
||||||
|
echo " Unfortunately this check is not 100% accurate, so this might not be"
|
||||||
|
echo " the case with your system."
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec %INSTALL_PREFIX%/%LIBDIR%/ardour2/ardour-%VERSION% "$@"
|
||||||
|
|
||||||
## Glib atomic test
|
## Glib atomic test
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -2,12 +2,13 @@
|
||||||
<Ardour>
|
<Ardour>
|
||||||
<Canvas>
|
<Canvas>
|
||||||
<Option name="active crossfade" value="e8ed3d77"/>
|
<Option name="active crossfade" value="e8ed3d77"/>
|
||||||
<Option name="audio bus base" value="dbd1ea68"/>
|
<Option name="audio bus base" value="abe1aa68"/>
|
||||||
<Option name="audio track base" value="c6d3d868"/>
|
<Option name="audio master bus base" value="ebb1b168"/>
|
||||||
|
<Option name="audio track base" value="c3c3c868"/>
|
||||||
<Option name="automation line" value="44bc59ff"/>
|
<Option name="automation line" value="44bc59ff"/>
|
||||||
<Option name="automation track fill" value="a0a0ce68"/>
|
<Option name="automation track fill" value="a0a0ce68"/>
|
||||||
<Option name="automation track outline" value="282828ff"/>
|
<Option name="automation track outline" value="282828ff"/>
|
||||||
<Option name="cdmarkerbar" value="9090a3ff"/>
|
<Option name="cdmarkerbar" value="9090a3a0"/>
|
||||||
<Option name="clipped waveform" value="ff0000e5"/>
|
<Option name="clipped waveform" value="ff0000e5"/>
|
||||||
<Option name="control point fill" value="000000ff"/>
|
<Option name="control point fill" value="000000ff"/>
|
||||||
<Option name="control point outline" value="000000ff"/>
|
<Option name="control point outline" value="000000ff"/>
|
||||||
|
@ -42,13 +43,13 @@
|
||||||
<Option name="location punch" value="7c3a3aff"/>
|
<Option name="location punch" value="7c3a3aff"/>
|
||||||
<Option name="location range" value="497a59ff"/>
|
<Option name="location range" value="497a59ff"/>
|
||||||
<Option name="marker bar separator" value="30303088"/>
|
<Option name="marker bar separator" value="30303088"/>
|
||||||
<Option name="markerbar" value="9898a3ff"/>
|
<Option name="markerbar" value="9898a3a0"/>
|
||||||
<Option name="MarkerDragLine" value="004f00f9"/>
|
<Option name="MarkerDragLine" value="004f00f9"/>
|
||||||
<Option name="marker label" value="000000ff"/>
|
<Option name="marker label" value="000000ff"/>
|
||||||
<Option name="MarkerTrack" value="ddddd8ff"/>
|
<Option name="MarkerTrack" value="ddddd8ff"/>
|
||||||
<Option name="MeasureLineBar" value="8c8c988c"/>
|
<Option name="MeasureLineBar" value="8c8c988c"/>
|
||||||
<Option name="MeasureLineBeat" value="72727266"/>
|
<Option name="MeasureLineBeat" value="72727266"/>
|
||||||
<Option name="meterbar" value="666672ff"/>
|
<Option name="meterbar" value="666672a0"/>
|
||||||
<Option name="MeterColorBase" value="0000ffff"/>
|
<Option name="MeterColorBase" value="0000ffff"/>
|
||||||
<Option name="MeterColorClip" value="ff0000ff"/>
|
<Option name="MeterColorClip" value="ff0000ff"/>
|
||||||
<Option name="MeterColorMid" value="73f9baff"/>
|
<Option name="MeterColorMid" value="73f9baff"/>
|
||||||
|
@ -63,7 +64,7 @@
|
||||||
<Option name="PunchLine" value="a80000ff"/>
|
<Option name="PunchLine" value="a80000ff"/>
|
||||||
<Option name="RangeDragBarRect" value="969696c6"/>
|
<Option name="RangeDragBarRect" value="969696c6"/>
|
||||||
<Option name="RangeDragRect" value="82c696c6"/>
|
<Option name="RangeDragRect" value="82c696c6"/>
|
||||||
<Option name="rangemarker bar" value="7f7f8cff"/>
|
<Option name="rangemarker bar" value="7f7f8ca0"/>
|
||||||
<Option name="RecordingRect" value="e5c6c6ff"/>
|
<Option name="RecordingRect" value="e5c6c6ff"/>
|
||||||
<Option name="region base" value="99a7b584"/>
|
<Option name="region base" value="99a7b584"/>
|
||||||
<Option name="RubberBandRect" value="c6c6c659"/>
|
<Option name="RubberBandRect" value="c6c6c659"/>
|
||||||
|
@ -72,16 +73,19 @@
|
||||||
<Option name="selected region base" value="130505ff"/>
|
<Option name="selected region base" value="130505ff"/>
|
||||||
<Option name="selected waveform fill" value="e6e6fac8"/>
|
<Option name="selected waveform fill" value="e6e6fac8"/>
|
||||||
<Option name="selected waveform outline" value="1a1a1acc"/>
|
<Option name="selected waveform outline" value="1a1a1acc"/>
|
||||||
|
<Option name="recorded region base" value="ad7173ff"/>
|
||||||
|
<Option name="recorded waveform fill" value="74383884"/>
|
||||||
|
<Option name="recorded waveform outline" value="3b0013ff"/>
|
||||||
<Option name="SelectionRect" value="e8f4d377"/>
|
<Option name="SelectionRect" value="e8f4d377"/>
|
||||||
<Option name="Selection" value="636363b2"/>
|
<Option name="Selection" value="636363b2"/>
|
||||||
<Option name="tempo bar" value="72727fff"/>
|
<Option name="tempo bar" value="72727fa0"/>
|
||||||
<Option name="TempoMarker" value="f2425bff"/>
|
<Option name="TempoMarker" value="f2425bff"/>
|
||||||
<Option name="TimeAxisFrame" value="000000cb"/>
|
<Option name="TimeAxisFrame" value="000000cb"/>
|
||||||
<Option name="time-stretch-fill" value="e2b5b596"/>
|
<Option name="time-stretch-fill" value="e2b5b596"/>
|
||||||
<Option name="time-stretch-outline" value="63636396"/>
|
<Option name="time-stretch-outline" value="63636396"/>
|
||||||
<Option name="TransportDragRect" value="969696c6"/>
|
<Option name="TransportDragRect" value="969696c6"/>
|
||||||
<Option name="TransportLoopRect" value="1e7728f9"/>
|
<Option name="TransportLoopRect" value="1e7728f9"/>
|
||||||
<Option name="TransportMarkerBar" value="8c8c96ff"/>
|
<Option name="TransportMarkerBar" value="8c8c96a0"/>
|
||||||
<Option name="TransportPunchRect" value="6d2828e5"/>
|
<Option name="TransportPunchRect" value="6d2828e5"/>
|
||||||
<Option name="TrimHandleLocked" value="ea0f0f28"/>
|
<Option name="TrimHandleLocked" value="ea0f0f28"/>
|
||||||
<Option name="TrimHandle" value="1900ff44"/>
|
<Option name="TrimHandle" value="1900ff44"/>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -18,6 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <sigc++/bind.h>
|
||||||
|
|
||||||
#include <gtkmm2ext/doi.h>
|
#include <gtkmm2ext/doi.h>
|
||||||
|
|
||||||
|
@ -25,6 +26,13 @@
|
||||||
#include "keyboard.h"
|
#include "keyboard.h"
|
||||||
#include "ardour_ui.h"
|
#include "ardour_ui.h"
|
||||||
#include "splash.h"
|
#include "splash.h"
|
||||||
|
#include "public_editor.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
using namespace sigc;
|
||||||
|
using namespace Gtk;
|
||||||
|
|
||||||
|
sigc::signal<void> ArdourDialog::CloseAllDialogs;
|
||||||
|
|
||||||
ArdourDialog::ArdourDialog (string title, bool modal, bool use_seperator)
|
ArdourDialog::ArdourDialog (string title, bool modal, bool use_seperator)
|
||||||
: Dialog (title, modal, use_seperator)
|
: Dialog (title, modal, use_seperator)
|
||||||
|
@ -60,6 +68,7 @@ ArdourDialog::on_leave_notify_event (GdkEventCrossing *ev)
|
||||||
void
|
void
|
||||||
ArdourDialog::on_unmap ()
|
ArdourDialog::on_unmap ()
|
||||||
{
|
{
|
||||||
|
Keyboard::the_keyboard().leave_window (0, this);
|
||||||
Dialog::on_unmap ();
|
Dialog::on_unmap ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,9 +86,17 @@ ArdourDialog::on_show ()
|
||||||
Dialog::on_show ();
|
Dialog::on_show ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArdourDialog::init ()
|
void
|
||||||
|
ArdourDialog::init ()
|
||||||
{
|
{
|
||||||
session = 0;
|
session = 0;
|
||||||
set_type_hint(Gdk::WINDOW_TYPE_HINT_DIALOG);
|
set_type_hint(Gdk::WINDOW_TYPE_HINT_DIALOG);
|
||||||
set_border_width (10);
|
set_border_width (10);
|
||||||
|
CloseAllDialogs.connect (bind (mem_fun (*this, &ArdourDialog::response), RESPONSE_CANCEL));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ArdourDialog::on_key_press_event (GdkEventKey* key)
|
||||||
|
{
|
||||||
|
return Gtk::Dialog::on_key_press_event (key);
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,9 @@ class ArdourDialog : public Gtk::Dialog
|
||||||
ArdourDialog (Gtk::Window& parent, std::string title, bool modal = false, bool use_separator = false);
|
ArdourDialog (Gtk::Window& parent, std::string title, bool modal = false, bool use_separator = false);
|
||||||
~ArdourDialog();
|
~ArdourDialog();
|
||||||
|
|
||||||
|
static int close_all_current_dialogs (int response);
|
||||||
|
|
||||||
|
bool on_key_press_event (GdkEventKey *);
|
||||||
bool on_enter_notify_event (GdkEventCrossing*);
|
bool on_enter_notify_event (GdkEventCrossing*);
|
||||||
bool on_leave_notify_event (GdkEventCrossing*);
|
bool on_leave_notify_event (GdkEventCrossing*);
|
||||||
void on_unmap ();
|
void on_unmap ();
|
||||||
|
@ -55,8 +58,12 @@ class ArdourDialog : public Gtk::Dialog
|
||||||
set_session (0);
|
set_session (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void close_all_dialogs () { CloseAllDialogs(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void init ();
|
void init ();
|
||||||
|
|
||||||
|
static sigc::signal<void> CloseAllDialogs;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __ardour_dialog_h__
|
#endif // __ardour_dialog_h__
|
||||||
|
|
|
@ -211,6 +211,15 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
|
||||||
session_loaded = false;
|
session_loaded = false;
|
||||||
last_speed_displayed = -1.0f;
|
last_speed_displayed = -1.0f;
|
||||||
ignore_dual_punch = false;
|
ignore_dual_punch = false;
|
||||||
|
_mixer_on_top = false;
|
||||||
|
|
||||||
|
roll_button.unset_flags (Gtk::CAN_FOCUS);
|
||||||
|
stop_button.unset_flags (Gtk::CAN_FOCUS);
|
||||||
|
goto_start_button.unset_flags (Gtk::CAN_FOCUS);
|
||||||
|
goto_end_button.unset_flags (Gtk::CAN_FOCUS);
|
||||||
|
auto_loop_button.unset_flags (Gtk::CAN_FOCUS);
|
||||||
|
play_selection_button.unset_flags (Gtk::CAN_FOCUS);
|
||||||
|
rec_button.unset_flags (Gtk::CAN_FOCUS);
|
||||||
|
|
||||||
last_configure_time= 0;
|
last_configure_time= 0;
|
||||||
|
|
||||||
|
@ -352,11 +361,12 @@ ARDOUR_UI::post_engine ()
|
||||||
/* set default clock modes */
|
/* set default clock modes */
|
||||||
|
|
||||||
if (Profile->get_sae()) {
|
if (Profile->get_sae()) {
|
||||||
primary_clock.set_mode (AudioClock::MinSec);
|
primary_clock.set_mode (AudioClock::BBT);
|
||||||
|
secondary_clock.set_mode (AudioClock::MinSec);
|
||||||
} else {
|
} else {
|
||||||
primary_clock.set_mode (AudioClock::SMPTE);
|
primary_clock.set_mode (AudioClock::SMPTE);
|
||||||
|
secondary_clock.set_mode (AudioClock::BBT);
|
||||||
}
|
}
|
||||||
secondary_clock.set_mode (AudioClock::BBT);
|
|
||||||
|
|
||||||
/* start the time-of-day-clock */
|
/* start the time-of-day-clock */
|
||||||
|
|
||||||
|
@ -762,6 +772,7 @@ If you still wish to quit, please use the\n\n\
|
||||||
session->set_deletion_in_progress ();
|
session->set_deletion_in_progress ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ArdourDialog::close_all_dialogs ();
|
||||||
engine->stop (true);
|
engine->stop (true);
|
||||||
save_ardour_state ();
|
save_ardour_state ();
|
||||||
quit ();
|
quit ();
|
||||||
|
@ -1980,14 +1991,6 @@ ARDOUR_UI::transport_rec_enable_blink (bool onoff)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
|
||||||
ARDOUR_UI::hide_and_quit (GdkEventAny *ev, ArdourDialog *window)
|
|
||||||
{
|
|
||||||
window->hide();
|
|
||||||
Gtk::Main::quit ();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ARDOUR_UI::save_template ()
|
ARDOUR_UI::save_template ()
|
||||||
|
|
||||||
|
@ -2255,11 +2258,16 @@ ARDOUR_UI::idle_load (const Glib::ustring& path)
|
||||||
load_session (Glib::path_get_dirname (path), basename_nosuffix (path));
|
load_session (Glib::path_get_dirname (path), basename_nosuffix (path));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
ARDOUR_COMMAND_LINE::session_name = path;
|
ARDOUR_COMMAND_LINE::session_name = path;
|
||||||
|
|
||||||
if (new_session_dialog) {
|
if (new_session_dialog) {
|
||||||
|
|
||||||
|
|
||||||
/* make it break out of Dialog::run() and
|
/* make it break out of Dialog::run() and
|
||||||
start again.
|
start again.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
new_session_dialog->response (1);
|
new_session_dialog->response (1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2329,6 +2337,9 @@ ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be
|
||||||
case Gtk::RESPONSE_CANCEL:
|
case Gtk::RESPONSE_CANCEL:
|
||||||
case Gtk::RESPONSE_DELETE_EVENT:
|
case Gtk::RESPONSE_DELETE_EVENT:
|
||||||
if (!session) {
|
if (!session) {
|
||||||
|
if (engine && engine->running()) {
|
||||||
|
engine->stop (true);
|
||||||
|
}
|
||||||
quit();
|
quit();
|
||||||
}
|
}
|
||||||
new_session_dialog->hide ();
|
new_session_dialog->hide ();
|
||||||
|
@ -2519,10 +2530,10 @@ ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_na
|
||||||
MessageDialog msg (err.what(),
|
MessageDialog msg (err.what(),
|
||||||
true,
|
true,
|
||||||
Gtk::MESSAGE_INFO,
|
Gtk::MESSAGE_INFO,
|
||||||
Gtk::BUTTONS_OK_CANCEL);
|
Gtk::BUTTONS_CLOSE);
|
||||||
|
|
||||||
msg.set_title (_("Loading Error"));
|
msg.set_title (_("Port Registration Error"));
|
||||||
msg.set_secondary_text (_("Click the OK button to try again."));
|
msg.set_secondary_text (_("Click the Close button to try again."));
|
||||||
msg.set_position (Gtk::WIN_POS_CENTER);
|
msg.set_position (Gtk::WIN_POS_CENTER);
|
||||||
pop_back_splash ();
|
pop_back_splash ();
|
||||||
msg.present ();
|
msg.present ();
|
||||||
|
@ -2545,10 +2556,10 @@ ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_na
|
||||||
MessageDialog msg (string_compose(_("Session \"%1 (snapshot %2)\" did not load successfully"), path, snap_name),
|
MessageDialog msg (string_compose(_("Session \"%1 (snapshot %2)\" did not load successfully"), path, snap_name),
|
||||||
true,
|
true,
|
||||||
Gtk::MESSAGE_INFO,
|
Gtk::MESSAGE_INFO,
|
||||||
Gtk::BUTTONS_OK_CANCEL);
|
Gtk::BUTTONS_CLOSE);
|
||||||
|
|
||||||
msg.set_title (_("Loading Error"));
|
msg.set_title (_("Loading Error"));
|
||||||
msg.set_secondary_text (_("Click the OK button to try again."));
|
msg.set_secondary_text (_("Click the Close button to try again."));
|
||||||
msg.set_position (Gtk::WIN_POS_CENTER);
|
msg.set_position (Gtk::WIN_POS_CENTER);
|
||||||
pop_back_splash ();
|
pop_back_splash ();
|
||||||
msg.present ();
|
msg.present ();
|
||||||
|
@ -2630,6 +2641,9 @@ ARDOUR_UI::build_session (const Glib::ustring& path, const Glib::ustring& snap_n
|
||||||
connect_to_session (new_session);
|
connect_to_session (new_session);
|
||||||
|
|
||||||
session_loaded = true;
|
session_loaded = true;
|
||||||
|
|
||||||
|
new_session->save_state(new_session->name());
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2947,8 +2961,6 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
|
||||||
|
|
||||||
/* XXX do something with name template */
|
/* XXX do something with name template */
|
||||||
|
|
||||||
cerr << "Adding with " << input_chan << " in and " << output_chan << "out\n";
|
|
||||||
|
|
||||||
if (add_route_dialog->type() == ARDOUR::DataType::MIDI) {
|
if (add_route_dialog->type() == ARDOUR::DataType::MIDI) {
|
||||||
if (track) {
|
if (track) {
|
||||||
session_add_midi_track(count);
|
session_add_midi_track(count);
|
||||||
|
@ -2996,9 +3008,16 @@ ARDOUR_UI::editor_settings () const
|
||||||
node = Config->instant_xml(X_("Editor"));
|
node = Config->instant_xml(X_("Editor"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!node) {
|
||||||
|
if (getenv("ARDOUR_INSTANT_XML_PATH")) {
|
||||||
|
node = Config->instant_xml(getenv("ARDOUR_INSTANT_XML_PATH"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!node) {
|
if (!node) {
|
||||||
node = new XMLNode (X_("Editor"));
|
node = new XMLNode (X_("Editor"));
|
||||||
}
|
}
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3032,13 +3051,17 @@ ARDOUR_UI::halt_on_xrun_message ()
|
||||||
void
|
void
|
||||||
ARDOUR_UI::xrun_handler(nframes_t where)
|
ARDOUR_UI::xrun_handler(nframes_t where)
|
||||||
{
|
{
|
||||||
|
if (!session) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ENSURE_GUI_THREAD (bind(mem_fun(*this, &ARDOUR_UI::xrun_handler), where));
|
ENSURE_GUI_THREAD (bind(mem_fun(*this, &ARDOUR_UI::xrun_handler), where));
|
||||||
|
|
||||||
if (Config->get_create_xrun_marker() && session->actively_recording()) {
|
if (session && Config->get_create_xrun_marker() && session->actively_recording()) {
|
||||||
create_xrun_marker(where);
|
create_xrun_marker(where);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Config->get_stop_recording_on_xrun() && session->actively_recording()) {
|
if (session && Config->get_stop_recording_on_xrun() && session->actively_recording()) {
|
||||||
halt_on_xrun_message ();
|
halt_on_xrun_message ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,6 +119,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
||||||
void hide_about ();
|
void hide_about ();
|
||||||
|
|
||||||
void idle_load (const Glib::ustring& path);
|
void idle_load (const Glib::ustring& path);
|
||||||
|
void finish();
|
||||||
|
|
||||||
int load_session (const Glib::ustring& path, const Glib::ustring& snapshot, Glib::ustring mix_template = Glib::ustring());
|
int load_session (const Glib::ustring& path, const Glib::ustring& snapshot, Glib::ustring mix_template = Glib::ustring());
|
||||||
bool session_loaded;
|
bool session_loaded;
|
||||||
int build_session (const Glib::ustring& path, const Glib::ustring& snapshot,
|
int build_session (const Glib::ustring& path, const Glib::ustring& snapshot,
|
||||||
|
@ -183,8 +185,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
||||||
|
|
||||||
void name_io_setup (ARDOUR::AudioEngine&, string&, ARDOUR::IO& io, bool in);
|
void name_io_setup (ARDOUR::AudioEngine&, string&, ARDOUR::IO& io, bool in);
|
||||||
|
|
||||||
static gint hide_and_quit (GdkEventAny *ev, ArdourDialog *);
|
|
||||||
|
|
||||||
XMLNode* editor_settings() const;
|
XMLNode* editor_settings() const;
|
||||||
XMLNode* mixer_settings () const;
|
XMLNode* mixer_settings () const;
|
||||||
XMLNode* keyboard_settings () const;
|
XMLNode* keyboard_settings () const;
|
||||||
|
@ -287,8 +287,10 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
||||||
|
|
||||||
Gtk::Tooltips _tooltips;
|
Gtk::Tooltips _tooltips;
|
||||||
|
|
||||||
void goto_editor_window ();
|
void goto_editor_window ();
|
||||||
void goto_mixer_window ();
|
void goto_mixer_window ();
|
||||||
|
void toggle_editor_mixer_on_top ();
|
||||||
|
bool _mixer_on_top;
|
||||||
|
|
||||||
Gtk::Table adjuster_table;
|
Gtk::Table adjuster_table;
|
||||||
Gtk::Frame adjuster_frame;
|
Gtk::Frame adjuster_frame;
|
||||||
|
@ -313,7 +315,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
||||||
void startup ();
|
void startup ();
|
||||||
void shutdown ();
|
void shutdown ();
|
||||||
|
|
||||||
void finish();
|
|
||||||
int ask_about_saving_session (const string & why);
|
int ask_about_saving_session (const string & why);
|
||||||
|
|
||||||
/* periodic safety backup, to be precise */
|
/* periodic safety backup, to be precise */
|
||||||
|
@ -715,6 +716,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
||||||
void set_denormal_model (ARDOUR::DenormalModel);
|
void set_denormal_model (ARDOUR::DenormalModel);
|
||||||
|
|
||||||
void toggle_sync_order_keys ();
|
void toggle_sync_order_keys ();
|
||||||
|
void toggle_new_plugins_active();
|
||||||
void toggle_StopPluginsWithTransport();
|
void toggle_StopPluginsWithTransport();
|
||||||
void toggle_DoNotRunPluginsWhileRecording();
|
void toggle_DoNotRunPluginsWhileRecording();
|
||||||
void toggle_VerifyRemoveLastCapture();
|
void toggle_VerifyRemoveLastCapture();
|
||||||
|
@ -725,6 +727,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
||||||
void toggle_GainReduceFastTransport();
|
void toggle_GainReduceFastTransport();
|
||||||
void toggle_LatchedSolo();
|
void toggle_LatchedSolo();
|
||||||
void toggle_ShowSoloMutes();
|
void toggle_ShowSoloMutes();
|
||||||
|
void toggle_SoloMuteOverride();
|
||||||
void toggle_LatchedRecordEnable ();
|
void toggle_LatchedRecordEnable ();
|
||||||
void toggle_RegionEquivalentsOverlap ();
|
void toggle_RegionEquivalentsOverlap ();
|
||||||
void toggle_PrimaryClockDeltaEditCursor ();
|
void toggle_PrimaryClockDeltaEditCursor ();
|
||||||
|
|
|
@ -192,6 +192,10 @@ ARDOUR_UI::setup_transport ()
|
||||||
transport_tearoff = manage (new TearOff (transport_tearoff_hbox));
|
transport_tearoff = manage (new TearOff (transport_tearoff_hbox));
|
||||||
transport_tearoff->set_name ("TransportBase");
|
transport_tearoff->set_name ("TransportBase");
|
||||||
|
|
||||||
|
if (Profile->get_sae()) {
|
||||||
|
transport_tearoff->set_can_be_torn_off (false);
|
||||||
|
}
|
||||||
|
|
||||||
transport_hbox.pack_start (*transport_tearoff, true, false);
|
transport_hbox.pack_start (*transport_tearoff, true, false);
|
||||||
|
|
||||||
transport_base.set_name ("TransportBase");
|
transport_base.set_name ("TransportBase");
|
||||||
|
|
|
@ -99,6 +99,7 @@ ARDOUR_UI::goto_editor_window ()
|
||||||
|
|
||||||
editor->show_window ();
|
editor->show_window ();
|
||||||
editor->present ();
|
editor->present ();
|
||||||
|
_mixer_on_top = false;
|
||||||
flush_pending ();
|
flush_pending ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,12 +108,30 @@ ARDOUR_UI::goto_mixer_window ()
|
||||||
{
|
{
|
||||||
mixer->show_window ();
|
mixer->show_window ();
|
||||||
mixer->present ();
|
mixer->present ();
|
||||||
|
_mixer_on_top = true;
|
||||||
flush_pending ();
|
flush_pending ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ARDOUR_UI::toggle_editor_mixer_on_top ()
|
||||||
|
{
|
||||||
|
if (_mixer_on_top) {
|
||||||
|
goto_editor_window ();
|
||||||
|
} else {
|
||||||
|
goto_mixer_window ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
ARDOUR_UI::exit_on_main_window_close (GdkEventAny *ev)
|
ARDOUR_UI::exit_on_main_window_close (GdkEventAny *ev)
|
||||||
{
|
{
|
||||||
|
#ifdef TOP_MENUBAR
|
||||||
|
/* just hide the window, and return - the top menu stays up */
|
||||||
|
editor->hide ();
|
||||||
|
return TRUE;
|
||||||
|
#else
|
||||||
|
/* time to get out of here */
|
||||||
finish();
|
finish();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -193,7 +193,7 @@ ARDOUR_UI::install_actions ()
|
||||||
|
|
||||||
common_actions = ActionGroup::create (X_("Common"));
|
common_actions = ActionGroup::create (X_("Common"));
|
||||||
ActionManager::register_action (main_actions, X_("WindowMenu"), _("Window"));
|
ActionManager::register_action (main_actions, X_("WindowMenu"), _("Window"));
|
||||||
ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (mem_fun(*this, &ARDOUR_UI::finish)));
|
ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (hide_return (mem_fun(*this, &ARDOUR_UI::finish))));
|
||||||
|
|
||||||
/* windows visibility actions */
|
/* windows visibility actions */
|
||||||
|
|
||||||
|
@ -201,6 +201,7 @@ ARDOUR_UI::install_actions ()
|
||||||
|
|
||||||
ActionManager::register_action (common_actions, X_("goto-editor"), _("Show Editor"), mem_fun(*this, &ARDOUR_UI::goto_editor_window));
|
ActionManager::register_action (common_actions, X_("goto-editor"), _("Show Editor"), mem_fun(*this, &ARDOUR_UI::goto_editor_window));
|
||||||
ActionManager::register_action (common_actions, X_("goto-mixer"), _("Show Mixer"), mem_fun(*this, &ARDOUR_UI::goto_mixer_window));
|
ActionManager::register_action (common_actions, X_("goto-mixer"), _("Show Mixer"), mem_fun(*this, &ARDOUR_UI::goto_mixer_window));
|
||||||
|
ActionManager::register_action (common_actions, X_("toggle-editor-mixer-on-top"), _("Toggle Editor Mixer on Top"), mem_fun(*this, &ARDOUR_UI::toggle_editor_mixer_on_top));
|
||||||
ActionManager::register_toggle_action (common_actions, X_("ToggleOptionsEditor"), _("Preferences"), mem_fun(*this, &ARDOUR_UI::toggle_options_window));
|
ActionManager::register_toggle_action (common_actions, X_("ToggleOptionsEditor"), _("Preferences"), mem_fun(*this, &ARDOUR_UI::toggle_options_window));
|
||||||
act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Track/Bus Inspector"), mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
|
act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Track/Bus Inspector"), mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
@ -450,6 +451,7 @@ ARDOUR_UI::install_actions ()
|
||||||
|
|
||||||
ActionManager::register_toggle_action (option_actions, X_("SyncEditorAndMixerTrackOrder"), _("Sync Editor and Mixer track order"), mem_fun (*this, &ARDOUR_UI::toggle_sync_order_keys));
|
ActionManager::register_toggle_action (option_actions, X_("SyncEditorAndMixerTrackOrder"), _("Sync Editor and Mixer track order"), mem_fun (*this, &ARDOUR_UI::toggle_sync_order_keys));
|
||||||
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_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
|
||||||
|
ActionManager::register_toggle_action (option_actions, X_("NewPluginsActive"), _("New plugins are active"), mem_fun (*this, &ARDOUR_UI::toggle_new_plugins_active));
|
||||||
ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
|
ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
|
||||||
ActionManager::register_toggle_action (option_actions, X_("PeriodicSafetyBackups"), _("Make periodic safety backups"), mem_fun (*this, &ARDOUR_UI::toggle_PeriodicSafetyBackups));
|
ActionManager::register_toggle_action (option_actions, X_("PeriodicSafetyBackups"), _("Make periodic safety backups"), mem_fun (*this, &ARDOUR_UI::toggle_PeriodicSafetyBackups));
|
||||||
ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
|
ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
|
||||||
|
@ -514,6 +516,8 @@ ARDOUR_UI::install_actions ()
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
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));
|
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);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
act = ActionManager::register_toggle_action (option_actions, X_("SoloMuteOverride"), _("Override muting"), mem_fun (*this, &ARDOUR_UI::toggle_SoloMuteOverride));
|
||||||
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
|
||||||
/* act = ActionManager::register_action (option_actions, X_("DisableAllPlugins"), _("Disable All Plugins"), mem_fun (*this, &ARDOUR_UI::disable_all_plugins));
|
/* act = ActionManager::register_action (option_actions, X_("DisableAllPlugins"), _("Disable All Plugins"), mem_fun (*this, &ARDOUR_UI::disable_all_plugins));
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
@ -562,7 +566,7 @@ ARDOUR_UI::install_actions ()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("JACK does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), HardwareMonitoring));
|
act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("JACK does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), HardwareMonitoring));
|
||||||
if (engine->can_request_hardware_monitoring()) {
|
if (!engine->can_request_hardware_monitoring()) {
|
||||||
act->set_sensitive (false);
|
act->set_sensitive (false);
|
||||||
}
|
}
|
||||||
act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Ardour does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), SoftwareMonitoring));
|
act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Ardour does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), SoftwareMonitoring));
|
||||||
|
|
|
@ -479,6 +479,12 @@ ARDOUR_UI::toggle_editing_space()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ARDOUR_UI::toggle_new_plugins_active ()
|
||||||
|
{
|
||||||
|
ActionManager::toggle_config_state ("options", "NewPluginsActive", &Configuration::set_new_plugins_active, &Configuration::get_new_plugins_active);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ARDOUR_UI::toggle_StopPluginsWithTransport()
|
ARDOUR_UI::toggle_StopPluginsWithTransport()
|
||||||
{
|
{
|
||||||
|
@ -557,6 +563,12 @@ ARDOUR_UI::toggle_ShowSoloMutes()
|
||||||
ActionManager::toggle_config_state ("options", "ShowSoloMutes", &Configuration::set_show_solo_mutes, &Configuration::get_show_solo_mutes);
|
ActionManager::toggle_config_state ("options", "ShowSoloMutes", &Configuration::set_show_solo_mutes, &Configuration::get_show_solo_mutes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ARDOUR_UI::toggle_SoloMuteOverride()
|
||||||
|
{
|
||||||
|
ActionManager::toggle_config_state ("options", "SoloMuteOverride", &Configuration::set_solo_mute_override, &Configuration::get_solo_mute_override);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ARDOUR_UI::toggle_PrimaryClockDeltaEditCursor()
|
ARDOUR_UI::toggle_PrimaryClockDeltaEditCursor()
|
||||||
{
|
{
|
||||||
|
@ -1118,6 +1130,8 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
|
||||||
ActionManager::map_some_state ("options", "LatchedSolo", &Configuration::get_solo_latched);
|
ActionManager::map_some_state ("options", "LatchedSolo", &Configuration::get_solo_latched);
|
||||||
} else if (PARAM_IS ("show-solo-mutes")) {
|
} else if (PARAM_IS ("show-solo-mutes")) {
|
||||||
ActionManager::map_some_state ("options", "ShowSoloMutes", &Configuration::get_show_solo_mutes);
|
ActionManager::map_some_state ("options", "ShowSoloMutes", &Configuration::get_show_solo_mutes);
|
||||||
|
} else if (PARAM_IS ("solo-mute-override")) {
|
||||||
|
ActionManager::map_some_state ("options", "SoloMuteOverride", &Configuration::get_solo_mute_override);
|
||||||
} else if (PARAM_IS ("solo-model")) {
|
} else if (PARAM_IS ("solo-model")) {
|
||||||
map_solo_model ();
|
map_solo_model ();
|
||||||
} else if (PARAM_IS ("auto-play")) {
|
} else if (PARAM_IS ("auto-play")) {
|
||||||
|
@ -1144,6 +1158,8 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
|
||||||
ActionManager::map_some_state ("Transport", "ToggleTimeMaster", &Configuration::get_jack_time_master);
|
ActionManager::map_some_state ("Transport", "ToggleTimeMaster", &Configuration::get_jack_time_master);
|
||||||
} else if (PARAM_IS ("plugins-stop-with-transport")) {
|
} else if (PARAM_IS ("plugins-stop-with-transport")) {
|
||||||
ActionManager::map_some_state ("options", "StopPluginsWithTransport", &Configuration::get_plugins_stop_with_transport);
|
ActionManager::map_some_state ("options", "StopPluginsWithTransport", &Configuration::get_plugins_stop_with_transport);
|
||||||
|
} else if (PARAM_IS ("new-plugins-active")) {
|
||||||
|
ActionManager::map_some_state ("options", "NewPluginsActive", &Configuration::get_new_plugins_active);
|
||||||
} else if (PARAM_IS ("latched-record-enable")) {
|
} else if (PARAM_IS ("latched-record-enable")) {
|
||||||
ActionManager::map_some_state ("options", "LatchedRecordEnable", &Configuration::get_latched_record_enable);
|
ActionManager::map_some_state ("options", "LatchedRecordEnable", &Configuration::get_latched_record_enable);
|
||||||
} else if (PARAM_IS ("verify-remove-last-capture")) {
|
} else if (PARAM_IS ("verify-remove-last-capture")) {
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
#undef Marker
|
||||||
|
#define Marker FuckYouAppleAndYourLackOfNameSpaces
|
||||||
|
|
||||||
#include <pbd/error.h>
|
#include <pbd/error.h>
|
||||||
#include <ardour/audio_unit.h>
|
#include <ardour/audio_unit.h>
|
||||||
#include <ardour/insert.h>
|
#include <ardour/insert.h>
|
||||||
|
@ -18,6 +21,11 @@
|
||||||
#import <AudioUnit/AUCocoaUIView.h>
|
#import <AudioUnit/AUCocoaUIView.h>
|
||||||
#import <CoreAudioKit/AUGenericView.h>
|
#import <CoreAudioKit/AUGenericView.h>
|
||||||
|
|
||||||
|
#undef Marker
|
||||||
|
|
||||||
|
#include "keyboard.h"
|
||||||
|
#include "utils.h"
|
||||||
|
#include "public_editor.h"
|
||||||
#include "i18n.h"
|
#include "i18n.h"
|
||||||
|
|
||||||
using namespace ARDOUR;
|
using namespace ARDOUR;
|
||||||
|
@ -57,15 +65,27 @@ AUPluginUI::AUPluginUI (boost::shared_ptr<PluginInsert> insert)
|
||||||
|
|
||||||
/* stuff some stuff into the top of the window */
|
/* stuff some stuff into the top of the window */
|
||||||
|
|
||||||
|
HBox* smaller_hbox = manage (new HBox);
|
||||||
|
|
||||||
|
smaller_hbox->pack_start (preset_label, false, false, 10);
|
||||||
|
smaller_hbox->pack_start (preset_combo, false, false);
|
||||||
|
smaller_hbox->pack_start (save_button, false, false);
|
||||||
|
smaller_hbox->pack_start (automation_mode_label, false, false);
|
||||||
|
smaller_hbox->pack_start (automation_mode_selector, false, false);
|
||||||
|
smaller_hbox->pack_start (bypass_button, false, true);
|
||||||
|
|
||||||
|
VBox* v1_box = manage (new VBox);
|
||||||
|
VBox* v2_box = manage (new VBox);
|
||||||
|
|
||||||
|
v1_box->pack_start (*smaller_hbox, false, true);
|
||||||
|
v2_box->pack_start (focus_button, false, true);
|
||||||
|
|
||||||
|
top_box.set_homogeneous (false);
|
||||||
top_box.set_spacing (6);
|
top_box.set_spacing (6);
|
||||||
top_box.set_border_width (6);
|
top_box.set_border_width (6);
|
||||||
|
|
||||||
top_box.pack_end (bypass_button, false, true);
|
top_box.pack_end (*v2_box, false, false);
|
||||||
top_box.pack_end (automation_mode_selector, false, false);
|
top_box.pack_end (*v1_box, false, false);
|
||||||
top_box.pack_end (automation_mode_label, false, false);
|
|
||||||
top_box.pack_end (save_button, false, false);
|
|
||||||
top_box.pack_end (preset_combo, false, false);
|
|
||||||
top_box.pack_end (preset_label, false, false);
|
|
||||||
|
|
||||||
set_spacing (6);
|
set_spacing (6);
|
||||||
pack_start (top_box, false, false);
|
pack_start (top_box, false, false);
|
||||||
|
@ -617,14 +637,16 @@ create_au_gui (boost::shared_ptr<PluginInsert> plugin_insert, VBox** box)
|
||||||
bool
|
bool
|
||||||
AUPluginUI::on_focus_in_event (GdkEventFocus* ev)
|
AUPluginUI::on_focus_in_event (GdkEventFocus* ev)
|
||||||
{
|
{
|
||||||
cerr << "au plugin focus in\n";
|
//cerr << "au plugin focus in\n";
|
||||||
|
//Keyboard::magic_widget_grab_focus ();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
AUPluginUI::on_focus_out_event (GdkEventFocus* ev)
|
AUPluginUI::on_focus_out_event (GdkEventFocus* ev)
|
||||||
{
|
{
|
||||||
cerr << "au plugin focus out\n";
|
//cerr << "au plugin focus out\n";
|
||||||
|
//Keyboard::magic_widget_drop_focus ();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -636,14 +636,19 @@ AudioClock::set_bbt (nframes_t when, bool force)
|
||||||
char buf[16];
|
char buf[16];
|
||||||
BBT_Time bbt;
|
BBT_Time bbt;
|
||||||
|
|
||||||
session->tempo_map().bbt_time (when, bbt);
|
|
||||||
|
|
||||||
/* handle a common case */
|
/* handle a common case */
|
||||||
|
if (is_duration) {
|
||||||
if (is_duration && when == 0) {
|
if (when == 0) {
|
||||||
bbt.bars = 0;
|
bbt.bars = 0;
|
||||||
bbt.beats = 0;
|
bbt.beats = 0;
|
||||||
|
bbt.ticks = 0;
|
||||||
|
} else {
|
||||||
|
session->tempo_map().bbt_time (when, bbt);
|
||||||
|
bbt.bars--;
|
||||||
|
bbt.beats--;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
session->tempo_map().bbt_time (when, bbt);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf (buf, "%03" PRIu32, bbt.bars);
|
sprintf (buf, "%03" PRIu32, bbt.bars);
|
||||||
|
@ -1897,6 +1902,11 @@ AudioClock::bbt_frame_from_display (nframes_t pos) const
|
||||||
any.bbt.beats = atoi (beats_label.get_text());
|
any.bbt.beats = atoi (beats_label.get_text());
|
||||||
any.bbt.ticks = atoi (ticks_label.get_text());
|
any.bbt.ticks = atoi (ticks_label.get_text());
|
||||||
|
|
||||||
|
if (is_duration) {
|
||||||
|
any.bbt.bars++;
|
||||||
|
any.bbt.beats++;
|
||||||
|
}
|
||||||
|
|
||||||
nframes_t ret = session->convert_to_frames_at (pos, any);
|
nframes_t ret = session->convert_to_frames_at (pos, any);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -47,16 +47,20 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
|
||||||
_region_view (rv),
|
_region_view (rv),
|
||||||
name_label (_("NAME:")),
|
name_label (_("NAME:")),
|
||||||
audition_button (_("play")),
|
audition_button (_("play")),
|
||||||
time_table (3, 2),
|
time_table (5, 2),
|
||||||
start_clock (X_("regionstart"), true, X_("AudioRegionEditorClock"), true),
|
position_clock (X_("regionposition"), true, X_("AudioRegionEditorClock"), true),
|
||||||
end_clock (X_("regionend"), true, X_("AudioRegionEditorClock"), true),
|
end_clock (X_("regionend"), true, X_("AudioRegionEditorClock"), true),
|
||||||
length_clock (X_("regionlength"), true, X_("AudioRegionEditorClock"), true, true),
|
length_clock (X_("regionlength"), true, X_("AudioRegionEditorClock"), true, true),
|
||||||
sync_offset_clock (X_("regionsyncoffset"), true, X_("AudioRegionEditorClock"), true, true)
|
/* XXX cannot edit sync point or start yet */
|
||||||
|
sync_offset_clock (X_("regionsyncoffset"), true, X_("AudioRegionEditorClock"), false),
|
||||||
|
start_clock (X_("regionstart"), true, X_("AudioRegionEditorClock"), false)
|
||||||
|
|
||||||
{
|
{
|
||||||
start_clock.set_session (&_session);
|
position_clock.set_session (&_session);
|
||||||
end_clock.set_session (&_session);
|
end_clock.set_session (&_session);
|
||||||
length_clock.set_session (&_session);
|
length_clock.set_session (&_session);
|
||||||
|
sync_offset_clock.set_session (&_session);
|
||||||
|
start_clock.set_session (&_session);
|
||||||
|
|
||||||
name_entry.set_name ("AudioRegionEditorEntry");
|
name_entry.set_name ("AudioRegionEditorEntry");
|
||||||
name_label.set_name ("AudioRegionEditorLabel");
|
name_label.set_name ("AudioRegionEditorLabel");
|
||||||
|
@ -79,27 +83,35 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
|
||||||
top_row_hbox.pack_start (name_hbox, true, true);
|
top_row_hbox.pack_start (name_hbox, true, true);
|
||||||
top_row_hbox.pack_end (top_row_button_hbox, true, true);
|
top_row_hbox.pack_end (top_row_button_hbox, true, true);
|
||||||
|
|
||||||
start_label.set_name ("AudioRegionEditorLabel");
|
position_label.set_name ("AudioRegionEditorLabel");
|
||||||
start_label.set_text (_("START:"));
|
position_label.set_text (_("POSITION:"));
|
||||||
end_label.set_name ("AudioRegionEditorLabel");
|
end_label.set_name ("AudioRegionEditorLabel");
|
||||||
end_label.set_text (_("END:"));
|
end_label.set_text (_("END:"));
|
||||||
length_label.set_name ("AudioRegionEditorLabel");
|
length_label.set_name ("AudioRegionEditorLabel");
|
||||||
length_label.set_text (_("LENGTH:"));
|
length_label.set_text (_("LENGTH:"));
|
||||||
|
sync_label.set_name ("AudioRegionEditorLabel");
|
||||||
|
sync_label.set_text (_("SYNC POINT:"));
|
||||||
|
start_label.set_name ("AudioRegionEditorLabel");
|
||||||
|
start_label.set_text (_("FILE START:"));
|
||||||
|
|
||||||
time_table.set_col_spacings (2);
|
time_table.set_col_spacings (2);
|
||||||
time_table.set_row_spacings (5);
|
time_table.set_row_spacings (5);
|
||||||
time_table.set_border_width (5);
|
time_table.set_border_width (5);
|
||||||
|
|
||||||
start_alignment.set (1.0, 0.5);
|
position_alignment.set (1.0, 0.5);
|
||||||
end_alignment.set (1.0, 0.5);
|
end_alignment.set (1.0, 0.5);
|
||||||
length_alignment.set (1.0, 0.5);
|
length_alignment.set (1.0, 0.5);
|
||||||
|
sync_alignment.set (1.0, 0.5);
|
||||||
|
start_alignment.set (1.0, 0.5);
|
||||||
|
|
||||||
start_alignment.add (start_label);
|
position_alignment.add (position_label);
|
||||||
end_alignment.add (end_label);
|
end_alignment.add (end_label);
|
||||||
length_alignment.add (length_label);
|
length_alignment.add (length_label);
|
||||||
|
sync_alignment.add (sync_label);
|
||||||
|
start_alignment.add (start_label);
|
||||||
|
|
||||||
time_table.attach (start_alignment, 0, 1, 0, 1, Gtk::FILL, Gtk::FILL);
|
time_table.attach (position_alignment, 0, 1, 0, 1, Gtk::FILL, Gtk::FILL);
|
||||||
time_table.attach (start_clock, 1, 2, 0, 1, Gtk::FILL, Gtk::FILL);
|
time_table.attach (position_clock, 1, 2, 0, 1, Gtk::FILL, Gtk::FILL);
|
||||||
|
|
||||||
time_table.attach (end_alignment, 0, 1, 1, 2, Gtk::FILL, Gtk::FILL);
|
time_table.attach (end_alignment, 0, 1, 1, 2, Gtk::FILL, Gtk::FILL);
|
||||||
time_table.attach (end_clock, 1, 2, 1, 2, Gtk::FILL, Gtk::FILL);
|
time_table.attach (end_clock, 1, 2, 1, 2, Gtk::FILL, Gtk::FILL);
|
||||||
|
@ -107,6 +119,12 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
|
||||||
time_table.attach (length_alignment, 0, 1, 2, 3, Gtk::FILL, Gtk::FILL);
|
time_table.attach (length_alignment, 0, 1, 2, 3, Gtk::FILL, Gtk::FILL);
|
||||||
time_table.attach (length_clock, 1, 2, 2, 3, Gtk::FILL, Gtk::FILL);
|
time_table.attach (length_clock, 1, 2, 2, 3, Gtk::FILL, Gtk::FILL);
|
||||||
|
|
||||||
|
time_table.attach (sync_alignment, 0, 1, 3, 4, Gtk::FILL, Gtk::FILL);
|
||||||
|
time_table.attach (sync_offset_clock, 1, 2, 3, 4, Gtk::FILL, Gtk::FILL);
|
||||||
|
|
||||||
|
time_table.attach (start_alignment, 0, 1, 4, 5, Gtk::FILL, Gtk::FILL);
|
||||||
|
time_table.attach (start_clock, 1, 2, 4, 5, Gtk::FILL, Gtk::FILL);
|
||||||
|
|
||||||
lower_hbox.pack_start (time_table, true, true);
|
lower_hbox.pack_start (time_table, true, true);
|
||||||
lower_hbox.pack_start (sep1, false, false);
|
lower_hbox.pack_start (sep1, false, false);
|
||||||
lower_hbox.pack_start (sep2, false, false);
|
lower_hbox.pack_start (sep2, false, false);
|
||||||
|
@ -128,7 +146,7 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
|
||||||
show_all();
|
show_all();
|
||||||
|
|
||||||
name_changed ();
|
name_changed ();
|
||||||
bounds_changed (Change (StartChanged|LengthChanged|PositionChanged));
|
bounds_changed (Change (StartChanged|LengthChanged|PositionChanged|StartChanged|Region::SyncOffsetChanged));
|
||||||
|
|
||||||
_region->StateChanged.connect (mem_fun(*this, &AudioRegionEditor::region_changed));
|
_region->StateChanged.connect (mem_fun(*this, &AudioRegionEditor::region_changed));
|
||||||
|
|
||||||
|
@ -147,7 +165,8 @@ AudioRegionEditor::region_changed (Change what_changed)
|
||||||
if (what_changed & NameChanged) {
|
if (what_changed & NameChanged) {
|
||||||
name_changed ();
|
name_changed ();
|
||||||
}
|
}
|
||||||
if (what_changed & BoundsChanged) {
|
|
||||||
|
if (what_changed & Change (BoundsChanged|StartChanged|Region::SyncOffsetChanged)) {
|
||||||
bounds_changed (what_changed);
|
bounds_changed (what_changed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -190,7 +209,7 @@ AudioRegionEditor::connect_editor_events ()
|
||||||
{
|
{
|
||||||
name_entry.signal_changed().connect (mem_fun(*this, &AudioRegionEditor::name_entry_changed));
|
name_entry.signal_changed().connect (mem_fun(*this, &AudioRegionEditor::name_entry_changed));
|
||||||
|
|
||||||
start_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::start_clock_changed));
|
position_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::position_clock_changed));
|
||||||
end_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::end_clock_changed));
|
end_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::end_clock_changed));
|
||||||
length_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::length_clock_changed));
|
length_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::length_clock_changed));
|
||||||
|
|
||||||
|
@ -199,7 +218,7 @@ AudioRegionEditor::connect_editor_events ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AudioRegionEditor::start_clock_changed ()
|
AudioRegionEditor::position_clock_changed ()
|
||||||
{
|
{
|
||||||
_session.begin_reversible_command (_("change region start position"));
|
_session.begin_reversible_command (_("change region start position"));
|
||||||
|
|
||||||
|
@ -207,7 +226,7 @@ AudioRegionEditor::start_clock_changed ()
|
||||||
|
|
||||||
if (pl) {
|
if (pl) {
|
||||||
XMLNode &before = pl->get_state();
|
XMLNode &before = pl->get_state();
|
||||||
_region->set_position (start_clock.current_time(), this);
|
_region->set_position (position_clock.current_time(), this);
|
||||||
XMLNode &after = pl->get_state();
|
XMLNode &after = pl->get_state();
|
||||||
_session.add_command(new MementoCommand<Playlist>(*pl, &before, &after));
|
_session.add_command(new MementoCommand<Playlist>(*pl, &before, &after));
|
||||||
}
|
}
|
||||||
|
@ -276,10 +295,24 @@ AudioRegionEditor::name_changed ()
|
||||||
void
|
void
|
||||||
AudioRegionEditor::bounds_changed (Change what_changed)
|
AudioRegionEditor::bounds_changed (Change what_changed)
|
||||||
{
|
{
|
||||||
if (what_changed & Change ((PositionChanged|LengthChanged))) {
|
if ((what_changed & Change (PositionChanged|LengthChanged)) == Change (PositionChanged|LengthChanged)) {
|
||||||
start_clock.set (_region->position(), true);
|
position_clock.set (_region->position(), true);
|
||||||
end_clock.set (_region->position() + _region->length(), true);
|
end_clock.set (_region->position() + _region->length(), true);
|
||||||
length_clock.set (_region->length(), true);
|
length_clock.set (_region->length(), true);
|
||||||
|
} else if (what_changed & Change (PositionChanged)) {
|
||||||
|
position_clock.set (_region->position(), true);
|
||||||
|
end_clock.set (_region->position() + _region->length(), true);
|
||||||
|
} else if (what_changed & Change (LengthChanged)) {
|
||||||
|
end_clock.set (_region->position() + _region->length(), true);
|
||||||
|
length_clock.set (_region->length(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (what_changed & Region::SyncOffsetChanged) {
|
||||||
|
sync_offset_clock.set (_region->sync_position(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (what_changed & StartChanged) {
|
||||||
|
start_clock.set (_region->start(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,17 +74,22 @@ class AudioRegionEditor : public RegionEditor
|
||||||
|
|
||||||
Gtk::Table time_table;
|
Gtk::Table time_table;
|
||||||
|
|
||||||
Gtk::Label start_label;
|
Gtk::Label position_label;
|
||||||
Gtk::Label end_label;
|
Gtk::Label end_label;
|
||||||
Gtk::Label length_label;
|
Gtk::Label length_label;
|
||||||
Gtk::Alignment start_alignment;
|
Gtk::Label sync_label;
|
||||||
|
Gtk::Label start_label;
|
||||||
|
Gtk::Alignment position_alignment;
|
||||||
Gtk::Alignment end_alignment;
|
Gtk::Alignment end_alignment;
|
||||||
Gtk::Alignment length_alignment;
|
Gtk::Alignment length_alignment;
|
||||||
|
Gtk::Alignment sync_alignment;
|
||||||
|
Gtk::Alignment start_alignment;
|
||||||
|
|
||||||
AudioClock start_clock;
|
AudioClock position_clock;
|
||||||
AudioClock end_clock;
|
AudioClock end_clock;
|
||||||
AudioClock length_clock;
|
AudioClock length_clock;
|
||||||
AudioClock sync_offset_clock;
|
AudioClock sync_offset_clock;
|
||||||
|
AudioClock start_clock;
|
||||||
|
|
||||||
Gtk::HSeparator sep3;
|
Gtk::HSeparator sep3;
|
||||||
Gtk::VSeparator sep1;
|
Gtk::VSeparator sep1;
|
||||||
|
@ -99,7 +104,7 @@ class AudioRegionEditor : public RegionEditor
|
||||||
void activation ();
|
void activation ();
|
||||||
|
|
||||||
void name_entry_changed ();
|
void name_entry_changed ();
|
||||||
void start_clock_changed ();
|
void position_clock_changed ();
|
||||||
void end_clock_changed ();
|
void end_clock_changed ();
|
||||||
void length_clock_changed ();
|
void length_clock_changed ();
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include <ardour/playlist_templates.h>
|
#include <ardour/playlist_templates.h>
|
||||||
#include <ardour/source.h>
|
#include <ardour/source.h>
|
||||||
#include <ardour/region_factory.h>
|
#include <ardour/region_factory.h>
|
||||||
|
#include <ardour/profile.h>
|
||||||
|
|
||||||
#include "audio_streamview.h"
|
#include "audio_streamview.h"
|
||||||
#include "audio_region_view.h"
|
#include "audio_region_view.h"
|
||||||
|
@ -139,7 +140,7 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
|
||||||
_samples_per_unit, region_color, recording, TimeAxisViewItem::Visibility(TimeAxisViewItem::ShowFrame | TimeAxisViewItem::HideFrameRight));
|
_samples_per_unit, region_color, recording, TimeAxisViewItem::Visibility(TimeAxisViewItem::ShowFrame | TimeAxisViewItem::HideFrameRight));
|
||||||
} else {
|
} else {
|
||||||
region_view = new AudioRegionView (canvas_group, _trackview, region,
|
region_view = new AudioRegionView (canvas_group, _trackview, region,
|
||||||
_samples_per_unit, region_color);
|
_samples_per_unit, region_color);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Destructive:
|
case Destructive:
|
||||||
|
@ -821,9 +822,12 @@ AudioStreamView::color_handler ()
|
||||||
|
|
||||||
//case cAudioBusBase:
|
//case cAudioBusBase:
|
||||||
if (!_trackview.is_track()) {
|
if (!_trackview.is_track()) {
|
||||||
canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_AudioBusBase.get();
|
if (Profile->get_sae() && _trackview.route()->is_master()) {
|
||||||
|
canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_AudioMasterBusBase.get();
|
||||||
|
} else {
|
||||||
|
canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_AudioBusBase.get();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -377,6 +377,65 @@ AudioTimeAxisView::update_pans (bool show)
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
|
void
|
||||||
|
AudioTimeAxisView::toggle_gain_track ()
|
||||||
|
{
|
||||||
|
bool showit = gain_automation_item->get_active();
|
||||||
|
|
||||||
|
if (showit != gain_track->marked_for_display()) {
|
||||||
|
if (showit) {
|
||||||
|
gain_track->set_marked_for_display (true);
|
||||||
|
gain_track->canvas_display->show();
|
||||||
|
gain_track->canvas_background->show();
|
||||||
|
gain_track->get_state_node()->add_property ("shown", X_("yes"));
|
||||||
|
} else {
|
||||||
|
gain_track->set_marked_for_display (false);
|
||||||
|
gain_track->hide ();
|
||||||
|
gain_track->get_state_node()->add_property ("shown", X_("no"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* now trigger a redisplay */
|
||||||
|
|
||||||
|
if (!no_redraw) {
|
||||||
|
_route->gui_changed (X_("visible_tracks"), (void *) 0); /* EMIT_SIGNAL */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AudioTimeAxisView::gain_hidden ()
|
||||||
|
{
|
||||||
|
gain_track->get_state_node()->add_property (X_("shown"), X_("no"));
|
||||||
|
|
||||||
|
if (gain_automation_item && !_hidden) {
|
||||||
|
gain_automation_item->set_active (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
_route->gui_changed ("visible_tracks", (void *) 0); /* EMIT_SIGNAL */
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AudioTimeAxisView::toggle_pan_track ()
|
||||||
|
{
|
||||||
|
bool showit = pan_automation_item->get_active();
|
||||||
|
|
||||||
|
if (showit != pan_track->marked_for_display()) {
|
||||||
|
if (showit) {
|
||||||
|
pan_track->set_marked_for_display (true);
|
||||||
|
pan_track->canvas_display->show();
|
||||||
|
pan_track->canvas_background->show();
|
||||||
|
pan_track->get_state_node()->add_property ("shown", X_("yes"));
|
||||||
|
} else {
|
||||||
|
pan_track->set_marked_for_display (false);
|
||||||
|
pan_track->hide ();
|
||||||
|
pan_track->get_state_node()->add_property ("shown", X_("no"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* now trigger a redisplay */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
AudioTimeAxisView::show_all_automation ()
|
AudioTimeAxisView::show_all_automation ()
|
||||||
|
|
|
@ -67,7 +67,6 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
|
||||||
_base_rect (0),
|
_base_rect (0),
|
||||||
_view (show_regions ? new AutomationStreamView(*this) : NULL),
|
_view (show_regions ? new AutomationStreamView(*this) : NULL),
|
||||||
_name (nom),
|
_name (nom),
|
||||||
height_button (_("h")),
|
|
||||||
clear_button (_("clear")),
|
clear_button (_("clear")),
|
||||||
auto_button (X_("")) /* force addition of a label */
|
auto_button (X_("")) /* force addition of a label */
|
||||||
{
|
{
|
||||||
|
@ -90,7 +89,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
|
||||||
_base_rect = new SimpleRect(*canvas_display);
|
_base_rect = new SimpleRect(*canvas_display);
|
||||||
_base_rect->property_x1() = 0.0;
|
_base_rect->property_x1() = 0.0;
|
||||||
_base_rect->property_y1() = 0.0;
|
_base_rect->property_y1() = 0.0;
|
||||||
_base_rect->property_x2() = editor.frame_to_pixel (max_frames);
|
_base_rect->property_x2() = LONG_MAX - 2;
|
||||||
_base_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_AutomationTrackOutline.get();
|
_base_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_AutomationTrackOutline.get();
|
||||||
|
|
||||||
/* outline ends and bottom */
|
/* outline ends and bottom */
|
||||||
|
@ -106,14 +105,16 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
|
||||||
|
|
||||||
hide_button.add (*(manage (new Gtk::Image (::get_icon("hide")))));
|
hide_button.add (*(manage (new Gtk::Image (::get_icon("hide")))));
|
||||||
|
|
||||||
height_button.set_name ("TrackSizeButton");
|
|
||||||
auto_button.set_name ("TrackVisualButton");
|
auto_button.set_name ("TrackVisualButton");
|
||||||
clear_button.set_name ("TrackVisualButton");
|
clear_button.set_name ("TrackVisualButton");
|
||||||
hide_button.set_name ("TrackRemoveButton");
|
hide_button.set_name ("TrackRemoveButton");
|
||||||
|
|
||||||
|
auto_button.unset_flags (Gtk::CAN_FOCUS);
|
||||||
|
clear_button.unset_flags (Gtk::CAN_FOCUS);
|
||||||
|
hide_button.unset_flags (Gtk::CAN_FOCUS);
|
||||||
|
|
||||||
controls_table.set_no_show_all();
|
controls_table.set_no_show_all();
|
||||||
|
|
||||||
ARDOUR_UI::instance()->tooltips().set_tip(height_button, _("track height"));
|
|
||||||
ARDOUR_UI::instance()->tooltips().set_tip(auto_button, _("automation state"));
|
ARDOUR_UI::instance()->tooltips().set_tip(auto_button, _("automation state"));
|
||||||
ARDOUR_UI::instance()->tooltips().set_tip(clear_button, _("clear track"));
|
ARDOUR_UI::instance()->tooltips().set_tip(clear_button, _("clear track"));
|
||||||
ARDOUR_UI::instance()->tooltips().set_tip(hide_button, _("hide track"));
|
ARDOUR_UI::instance()->tooltips().set_tip(hide_button, _("hide track"));
|
||||||
|
@ -174,7 +175,6 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
|
||||||
|
|
||||||
/* add the buttons */
|
/* add the buttons */
|
||||||
controls_table.attach (hide_button, 0, 1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
|
controls_table.attach (hide_button, 0, 1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
|
||||||
controls_table.attach (height_button, 0, 1, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
|
|
||||||
|
|
||||||
controls_table.attach (auto_button, 5, 8, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
|
controls_table.attach (auto_button, 5, 8, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
|
||||||
controls_table.attach (clear_button, 5, 8, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
|
controls_table.attach (clear_button, 5, 8, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
|
||||||
|
@ -184,7 +184,6 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
|
||||||
|
|
||||||
controls_table.show_all ();
|
controls_table.show_all ();
|
||||||
|
|
||||||
height_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::height_clicked));
|
|
||||||
clear_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::clear_clicked));
|
clear_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::clear_clicked));
|
||||||
hide_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::hide_clicked));
|
hide_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::hide_clicked));
|
||||||
auto_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::auto_clicked));
|
auto_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::auto_clicked));
|
||||||
|
@ -361,12 +360,6 @@ AutomationTimeAxisView::set_interpolation (AutomationList::InterpolationStyle st
|
||||||
_line->set_interpolation(style);
|
_line->set_interpolation(style);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
AutomationTimeAxisView::height_clicked ()
|
|
||||||
{
|
|
||||||
popup_size_menu (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
AutomationTimeAxisView::clear_clicked ()
|
AutomationTimeAxisView::clear_clicked ()
|
||||||
{
|
{
|
||||||
|
@ -380,10 +373,9 @@ void
|
||||||
AutomationTimeAxisView::set_height (uint32_t h)
|
AutomationTimeAxisView::set_height (uint32_t h)
|
||||||
{
|
{
|
||||||
bool changed = (height != (uint32_t) h) || first_call_to_set_height;
|
bool changed = (height != (uint32_t) h) || first_call_to_set_height;
|
||||||
bool changed_between_small_and_normal = ( (h == hSmall || h == hSmaller) ^ (height == hSmall || height == hSmaller) );
|
bool changed_between_small_and_normal = ( (height < hNormal && h >= hNormal) || (height >= hNormal || h < hNormal) );
|
||||||
|
|
||||||
TimeAxisView* state_parent = get_parent_with_state ();
|
TimeAxisView* state_parent = get_parent_with_state ();
|
||||||
|
|
||||||
assert(state_parent);
|
assert(state_parent);
|
||||||
XMLNode* xml_node = state_parent->get_automation_child_xml_node (_control->parameter());
|
XMLNode* xml_node = state_parent->get_automation_child_xml_node (_control->parameter());
|
||||||
|
|
||||||
|
@ -427,7 +419,6 @@ AutomationTimeAxisView::set_height (uint32_t h)
|
||||||
name_hbox.show_all ();
|
name_hbox.show_all ();
|
||||||
|
|
||||||
auto_button.show();
|
auto_button.show();
|
||||||
height_button.show();
|
|
||||||
clear_button.show();
|
clear_button.show();
|
||||||
hide_button.show_all();
|
hide_button.show_all();
|
||||||
|
|
||||||
|
@ -446,15 +437,11 @@ AutomationTimeAxisView::set_height (uint32_t h)
|
||||||
name_hbox.show_all ();
|
name_hbox.show_all ();
|
||||||
|
|
||||||
auto_button.hide();
|
auto_button.hide();
|
||||||
height_button.hide();
|
|
||||||
clear_button.hide();
|
clear_button.hide();
|
||||||
hide_button.hide();
|
hide_button.hide();
|
||||||
}
|
}
|
||||||
} else if (h >= hNormal){
|
} else if (h >= hNormal){
|
||||||
auto_button.show();
|
cerr << "track grown, but neither changed_between_small_and_normal nor first_call_to_set_height set!" << endl;
|
||||||
height_button.show();
|
|
||||||
clear_button.show();
|
|
||||||
hide_button.show_all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
|
|
|
@ -122,7 +122,6 @@ class AutomationTimeAxisView : public TimeAxisView {
|
||||||
bool first_call_to_set_height;
|
bool first_call_to_set_height;
|
||||||
|
|
||||||
Gtk::Button hide_button;
|
Gtk::Button hide_button;
|
||||||
Gtk::Button height_button;
|
|
||||||
Gtk::Button clear_button;
|
Gtk::Button clear_button;
|
||||||
Gtk::Button auto_button;
|
Gtk::Button auto_button;
|
||||||
Gtk::Menu* automation_menu;
|
Gtk::Menu* automation_menu;
|
||||||
|
@ -140,7 +139,6 @@ class AutomationTimeAxisView : public TimeAxisView {
|
||||||
void add_line (boost::shared_ptr<AutomationLine>);
|
void add_line (boost::shared_ptr<AutomationLine>);
|
||||||
|
|
||||||
void clear_clicked ();
|
void clear_clicked ();
|
||||||
void height_clicked ();
|
|
||||||
void hide_clicked ();
|
void hide_clicked ();
|
||||||
void auto_clicked ();
|
void auto_clicked ();
|
||||||
|
|
||||||
|
|
|
@ -1359,8 +1359,9 @@ gnome_canvas_waveview_render (GnomeCanvasItem *item,
|
||||||
prev_pymax = pymax;
|
prev_pymax = pymax;
|
||||||
prev_pymin = pymin;
|
prev_pymin = pymin;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if(waveview->filled && rectify) {
|
} else if (waveview->filled && rectify) {
|
||||||
|
|
||||||
int prev_pymax = -1;
|
int prev_pymax = -1;
|
||||||
int last_pymax = -1;
|
int last_pymax = -1;
|
||||||
int next_pymax;
|
int next_pymax;
|
||||||
|
@ -1611,11 +1612,10 @@ gnome_canvas_waveview_draw (GnomeCanvasItem *item,
|
||||||
int cache_index;
|
int cache_index;
|
||||||
double zbegin, zend;
|
double zbegin, zend;
|
||||||
gboolean rectify;
|
gboolean rectify;
|
||||||
double n;
|
|
||||||
double origin;
|
double origin;
|
||||||
double clip_length;
|
double clip_length;
|
||||||
double xoff;
|
double xoff;
|
||||||
double yoff;
|
double yoff = 0.0;
|
||||||
double ulx;
|
double ulx;
|
||||||
double uly;
|
double uly;
|
||||||
double lrx;
|
double lrx;
|
||||||
|
@ -1748,7 +1748,8 @@ gnome_canvas_waveview_draw (GnomeCanvasItem *item,
|
||||||
|
|
||||||
yoff = origin - (waveview->half_height * max) + 0.5;
|
yoff = origin - (waveview->half_height * max) + 0.5;
|
||||||
|
|
||||||
if (n == ulx) {
|
if (xoff == ulx) {
|
||||||
|
/* first point */
|
||||||
cairo_move_to (cr, xoff+0.5, yoff);
|
cairo_move_to (cr, xoff+0.5, yoff);
|
||||||
} else {
|
} else {
|
||||||
cairo_line_to (cr, xoff+0.5, yoff);
|
cairo_line_to (cr, xoff+0.5, yoff);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
CANVAS_VARIABLE(canvasvar_ActiveCrossfade, "active crossfade")
|
CANVAS_VARIABLE(canvasvar_ActiveCrossfade, "active crossfade")
|
||||||
CANVAS_VARIABLE(canvasvar_AudioBusBase, "audio bus base")
|
CANVAS_VARIABLE(canvasvar_AudioBusBase, "audio bus base")
|
||||||
|
CANVAS_VARIABLE(canvasvar_AudioMasterBusBase, "audio master bus base")
|
||||||
CANVAS_VARIABLE(canvasvar_AudioTrackBase, "audio track base")
|
CANVAS_VARIABLE(canvasvar_AudioTrackBase, "audio track base")
|
||||||
CANVAS_VARIABLE(canvasvar_AutomationLine, "automation line")
|
CANVAS_VARIABLE(canvasvar_AutomationLine, "automation line")
|
||||||
CANVAS_VARIABLE(canvasvar_AutomationTrackFill, "automation track fill")
|
CANVAS_VARIABLE(canvasvar_AutomationTrackFill, "automation track fill")
|
||||||
|
|
|
@ -163,3 +163,16 @@ ARDOUR_UI::platform_setup ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
cocoa_open_url (const char* uri)
|
||||||
|
{
|
||||||
|
NSString* struri = [[NSString alloc] initWithUTF8String:uri];
|
||||||
|
NSURL* nsurl = [[NSURL alloc] initWithString:struri];
|
||||||
|
|
||||||
|
bool ret = [[NSWorkspace sharedWorkspace] openURL:nsurl];
|
||||||
|
|
||||||
|
[struri release];
|
||||||
|
[nsurl release];
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include <ardour/audiosource.h>
|
#include <ardour/audiosource.h>
|
||||||
#include <ardour/playlist_templates.h>
|
#include <ardour/playlist_templates.h>
|
||||||
#include <ardour/region_factory.h>
|
#include <ardour/region_factory.h>
|
||||||
|
#include <ardour/profile.h>
|
||||||
|
|
||||||
#include <gtkmm2ext/gtk_ui.h>
|
#include <gtkmm2ext/gtk_ui.h>
|
||||||
|
|
||||||
|
@ -48,6 +49,7 @@
|
||||||
#include "canvas_impl.h"
|
#include "canvas_impl.h"
|
||||||
#include "simplerect.h"
|
#include "simplerect.h"
|
||||||
#include "waveview.h"
|
#include "waveview.h"
|
||||||
|
#include "actions.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace ARDOUR;
|
using namespace ARDOUR;
|
||||||
|
@ -99,6 +101,8 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d
|
||||||
set_name ("CrossfadeEditWindow");
|
set_name ("CrossfadeEditWindow");
|
||||||
set_position (Gtk::WIN_POS_MOUSE);
|
set_position (Gtk::WIN_POS_MOUSE);
|
||||||
|
|
||||||
|
add_accel_group (ActionManager::ui_manager->get_accel_group());
|
||||||
|
|
||||||
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::POINTER_MOTION_MASK);
|
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||||
|
|
||||||
RadioButtonGroup sel_but_group = select_in_button.get_group();
|
RadioButtonGroup sel_but_group = select_in_button.get_group();
|
||||||
|
@ -198,6 +202,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d
|
||||||
pbutton->add (*pxmap);
|
pbutton->add (*pxmap);
|
||||||
pbutton->set_name ("CrossfadeEditButton");
|
pbutton->set_name ("CrossfadeEditButton");
|
||||||
pbutton->signal_clicked().connect (bind (mem_fun(*this, &CrossfadeEditor::apply_preset), *i));
|
pbutton->signal_clicked().connect (bind (mem_fun(*this, &CrossfadeEditor::apply_preset), *i));
|
||||||
|
ARDOUR_UI::instance()->set_tip (pbutton, (*i)->name, "");
|
||||||
fade_in_table.attach (*pbutton, col, col+1, row, row+1);
|
fade_in_table.attach (*pbutton, col, col+1, row, row+1);
|
||||||
fade_in_buttons.push_back (pbutton);
|
fade_in_buttons.push_back (pbutton);
|
||||||
|
|
||||||
|
@ -219,6 +224,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d
|
||||||
pbutton->add (*pxmap);
|
pbutton->add (*pxmap);
|
||||||
pbutton->set_name ("CrossfadeEditButton");
|
pbutton->set_name ("CrossfadeEditButton");
|
||||||
pbutton->signal_clicked().connect (bind (mem_fun(*this, &CrossfadeEditor::apply_preset), *i));
|
pbutton->signal_clicked().connect (bind (mem_fun(*this, &CrossfadeEditor::apply_preset), *i));
|
||||||
|
ARDOUR_UI::instance()->set_tip (pbutton, (*i)->name, "");
|
||||||
fade_out_table.attach (*pbutton, col, col+1, row, row+1);
|
fade_out_table.attach (*pbutton, col, col+1, row, row+1);
|
||||||
fade_out_buttons.push_back (pbutton);
|
fade_out_buttons.push_back (pbutton);
|
||||||
|
|
||||||
|
@ -853,58 +859,19 @@ CrossfadeEditor::build_presets ()
|
||||||
fade_out_presets = new Presets;
|
fade_out_presets = new Presets;
|
||||||
|
|
||||||
/* FADE OUT */
|
/* FADE OUT */
|
||||||
// p = new Preset ("hiin.xpm");
|
|
||||||
p = new Preset ("crossfade_in_fast-cut");
|
p = new Preset ("Linear (-6dB)", "crossfade_in_dipped");
|
||||||
p->push_back (PresetPoint (0, 0));
|
p->push_back (PresetPoint (0, 0));
|
||||||
p->push_back (PresetPoint (0.0207373, 0.197222));
|
p->push_back (PresetPoint (0.000000, 0.000000));
|
||||||
p->push_back (PresetPoint (0.0645161, 0.525));
|
p->push_back (PresetPoint (0.166667, 0.166366));
|
||||||
p->push_back (PresetPoint (0.152074, 0.802778));
|
p->push_back (PresetPoint (0.333333, 0.332853));
|
||||||
p->push_back (PresetPoint (0.276498, 0.919444));
|
p->push_back (PresetPoint (0.500000, 0.499459));
|
||||||
p->push_back (PresetPoint (0.481567, 0.980556));
|
p->push_back (PresetPoint (0.666667, 0.666186));
|
||||||
p->push_back (PresetPoint (0.767281, 1));
|
p->push_back (PresetPoint (0.833333, 0.833033));
|
||||||
p->push_back (PresetPoint (1, 1));
|
p->push_back (PresetPoint (1.000000, 1.000000));
|
||||||
fade_in_presets->push_back (p);
|
fade_in_presets->push_back (p);
|
||||||
|
|
||||||
// p = new Preset ("loin.xpm");
|
p = new Preset ("S(1)-curve", "crossfade_in_default");
|
||||||
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));
|
|
||||||
p->push_back (PresetPoint (0.829493, 0.233333));
|
|
||||||
p->push_back (PresetPoint (0.9447, 0.483333));
|
|
||||||
p->push_back (PresetPoint (0.976959, 0.697222));
|
|
||||||
p->push_back (PresetPoint (1, 1));
|
|
||||||
fade_in_presets->push_back (p);
|
|
||||||
|
|
||||||
// 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));
|
|
||||||
p->push_back (PresetPoint (0.470046, 0.886111));
|
|
||||||
p->push_back (PresetPoint (0.652074, 0.972222));
|
|
||||||
p->push_back (PresetPoint (0.771889, 0.988889));
|
|
||||||
p->push_back (PresetPoint (1, 1));
|
|
||||||
fade_in_presets->push_back (p);
|
|
||||||
|
|
||||||
// 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));
|
|
||||||
p->push_back (PresetPoint (0.725806, 0.333333));
|
|
||||||
p->push_back (PresetPoint (0.847926, 0.558333));
|
|
||||||
p->push_back (PresetPoint (0.919355, 0.730556));
|
|
||||||
p->push_back (PresetPoint (1, 1));
|
|
||||||
fade_in_presets->push_back (p);
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
p = new Preset ("crossfade_in_default");
|
|
||||||
p->push_back (PresetPoint (0, 0));
|
p->push_back (PresetPoint (0, 0));
|
||||||
p->push_back (PresetPoint (0.1, 0.01));
|
p->push_back (PresetPoint (0.1, 0.01));
|
||||||
p->push_back (PresetPoint (0.2, 0.03));
|
p->push_back (PresetPoint (0.2, 0.03));
|
||||||
|
@ -913,58 +880,79 @@ CrossfadeEditor::build_presets ()
|
||||||
p->push_back (PresetPoint (1, 1));
|
p->push_back (PresetPoint (1, 1));
|
||||||
fade_in_presets->push_back (p);
|
fade_in_presets->push_back (p);
|
||||||
|
|
||||||
|
p = new Preset ("S(2)-curve", "crossfade_in_default");
|
||||||
|
p->push_back (PresetPoint (0.0, 0.0));
|
||||||
|
p->push_back (PresetPoint (0.055, 0.222));
|
||||||
|
p->push_back (PresetPoint (0.163, 0.35));
|
||||||
|
p->push_back (PresetPoint (0.837, 0.678));
|
||||||
|
p->push_back (PresetPoint (0.945, 0.783));
|
||||||
|
p->push_back (PresetPoint (1.0, 1.0));
|
||||||
|
fade_in_presets->push_back (p);
|
||||||
|
|
||||||
|
p = new Preset ("Constant Power (-3dB)", "crossfade_in_constant");
|
||||||
|
|
||||||
|
p->push_back (PresetPoint (0.000000, 0.000000));
|
||||||
|
p->push_back (PresetPoint (0.166667, 0.282192));
|
||||||
|
p->push_back (PresetPoint (0.333333, 0.518174));
|
||||||
|
p->push_back (PresetPoint (0.500000, 0.707946));
|
||||||
|
p->push_back (PresetPoint (0.666667, 0.851507));
|
||||||
|
p->push_back (PresetPoint (0.833333, 0.948859));
|
||||||
|
p->push_back (PresetPoint (1.000000, 1.000000));
|
||||||
|
|
||||||
|
fade_in_presets->push_back (p);
|
||||||
|
|
||||||
|
if (!Profile->get_sae()) {
|
||||||
|
// p = new Preset ("hiin.xpm");
|
||||||
|
p = new Preset ("Long cut", "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));
|
||||||
|
p->push_back (PresetPoint (0.152074, 0.802778));
|
||||||
|
p->push_back (PresetPoint (0.276498, 0.919444));
|
||||||
|
p->push_back (PresetPoint (0.481567, 0.980556));
|
||||||
|
p->push_back (PresetPoint (0.767281, 1));
|
||||||
|
p->push_back (PresetPoint (1, 1));
|
||||||
|
fade_in_presets->push_back (p);
|
||||||
|
|
||||||
|
// p = new Preset ("loin.xpm");
|
||||||
|
p = new Preset ("Short cut", "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));
|
||||||
|
p->push_back (PresetPoint (0.829493, 0.233333));
|
||||||
|
p->push_back (PresetPoint (0.9447, 0.483333));
|
||||||
|
p->push_back (PresetPoint (0.976959, 0.697222));
|
||||||
|
p->push_back (PresetPoint (1, 1));
|
||||||
|
fade_in_presets->push_back (p);
|
||||||
|
|
||||||
|
|
||||||
|
// p = new Preset ("regin2.xpm");
|
||||||
|
p = new Preset ("Slow cut", "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));
|
||||||
|
p->push_back (PresetPoint (0.725806, 0.333333));
|
||||||
|
p->push_back (PresetPoint (0.847926, 0.558333));
|
||||||
|
p->push_back (PresetPoint (0.919355, 0.730556));
|
||||||
|
p->push_back (PresetPoint (1, 1));
|
||||||
|
fade_in_presets->push_back (p);
|
||||||
|
}
|
||||||
|
|
||||||
/* FADE OUT */
|
/* FADE OUT */
|
||||||
|
|
||||||
// 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));
|
|
||||||
p->push_back (PresetPoint (0.759259, 0.931129));
|
|
||||||
p->push_back (PresetPoint (0.918981, 0.68595));
|
|
||||||
p->push_back (PresetPoint (0.976852, 0.22865));
|
|
||||||
p->push_back (PresetPoint (1, 0));
|
|
||||||
fade_out_presets->push_back (p);
|
|
||||||
|
|
||||||
// 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));
|
|
||||||
p->push_back (PresetPoint (0.170507, 0.233333));
|
|
||||||
p->push_back (PresetPoint (0.370968, 0.0861111));
|
|
||||||
p->push_back (PresetPoint (0.610599, 0.0333333));
|
|
||||||
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 = new Preset ("Linear (-6dB cut)", "crossfade_out_dipped");
|
||||||
p->push_back (PresetPoint (0, 1));
|
p->push_back (PresetPoint (0, 1));
|
||||||
p->push_back (PresetPoint (0.228111, 0.988889));
|
p->push_back (PresetPoint (0.000000, 1.000000));
|
||||||
p->push_back (PresetPoint (0.347926, 0.972222));
|
p->push_back (PresetPoint (0.166667, 0.833033));
|
||||||
p->push_back (PresetPoint (0.529954, 0.886111));
|
p->push_back (PresetPoint (0.333333, 0.666186));
|
||||||
p->push_back (PresetPoint (0.753456, 0.658333));
|
p->push_back (PresetPoint (0.500000, 0.499459));
|
||||||
p->push_back (PresetPoint (0.9262673, 0.308333));
|
p->push_back (PresetPoint (0.666667, 0.332853));
|
||||||
p->push_back (PresetPoint (1, 0));
|
p->push_back (PresetPoint (0.833333, 0.166366));
|
||||||
|
p->push_back (PresetPoint (1.000000, 0.000000));
|
||||||
fade_out_presets->push_back (p);
|
fade_out_presets->push_back (p);
|
||||||
|
|
||||||
// p = new Preset ("regout2.xpm");
|
p = new Preset ("S(1)-Curve", "crossfade_out_default");
|
||||||
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));
|
|
||||||
p->push_back (PresetPoint (0.470046, 0.152778));
|
|
||||||
p->push_back (PresetPoint (0.695853, 0.0694444));
|
|
||||||
p->push_back (PresetPoint (1, 0));
|
|
||||||
fade_out_presets->push_back (p);
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
p = new Preset ("crossfade_out_default");
|
|
||||||
p->push_back (PresetPoint (0, 1));
|
p->push_back (PresetPoint (0, 1));
|
||||||
p->push_back (PresetPoint (0.1, 0.99));
|
p->push_back (PresetPoint (0.1, 0.99));
|
||||||
p->push_back (PresetPoint (0.2, 0.97));
|
p->push_back (PresetPoint (0.2, 0.97));
|
||||||
|
@ -972,6 +960,60 @@ CrossfadeEditor::build_presets ()
|
||||||
p->push_back (PresetPoint (0.9, 0.01));
|
p->push_back (PresetPoint (0.9, 0.01));
|
||||||
p->push_back (PresetPoint (1, 0));
|
p->push_back (PresetPoint (1, 0));
|
||||||
fade_out_presets->push_back (p);
|
fade_out_presets->push_back (p);
|
||||||
|
|
||||||
|
p = new Preset ("S(2)-Curve", "crossfade_out_default");
|
||||||
|
p->push_back (PresetPoint (0.0, 1.0));
|
||||||
|
p->push_back (PresetPoint (0.163, 0.678));
|
||||||
|
p->push_back (PresetPoint (0.055, 0.783));
|
||||||
|
p->push_back (PresetPoint (0.837, 0.35));
|
||||||
|
p->push_back (PresetPoint (0.945, 0.222));
|
||||||
|
p->push_back (PresetPoint (1.0, 0.0));
|
||||||
|
fade_out_presets->push_back (p);
|
||||||
|
|
||||||
|
// p = new Preset ("linout.xpm");
|
||||||
|
p = new Preset ("Constant Power (-3dB cut)", "crossfade_out_constant");
|
||||||
|
p->push_back (PresetPoint (0.000000, 1.000000));
|
||||||
|
p->push_back (PresetPoint (0.166667, 0.948859));
|
||||||
|
p->push_back (PresetPoint (0.333333, 0.851507));
|
||||||
|
p->push_back (PresetPoint (0.500000, 0.707946));
|
||||||
|
p->push_back (PresetPoint (0.666667, 0.518174));
|
||||||
|
p->push_back (PresetPoint (0.833333, 0.282192));
|
||||||
|
p->push_back (PresetPoint (1.000000, 0.000000));
|
||||||
|
fade_out_presets->push_back (p);
|
||||||
|
|
||||||
|
if (!Profile->get_sae()) {
|
||||||
|
// p = new Preset ("hiout.xpm");
|
||||||
|
p = new Preset ("Slow end/cut", "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));
|
||||||
|
p->push_back (PresetPoint (0.759259, 0.931129));
|
||||||
|
p->push_back (PresetPoint (0.918981, 0.68595));
|
||||||
|
p->push_back (PresetPoint (0.976852, 0.22865));
|
||||||
|
p->push_back (PresetPoint (1, 0));
|
||||||
|
fade_out_presets->push_back (p);
|
||||||
|
|
||||||
|
// p = new Preset ("loout.xpm");
|
||||||
|
p = new Preset ("Fast start/cut", "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));
|
||||||
|
p->push_back (PresetPoint (0.170507, 0.233333));
|
||||||
|
p->push_back (PresetPoint (0.370968, 0.0861111));
|
||||||
|
p->push_back (PresetPoint (0.610599, 0.0333333));
|
||||||
|
p->push_back (PresetPoint (1, 0));
|
||||||
|
fade_out_presets->push_back (p);
|
||||||
|
|
||||||
|
// p = new Preset ("regout2.xpm");
|
||||||
|
p = new Preset ("Slow Fade", "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));
|
||||||
|
p->push_back (PresetPoint (0.470046, 0.152778));
|
||||||
|
p->push_back (PresetPoint (0.695853, 0.0694444));
|
||||||
|
p->push_back (PresetPoint (1, 0));
|
||||||
|
fade_out_presets->push_back (p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1296,3 +1338,44 @@ CrossfadeEditor::audition_left_dry_toggled ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CrossfadeEditor::on_key_press_event (GdkEventKey *ev)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CrossfadeEditor::on_key_release_event (GdkEventKey* ev)
|
||||||
|
{
|
||||||
|
switch (ev->keyval) {
|
||||||
|
case GDK_Right:
|
||||||
|
if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
|
||||||
|
audition_right_dry_button.set_active (!audition_right_dry_button.get_active());
|
||||||
|
} else {
|
||||||
|
audition_right_button.set_active (!audition_right_button.get_active());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDK_Left:
|
||||||
|
if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
|
||||||
|
audition_left_dry_button.set_active (!audition_left_dry_button.get_active());
|
||||||
|
} else {
|
||||||
|
audition_left_button.set_active (!audition_left_button.get_active());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDK_space:
|
||||||
|
if (session.is_auditioning()) {
|
||||||
|
cancel_audition ();
|
||||||
|
} else {
|
||||||
|
audition_both_button.set_active (!audition_both_button.get_active());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -62,9 +62,10 @@ class CrossfadeEditor : public ArdourDialog
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Preset : public list<PresetPoint> {
|
struct Preset : public list<PresetPoint> {
|
||||||
|
const char* name;
|
||||||
const char* image_name;
|
const char* image_name;
|
||||||
|
|
||||||
Preset (const char* x) : image_name (x) {}
|
Preset (const char* n, const char* x) : name (n), image_name (x) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef list<Preset*> Presets;
|
typedef list<Preset*> Presets;
|
||||||
|
@ -72,6 +73,10 @@ class CrossfadeEditor : public ArdourDialog
|
||||||
static Presets* fade_in_presets;
|
static Presets* fade_in_presets;
|
||||||
static Presets* fade_out_presets;
|
static Presets* fade_out_presets;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool on_key_press_event (GdkEventKey*);
|
||||||
|
bool on_key_release_event (GdkEventKey*);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
boost::shared_ptr<ARDOUR::Crossfade> xfade;
|
boost::shared_ptr<ARDOUR::Crossfade> xfade;
|
||||||
ARDOUR::Session& session;
|
ARDOUR::Session& session;
|
||||||
|
|
|
@ -175,7 +175,7 @@ CrossfadeView::redraw_curves ()
|
||||||
}
|
}
|
||||||
|
|
||||||
npoints = get_time_axis_view().editor.frame_to_pixel (crossfade->length());
|
npoints = get_time_axis_view().editor.frame_to_pixel (crossfade->length());
|
||||||
npoints = std::min (gdk_screen_width(), npoints);
|
// npoints = std::min (gdk_screen_width(), npoints);
|
||||||
|
|
||||||
if (!_visible || !crossfade->active() || npoints < 3) {
|
if (!_visible || !crossfade->active() || npoints < 3) {
|
||||||
fade_in->hide();
|
fade_in->hide();
|
||||||
|
@ -190,6 +190,7 @@ CrossfadeView::redraw_curves ()
|
||||||
vec = new float[npoints];
|
vec = new float[npoints];
|
||||||
|
|
||||||
crossfade->fade_in().curve().get_vector (0, crossfade->length(), vec, npoints);
|
crossfade->fade_in().curve().get_vector (0, crossfade->length(), vec, npoints);
|
||||||
|
|
||||||
for (int i = 0, pci = 0; i < npoints; ++i) {
|
for (int i = 0, pci = 0; i < npoints; ++i) {
|
||||||
Art::Point &p = (*points)[pci++];
|
Art::Point &p = (*points)[pci++];
|
||||||
p.set_x(i);
|
p.set_x(i);
|
||||||
|
|
|
@ -369,6 +369,7 @@ Editor::Editor ()
|
||||||
range_marker_drag_rect = 0;
|
range_marker_drag_rect = 0;
|
||||||
marker_drag_line = 0;
|
marker_drag_line = 0;
|
||||||
set_midi_edit_mode (MidiEditPencil, true);
|
set_midi_edit_mode (MidiEditPencil, true);
|
||||||
|
_edit_point = EditAtMouse;
|
||||||
set_mouse_mode (MouseObject, true);
|
set_mouse_mode (MouseObject, true);
|
||||||
|
|
||||||
frames_per_unit = 2048; /* too early to use reset_zoom () */
|
frames_per_unit = 2048; /* too early to use reset_zoom () */
|
||||||
|
@ -944,20 +945,22 @@ Editor::set_entered_track (TimeAxisView* tav)
|
||||||
void
|
void
|
||||||
Editor::show_window ()
|
Editor::show_window ()
|
||||||
{
|
{
|
||||||
show_all_children ();
|
if (! is_visible ()) {
|
||||||
|
show_all ();
|
||||||
|
|
||||||
/* re-hide editor list if necessary */
|
/* re-hide editor list if necessary */
|
||||||
editor_list_button_toggled ();
|
editor_list_button_toggled ();
|
||||||
|
|
||||||
/* now reset all audio_time_axis heights, because widgets might need
|
/* now reset all audio_time_axis heights, because widgets might need
|
||||||
to be re-hidden
|
to be re-hidden
|
||||||
*/
|
*/
|
||||||
|
|
||||||
TimeAxisView *tv;
|
TimeAxisView *tv;
|
||||||
|
|
||||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||||
tv = (static_cast<TimeAxisView*>(*i));
|
tv = (static_cast<TimeAxisView*>(*i));
|
||||||
tv->reset_height ();
|
tv->reset_height ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
present ();
|
present ();
|
||||||
|
@ -1099,8 +1102,6 @@ Editor::access_action (std::string action_group, std::string action_item)
|
||||||
|
|
||||||
ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::access_action), action_group, action_item));
|
ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::access_action), action_group, action_item));
|
||||||
|
|
||||||
cout<< "OSC: Recieved: "<< action_item << endl;
|
|
||||||
|
|
||||||
RefPtr<Action> act;
|
RefPtr<Action> act;
|
||||||
act = ActionManager::get_action( action_group.c_str(), action_item.c_str() );
|
act = ActionManager::get_action( action_group.c_str(), action_item.c_str() );
|
||||||
|
|
||||||
|
@ -1276,11 +1277,23 @@ Editor::connect_to_session (Session *t)
|
||||||
|
|
||||||
edit_groups_changed ();
|
edit_groups_changed ();
|
||||||
|
|
||||||
|
edit_point_clock.set_mode(AudioClock::BBT);
|
||||||
edit_point_clock.set_session (session);
|
edit_point_clock.set_session (session);
|
||||||
zoom_range_clock.set_session (session);
|
zoom_range_clock.set_session (session);
|
||||||
_playlist_selector->set_session (session);
|
_playlist_selector->set_session (session);
|
||||||
nudge_clock.set_session (session);
|
nudge_clock.set_session (session);
|
||||||
nudge_clock.set (session->frame_rate() * 5); // default of 5 seconds
|
if (Profile->get_sae()) {
|
||||||
|
BBT_Time bbt;
|
||||||
|
bbt.bars = 0;
|
||||||
|
bbt.beats = 0;
|
||||||
|
bbt.ticks = 120;
|
||||||
|
nframes_t pos = session->tempo_map().bbt_duration_at (0, bbt, 1);
|
||||||
|
nudge_clock.set_mode(AudioClock::BBT);
|
||||||
|
nudge_clock.set (pos, true, 0, AudioClock::BBT);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
nudge_clock.set (session->frame_rate() * 5, true, 0, AudioClock::SMPTE); // default of 5 seconds
|
||||||
|
}
|
||||||
|
|
||||||
playhead_cursor->canvas_item.show ();
|
playhead_cursor->canvas_item.show ();
|
||||||
|
|
||||||
|
@ -1338,16 +1351,16 @@ Editor::connect_to_session (Session *t)
|
||||||
redisplay_named_selections ();
|
redisplay_named_selections ();
|
||||||
redisplay_snapshots ();
|
redisplay_snapshots ();
|
||||||
|
|
||||||
|
restore_ruler_visibility ();
|
||||||
|
//tempo_map_changed (Change (0));
|
||||||
|
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
|
||||||
|
|
||||||
initial_route_list_display ();
|
initial_route_list_display ();
|
||||||
|
|
||||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||||
(static_cast<TimeAxisView*>(*i))->set_samples_per_unit (frames_per_unit);
|
(static_cast<TimeAxisView*>(*i))->set_samples_per_unit (frames_per_unit);
|
||||||
}
|
}
|
||||||
|
|
||||||
restore_ruler_visibility ();
|
|
||||||
//tempo_map_changed (Change (0));
|
|
||||||
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
|
|
||||||
|
|
||||||
start_scrolling ();
|
start_scrolling ();
|
||||||
|
|
||||||
/* don't show master bus in a new session */
|
/* don't show master bus in a new session */
|
||||||
|
@ -1889,6 +1902,7 @@ void
|
||||||
Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> region, Menu_Helpers::MenuList& edit_items)
|
Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> region, Menu_Helpers::MenuList& edit_items)
|
||||||
{
|
{
|
||||||
using namespace Menu_Helpers;
|
using namespace Menu_Helpers;
|
||||||
|
Gtk::MenuItem* foo_item;
|
||||||
Menu *region_menu = manage (new Menu);
|
Menu *region_menu = manage (new Menu);
|
||||||
MenuList& items = region_menu->items();
|
MenuList& items = region_menu->items();
|
||||||
region_menu->set_name ("ArdourContextMenu");
|
region_menu->set_name ("ArdourContextMenu");
|
||||||
|
@ -2031,7 +2045,12 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> regi
|
||||||
|
|
||||||
/* range related stuff */
|
/* range related stuff */
|
||||||
|
|
||||||
items.push_back (MenuElem (_("Add Range Markers"), mem_fun (*this, &Editor::add_location_from_audio_region)));
|
items.push_back (MenuElem (_("Add Single Range"), mem_fun (*this, &Editor::add_location_from_audio_region)));
|
||||||
|
items.push_back (MenuElem (_("Add Range Markers"), mem_fun (*this, &Editor::add_locations_from_audio_region)));
|
||||||
|
if (selection->regions.size() < 2) {
|
||||||
|
items.back().set_sensitive (false);
|
||||||
|
}
|
||||||
|
|
||||||
items.push_back (MenuElem (_("Set Range Selection"), mem_fun (*this, &Editor::set_selection_from_region)));
|
items.push_back (MenuElem (_("Set Range Selection"), mem_fun (*this, &Editor::set_selection_from_region)));
|
||||||
items.push_back (SeparatorElem());
|
items.push_back (SeparatorElem());
|
||||||
|
|
||||||
|
@ -2054,7 +2073,15 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> regi
|
||||||
trim_menu->set_name ("ArdourContextMenu");
|
trim_menu->set_name ("ArdourContextMenu");
|
||||||
|
|
||||||
trim_items.push_back (MenuElem (_("Start to edit point"), mem_fun(*this, &Editor::trim_region_from_edit_point)));
|
trim_items.push_back (MenuElem (_("Start to edit point"), mem_fun(*this, &Editor::trim_region_from_edit_point)));
|
||||||
|
foo_item = &trim_items.back();
|
||||||
|
if (_edit_point == EditAtMouse) {
|
||||||
|
foo_item->set_sensitive (false);
|
||||||
|
}
|
||||||
trim_items.push_back (MenuElem (_("Edit point to end"), mem_fun(*this, &Editor::trim_region_to_edit_point)));
|
trim_items.push_back (MenuElem (_("Edit point to end"), mem_fun(*this, &Editor::trim_region_to_edit_point)));
|
||||||
|
foo_item = &trim_items.back();
|
||||||
|
if (_edit_point == EditAtMouse) {
|
||||||
|
foo_item->set_sensitive (false);
|
||||||
|
}
|
||||||
trim_items.push_back (MenuElem (_("Trim To Loop"), mem_fun(*this, &Editor::trim_region_to_loop)));
|
trim_items.push_back (MenuElem (_("Trim To Loop"), mem_fun(*this, &Editor::trim_region_to_loop)));
|
||||||
trim_items.push_back (MenuElem (_("Trim To Punch"), mem_fun(*this, &Editor::trim_region_to_punch)));
|
trim_items.push_back (MenuElem (_("Trim To Punch"), mem_fun(*this, &Editor::trim_region_to_punch)));
|
||||||
|
|
||||||
|
@ -2064,6 +2091,10 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> regi
|
||||||
items.push_back (MenuElem (_("Split"), (mem_fun(*this, &Editor::split_region))));
|
items.push_back (MenuElem (_("Split"), (mem_fun(*this, &Editor::split_region))));
|
||||||
region_edit_menu_split_item = &items.back();
|
region_edit_menu_split_item = &items.back();
|
||||||
|
|
||||||
|
if (_edit_point == EditAtMouse) {
|
||||||
|
region_edit_menu_split_item->set_sensitive (false);
|
||||||
|
}
|
||||||
|
|
||||||
items.push_back (MenuElem (_("Make mono regions"), (mem_fun(*this, &Editor::split_multichannel_region))));
|
items.push_back (MenuElem (_("Make mono regions"), (mem_fun(*this, &Editor::split_multichannel_region))));
|
||||||
region_edit_menu_split_multichannel_item = &items.back();
|
region_edit_menu_split_multichannel_item = &items.back();
|
||||||
|
|
||||||
|
@ -2418,23 +2449,56 @@ Editor::set_state (const XMLNode& node)
|
||||||
_id = prop->value ();
|
_id = prop->value ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((geometry = find_named_node (node, "geometry")) == 0) {
|
g.base_width = default_width;
|
||||||
|
g.base_height = default_height;
|
||||||
|
x = 1;
|
||||||
|
y = 1;
|
||||||
|
xoff = 0;
|
||||||
|
yoff = 21;
|
||||||
|
|
||||||
g.base_width = default_width;
|
if ((geometry = find_named_node (node, "geometry")) != 0) {
|
||||||
g.base_height = default_height;
|
|
||||||
x = 1;
|
|
||||||
y = 1;
|
|
||||||
xoff = 0;
|
|
||||||
yoff = 21;
|
|
||||||
|
|
||||||
} else {
|
XMLProperty* prop;
|
||||||
|
|
||||||
g.base_width = atoi(geometry->property("x-size")->value());
|
if ((prop = geometry->property("x_size")) == 0) {
|
||||||
g.base_height = atoi(geometry->property("y-size")->value());
|
prop = geometry->property ("x-size");
|
||||||
x = atoi(geometry->property("x-pos")->value());
|
}
|
||||||
y = atoi(geometry->property("y-pos")->value());
|
if (prop) {
|
||||||
xoff = atoi(geometry->property("x-off")->value());
|
g.base_width = atoi(prop->value());
|
||||||
yoff = atoi(geometry->property("y-off")->value());
|
}
|
||||||
|
if ((prop = geometry->property("y_size")) == 0) {
|
||||||
|
prop = geometry->property ("y-size");
|
||||||
|
}
|
||||||
|
if (prop) {
|
||||||
|
g.base_height = atoi(prop->value());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((prop = geometry->property ("x_pos")) == 0) {
|
||||||
|
prop = geometry->property ("x-pos");
|
||||||
|
}
|
||||||
|
if (prop) {
|
||||||
|
x = atoi (prop->value());
|
||||||
|
|
||||||
|
}
|
||||||
|
if ((prop = geometry->property ("y_pos")) == 0) {
|
||||||
|
prop = geometry->property ("y-pos");
|
||||||
|
}
|
||||||
|
if (prop) {
|
||||||
|
y = atoi (prop->value());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((prop = geometry->property ("x_off")) == 0) {
|
||||||
|
prop = geometry->property ("x-off");
|
||||||
|
}
|
||||||
|
if (prop) {
|
||||||
|
xoff = atoi (prop->value());
|
||||||
|
}
|
||||||
|
if ((prop = geometry->property ("y_off")) == 0) {
|
||||||
|
prop = geometry->property ("y-off");
|
||||||
|
}
|
||||||
|
if (prop) {
|
||||||
|
yoff = atoi (prop->value());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set_default_size (g.base_width, g.base_height);
|
set_default_size (g.base_width, g.base_height);
|
||||||
|
@ -2941,7 +3005,7 @@ Editor::setup_toolbar ()
|
||||||
#ifdef GTKOSX
|
#ifdef GTKOSX
|
||||||
const guint32 FUDGE = 38; // Combo's are stupid - they steal space from the entry for the button
|
const guint32 FUDGE = 38; // Combo's are stupid - they steal space from the entry for the button
|
||||||
#else
|
#else
|
||||||
const guint32 FUDGE = 18; // Combo's are stupid - they steal space from the entry for the button
|
const guint32 FUDGE = 24; // Combo's are stupid - they steal space from the entry for the button
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Mode Buttons (tool selection) */
|
/* Mode Buttons (tool selection) */
|
||||||
|
@ -2996,7 +3060,9 @@ Editor::setup_toolbar ()
|
||||||
|
|
||||||
vector<string> edit_mode_strings;
|
vector<string> edit_mode_strings;
|
||||||
edit_mode_strings.push_back (edit_mode_to_string (Slide));
|
edit_mode_strings.push_back (edit_mode_to_string (Slide));
|
||||||
edit_mode_strings.push_back (edit_mode_to_string (Splice));
|
if (!Profile->get_sae()) {
|
||||||
|
edit_mode_strings.push_back (edit_mode_to_string (Splice));
|
||||||
|
}
|
||||||
edit_mode_strings.push_back (edit_mode_to_string (Lock));
|
edit_mode_strings.push_back (edit_mode_to_string (Lock));
|
||||||
|
|
||||||
edit_mode_selector.set_name ("EditModeSelector");
|
edit_mode_selector.set_name ("EditModeSelector");
|
||||||
|
@ -3010,6 +3076,10 @@ Editor::setup_toolbar ()
|
||||||
mouse_mode_tearoff = manage (new TearOff (*mode_box));
|
mouse_mode_tearoff = manage (new TearOff (*mode_box));
|
||||||
mouse_mode_tearoff->set_name ("MouseModeBase");
|
mouse_mode_tearoff->set_name ("MouseModeBase");
|
||||||
|
|
||||||
|
if (Profile->get_sae()) {
|
||||||
|
mouse_mode_tearoff->set_can_be_torn_off (false);
|
||||||
|
}
|
||||||
|
|
||||||
mouse_mode_tearoff->Detach.connect (bind (mem_fun(*this, &Editor::detach_tearoff), static_cast<Box*>(&toolbar_hbox),
|
mouse_mode_tearoff->Detach.connect (bind (mem_fun(*this, &Editor::detach_tearoff), static_cast<Box*>(&toolbar_hbox),
|
||||||
&mouse_mode_tearoff->tearoff_window()));
|
&mouse_mode_tearoff->tearoff_window()));
|
||||||
mouse_mode_tearoff->Attach.connect (bind (mem_fun(*this, &Editor::reattach_tearoff), static_cast<Box*> (&toolbar_hbox),
|
mouse_mode_tearoff->Attach.connect (bind (mem_fun(*this, &Editor::reattach_tearoff), static_cast<Box*> (&toolbar_hbox),
|
||||||
|
@ -3138,6 +3208,10 @@ Editor::setup_toolbar ()
|
||||||
tools_tearoff = manage (new TearOff (*hbox));
|
tools_tearoff = manage (new TearOff (*hbox));
|
||||||
tools_tearoff->set_name ("MouseModeBase");
|
tools_tearoff->set_name ("MouseModeBase");
|
||||||
|
|
||||||
|
if (Profile->get_sae()) {
|
||||||
|
tools_tearoff->set_can_be_torn_off (false);
|
||||||
|
}
|
||||||
|
|
||||||
tools_tearoff->Detach.connect (bind (mem_fun(*this, &Editor::detach_tearoff), static_cast<Box*>(&toolbar_hbox),
|
tools_tearoff->Detach.connect (bind (mem_fun(*this, &Editor::detach_tearoff), static_cast<Box*>(&toolbar_hbox),
|
||||||
&tools_tearoff->tearoff_window()));
|
&tools_tearoff->tearoff_window()));
|
||||||
tools_tearoff->Attach.connect (bind (mem_fun(*this, &Editor::reattach_tearoff), static_cast<Box*> (&toolbar_hbox),
|
tools_tearoff->Attach.connect (bind (mem_fun(*this, &Editor::reattach_tearoff), static_cast<Box*> (&toolbar_hbox),
|
||||||
|
@ -3306,12 +3380,19 @@ Editor::convert_drop_to_paths (vector<ustring>& paths,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Parse the "uri-list" format that Nautilus provides,
|
/* Parse the "uri-list" format that Nautilus provides,
|
||||||
where each pathname is delimited by \r\n
|
where each pathname is delimited by \r\n.
|
||||||
|
|
||||||
|
THERE MAY BE NO NULL TERMINATING CHAR!!!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const char* p = data.get_text().c_str();
|
ustring txt = data.get_text();
|
||||||
|
const char* p;
|
||||||
const char* q;
|
const char* q;
|
||||||
|
|
||||||
|
p = (const char *) malloc (txt.length() + 1);
|
||||||
|
txt.copy ((char *) p, txt.length(), 0);
|
||||||
|
((char*)p)[txt.length()] = '\0';
|
||||||
|
|
||||||
while (p)
|
while (p)
|
||||||
{
|
{
|
||||||
if (*p != '#')
|
if (*p != '#')
|
||||||
|
@ -3320,8 +3401,9 @@ Editor::convert_drop_to_paths (vector<ustring>& paths,
|
||||||
p++;
|
p++;
|
||||||
|
|
||||||
q = p;
|
q = p;
|
||||||
while (*q && (*q != '\n') && (*q != '\r'))
|
while (*q && (*q != '\n') && (*q != '\r')) {
|
||||||
q++;
|
q++;
|
||||||
|
}
|
||||||
|
|
||||||
if (q > p)
|
if (q > p)
|
||||||
{
|
{
|
||||||
|
@ -3340,6 +3422,8 @@ Editor::convert_drop_to_paths (vector<ustring>& paths,
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free ((void*)p);
|
||||||
|
|
||||||
if (uris.empty()) {
|
if (uris.empty()) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -3638,7 +3722,11 @@ Editor::cycle_edit_mode ()
|
||||||
{
|
{
|
||||||
switch (Config->get_edit_mode()) {
|
switch (Config->get_edit_mode()) {
|
||||||
case Slide:
|
case Slide:
|
||||||
Config->set_edit_mode (Splice);
|
if (Profile->get_sae()) {
|
||||||
|
Config->set_edit_mode (Lock);
|
||||||
|
} else {
|
||||||
|
Config->set_edit_mode (Splice);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Splice:
|
case Splice:
|
||||||
Config->set_edit_mode (Lock);
|
Config->set_edit_mode (Lock);
|
||||||
|
@ -3911,12 +3999,23 @@ Editor::pane_allocation_handler (Allocation &alloc, Paned* which)
|
||||||
static int32_t done;
|
static int32_t done;
|
||||||
XMLNode* geometry;
|
XMLNode* geometry;
|
||||||
|
|
||||||
if ((geometry = find_named_node (*node, "geometry")) == 0) {
|
width = default_width;
|
||||||
width = default_width;
|
height = default_height;
|
||||||
height = default_height;
|
|
||||||
} else {
|
if ((geometry = find_named_node (*node, "geometry")) != 0) {
|
||||||
width = atoi(geometry->property("x-size")->value());
|
|
||||||
height = atoi(geometry->property("y-size")->value());
|
if ((prop = geometry->property ("x_size")) == 0) {
|
||||||
|
prop = geometry->property ("x-size");
|
||||||
|
}
|
||||||
|
if (prop) {
|
||||||
|
width = atoi (prop->value());
|
||||||
|
}
|
||||||
|
if ((prop = geometry->property ("y_size")) == 0) {
|
||||||
|
prop = geometry->property ("y-size");
|
||||||
|
}
|
||||||
|
if (prop) {
|
||||||
|
height = atoi (prop->value());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (which == static_cast<Paned*> (&edit_pane)) {
|
if (which == static_cast<Paned*> (&edit_pane)) {
|
||||||
|
@ -4594,6 +4693,8 @@ Editor::set_frames_per_unit (double fpu)
|
||||||
void
|
void
|
||||||
Editor::post_zoom ()
|
Editor::post_zoom ()
|
||||||
{
|
{
|
||||||
|
nframes64_t cef = 0;
|
||||||
|
|
||||||
// convert fpu to frame count
|
// convert fpu to frame count
|
||||||
|
|
||||||
nframes64_t frames = (nframes64_t) floor (frames_per_unit * canvas_width);
|
nframes64_t frames = (nframes64_t) floor (frames_per_unit * canvas_width);
|
||||||
|
@ -4614,9 +4715,16 @@ Editor::post_zoom ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ZoomChanged (); /* EMIT_SIGNAL */
|
ZoomChanged (); /* EMIT_SIGNAL */
|
||||||
|
|
||||||
reset_hscrollbar_stepping ();
|
reset_hscrollbar_stepping ();
|
||||||
|
|
||||||
|
if (session) {
|
||||||
|
cef = session->current_end_frame() + (current_page_frames() / 10);// Add a little extra so we can see the end marker
|
||||||
|
}
|
||||||
|
horizontal_adjustment.set_upper (cef / frames_per_unit);
|
||||||
|
|
||||||
//reset_scrolling_region ();
|
//reset_scrolling_region ();
|
||||||
|
|
||||||
if (playhead_cursor) {
|
if (playhead_cursor) {
|
||||||
|
@ -4663,6 +4771,10 @@ Editor::idle_visual_changer ()
|
||||||
VisualChange::Type p = pending_visual_change.pending;
|
VisualChange::Type p = pending_visual_change.pending;
|
||||||
pending_visual_change.pending = (VisualChange::Type) 0;
|
pending_visual_change.pending = (VisualChange::Type) 0;
|
||||||
|
|
||||||
|
#ifdef FIX_THIS_FOR_V3
|
||||||
|
double last_time_origin = horizontal_adjustment.get_value();
|
||||||
|
#endif
|
||||||
|
|
||||||
if (p & VisualChange::ZoomLevel) {
|
if (p & VisualChange::ZoomLevel) {
|
||||||
set_frames_per_unit (pending_visual_change.frames_per_unit);
|
set_frames_per_unit (pending_visual_change.frames_per_unit);
|
||||||
|
|
||||||
|
@ -4672,25 +4784,34 @@ Editor::idle_visual_changer ()
|
||||||
update_tempo_based_rulers ();
|
update_tempo_based_rulers ();
|
||||||
}
|
}
|
||||||
if (p & VisualChange::TimeOrigin) {
|
if (p & VisualChange::TimeOrigin) {
|
||||||
|
horizontal_adjustment.set_value (pending_visual_change.time_origin / frames_per_unit);
|
||||||
|
}
|
||||||
|
|
||||||
nframes64_t csf=0, cef=0;
|
nframes64_t csf=0, cef=0;
|
||||||
nframes64_t current_time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
|
nframes64_t current_time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
|
||||||
|
|
||||||
if (session) {
|
if (session) {
|
||||||
csf = session->current_start_frame();
|
csf = session->current_start_frame();
|
||||||
cef = session->current_end_frame();
|
cef = session->current_end_frame();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if we seek beyond the current end of the canvas, move the end */
|
/* if we seek beyond the current end of the canvas, move the end */
|
||||||
|
|
||||||
if (current_time_origin != pending_visual_change.time_origin) {
|
#ifdef FIX_THIS_FOR_V3
|
||||||
cef += current_page_frames() / 10; // Add a little extra so we can see the end marker
|
if (last_time_origin == horizontal_adjustment.get_value() ) {
|
||||||
horizontal_adjustment.set_upper (cef / frames_per_unit);
|
/* changed signal not emitted */
|
||||||
horizontal_adjustment.set_value (pending_visual_change.time_origin / frames_per_unit);
|
update_fixed_rulers ();
|
||||||
} else {
|
redisplay_tempo (true);
|
||||||
update_fixed_rulers();
|
}
|
||||||
redisplay_tempo (true);
|
#endif
|
||||||
}
|
|
||||||
|
if (current_time_origin != pending_visual_change.time_origin) {
|
||||||
|
cef += current_page_frames() / 10; // Add a little extra so we can see the end marker
|
||||||
|
horizontal_adjustment.set_upper (cef / frames_per_unit);
|
||||||
|
horizontal_adjustment.set_value (pending_visual_change.time_origin / frames_per_unit);
|
||||||
|
} else {
|
||||||
|
update_fixed_rulers();
|
||||||
|
redisplay_tempo (true);
|
||||||
}
|
}
|
||||||
//cerr << "Editor::idle_visual_changer () called ha v:l:u:ps:fpu = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << frames_per_unit << endl;//DEBUG
|
//cerr << "Editor::idle_visual_changer () called ha v:l:u:ps:fpu = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << frames_per_unit << endl;//DEBUG
|
||||||
pending_visual_change.idle_handler_id = -1;
|
pending_visual_change.idle_handler_id = -1;
|
||||||
|
@ -5017,6 +5138,9 @@ Editor::first_idle ()
|
||||||
(*t)->first_idle();
|
(*t)->first_idle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// first idle adds route children (automation tracks), so we need to redisplay here
|
||||||
|
redisplay_route_list();
|
||||||
|
|
||||||
if (dialog) {
|
if (dialog) {
|
||||||
delete dialog;
|
delete dialog;
|
||||||
}
|
}
|
||||||
|
@ -5189,6 +5313,7 @@ Editor::idle_resize ()
|
||||||
(*i)->idle_resize (resize_idle_target);
|
(*i)->idle_resize (resize_idle_target);
|
||||||
}
|
}
|
||||||
pending_resizes.clear();
|
pending_resizes.clear();
|
||||||
|
flush_canvas ();
|
||||||
resize_idle_id = -1;
|
resize_idle_id = -1;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -323,6 +323,7 @@ class Editor : public PublicEditor
|
||||||
void toggle_measure_visibility ();
|
void toggle_measure_visibility ();
|
||||||
void toggle_logo_visibility ();
|
void toggle_logo_visibility ();
|
||||||
|
|
||||||
|
double get_physical_screen_width () const { return physical_screen_width; };
|
||||||
double physical_screen_width;
|
double physical_screen_width;
|
||||||
double physical_screen_height;
|
double physical_screen_height;
|
||||||
|
|
||||||
|
@ -342,7 +343,6 @@ class Editor : public PublicEditor
|
||||||
void toggle_region_fades_visible ();
|
void toggle_region_fades_visible ();
|
||||||
void toggle_selected_region_fades (int dir);
|
void toggle_selected_region_fades (int dir);
|
||||||
void update_region_fade_visibility ();
|
void update_region_fade_visibility ();
|
||||||
|
|
||||||
void toggle_auto_xfade ();
|
void toggle_auto_xfade ();
|
||||||
void toggle_xfades_active ();
|
void toggle_xfades_active ();
|
||||||
void toggle_xfade_visibility ();
|
void toggle_xfade_visibility ();
|
||||||
|
@ -649,6 +649,13 @@ class Editor : public PublicEditor
|
||||||
ArdourCanvas::Group* cd_marker_bar_group;
|
ArdourCanvas::Group* cd_marker_bar_group;
|
||||||
|
|
||||||
/** The group containing all items that require horizontal scrolling. */
|
/** The group containing all items that require horizontal scrolling. */
|
||||||
|
ArdourCanvas::Group* _background_group;
|
||||||
|
/*
|
||||||
|
The _master_group is the group containing all items
|
||||||
|
that require horizontal scrolling..
|
||||||
|
It is primarily used to separate canvas items
|
||||||
|
that require horizontal scrolling from those that do not.
|
||||||
|
*/
|
||||||
ArdourCanvas::Group* _master_group;
|
ArdourCanvas::Group* _master_group;
|
||||||
|
|
||||||
/* The group containing all trackviews. Only scrolled vertically. */
|
/* The group containing all trackviews. Only scrolled vertically. */
|
||||||
|
@ -779,6 +786,7 @@ class Editor : public PublicEditor
|
||||||
static const double timebar_height;
|
static const double timebar_height;
|
||||||
guint32 visible_timebars;
|
guint32 visible_timebars;
|
||||||
gdouble canvas_timebars_vsize;
|
gdouble canvas_timebars_vsize;
|
||||||
|
gdouble get_canvas_timebars_vsize () const { return canvas_timebars_vsize; }
|
||||||
Gtk::Menu *editor_ruler_menu;
|
Gtk::Menu *editor_ruler_menu;
|
||||||
|
|
||||||
ArdourCanvas::SimpleRect* tempo_bar;
|
ArdourCanvas::SimpleRect* tempo_bar;
|
||||||
|
@ -899,6 +907,8 @@ class Editor : public PublicEditor
|
||||||
sigc::connection control_scroll_connection;
|
sigc::connection control_scroll_connection;
|
||||||
|
|
||||||
gdouble get_trackview_group_vertical_offset () const { return vertical_adjustment.get_value () - canvas_timebars_vsize;}
|
gdouble get_trackview_group_vertical_offset () const { return vertical_adjustment.get_value () - canvas_timebars_vsize;}
|
||||||
|
|
||||||
|
ArdourCanvas::Group* get_background_group () const { return _background_group; }
|
||||||
ArdourCanvas::Group* get_trackview_group () const { return _trackview_group; }
|
ArdourCanvas::Group* get_trackview_group () const { return _trackview_group; }
|
||||||
double last_trackview_group_vertical_offset;
|
double last_trackview_group_vertical_offset;
|
||||||
void tie_vertical_scrolling ();
|
void tie_vertical_scrolling ();
|
||||||
|
@ -1138,6 +1148,7 @@ class Editor : public PublicEditor
|
||||||
void toggle_region_mute ();
|
void toggle_region_mute ();
|
||||||
void toggle_region_lock ();
|
void toggle_region_lock ();
|
||||||
void toggle_region_opaque ();
|
void toggle_region_opaque ();
|
||||||
|
void toggle_record_enable ();
|
||||||
void set_region_lock_style (ARDOUR::Region::PositionLockStyle);
|
void set_region_lock_style (ARDOUR::Region::PositionLockStyle);
|
||||||
void raise_region ();
|
void raise_region ();
|
||||||
void raise_region_to_top ();
|
void raise_region_to_top ();
|
||||||
|
@ -1248,16 +1259,14 @@ class Editor : public PublicEditor
|
||||||
|
|
||||||
void bring_in_external_audio (Editing::ImportMode mode, nframes64_t& pos);
|
void bring_in_external_audio (Editing::ImportMode mode, nframes64_t& pos);
|
||||||
|
|
||||||
void _do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
|
bool idle_drop_paths (std::vector<Glib::ustring> paths, nframes64_t frame, double ypos);
|
||||||
void do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
|
void drop_paths_part_two (const std::vector<Glib::ustring>& paths, nframes64_t frame, double ypos);
|
||||||
bool idle_do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
|
|
||||||
|
|
||||||
void _do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&);
|
void do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
|
||||||
void do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&);
|
void do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&);
|
||||||
bool idle_do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&);
|
|
||||||
|
|
||||||
int import_sndfiles (vector<Glib::ustring> paths, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t& pos,
|
int import_sndfiles (vector<Glib::ustring> paths, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t& pos,
|
||||||
int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&, bool);
|
int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>, bool, uint32_t total);
|
||||||
int embed_sndfiles (vector<Glib::ustring> paths, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode,
|
int embed_sndfiles (vector<Glib::ustring> paths, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode,
|
||||||
nframes64_t& pos, int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&);
|
nframes64_t& pos, int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&);
|
||||||
|
|
||||||
|
@ -1286,10 +1295,20 @@ class Editor : public PublicEditor
|
||||||
|
|
||||||
/* import specific info */
|
/* import specific info */
|
||||||
|
|
||||||
ARDOUR::Session::import_status import_status;
|
struct EditorImportStatus : public ARDOUR::Session::import_status {
|
||||||
|
Editing::ImportMode mode;
|
||||||
|
nframes64_t pos;
|
||||||
|
int target_tracks;
|
||||||
|
int target_regions;
|
||||||
|
boost::shared_ptr<ARDOUR::Track> track;
|
||||||
|
bool replace;
|
||||||
|
};
|
||||||
|
|
||||||
|
EditorImportStatus import_status;
|
||||||
gint import_progress_timeout (void *);
|
gint import_progress_timeout (void *);
|
||||||
static void *_import_thread (void *);
|
static void *_import_thread (void *);
|
||||||
void* import_thread ();
|
void* import_thread ();
|
||||||
|
void finish_import ();
|
||||||
|
|
||||||
/* to support this ... */
|
/* to support this ... */
|
||||||
|
|
||||||
|
@ -1338,6 +1357,7 @@ class Editor : public PublicEditor
|
||||||
|
|
||||||
void add_location_mark (nframes64_t where);
|
void add_location_mark (nframes64_t where);
|
||||||
void add_location_from_audio_region ();
|
void add_location_from_audio_region ();
|
||||||
|
void add_locations_from_audio_region ();
|
||||||
void add_location_from_selection ();
|
void add_location_from_selection ();
|
||||||
void set_loop_from_selection (bool play);
|
void set_loop_from_selection (bool play);
|
||||||
void set_punch_from_selection ();
|
void set_punch_from_selection ();
|
||||||
|
@ -1382,6 +1402,7 @@ class Editor : public PublicEditor
|
||||||
double snap_threshold;
|
double snap_threshold;
|
||||||
|
|
||||||
void handle_gui_changes (const string &, void *);
|
void handle_gui_changes (const string &, void *);
|
||||||
|
bool ignore_gui_changes;
|
||||||
|
|
||||||
void hide_all_tracks (bool with_select);
|
void hide_all_tracks (bool with_select);
|
||||||
|
|
||||||
|
@ -1397,6 +1418,8 @@ class Editor : public PublicEditor
|
||||||
Gtk::Menu fade_context_menu;
|
Gtk::Menu fade_context_menu;
|
||||||
void popup_fade_context_menu (int, int, ArdourCanvas::Item*, ItemType);
|
void popup_fade_context_menu (int, int, ArdourCanvas::Item*, ItemType);
|
||||||
|
|
||||||
|
void region_gain_motion_callback (ArdourCanvas::Item*, GdkEvent*);
|
||||||
|
|
||||||
void start_fade_in_grab (ArdourCanvas::Item*, GdkEvent*);
|
void start_fade_in_grab (ArdourCanvas::Item*, GdkEvent*);
|
||||||
void start_fade_out_grab (ArdourCanvas::Item*, GdkEvent*);
|
void start_fade_out_grab (ArdourCanvas::Item*, GdkEvent*);
|
||||||
void fade_in_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
|
void fade_in_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
|
||||||
|
@ -1428,6 +1451,7 @@ class Editor : public PublicEditor
|
||||||
|
|
||||||
void cursor_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
|
void cursor_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
|
||||||
void cursor_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
|
void cursor_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
|
||||||
|
void cursor_drag_finished_ensure_locate_callback (ArdourCanvas::Item*, GdkEvent*);
|
||||||
void marker_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
|
void marker_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
|
||||||
void marker_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
|
void marker_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
|
||||||
void control_point_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
|
void control_point_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
|
||||||
|
@ -1448,6 +1472,7 @@ class Editor : public PublicEditor
|
||||||
void start_region_brush_grab (ArdourCanvas::Item*, GdkEvent*);
|
void start_region_brush_grab (ArdourCanvas::Item*, GdkEvent*);
|
||||||
void start_selection_grab (ArdourCanvas::Item*, GdkEvent*);
|
void start_selection_grab (ArdourCanvas::Item*, GdkEvent*);
|
||||||
void start_cursor_grab (ArdourCanvas::Item*, GdkEvent*);
|
void start_cursor_grab (ArdourCanvas::Item*, GdkEvent*);
|
||||||
|
void start_cursor_grab_no_stop (ArdourCanvas::Item*, GdkEvent*);
|
||||||
void start_marker_grab (ArdourCanvas::Item*, GdkEvent*);
|
void start_marker_grab (ArdourCanvas::Item*, GdkEvent*);
|
||||||
void start_control_point_grab (ArdourCanvas::Item*, GdkEvent*);
|
void start_control_point_grab (ArdourCanvas::Item*, GdkEvent*);
|
||||||
void start_line_grab_from_regionview (ArdourCanvas::Item*, GdkEvent*);
|
void start_line_grab_from_regionview (ArdourCanvas::Item*, GdkEvent*);
|
||||||
|
@ -1784,7 +1809,9 @@ public:
|
||||||
ArdourCanvas::SimpleRect* range_marker_drag_rect;
|
ArdourCanvas::SimpleRect* range_marker_drag_rect;
|
||||||
|
|
||||||
void update_marker_drag_item (ARDOUR::Location *);
|
void update_marker_drag_item (ARDOUR::Location *);
|
||||||
|
#ifdef GTKOSX
|
||||||
|
ArdourCanvas::SimpleRect *bogus_background_rect;
|
||||||
|
#endif
|
||||||
ArdourCanvas::SimpleRect *transport_bar_range_rect;
|
ArdourCanvas::SimpleRect *transport_bar_range_rect;
|
||||||
ArdourCanvas::SimpleRect *transport_bar_preroll_rect;
|
ArdourCanvas::SimpleRect *transport_bar_preroll_rect;
|
||||||
ArdourCanvas::SimpleRect *transport_bar_postroll_rect;
|
ArdourCanvas::SimpleRect *transport_bar_postroll_rect;
|
||||||
|
@ -1996,7 +2023,6 @@ public:
|
||||||
guint info,
|
guint info,
|
||||||
guint time);
|
guint time);
|
||||||
|
|
||||||
|
|
||||||
void drop_paths (const Glib::RefPtr<Gdk::DragContext>& context,
|
void drop_paths (const Glib::RefPtr<Gdk::DragContext>& context,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
|
@ -2109,6 +2135,7 @@ public:
|
||||||
Gtk::ComboBoxText stretch_opts_selector;
|
Gtk::ComboBoxText stretch_opts_selector;
|
||||||
Gtk::Label stretch_opts_label;
|
Gtk::Label stretch_opts_label;
|
||||||
Gtk::ToggleButton precise_button;
|
Gtk::ToggleButton precise_button;
|
||||||
|
Gtk::ToggleButton preserve_formants_button;
|
||||||
Gtk::HBox opts_box;
|
Gtk::HBox opts_box;
|
||||||
|
|
||||||
Gtk::Button* cancel_button;
|
Gtk::Button* cancel_button;
|
||||||
|
@ -2151,7 +2178,9 @@ public:
|
||||||
|
|
||||||
void detach_tearoff (Gtk::Box* b, Gtk::Window* w);
|
void detach_tearoff (Gtk::Box* b, Gtk::Window* w);
|
||||||
void reattach_tearoff (Gtk::Box* b, Gtk::Window* w, int32_t n);
|
void reattach_tearoff (Gtk::Box* b, Gtk::Window* w, int32_t n);
|
||||||
|
#ifdef GTKOSX
|
||||||
|
void ensure_all_elements_drawn ();
|
||||||
|
#endif
|
||||||
/* nudging tracks */
|
/* nudging tracks */
|
||||||
|
|
||||||
void nudge_track (bool use_edit_point, bool forwards);
|
void nudge_track (bool use_edit_point, bool forwards);
|
||||||
|
@ -2250,6 +2279,7 @@ public:
|
||||||
bool entered_track_canvas (GdkEventCrossing*);
|
bool entered_track_canvas (GdkEventCrossing*);
|
||||||
void set_entered_track (TimeAxisView*);
|
void set_entered_track (TimeAxisView*);
|
||||||
void set_entered_regionview (RegionView*);
|
void set_entered_regionview (RegionView*);
|
||||||
|
void ensure_track_visible (TimeAxisView*);
|
||||||
gint left_automation_track ();
|
gint left_automation_track ();
|
||||||
|
|
||||||
bool _new_regionviews_show_envelope;
|
bool _new_regionviews_show_envelope;
|
||||||
|
|
|
@ -57,6 +57,8 @@ Editor::register_actions ()
|
||||||
ActionManager::register_action (editor_actions, X_("LatchMenu"), _("Latch"));
|
ActionManager::register_action (editor_actions, X_("LatchMenu"), _("Latch"));
|
||||||
ActionManager::register_action (editor_actions, X_("Layering"), _("Layering"));
|
ActionManager::register_action (editor_actions, X_("Layering"), _("Layering"));
|
||||||
ActionManager::register_action (editor_actions, X_("Link"), _("Link"));
|
ActionManager::register_action (editor_actions, X_("Link"), _("Link"));
|
||||||
|
ActionManager::register_action (editor_actions, X_("ZoomFocusMenu"), _("Zoom Focus"));
|
||||||
|
ActionManager::register_action (editor_actions, X_("KeyMouseActions"), _("Key Mouse"));
|
||||||
ActionManager::register_action (editor_actions, X_("LocateToMarker"), _("Locate To Markers"));
|
ActionManager::register_action (editor_actions, X_("LocateToMarker"), _("Locate To Markers"));
|
||||||
ActionManager::register_action (editor_actions, X_("MarkerMenu"), _("Markers"));
|
ActionManager::register_action (editor_actions, X_("MarkerMenu"), _("Markers"));
|
||||||
ActionManager::register_action (editor_actions, X_("MeterFalloff"), _("Meter falloff"));
|
ActionManager::register_action (editor_actions, X_("MeterFalloff"), _("Meter falloff"));
|
||||||
|
@ -207,6 +209,9 @@ Editor::register_actions ()
|
||||||
act = ActionManager::register_action (editor_actions, "select-prev-route", _("Select Previous Track/Bus"), mem_fun(*this, &Editor::select_prev_route));
|
act = ActionManager::register_action (editor_actions, "select-prev-route", _("Select Previous Track/Bus"), mem_fun(*this, &Editor::select_prev_route));
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
|
||||||
|
act = ActionManager::register_action (editor_actions, "track-record-enable-toggle", _("Toggle Record Enable"), mem_fun(*this, &Editor::toggle_record_enable));
|
||||||
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
|
||||||
|
|
||||||
act = ActionManager::register_action (editor_actions, "save-visual-state-1", _("Save View 1"), bind (mem_fun (*this, &Editor::start_visual_state_op), 0));
|
act = ActionManager::register_action (editor_actions, "save-visual-state-1", _("Save View 1"), bind (mem_fun (*this, &Editor::start_visual_state_op), 0));
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
@ -378,6 +383,7 @@ Editor::register_actions ()
|
||||||
ActionManager::region_selection_sensitive_actions.push_back (act);
|
ActionManager::region_selection_sensitive_actions.push_back (act);
|
||||||
act = ActionManager::register_action (editor_actions, "loop-region", _("Loop Region"), bind (mem_fun(*this, &Editor::set_loop_from_region), true));
|
act = ActionManager::register_action (editor_actions, "loop-region", _("Loop Region"), bind (mem_fun(*this, &Editor::set_loop_from_region), true));
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
ActionManager::region_selection_sensitive_actions.push_back (act);
|
||||||
act = ActionManager::register_action (editor_actions, "set-punch-from-edit-range", _("Set Punch From Edit Range"), mem_fun(*this, &Editor::set_punch_from_edit_range));
|
act = ActionManager::register_action (editor_actions, "set-punch-from-edit-range", _("Set Punch From Edit Range"), mem_fun(*this, &Editor::set_punch_from_edit_range));
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
act = ActionManager::register_action (editor_actions, "set-punch-from-region", _("Set Punch From Region"), mem_fun(*this, &Editor::set_punch_from_region));
|
act = ActionManager::register_action (editor_actions, "set-punch-from-region", _("Set Punch From Region"), mem_fun(*this, &Editor::set_punch_from_region));
|
||||||
|
@ -389,6 +395,12 @@ Editor::register_actions ()
|
||||||
act = ActionManager::register_action (editor_actions, "toggle-opaque-region", _("Toggle Opaque"), mem_fun(*this, &Editor::toggle_region_opaque));
|
act = ActionManager::register_action (editor_actions, "toggle-opaque-region", _("Toggle Opaque"), mem_fun(*this, &Editor::toggle_region_opaque));
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
ActionManager::region_selection_sensitive_actions.push_back (act);
|
ActionManager::region_selection_sensitive_actions.push_back (act);
|
||||||
|
act = ActionManager::register_action (editor_actions, "add-range-marker-from-region", _("Add 1 Range Marker"), mem_fun(*this, &Editor::add_location_from_audio_region));
|
||||||
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
ActionManager::region_selection_sensitive_actions.push_back (act);
|
||||||
|
act = ActionManager::register_action (editor_actions, "add-range-markers-from-region", _("Add Range Marker(s)"), mem_fun(*this, &Editor::add_locations_from_audio_region));
|
||||||
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
ActionManager::region_selection_sensitive_actions.push_back (act);
|
||||||
|
|
||||||
act = ActionManager::register_action (editor_actions, "set-fade-in-length", _("Set Fade In Length"), bind (mem_fun(*this, &Editor::set_fade_length), true));
|
act = ActionManager::register_action (editor_actions, "set-fade-in-length", _("Set Fade In Length"), bind (mem_fun(*this, &Editor::set_fade_length), true));
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
@ -588,7 +600,11 @@ Editor::register_actions ()
|
||||||
act = ActionManager::register_action (editor_actions, "toggle-track-active", _("Toggle Active"), (mem_fun(*this, &Editor::toggle_tracks_active)));
|
act = ActionManager::register_action (editor_actions, "toggle-track-active", _("Toggle Active"), (mem_fun(*this, &Editor::toggle_tracks_active)));
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
ActionManager::track_selection_sensitive_actions.push_back (act);
|
ActionManager::track_selection_sensitive_actions.push_back (act);
|
||||||
act = ActionManager::register_action (editor_actions, "remove-track", _("Remove"), (mem_fun(*this, &Editor::remove_tracks)));
|
if (Profile->get_sae()) {
|
||||||
|
act = ActionManager::register_action (editor_actions, "remove-track", _("Delete"), (mem_fun(*this, &Editor::remove_tracks)));
|
||||||
|
} else {
|
||||||
|
act = ActionManager::register_action (editor_actions, "remove-track", _("Remove"), (mem_fun(*this, &Editor::remove_tracks)));
|
||||||
|
}
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
ActionManager::track_selection_sensitive_actions.push_back (act);
|
ActionManager::track_selection_sensitive_actions.push_back (act);
|
||||||
|
|
||||||
|
@ -640,6 +656,8 @@ Editor::register_actions ()
|
||||||
ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Timefx Tool"), bind (mem_fun(*this, &Editor::set_mouse_mode), Editing::MouseTimeFX, false));
|
ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Timefx Tool"), bind (mem_fun(*this, &Editor::set_mouse_mode), Editing::MouseTimeFX, false));
|
||||||
ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-note", _("Note Tool"), bind (mem_fun(*this, &Editor::set_mouse_mode), Editing::MouseNote, false));
|
ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-note", _("Note Tool"), bind (mem_fun(*this, &Editor::set_mouse_mode), Editing::MouseNote, false));
|
||||||
|
|
||||||
|
ActionManager::register_action (editor_actions, "step-mouse-mode", _("Step Mouse Mode"), bind (mem_fun(*this, &Editor::step_mouse_mode), true));
|
||||||
|
|
||||||
RadioAction::Group edit_point_group;
|
RadioAction::Group edit_point_group;
|
||||||
ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-playhead"), _("Playhead"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
|
ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-playhead"), _("Playhead"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
|
||||||
ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-mouse"), _("Mouse"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
|
ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-mouse"), _("Mouse"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
|
||||||
|
@ -647,8 +665,9 @@ Editor::register_actions ()
|
||||||
|
|
||||||
ActionManager::register_action (editor_actions, "cycle-edit-point", _("Change edit point"), bind (mem_fun (*this, &Editor::cycle_edit_point), false));
|
ActionManager::register_action (editor_actions, "cycle-edit-point", _("Change edit point"), bind (mem_fun (*this, &Editor::cycle_edit_point), false));
|
||||||
ActionManager::register_action (editor_actions, "cycle-edit-point-with-marker", _("Change edit point (w/Marker)"), bind (mem_fun (*this, &Editor::cycle_edit_point), true));
|
ActionManager::register_action (editor_actions, "cycle-edit-point-with-marker", _("Change edit point (w/Marker)"), bind (mem_fun (*this, &Editor::cycle_edit_point), true));
|
||||||
|
if (!Profile->get_sae()) {
|
||||||
ActionManager::register_action (editor_actions, "set-edit-splice", _("Splice"), bind (mem_fun (*this, &Editor::set_edit_mode), Splice));
|
ActionManager::register_action (editor_actions, "set-edit-splice", _("Splice"), bind (mem_fun (*this, &Editor::set_edit_mode), Splice));
|
||||||
|
}
|
||||||
ActionManager::register_action (editor_actions, "set-edit-slide", _("Slide"), bind (mem_fun (*this, &Editor::set_edit_mode), Slide));
|
ActionManager::register_action (editor_actions, "set-edit-slide", _("Slide"), bind (mem_fun (*this, &Editor::set_edit_mode), Slide));
|
||||||
ActionManager::register_action (editor_actions, "set-edit-lock", _("Lock"), bind (mem_fun (*this, &Editor::set_edit_mode), Lock));
|
ActionManager::register_action (editor_actions, "set-edit-lock", _("Lock"), bind (mem_fun (*this, &Editor::set_edit_mode), Lock));
|
||||||
ActionManager::register_action (editor_actions, "toggle-edit-mode", _("Toggle Edit Mode"), mem_fun (*this, &Editor::cycle_edit_mode));
|
ActionManager::register_action (editor_actions, "toggle-edit-mode", _("Toggle Edit Mode"), mem_fun (*this, &Editor::cycle_edit_mode));
|
||||||
|
@ -706,12 +725,16 @@ Editor::register_actions ()
|
||||||
ruler_meter_action->set_active (true);
|
ruler_meter_action->set_active (true);
|
||||||
ruler_tempo_action->set_active (true);
|
ruler_tempo_action->set_active (true);
|
||||||
ruler_marker_action->set_active (true);
|
ruler_marker_action->set_active (true);
|
||||||
ruler_range_action->set_active (true);
|
ruler_range_action->set_active (false);
|
||||||
|
ruler_loop_punch_action->set_active (true);
|
||||||
|
ruler_loop_punch_action->set_active (true);
|
||||||
if (Profile->get_sae()) {
|
if (Profile->get_sae()) {
|
||||||
|
ruler_bbt_action->set_active (true);
|
||||||
ruler_cd_marker_action->set_active (false);
|
ruler_cd_marker_action->set_active (false);
|
||||||
ruler_timecode_action->set_active (false);
|
ruler_timecode_action->set_active (false);
|
||||||
ruler_minsec_action->set_active (true);
|
ruler_minsec_action->set_active (true);
|
||||||
} else {
|
} else {
|
||||||
|
ruler_bbt_action->set_active (false);
|
||||||
ruler_cd_marker_action->set_active (true);
|
ruler_cd_marker_action->set_active (true);
|
||||||
ruler_timecode_action->set_active (true);
|
ruler_timecode_action->set_active (true);
|
||||||
ruler_minsec_action->set_active (false);
|
ruler_minsec_action->set_active (false);
|
||||||
|
|
|
@ -57,6 +57,7 @@
|
||||||
#include "midi_time_axis.h"
|
#include "midi_time_axis.h"
|
||||||
#include "session_import_dialog.h"
|
#include "session_import_dialog.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "gui_thread.h"
|
||||||
|
|
||||||
#include "i18n.h"
|
#include "i18n.h"
|
||||||
|
|
||||||
|
@ -217,7 +218,6 @@ Editor::check_whether_and_how_to_import(string path, bool all_or_nothing)
|
||||||
|
|
||||||
for (SourceMap::iterator i = all_sources.begin(); i != all_sources.end(); ++i) {
|
for (SourceMap::iterator i = all_sources.begin(); i != all_sources.end(); ++i) {
|
||||||
string tmp (Glib::path_get_basename (i->second->path()));
|
string tmp (Glib::path_get_basename (i->second->path()));
|
||||||
|
|
||||||
if (tmp == wave_name) {
|
if (tmp == wave_name) {
|
||||||
wave_name_exists = true;
|
wave_name_exists = true;
|
||||||
break;
|
break;
|
||||||
|
@ -226,7 +226,6 @@ Editor::check_whether_and_how_to_import(string path, bool all_or_nothing)
|
||||||
|
|
||||||
int function = 1;
|
int function = 1;
|
||||||
|
|
||||||
|
|
||||||
if (wave_name_exists) {
|
if (wave_name_exists) {
|
||||||
string message;
|
string message;
|
||||||
if (all_or_nothing) {
|
if (all_or_nothing) {
|
||||||
|
@ -249,7 +248,6 @@ Editor::check_whether_and_how_to_import(string path, bool all_or_nothing)
|
||||||
dialog.add_button("Cancel", 2);
|
dialog.add_button("Cancel", 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//dialog.add_button("Skip all", 4); // All or rest?
|
//dialog.add_button("Skip all", 4); // All or rest?
|
||||||
|
|
||||||
dialog.show();
|
dialog.show();
|
||||||
|
@ -322,29 +320,11 @@ Editor::get_nth_selected_midi_track (int nth) const
|
||||||
return mtv->midi_track();
|
return mtv->midi_track();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
Editor::idle_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mode, SrcQuality quality, nframes64_t& pos)
|
|
||||||
{
|
|
||||||
_do_import (paths, chns, mode, quality, pos);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mode, SrcQuality quality, nframes64_t& pos)
|
Editor::do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mode, SrcQuality quality, nframes64_t& pos)
|
||||||
{
|
|
||||||
#ifdef GTKOSX
|
|
||||||
Glib::signal_idle().connect (bind (mem_fun (*this, &Editor::idle_do_import), paths, chns, mode, quality, pos));
|
|
||||||
#else
|
|
||||||
_do_import (paths, chns, mode, quality, pos);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Editor::_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mode, SrcQuality quality, nframes64_t& pos)
|
|
||||||
{
|
{
|
||||||
boost::shared_ptr<Track> track;
|
boost::shared_ptr<Track> track;
|
||||||
vector<ustring> to_import;
|
vector<ustring> to_import;
|
||||||
bool ok = true;
|
|
||||||
int nth = 0;
|
int nth = 0;
|
||||||
|
|
||||||
if (interthread_progress_window == 0) {
|
if (interthread_progress_window == 0) {
|
||||||
|
@ -352,11 +332,13 @@ Editor::_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mo
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chns == Editing::ImportMergeFiles) {
|
if (chns == Editing::ImportMergeFiles) {
|
||||||
|
|
||||||
/* create 1 region from all paths, add to 1 track,
|
/* create 1 region from all paths, add to 1 track,
|
||||||
ignore "track"
|
ignore "track"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool cancel = false;
|
bool cancel = false;
|
||||||
for (vector<ustring>::iterator a = paths.begin(); a != paths.end() && ok; ++a) {
|
for (vector<ustring>::iterator a = paths.begin(); a != paths.end(); ++a) {
|
||||||
int check = check_whether_and_how_to_import(*a, false);
|
int check = check_whether_and_how_to_import(*a, false);
|
||||||
if (check == 2) {
|
if (check == 2) {
|
||||||
cancel = true;
|
cancel = true;
|
||||||
|
@ -365,20 +347,21 @@ Editor::_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mo
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cancel) {
|
if (!cancel) {
|
||||||
if (import_sndfiles (paths, mode, quality, pos, 1, 1, track, false)) {
|
import_sndfiles (paths, mode, quality, pos, 1, 1, track, false, paths.size());
|
||||||
ok = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
bool replace = false;
|
bool replace = false;
|
||||||
|
bool ok = true;
|
||||||
|
vector<ustring>::size_type total = paths.size();
|
||||||
|
|
||||||
for (vector<ustring>::iterator a = paths.begin(); a != paths.end() && ok; ++a) {
|
for (vector<ustring>::iterator a = paths.begin(); a != paths.end() && ok; ++a) {
|
||||||
|
|
||||||
int check = check_whether_and_how_to_import(*a, true);
|
int check = check_whether_and_how_to_import(*a, true);
|
||||||
|
|
||||||
if (check == 2 ) {
|
if (check == 2 ) {
|
||||||
// skip
|
// user said skip
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -390,81 +373,48 @@ Editor::_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
switch (chns) {
|
switch (chns) {
|
||||||
case Editing::ImportDistinctFiles:
|
case Editing::ImportDistinctFiles:
|
||||||
|
|
||||||
to_import.clear ();
|
to_import.clear ();
|
||||||
to_import.push_back (*a);
|
to_import.push_back (*a);
|
||||||
|
|
||||||
if (mode == Editing::ImportToTrack) {
|
if (mode == Editing::ImportToTrack) {
|
||||||
track = get_nth_selected_audio_track (nth++);
|
track = get_nth_selected_audio_track (nth++);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (import_sndfiles (to_import, mode, quality, pos, 1, -1, track, replace)) {
|
ok = (import_sndfiles (to_import, mode, quality, pos, 1, -1, track, replace, total) == 0);
|
||||||
ok = false;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
case Editing::ImportDistinctChannels:
|
||||||
|
|
||||||
case Editing::ImportDistinctChannels:
|
to_import.clear ();
|
||||||
|
to_import.push_back (*a);
|
||||||
|
|
||||||
to_import.clear ();
|
ok = (import_sndfiles (to_import, mode, quality, pos, -1, -1, track, replace, total) == 0);
|
||||||
to_import.push_back (*a);
|
break;
|
||||||
|
|
||||||
if (import_sndfiles (to_import, mode, quality, pos, -1, -1, track, replace)) {
|
case Editing::ImportSerializeFiles:
|
||||||
ok = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
to_import.clear ();
|
||||||
|
to_import.push_back (*a);
|
||||||
|
|
||||||
case Editing::ImportSerializeFiles:
|
ok = (import_sndfiles (to_import, mode, quality, pos, 1, 1, track, replace, total) == 0);
|
||||||
|
break;
|
||||||
|
|
||||||
to_import.clear ();
|
case Editing::ImportMergeFiles:
|
||||||
to_import.push_back (*a);
|
// Not entered, handled in earlier if() branch
|
||||||
|
break;
|
||||||
/* create 1 region from this path, add to 1 track,
|
|
||||||
reuse "track" across paths
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (import_sndfiles (to_import, mode, quality, pos, 1, 1, track, replace)) {
|
|
||||||
ok = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Editing::ImportMergeFiles:
|
|
||||||
// Not entered
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ok) {
|
|
||||||
session->save_state ("");
|
|
||||||
}
|
|
||||||
|
|
||||||
interthread_progress_window->hide_all ();
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
interthread_progress_window->hide_all ();
|
||||||
Editor::idle_do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos)
|
|
||||||
{
|
|
||||||
_do_embed (paths, chns, mode, pos);
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos)
|
Editor::do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos)
|
||||||
{
|
|
||||||
#ifdef GTKOSX
|
|
||||||
Glib::signal_idle().connect (bind (mem_fun (*this, &Editor::idle_do_embed), paths, chns, mode, pos));
|
|
||||||
#else
|
|
||||||
_do_embed (paths, chns, mode, pos);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Editor::_do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos)
|
|
||||||
{
|
{
|
||||||
boost::shared_ptr<Track> track;
|
boost::shared_ptr<Track> track;
|
||||||
bool check_sample_rate = true;
|
bool check_sample_rate = true;
|
||||||
|
@ -531,7 +481,7 @@ Editor::_do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mod
|
||||||
|
|
||||||
int
|
int
|
||||||
Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality quality, nframes64_t& pos,
|
Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality quality, nframes64_t& pos,
|
||||||
int target_regions, int target_tracks, boost::shared_ptr<Track>& track, bool replace)
|
int target_regions, int target_tracks, boost::shared_ptr<Track> track, bool replace, uint32_t total)
|
||||||
{
|
{
|
||||||
WindowTitle title = string_compose (_("importing %1"), paths.front());
|
WindowTitle title = string_compose (_("importing %1"), paths.front());
|
||||||
|
|
||||||
|
@ -539,7 +489,7 @@ Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality qual
|
||||||
interthread_progress_window->set_position (Gtk::WIN_POS_MOUSE);
|
interthread_progress_window->set_position (Gtk::WIN_POS_MOUSE);
|
||||||
interthread_progress_bar.set_fraction (0.0f);
|
interthread_progress_bar.set_fraction (0.0f);
|
||||||
interthread_cancel_label.set_text (_("Cancel Import"));
|
interthread_cancel_label.set_text (_("Cancel Import"));
|
||||||
current_interthread_info = &import_status;
|
current_interthread_info = &import_status;
|
||||||
|
|
||||||
import_status.paths = paths;
|
import_status.paths = paths;
|
||||||
import_status.done = false;
|
import_status.done = false;
|
||||||
|
@ -548,42 +498,53 @@ Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality qual
|
||||||
import_status.done = 0.0;
|
import_status.done = 0.0;
|
||||||
import_status.quality = quality;
|
import_status.quality = quality;
|
||||||
import_status.replace_existing_source = replace;
|
import_status.replace_existing_source = replace;
|
||||||
|
import_status.total = total;
|
||||||
|
|
||||||
|
import_status.mode = mode;
|
||||||
|
import_status.pos = pos;
|
||||||
|
import_status.target_tracks = target_tracks;
|
||||||
|
import_status.target_regions = target_regions;
|
||||||
|
import_status.track = track;
|
||||||
|
import_status.replace = replace;
|
||||||
interthread_progress_connection = Glib::signal_timeout().connect
|
interthread_progress_connection = Glib::signal_timeout().connect
|
||||||
(bind (mem_fun(*this, &Editor::import_progress_timeout), (gpointer) 0), 500);
|
(bind (mem_fun(*this, &Editor::import_progress_timeout), (gpointer) 0), 500);
|
||||||
|
|
||||||
track_canvas->get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
|
track_canvas->get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
|
||||||
ARDOUR_UI::instance()->flush_pending ();
|
gdk_flush ();
|
||||||
|
|
||||||
/* start import thread for this spec. this will ultimately call Session::import_audiofiles()
|
/* start import thread for this spec. this will ultimately call Session::import_audiofiles()
|
||||||
and if successful will add the file(s) as a region to the session region list.
|
which, if successful, will add the files as regions to the region list. its up to us
|
||||||
|
(the GUI) to direct additional steps after that.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pthread_create_and_store ("import", &import_status.thread, 0, _import_thread, this);
|
pthread_create_and_store ("import", &import_status.thread, 0, _import_thread, this);
|
||||||
pthread_detach (import_status.thread);
|
pthread_detach (import_status.thread);
|
||||||
|
|
||||||
while (!(import_status.done || import_status.cancel)) {
|
while (!import_status.done && !import_status.cancel) {
|
||||||
gtk_main_iteration ();
|
gtk_main_iteration ();
|
||||||
}
|
}
|
||||||
|
|
||||||
interthread_progress_window->hide ();
|
interthread_progress_window->hide ();
|
||||||
|
|
||||||
import_status.done = true;
|
import_status.done = true;
|
||||||
interthread_progress_connection.disconnect ();
|
interthread_progress_connection.disconnect ();
|
||||||
|
|
||||||
/* import thread finished - see if we should build a new track */
|
if (!import_status.cancel && !import_status.sources.empty()) {
|
||||||
|
if (add_sources (import_status.paths,
|
||||||
|
import_status.sources,
|
||||||
|
import_status.pos,
|
||||||
|
import_status.mode,
|
||||||
|
import_status.target_regions,
|
||||||
|
import_status.target_tracks,
|
||||||
|
import_status.track, false) == 0) {
|
||||||
|
session->save_state ("");
|
||||||
|
}
|
||||||
|
|
||||||
boost::shared_ptr<AudioRegion> r;
|
/* update position from results */
|
||||||
|
|
||||||
if (import_status.cancel || import_status.sources.empty()) {
|
pos = import_status.pos;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (add_sources (paths, import_status.sources, pos, mode, target_regions, target_tracks, track, false) == 0) {
|
|
||||||
session->save_state ("");
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
track_canvas->get_window()->set_cursor (*current_canvas_cursor);
|
track_canvas->get_window()->set_cursor (*current_canvas_cursor);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -600,7 +561,7 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
track_canvas->get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
|
track_canvas->get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
|
||||||
ARDOUR_UI::instance()->flush_pending ();
|
gdk_flush ();
|
||||||
|
|
||||||
for (vector<Glib::ustring>::iterator p = paths.begin(); p != paths.end(); ++p) {
|
for (vector<Glib::ustring>::iterator p = paths.begin(); p != paths.end(); ++p) {
|
||||||
|
|
||||||
|
@ -710,8 +671,6 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
|
||||||
|
|
||||||
if ((s = session->source_by_path_and_channel (path, n)) == 0) {
|
if ((s = session->source_by_path_and_channel (path, n)) == 0) {
|
||||||
|
|
||||||
cerr << "add embed/import source with defer_peaks = true\n";
|
|
||||||
|
|
||||||
source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable
|
source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable
|
||||||
(DataType::AUDIO, *session, path, n,
|
(DataType::AUDIO, *session, path, n,
|
||||||
(mode == ImportAsTapeTrack ?
|
(mode == ImportAsTapeTrack ?
|
||||||
|
@ -775,7 +734,7 @@ Editor::add_sources (vector<Glib::ustring> paths, SourceList& sources, nframes64
|
||||||
regions.push_back (RegionFactory::create (sources, 0, sources[0]->length(), region_name, 0,
|
regions.push_back (RegionFactory::create (sources, 0, sources[0]->length(), region_name, 0,
|
||||||
Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External)));
|
Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External)));
|
||||||
|
|
||||||
} else if (target_regions == -1) {
|
} else if (target_regions == -1 || target_regions > 1) {
|
||||||
|
|
||||||
/* take each source and create a region for each one */
|
/* take each source and create a region for each one */
|
||||||
|
|
||||||
|
@ -922,7 +881,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t
|
||||||
void *
|
void *
|
||||||
Editor::_import_thread (void *arg)
|
Editor::_import_thread (void *arg)
|
||||||
{
|
{
|
||||||
PBD::ThreadCreated (pthread_self(), X_("Import"));
|
PBD::notify_gui_about_thread_creation (pthread_self(), X_("Import"));
|
||||||
|
|
||||||
Editor *ed = (Editor *) arg;
|
Editor *ed = (Editor *) arg;
|
||||||
return ed->import_thread ();
|
return ed->import_thread ();
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <libgnomecanvasmm/init.h>
|
#include <libgnomecanvasmm/init.h>
|
||||||
|
#include <libgnomecanvasmm/pixbuf.h>
|
||||||
#include <jack/types.h>
|
#include <jack/types.h>
|
||||||
#include <gtkmm2ext/utils.h>
|
#include <gtkmm2ext/utils.h>
|
||||||
|
|
||||||
|
@ -29,9 +30,11 @@
|
||||||
#include "waveview.h"
|
#include "waveview.h"
|
||||||
#include "simplerect.h"
|
#include "simplerect.h"
|
||||||
#include "simpleline.h"
|
#include "simpleline.h"
|
||||||
|
#include "imageframe.h"
|
||||||
#include "waveview_p.h"
|
#include "waveview_p.h"
|
||||||
#include "simplerect_p.h"
|
#include "simplerect_p.h"
|
||||||
#include "simpleline_p.h"
|
#include "simpleline_p.h"
|
||||||
|
#include "imageframe_p.h"
|
||||||
#include "canvas_impl.h"
|
#include "canvas_impl.h"
|
||||||
#include "editing.h"
|
#include "editing.h"
|
||||||
#include "rgb_macros.h"
|
#include "rgb_macros.h"
|
||||||
|
@ -39,11 +42,6 @@
|
||||||
#include "time_axis_view.h"
|
#include "time_axis_view.h"
|
||||||
#include "audio_time_axis.h"
|
#include "audio_time_axis.h"
|
||||||
|
|
||||||
#ifdef WITH_CMT
|
|
||||||
#include "imageframe.h"
|
|
||||||
#include "imageframe_p.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "i18n.h"
|
#include "i18n.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
@ -65,10 +63,7 @@ extern "C"
|
||||||
GType gnome_canvas_simpleline_get_type(void);
|
GType gnome_canvas_simpleline_get_type(void);
|
||||||
GType gnome_canvas_simplerect_get_type(void);
|
GType gnome_canvas_simplerect_get_type(void);
|
||||||
GType gnome_canvas_waveview_get_type(void);
|
GType gnome_canvas_waveview_get_type(void);
|
||||||
|
|
||||||
#ifdef WITH_CMT
|
|
||||||
GType gnome_canvas_imageframe_get_type(void);
|
GType gnome_canvas_imageframe_get_type(void);
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,23 +74,16 @@ static void ardour_canvas_type_init()
|
||||||
Glib::wrap_register(gnome_canvas_simpleline_get_type(), &Gnome::Canvas::SimpleLine_Class::wrap_new);
|
Glib::wrap_register(gnome_canvas_simpleline_get_type(), &Gnome::Canvas::SimpleLine_Class::wrap_new);
|
||||||
Glib::wrap_register(gnome_canvas_simplerect_get_type(), &Gnome::Canvas::SimpleRect_Class::wrap_new);
|
Glib::wrap_register(gnome_canvas_simplerect_get_type(), &Gnome::Canvas::SimpleRect_Class::wrap_new);
|
||||||
Glib::wrap_register(gnome_canvas_waveview_get_type(), &Gnome::Canvas::WaveView_Class::wrap_new);
|
Glib::wrap_register(gnome_canvas_waveview_get_type(), &Gnome::Canvas::WaveView_Class::wrap_new);
|
||||||
|
// Glib::wrap_register(gnome_canvas_imageframe_get_type(), &Gnome::Canvas::ImageFrame_Class::wrap_new);
|
||||||
#ifdef WITH_CMT
|
|
||||||
Glib::wrap_register(gnome_canvas_imageframe_get_type(), &Gnome::Canvas::ImageFrame_Class::wrap_new);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Register the gtkmm gtypes:
|
// Register the gtkmm gtypes:
|
||||||
|
|
||||||
(void) Gnome::Canvas::WaveView::get_type();
|
(void) Gnome::Canvas::WaveView::get_type();
|
||||||
(void) Gnome::Canvas::SimpleLine::get_type();
|
(void) Gnome::Canvas::SimpleLine::get_type();
|
||||||
(void) Gnome::Canvas::SimpleRect::get_type();
|
(void) Gnome::Canvas::SimpleRect::get_type();
|
||||||
|
|
||||||
#ifdef WITH_CMT
|
|
||||||
(void) Gnome::Canvas::ImageFrame::get_type();
|
(void) Gnome::Canvas::ImageFrame::get_type();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::initialize_canvas ()
|
Editor::initialize_canvas ()
|
||||||
{
|
{
|
||||||
|
@ -133,6 +121,8 @@ Editor::initialize_canvas ()
|
||||||
|
|
||||||
verbose_cursor_visible = false;
|
verbose_cursor_visible = false;
|
||||||
|
|
||||||
|
/* on the bottom, an image */
|
||||||
|
|
||||||
if (Profile->get_sae()) {
|
if (Profile->get_sae()) {
|
||||||
Image img (::get_icon (X_("saelogo")));
|
Image img (::get_icon (X_("saelogo")));
|
||||||
logo_item = new ArdourCanvas::Pixbuf (*track_canvas->root(), 0.0, 0.0, img.get_pixbuf());
|
logo_item = new ArdourCanvas::Pixbuf (*track_canvas->root(), 0.0, 0.0, img.get_pixbuf());
|
||||||
|
@ -143,58 +133,92 @@ Editor::initialize_canvas ()
|
||||||
logo_item->show ();
|
logo_item->show ();
|
||||||
}
|
}
|
||||||
|
|
||||||
_master_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
|
/* a group to hold time (measure) lines */
|
||||||
|
time_line_group = new ArdourCanvas::Group (*track_canvas->root());
|
||||||
|
|
||||||
transport_loop_range_rect = new ArdourCanvas::SimpleRect (*_master_group, 0.0, 0.0, 0.0, physical_screen_width);
|
#ifdef GTKOSX
|
||||||
|
/*XXX please don't laugh. this actually improves canvas performance on osx */
|
||||||
|
bogus_background_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, max_canvas_coordinate/3, physical_screen_height);
|
||||||
|
bogus_background_rect->property_outline_pixels() = 0;
|
||||||
|
#endif
|
||||||
|
transport_loop_range_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, physical_screen_height);
|
||||||
transport_loop_range_rect->property_outline_pixels() = 1;
|
transport_loop_range_rect->property_outline_pixels() = 1;
|
||||||
transport_loop_range_rect->hide();
|
transport_loop_range_rect->hide();
|
||||||
|
|
||||||
transport_punch_range_rect = new ArdourCanvas::SimpleRect (*_master_group, 0.0, 0.0, 0.0, physical_screen_width);
|
transport_punch_range_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, physical_screen_height);
|
||||||
transport_punch_range_rect->property_outline_pixels() = 0;
|
transport_punch_range_rect->property_outline_pixels() = 0;
|
||||||
transport_punch_range_rect->hide();
|
transport_punch_range_rect->hide();
|
||||||
|
|
||||||
/* a group to hold time (measure) lines */
|
_background_group = new ArdourCanvas::Group (*track_canvas->root());
|
||||||
time_line_group = new ArdourCanvas::Group (*_master_group, 0.0, 0.0);
|
_master_group = new ArdourCanvas::Group (*track_canvas->root());
|
||||||
|
|
||||||
range_marker_drag_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, physical_screen_width);
|
range_marker_drag_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, physical_screen_height);
|
||||||
range_marker_drag_rect->hide ();
|
range_marker_drag_rect->hide ();
|
||||||
|
|
||||||
_trackview_group = new ArdourCanvas::Group (*_master_group, 0.0, 0.0);
|
_trackview_group = new ArdourCanvas::Group (*_master_group);
|
||||||
_region_motion_group = new ArdourCanvas::Group (*_trackview_group, 0.0, 0.0);
|
_region_motion_group = new ArdourCanvas::Group (*_trackview_group);
|
||||||
|
|
||||||
/* el barrio */
|
meter_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
|
||||||
|
if (Profile->get_sae()) {
|
||||||
meter_bar_group = new ArdourCanvas::Group (*track_canvas->root());
|
meter_bar = new ArdourCanvas::SimpleRect (*meter_bar_group, 0.0, 0.0, physical_screen_width, timebar_height - 1);
|
||||||
meter_bar = new ArdourCanvas::SimpleRect (*meter_bar_group, 0.0, 0.0, physical_screen_width, timebar_height-1.0);
|
meter_bar->property_outline_pixels() = 1;
|
||||||
|
} else {
|
||||||
|
meter_bar = new ArdourCanvas::SimpleRect (*meter_bar_group, 0.0, 0.0, physical_screen_width, timebar_height);
|
||||||
|
meter_bar->property_outline_pixels() = 0;
|
||||||
|
}
|
||||||
meter_bar->property_outline_what() = (0x1 | 0x8);
|
meter_bar->property_outline_what() = (0x1 | 0x8);
|
||||||
meter_bar->property_outline_pixels() = 1;
|
|
||||||
|
|
||||||
tempo_bar_group = new ArdourCanvas::Group (*track_canvas->root());
|
tempo_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
|
||||||
tempo_bar = new ArdourCanvas::SimpleRect (*tempo_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height-1.0));
|
if (Profile->get_sae()) {
|
||||||
|
tempo_bar = new ArdourCanvas::SimpleRect (*tempo_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height - 1));
|
||||||
|
tempo_bar->property_outline_pixels() = 1;
|
||||||
|
} else {
|
||||||
|
tempo_bar = new ArdourCanvas::SimpleRect (*tempo_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height));
|
||||||
|
tempo_bar->property_outline_pixels() = 0;
|
||||||
|
}
|
||||||
tempo_bar->property_outline_what() = (0x1 | 0x8);
|
tempo_bar->property_outline_what() = (0x1 | 0x8);
|
||||||
tempo_bar->property_outline_pixels() = 1;
|
|
||||||
|
|
||||||
range_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root());
|
range_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
|
||||||
range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height-1.0));
|
if (Profile->get_sae()) {
|
||||||
|
range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height - 1));
|
||||||
|
range_marker_bar->property_outline_pixels() = 1;
|
||||||
|
} else {
|
||||||
|
range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height));
|
||||||
|
range_marker_bar->property_outline_pixels() = 0;
|
||||||
|
}
|
||||||
range_marker_bar->property_outline_what() = (0x1 | 0x8);
|
range_marker_bar->property_outline_what() = (0x1 | 0x8);
|
||||||
range_marker_bar->property_outline_pixels() = 1;
|
|
||||||
|
|
||||||
transport_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root());
|
transport_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
|
||||||
transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height-1.0));
|
if (Profile->get_sae()) {
|
||||||
|
transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height - 1));
|
||||||
|
transport_marker_bar->property_outline_pixels() = 1;
|
||||||
|
} else {
|
||||||
|
transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height));
|
||||||
|
transport_marker_bar->property_outline_pixels() = 0;
|
||||||
|
}
|
||||||
transport_marker_bar->property_outline_what() = (0x1 | 0x8);
|
transport_marker_bar->property_outline_what() = (0x1 | 0x8);
|
||||||
transport_marker_bar->property_outline_pixels() = 1;
|
|
||||||
|
|
||||||
marker_bar_group = new ArdourCanvas::Group (*track_canvas->root());
|
marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
|
||||||
marker_bar = new ArdourCanvas::SimpleRect (*marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height-1.0));
|
if (Profile->get_sae()) {
|
||||||
|
marker_bar = new ArdourCanvas::SimpleRect (*marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height - 1));
|
||||||
|
marker_bar->property_outline_pixels() = 1;
|
||||||
|
} else {
|
||||||
|
marker_bar = new ArdourCanvas::SimpleRect (*marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height));
|
||||||
|
marker_bar->property_outline_pixels() = 0;
|
||||||
|
}
|
||||||
marker_bar->property_outline_what() = (0x1 | 0x8);
|
marker_bar->property_outline_what() = (0x1 | 0x8);
|
||||||
marker_bar->property_outline_pixels() = 1;
|
|
||||||
|
|
||||||
cd_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root());
|
cd_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
|
||||||
cd_marker_bar = new ArdourCanvas::SimpleRect (*cd_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height-1.0));
|
if (Profile->get_sae()) {
|
||||||
|
cd_marker_bar = new ArdourCanvas::SimpleRect (*cd_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height - 1));
|
||||||
|
cd_marker_bar->property_outline_pixels() = 1;
|
||||||
|
} else {
|
||||||
|
cd_marker_bar = new ArdourCanvas::SimpleRect (*cd_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height));
|
||||||
|
cd_marker_bar->property_outline_pixels() = 0;
|
||||||
|
}
|
||||||
cd_marker_bar->property_outline_what() = (0x1 | 0x8);
|
cd_marker_bar->property_outline_what() = (0x1 | 0x8);
|
||||||
cd_marker_bar->property_outline_pixels() = 1;
|
|
||||||
|
|
||||||
timebar_group = new ArdourCanvas::Group (*track_canvas->root());
|
timebar_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
|
||||||
cursor_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
|
cursor_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
|
||||||
|
|
||||||
meter_group = new ArdourCanvas::Group (*timebar_group, 0.0, timebar_height * 5.0);
|
meter_group = new ArdourCanvas::Group (*timebar_group, 0.0, timebar_height * 5.0);
|
||||||
|
@ -205,7 +229,7 @@ Editor::initialize_canvas ()
|
||||||
cd_marker_group = new ArdourCanvas::Group (*timebar_group, 0.0, 0.0);
|
cd_marker_group = new ArdourCanvas::Group (*timebar_group, 0.0, 0.0);
|
||||||
|
|
||||||
marker_drag_line_points.push_back(Gnome::Art::Point(0.0, 0.0));
|
marker_drag_line_points.push_back(Gnome::Art::Point(0.0, 0.0));
|
||||||
marker_drag_line_points.push_back(Gnome::Art::Point(0.0, 1.0));
|
marker_drag_line_points.push_back(Gnome::Art::Point(0.0, physical_screen_height));
|
||||||
|
|
||||||
marker_drag_line = new ArdourCanvas::Line (*timebar_group);
|
marker_drag_line = new ArdourCanvas::Line (*timebar_group);
|
||||||
marker_drag_line->property_width_pixels() = 1;
|
marker_drag_line->property_width_pixels() = 1;
|
||||||
|
@ -228,14 +252,14 @@ Editor::initialize_canvas ()
|
||||||
transport_punchin_line->property_x1() = 0.0;
|
transport_punchin_line->property_x1() = 0.0;
|
||||||
transport_punchin_line->property_y1() = 0.0;
|
transport_punchin_line->property_y1() = 0.0;
|
||||||
transport_punchin_line->property_x2() = 0.0;
|
transport_punchin_line->property_x2() = 0.0;
|
||||||
transport_punchin_line->property_y2() = physical_screen_width;
|
transport_punchin_line->property_y2() = physical_screen_height;
|
||||||
transport_punchin_line->hide ();
|
transport_punchin_line->hide ();
|
||||||
|
|
||||||
transport_punchout_line = new ArdourCanvas::SimpleLine (*_master_group);
|
transport_punchout_line = new ArdourCanvas::SimpleLine (*_master_group);
|
||||||
transport_punchout_line->property_x1() = 0.0;
|
transport_punchout_line->property_x1() = 0.0;
|
||||||
transport_punchout_line->property_y1() = 0.0;
|
transport_punchout_line->property_y1() = 0.0;
|
||||||
transport_punchout_line->property_x2() = 0.0;
|
transport_punchout_line->property_x2() = 0.0;
|
||||||
transport_punchout_line->property_y2() = physical_screen_width;
|
transport_punchout_line->property_y2() = physical_screen_height;
|
||||||
transport_punchout_line->hide();
|
transport_punchout_line->hide();
|
||||||
|
|
||||||
// used to show zoom mode active zooming
|
// used to show zoom mode active zooming
|
||||||
|
@ -263,7 +287,6 @@ Editor::initialize_canvas ()
|
||||||
if (logo_item) {
|
if (logo_item) {
|
||||||
logo_item->lower_to_bottom ();
|
logo_item->lower_to_bottom ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* need to handle 4 specific types of events as catch-alls */
|
/* 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_scroll_event().connect (mem_fun (*this, &Editor::track_canvas_scroll_event));
|
||||||
|
@ -283,7 +306,6 @@ Editor::initialize_canvas ()
|
||||||
|
|
||||||
// Drag-N-Drop from the region list can generate this target
|
// Drag-N-Drop from the region list can generate this target
|
||||||
target_table.push_back (TargetEntry ("regions"));
|
target_table.push_back (TargetEntry ("regions"));
|
||||||
target_table.push_back (TargetEntry ("routes"));
|
|
||||||
|
|
||||||
target_table.push_back (TargetEntry ("text/plain"));
|
target_table.push_back (TargetEntry ("text/plain"));
|
||||||
target_table.push_back (TargetEntry ("text/uri-list"));
|
target_table.push_back (TargetEntry ("text/uri-list"));
|
||||||
|
@ -326,8 +348,6 @@ Editor::track_canvas_size_allocated ()
|
||||||
}
|
}
|
||||||
|
|
||||||
full_canvas_height = height + canvas_timebars_vsize;
|
full_canvas_height = height + canvas_timebars_vsize;
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (height_changed) {
|
if (height_changed) {
|
||||||
|
@ -335,8 +355,6 @@ Editor::track_canvas_size_allocated ()
|
||||||
playhead_cursor->set_length (canvas_height);
|
playhead_cursor->set_length (canvas_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
vertical_adjustment.set_page_size (canvas_height);
|
|
||||||
|
|
||||||
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
|
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
|
||||||
(*x)->set_line_vpos (0, canvas_height);
|
(*x)->set_line_vpos (0, canvas_height);
|
||||||
}
|
}
|
||||||
|
@ -348,10 +366,8 @@ Editor::track_canvas_size_allocated ()
|
||||||
We're increasing the size of the canvas while the bottom is visible.
|
We're increasing the size of the canvas while the bottom is visible.
|
||||||
We scroll down to keep in step with the controls layout.
|
We scroll down to keep in step with the controls layout.
|
||||||
*/
|
*/
|
||||||
vertical_adjustment.set_value (full_canvas_height - canvas_height + 1);
|
vertical_adjustment.set_value (full_canvas_height - canvas_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
handle_new_duration ();
|
handle_new_duration ();
|
||||||
|
@ -380,7 +396,7 @@ Editor::controls_layout_size_request (Requisition* req)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gint height = min ( (gint) pos, (gint) (physical_screen_height - 600));
|
gint height = min ((gint) pos, (gint) (physical_screen_height - 600));
|
||||||
gint width = max (edit_controls_vbox.get_width(), controls_layout.get_width());
|
gint width = max (edit_controls_vbox.get_width(), controls_layout.get_width());
|
||||||
|
|
||||||
/* don't get too big. the fudge factors here are just guesses */
|
/* don't get too big. the fudge factors here are just guesses */
|
||||||
|
@ -409,11 +425,13 @@ Editor::controls_layout_size_request (Requisition* req)
|
||||||
if (req->height != height) {
|
if (req->height != height) {
|
||||||
req->height = height;
|
req->height = height;
|
||||||
controls_layout.property_height () = (guint) floor (pos);
|
controls_layout.property_height () = (guint) floor (pos);
|
||||||
|
controls_layout.property_height_request () = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
controls_layout_size_request_connection = controls_layout.signal_size_request().connect (mem_fun (*this, &Editor::controls_layout_size_request));
|
controls_layout_size_request_connection = controls_layout.signal_size_request().connect (mem_fun (*this, &Editor::controls_layout_size_request));
|
||||||
}
|
}
|
||||||
|
//cerr << "sizes = " << req->width << " " << edit_controls_vbox.get_width() << " " << controls_layout.get_width() << " " << zoom_box.get_width() << " " << time_button_frame.get_width() << endl;//DEBUG
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -429,56 +447,27 @@ Editor::track_canvas_drag_data_received (const RefPtr<Gdk::DragContext>& context
|
||||||
const SelectionData& data,
|
const SelectionData& data,
|
||||||
guint info, guint time)
|
guint info, guint time)
|
||||||
{
|
{
|
||||||
cerr << "drop on canvas, target = " << data.get_target() << endl;
|
|
||||||
|
|
||||||
if (data.get_target() == "regions") {
|
if (data.get_target() == "regions") {
|
||||||
drop_regions (context, x, y, data, info, time);
|
drop_regions (context, x, y, data, info, time);
|
||||||
}
|
} else {
|
||||||
else if(data.get_target() == "routes") {
|
|
||||||
drop_routes (context, x, y, data, info, time);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
drop_paths (context, x, y, data, info, time);
|
drop_paths (context, x, y, data, info, time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Editor::idle_drop_paths (vector<ustring> paths, nframes64_t frame, double ypos)
|
||||||
|
{
|
||||||
|
drop_paths_part_two (paths, frame, ypos);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
|
Editor::drop_paths_part_two (const vector<ustring>& paths, nframes64_t frame, double ypos)
|
||||||
int x, int y,
|
|
||||||
const SelectionData& data,
|
|
||||||
guint info, guint time)
|
|
||||||
{
|
{
|
||||||
TimeAxisView* tvp;
|
TimeAxisView* tvp;
|
||||||
RouteTimeAxisView* tv;
|
AudioTimeAxisView* tv;
|
||||||
double cy;
|
|
||||||
vector<ustring> paths;
|
|
||||||
string spath;
|
|
||||||
GdkEvent ev;
|
|
||||||
nframes64_t frame;
|
|
||||||
|
|
||||||
if (convert_drop_to_paths (paths, context, x, y, data, info, time)) {
|
if ((tvp = trackview_by_y_position (ypos)) == 0) {
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* D-n-D coordinates are window-relative, so convert to "world" coordinates
|
|
||||||
*/
|
|
||||||
|
|
||||||
double wx;
|
|
||||||
double wy;
|
|
||||||
|
|
||||||
track_canvas->window_to_world (x, y, wx, wy);
|
|
||||||
//wx += horizontal_adjustment.get_value();
|
|
||||||
//wy += vertical_adjustment.get_value();
|
|
||||||
|
|
||||||
ev.type = GDK_BUTTON_RELEASE;
|
|
||||||
ev.button.x = wx;
|
|
||||||
ev.button.y = wy;
|
|
||||||
|
|
||||||
frame = event_frame (&ev, 0, &cy);
|
|
||||||
|
|
||||||
snap_to (frame);
|
|
||||||
|
|
||||||
if ((tvp = trackview_by_y_position (cy)) == 0) {
|
|
||||||
|
|
||||||
/* drop onto canvas background: create new tracks */
|
/* drop onto canvas background: create new tracks */
|
||||||
|
|
||||||
|
@ -490,25 +479,62 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
|
||||||
do_embed (paths, Editing::ImportDistinctFiles, ImportAsTrack, frame);
|
do_embed (paths, Editing::ImportDistinctFiles, ImportAsTrack, frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if ((tv = dynamic_cast<RouteTimeAxisView*>(tvp)) != 0) {
|
} else if ((tv = dynamic_cast<AudioTimeAxisView*>(tvp)) != 0) {
|
||||||
|
|
||||||
/* check that its an audio track, not a bus */
|
|
||||||
|
|
||||||
/* check that its an audio track, not a bus */
|
/* check that its an audio track, not a bus */
|
||||||
|
|
||||||
if (tv->get_diskstream()) {
|
if (tv->get_diskstream()) {
|
||||||
/* select the track, then embed */
|
/* select the track, then embed/import */
|
||||||
selection->set (tv);
|
selection->set (tv);
|
||||||
|
|
||||||
if (Profile->get_sae() || Config->get_only_copy_imported_files()) {
|
if (Profile->get_sae() || Config->get_only_copy_imported_files()) {
|
||||||
do_import (paths, Editing::ImportDistinctFiles, Editing::ImportToTrack, SrcBest, frame);
|
do_import (paths, Editing::ImportSerializeFiles, Editing::ImportToTrack, SrcBest, frame);
|
||||||
} else {
|
} else {
|
||||||
do_embed (paths, Editing::ImportDistinctFiles, ImportToTrack, frame);
|
do_embed (paths, Editing::ImportSerializeFiles, ImportToTrack, frame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
|
||||||
|
int x, int y,
|
||||||
|
const SelectionData& data,
|
||||||
|
guint info, guint time)
|
||||||
|
{
|
||||||
|
vector<ustring> paths;
|
||||||
|
GdkEvent ev;
|
||||||
|
nframes64_t frame;
|
||||||
|
double wx;
|
||||||
|
double wy;
|
||||||
|
double cy;
|
||||||
|
|
||||||
|
if (convert_drop_to_paths (paths, context, x, y, data, info, time) == 0) {
|
||||||
|
|
||||||
|
/* D-n-D coordinates are window-relative, so convert to "world" coordinates
|
||||||
|
*/
|
||||||
|
|
||||||
|
track_canvas->window_to_world (x, y, wx, wy);
|
||||||
|
|
||||||
|
ev.type = GDK_BUTTON_RELEASE;
|
||||||
|
ev.button.x = wx;
|
||||||
|
ev.button.y = wy;
|
||||||
|
|
||||||
|
frame = event_frame (&ev, 0, &cy);
|
||||||
|
|
||||||
|
snap_to (frame);
|
||||||
|
|
||||||
|
#ifdef GTKOSX
|
||||||
|
/* We are not allowed to call recursive main event loops from within
|
||||||
|
the main event loop with GTK/Quartz. Since import/embed wants
|
||||||
|
to push up a progress dialog, defer all this till we go idle.
|
||||||
|
*/
|
||||||
|
Glib::signal_idle().connect (bind (mem_fun (*this, &Editor::idle_drop_paths), paths, frame, cy));
|
||||||
|
#else
|
||||||
|
drop_paths_part_two (paths, frame, cy);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
out:
|
|
||||||
context->drag_finish (true, false, time);
|
context->drag_finish (true, false, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -518,30 +544,16 @@ Editor::drop_regions (const RefPtr<Gdk::DragContext>& context,
|
||||||
const SelectionData& data,
|
const SelectionData& data,
|
||||||
guint info, guint time)
|
guint info, guint time)
|
||||||
{
|
{
|
||||||
const SerializedObjectPointers<boost::shared_ptr<Region> >* sr =
|
std::list<boost::shared_ptr<Region> > regions;
|
||||||
reinterpret_cast<const SerializedObjectPointers<boost::shared_ptr<Region> > *> (data.get_data());
|
region_list_display.get_object_drag_data (regions);
|
||||||
|
|
||||||
for (uint32_t i = 0; i < sr->cnt; ++i) {
|
for (list<boost::shared_ptr<Region> >::iterator r = regions.begin(); r != regions.end(); ++r) {
|
||||||
|
|
||||||
boost::shared_ptr<Region> r = sr->data[i];
|
boost::shared_ptr<AudioRegion> ar;
|
||||||
|
|
||||||
insert_region_list_drag (r, x, y);
|
if ((ar = boost::dynamic_pointer_cast<AudioRegion>(*r)) != 0) {
|
||||||
}
|
insert_region_list_drag (ar, x, y);
|
||||||
|
}
|
||||||
context->drag_finish (true, false, time);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Editor::drop_routes (const Glib::RefPtr<Gdk::DragContext>& context,
|
|
||||||
int x, int y,
|
|
||||||
const Gtk::SelectionData& data,
|
|
||||||
guint info, guint time) {
|
|
||||||
const SerializedObjectPointers<boost::shared_ptr<Route> >* sr =
|
|
||||||
reinterpret_cast<const SerializedObjectPointers<boost::shared_ptr<Route> > *> (data.get_data());
|
|
||||||
|
|
||||||
for (uint32_t i = 0; i < sr->cnt; ++i) {
|
|
||||||
boost::shared_ptr<Route> r = sr->data[i];
|
|
||||||
insert_route_list_drag (r, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
context->drag_finish (true, false, time);
|
context->drag_finish (true, false, time);
|
||||||
|
@ -648,18 +660,22 @@ Editor::autoscroll_canvas ()
|
||||||
double new_pixel;
|
double new_pixel;
|
||||||
double target_pixel;
|
double target_pixel;
|
||||||
|
|
||||||
if (autoscroll_x > 0) {
|
if (autoscroll_x_distance != 0) {
|
||||||
autoscroll_x_distance = (unit_to_frame (drag_info.current_pointer_x) - (leftmost_frame + current_page_frames())) / 3;
|
if (autoscroll_x > 0) {
|
||||||
} else if (autoscroll_x < 0) {
|
autoscroll_x_distance = (unit_to_frame (drag_info.current_pointer_x) - (leftmost_frame + current_page_frames())) / 3;
|
||||||
autoscroll_x_distance = (leftmost_frame - unit_to_frame (drag_info.current_pointer_x)) / 3;
|
} else if (autoscroll_x < 0) {
|
||||||
|
autoscroll_x_distance = (leftmost_frame - unit_to_frame (drag_info.current_pointer_x)) / 3;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (autoscroll_y > 0) {
|
if (autoscroll_y_distance != 0) {
|
||||||
autoscroll_y_distance = (drag_info.current_pointer_y - (get_trackview_group_vertical_offset() + canvas_height)) / 3;
|
if (autoscroll_y > 0) {
|
||||||
} else if (autoscroll_y < 0) {
|
autoscroll_y_distance = (drag_info.current_pointer_y - (get_trackview_group_vertical_offset() + canvas_height)) / 3;
|
||||||
|
} else if (autoscroll_y < 0) {
|
||||||
|
|
||||||
autoscroll_y_distance = (vertical_adjustment.get_value () - drag_info.current_pointer_y) / 3;
|
autoscroll_y_distance = (vertical_adjustment.get_value () - drag_info.current_pointer_y) / 3;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (autoscroll_x < 0) {
|
if (autoscroll_x < 0) {
|
||||||
|
@ -725,6 +741,8 @@ Editor::autoscroll_canvas ()
|
||||||
reset_x_origin (new_frame);
|
reset_x_origin (new_frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vertical_adjustment.set_value (new_pixel);
|
||||||
|
|
||||||
/* fake an event. */
|
/* fake an event. */
|
||||||
|
|
||||||
Glib::RefPtr<Gdk::Window> canvas_window = const_cast<Editor*>(this)->track_canvas->get_window();
|
Glib::RefPtr<Gdk::Window> canvas_window = const_cast<Editor*>(this)->track_canvas->get_window();
|
||||||
|
@ -738,8 +756,6 @@ Editor::autoscroll_canvas ()
|
||||||
|
|
||||||
motion_handler (drag_info.item, (GdkEvent*) &ev, drag_info.item_type, true);
|
motion_handler (drag_info.item, (GdkEvent*) &ev, drag_info.item_type, true);
|
||||||
|
|
||||||
vertical_adjustment.set_value (new_pixel);
|
|
||||||
|
|
||||||
autoscroll_cnt++;
|
autoscroll_cnt++;
|
||||||
|
|
||||||
if (autoscroll_cnt == 1) {
|
if (autoscroll_cnt == 1) {
|
||||||
|
@ -830,20 +846,33 @@ Editor::scroll_canvas_horizontally ()
|
||||||
|
|
||||||
_master_group->move (-x_delta, 0);
|
_master_group->move (-x_delta, 0);
|
||||||
timebar_group->move (-x_delta, 0);
|
timebar_group->move (-x_delta, 0);
|
||||||
|
time_line_group->move (-x_delta, 0);
|
||||||
cursor_group->move (-x_delta, 0);
|
cursor_group->move (-x_delta, 0);
|
||||||
|
|
||||||
update_fixed_rulers ();
|
update_fixed_rulers ();
|
||||||
redisplay_tempo (true);
|
redisplay_tempo (true);
|
||||||
|
|
||||||
|
#ifndef GTKOSX
|
||||||
|
if (!autoscroll_active) {
|
||||||
|
/* force rulers and canvas to move in lock step */
|
||||||
|
while (gtk_events_pending ()) {
|
||||||
|
gtk_main_iteration ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::scroll_canvas_vertically ()
|
Editor::scroll_canvas_vertically ()
|
||||||
{
|
{
|
||||||
/* vertical scrolling only */
|
/* vertical scrolling only */
|
||||||
|
|
||||||
double y_delta;
|
double y_delta;
|
||||||
|
|
||||||
y_delta = last_trackview_group_vertical_offset - get_trackview_group_vertical_offset ();
|
y_delta = last_trackview_group_vertical_offset - get_trackview_group_vertical_offset ();
|
||||||
|
|
||||||
_trackview_group->move (0, y_delta);
|
_trackview_group->move (0, y_delta);
|
||||||
|
_background_group->move (0, y_delta);
|
||||||
|
|
||||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||||
(*i)->clip_to_viewport ();
|
(*i)->clip_to_viewport ();
|
||||||
|
@ -946,3 +975,4 @@ Editor::flush_canvas ()
|
||||||
// gdk_window_process_updates (GTK_LAYOUT(track_canvas->gobj())->bin_window, true);
|
// gdk_window_process_updates (GTK_LAYOUT(track_canvas->gobj())->bin_window, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,10 +35,7 @@ Editor::Cursor::Cursor (Editor& ed, bool (Editor::*callbck)(GdkEvent*,ArdourCanv
|
||||||
canvas_item (*editor.cursor_group),
|
canvas_item (*editor.cursor_group),
|
||||||
length(1.0)
|
length(1.0)
|
||||||
{
|
{
|
||||||
|
points.push_back(Gnome::Art::Point(-1.0, 0.0)); // first x-coord needs to be a non-normal value
|
||||||
/* "randomly" initialize coords */
|
|
||||||
|
|
||||||
points.push_back(Gnome::Art::Point(1.0, 0.0));
|
|
||||||
points.push_back(Gnome::Art::Point(1.0, 1.0));
|
points.push_back(Gnome::Art::Point(1.0, 1.0));
|
||||||
|
|
||||||
canvas_item.property_points() = points;
|
canvas_item.property_points() = points;
|
||||||
|
|
|
@ -140,6 +140,9 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev)
|
||||||
if ((iter = group_model->get_iter (path))) {
|
if ((iter = group_model->get_iter (path))) {
|
||||||
if ((group = (*iter)[group_columns.routegroup]) != 0) {
|
if ((group = (*iter)[group_columns.routegroup]) != 0) {
|
||||||
// edit_route_group (group);
|
// edit_route_group (group);
|
||||||
|
#ifdef GTKOSX
|
||||||
|
edit_group_display.queue_draw();
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -151,6 +154,9 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev)
|
||||||
if ((iter = group_model->get_iter (path))) {
|
if ((iter = group_model->get_iter (path))) {
|
||||||
bool active = (*iter)[group_columns.is_active];
|
bool active = (*iter)[group_columns.is_active];
|
||||||
(*iter)[group_columns.is_active] = !active;
|
(*iter)[group_columns.is_active] = !active;
|
||||||
|
#ifdef GTKOSX
|
||||||
|
edit_group_display.queue_draw();
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -159,6 +165,9 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev)
|
||||||
if ((iter = group_model->get_iter (path))) {
|
if ((iter = group_model->get_iter (path))) {
|
||||||
bool visible = (*iter)[group_columns.is_visible];
|
bool visible = (*iter)[group_columns.is_visible];
|
||||||
(*iter)[group_columns.is_visible] = !visible;
|
(*iter)[group_columns.is_visible] = !visible;
|
||||||
|
#ifdef GTKOSX
|
||||||
|
edit_group_display.queue_draw();
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -155,6 +155,16 @@ Editor::ensure_all_elements_drawn ()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::show_editor_list (bool yn)
|
||||||
|
{
|
||||||
|
if (yn) {
|
||||||
|
the_notebook.show();
|
||||||
|
} else {
|
||||||
|
the_notebook.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::create_editor_mixer ()
|
Editor::create_editor_mixer ()
|
||||||
{
|
{
|
||||||
|
@ -169,16 +179,6 @@ Editor::create_editor_mixer ()
|
||||||
current_mixer_strip->set_embedded (true);
|
current_mixer_strip->set_embedded (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Editor::show_editor_list (bool yn)
|
|
||||||
{
|
|
||||||
if (yn) {
|
|
||||||
the_notebook.show();
|
|
||||||
} else {
|
|
||||||
the_notebook.hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::set_selected_mixer_strip (TimeAxisView& view)
|
Editor::set_selected_mixer_strip (TimeAxisView& view)
|
||||||
{
|
{
|
||||||
|
@ -228,7 +228,6 @@ Editor::set_selected_mixer_strip (TimeAxisView& view)
|
||||||
}
|
}
|
||||||
|
|
||||||
double current = 0.0;
|
double current = 0.0;
|
||||||
bool currentInitialized = 0;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::update_current_screen ()
|
Editor::update_current_screen ()
|
||||||
|
|
|
@ -367,8 +367,15 @@ Editor::step_mouse_mode (bool next)
|
||||||
{
|
{
|
||||||
switch (current_mouse_mode()) {
|
switch (current_mouse_mode()) {
|
||||||
case MouseObject:
|
case MouseObject:
|
||||||
if (next) set_mouse_mode (MouseRange);
|
if (next) {
|
||||||
else set_mouse_mode (MouseTimeFX);
|
if (Profile->get_sae()) {
|
||||||
|
set_mouse_mode (MouseZoom);
|
||||||
|
} else {
|
||||||
|
set_mouse_mode (MouseRange);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
set_mouse_mode (MouseTimeFX);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MouseRange:
|
case MouseRange:
|
||||||
|
@ -377,8 +384,19 @@ Editor::step_mouse_mode (bool next)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MouseZoom:
|
case MouseZoom:
|
||||||
if (next) set_mouse_mode (MouseGain);
|
if (next) {
|
||||||
else set_mouse_mode (MouseRange);
|
if (Profile->get_sae()) {
|
||||||
|
set_mouse_mode (MouseTimeFX);
|
||||||
|
} else {
|
||||||
|
set_mouse_mode (MouseGain);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (Profile->get_sae()) {
|
||||||
|
set_mouse_mode (MouseObject);
|
||||||
|
} else {
|
||||||
|
set_mouse_mode (MouseRange);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MouseGain:
|
case MouseGain:
|
||||||
|
@ -387,8 +405,15 @@ Editor::step_mouse_mode (bool next)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MouseTimeFX:
|
case MouseTimeFX:
|
||||||
if (next) set_mouse_mode (MouseAudition);
|
if (next) {
|
||||||
else set_mouse_mode (MouseGain);
|
set_mouse_mode (MouseAudition);
|
||||||
|
} else {
|
||||||
|
if (Profile->get_sae()) {
|
||||||
|
set_mouse_mode (MouseZoom);
|
||||||
|
} else {
|
||||||
|
set_mouse_mode (MouseGain);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MouseAudition:
|
case MouseAudition:
|
||||||
|
@ -508,10 +533,11 @@ Editor::set_midi_edit_cursor (MidiEditMode m)
|
||||||
void
|
void
|
||||||
Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
|
Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
|
||||||
{
|
{
|
||||||
/* in object/audition/timefx mode, any button press sets
|
/* in object/audition/timefx/gain-automation mode,
|
||||||
the selection if the object can be selected. this is a
|
any button press sets the selection if the object
|
||||||
bit of hack, because we want to avoid this if the
|
can be selected. this is a bit of hack, because
|
||||||
mouse operation is a region alignment.
|
we want to avoid this if the mouse operation is a
|
||||||
|
region alignment.
|
||||||
|
|
||||||
note: not dbl-click or triple-click
|
note: not dbl-click or triple-click
|
||||||
*/
|
*/
|
||||||
|
@ -519,6 +545,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
|
||||||
if (((mouse_mode != MouseObject) &&
|
if (((mouse_mode != MouseObject) &&
|
||||||
(mouse_mode != MouseAudition || item_type != RegionItem) &&
|
(mouse_mode != MouseAudition || item_type != RegionItem) &&
|
||||||
(mouse_mode != MouseTimeFX || item_type != RegionItem) &&
|
(mouse_mode != MouseTimeFX || item_type != RegionItem) &&
|
||||||
|
(mouse_mode != MouseGain) &&
|
||||||
(mouse_mode != MouseRange)) ||
|
(mouse_mode != MouseRange)) ||
|
||||||
|
|
||||||
((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3)) {
|
((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3)) {
|
||||||
|
@ -680,24 +707,40 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case MarkerBarItem:
|
||||||
case TempoBarItem:
|
case TempoBarItem:
|
||||||
return true;
|
|
||||||
|
|
||||||
case MeterBarItem:
|
case MeterBarItem:
|
||||||
|
if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
|
||||||
|
start_cursor_grab_no_stop(&playhead_cursor->canvas_item, event);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
case RangeMarkerBarItem:
|
case RangeMarkerBarItem:
|
||||||
start_range_markerbar_op (item, event, CreateRangeMarker);
|
if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
|
||||||
|
start_cursor_grab_no_stop(&playhead_cursor->canvas_item, event);
|
||||||
|
} else {
|
||||||
|
start_range_markerbar_op (item, event, CreateRangeMarker);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CdMarkerBarItem:
|
case CdMarkerBarItem:
|
||||||
start_range_markerbar_op (item, event, CreateCDMarker);
|
if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
|
||||||
|
start_cursor_grab_no_stop(&playhead_cursor->canvas_item, event);
|
||||||
|
} else {
|
||||||
|
start_range_markerbar_op (item, event, CreateCDMarker);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TransportMarkerBarItem:
|
case TransportMarkerBarItem:
|
||||||
start_range_markerbar_op (item, event, CreateTransportMarker);
|
if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
|
||||||
|
start_cursor_grab_no_stop(&playhead_cursor->canvas_item, event);
|
||||||
|
} else {
|
||||||
|
start_range_markerbar_op (item, event, CreateTransportMarker);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -830,7 +873,13 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
|
||||||
case MouseGain:
|
case MouseGain:
|
||||||
switch (item_type) {
|
switch (item_type) {
|
||||||
case RegionItem:
|
case RegionItem:
|
||||||
// start_line_grab_from_regionview (item, event);
|
/* start a grab so that if we finish after moving
|
||||||
|
we can tell what happened.
|
||||||
|
*/
|
||||||
|
drag_info.item = item;
|
||||||
|
drag_info.motion_callback = &Editor::region_gain_motion_callback;
|
||||||
|
drag_info.finished_callback = 0;
|
||||||
|
start_grab (event, current_canvas_cursor);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GainLineItem:
|
case GainLineItem:
|
||||||
|
@ -1163,29 +1212,37 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case MarkerBarItem:
|
case MarkerBarItem:
|
||||||
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
|
if (!_dragging_playhead) {
|
||||||
snap_to (where, 0, true);
|
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
|
||||||
|
snap_to (where, 0, true);
|
||||||
|
}
|
||||||
|
mouse_add_new_marker (where);
|
||||||
}
|
}
|
||||||
mouse_add_new_marker (where);
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case CdMarkerBarItem:
|
case CdMarkerBarItem:
|
||||||
// if we get here then a dragged range wasn't done
|
if (!_dragging_playhead) {
|
||||||
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
|
// if we get here then a dragged range wasn't done
|
||||||
snap_to (where, 0, true);
|
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
|
||||||
|
snap_to (where, 0, true);
|
||||||
|
}
|
||||||
|
mouse_add_new_marker (where, true);
|
||||||
}
|
}
|
||||||
mouse_add_new_marker (where, true);
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case TempoBarItem:
|
case TempoBarItem:
|
||||||
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
|
if (!_dragging_playhead) {
|
||||||
snap_to (where);
|
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
|
||||||
|
snap_to (where);
|
||||||
|
}
|
||||||
|
mouse_add_new_tempo_event (where);
|
||||||
}
|
}
|
||||||
mouse_add_new_tempo_event (where);
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case MeterBarItem:
|
case MeterBarItem:
|
||||||
mouse_add_new_meter_event (pixel_to_frame (event->button.x));
|
if (!_dragging_playhead) {
|
||||||
|
mouse_add_new_meter_event (pixel_to_frame (event->button.x));
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1219,7 +1276,13 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
|
|
||||||
switch (item_type) {
|
switch (item_type) {
|
||||||
case RegionItem:
|
case RegionItem:
|
||||||
dynamic_cast<AudioRegionView*>(clicked_regionview)->add_gain_point_event (item, event);
|
/* check that we didn't drag before releasing, since
|
||||||
|
its really annoying to create new control
|
||||||
|
points when doing this.
|
||||||
|
*/
|
||||||
|
if (drag_info.first_move) {
|
||||||
|
dynamic_cast<AudioRegionView*>(clicked_regionview)->add_gain_point_event (item, event);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1571,7 +1634,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
||||||
case TempoBarItem:
|
case TempoBarItem:
|
||||||
case MarkerBarItem:
|
case MarkerBarItem:
|
||||||
if (is_drawable()) {
|
if (is_drawable()) {
|
||||||
track_canvas->get_window()->set_cursor (*timebar_cursor);
|
track_canvas->get_window()->set_cursor (*current_canvas_cursor);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1783,6 +1846,9 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
|
||||||
case PlayheadCursorItem:
|
case PlayheadCursorItem:
|
||||||
case MarkerItem:
|
case MarkerItem:
|
||||||
case ControlPointItem:
|
case ControlPointItem:
|
||||||
|
case MarkerBarItem:
|
||||||
|
case TempoBarItem:
|
||||||
|
case MeterBarItem:
|
||||||
case RangeMarkerBarItem:
|
case RangeMarkerBarItem:
|
||||||
case TransportMarkerBarItem:
|
case TransportMarkerBarItem:
|
||||||
case CdMarkerBarItem:
|
case CdMarkerBarItem:
|
||||||
|
@ -1809,7 +1875,9 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
|
||||||
if (!from_autoscroll) {
|
if (!from_autoscroll) {
|
||||||
maybe_autoscroll_horizontally (&event->motion);
|
maybe_autoscroll_horizontally (&event->motion);
|
||||||
}
|
}
|
||||||
(this->*(drag_info.motion_callback)) (item, event);
|
if (drag_info.motion_callback) {
|
||||||
|
(this->*(drag_info.motion_callback)) (item, event);
|
||||||
|
}
|
||||||
goto handled;
|
goto handled;
|
||||||
}
|
}
|
||||||
goto not_handled;
|
goto not_handled;
|
||||||
|
@ -1819,6 +1887,15 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (mouse_mode) {
|
switch (mouse_mode) {
|
||||||
|
case MouseGain:
|
||||||
|
if (item_type == RegionItem) {
|
||||||
|
if (drag_info.item && drag_info.motion_callback) {
|
||||||
|
(this->*(drag_info.motion_callback)) (item, event);
|
||||||
|
}
|
||||||
|
goto handled;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case MouseObject:
|
case MouseObject:
|
||||||
case MouseRange:
|
case MouseRange:
|
||||||
case MouseZoom:
|
case MouseZoom:
|
||||||
|
@ -1829,7 +1906,9 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
|
||||||
if (!from_autoscroll) {
|
if (!from_autoscroll) {
|
||||||
maybe_autoscroll (&event->motion);
|
maybe_autoscroll (&event->motion);
|
||||||
}
|
}
|
||||||
(this->*(drag_info.motion_callback)) (item, event);
|
if (drag_info.motion_callback) {
|
||||||
|
(this->*(drag_info.motion_callback)) (item, event);
|
||||||
|
}
|
||||||
goto handled;
|
goto handled;
|
||||||
}
|
}
|
||||||
goto not_handled;
|
goto not_handled;
|
||||||
|
@ -1902,7 +1981,7 @@ Editor::start_grab (GdkEvent* event, Gdk::Cursor *cursor)
|
||||||
|
|
||||||
// if dragging with button2, the motion is x constrained, with Alt-button2 it is y constrained
|
// if dragging with button2, the motion is x constrained, with Alt-button2 it is y constrained
|
||||||
|
|
||||||
if (event->button.button == 2) {
|
if (Keyboard::is_button2_event (&event->button)) {
|
||||||
if (Keyboard::modifier_state_equals (event->button.state, Keyboard::SecondaryModifier)) {
|
if (Keyboard::modifier_state_equals (event->button.state, Keyboard::SecondaryModifier)) {
|
||||||
drag_info.y_constrained = true;
|
drag_info.y_constrained = true;
|
||||||
drag_info.x_constrained = false;
|
drag_info.x_constrained = false;
|
||||||
|
@ -1998,6 +2077,14 @@ Editor::end_grab (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
return did_drag;
|
return did_drag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::region_gain_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
|
{
|
||||||
|
if (drag_info.first_move && drag_info.move_threshold_passed) {
|
||||||
|
drag_info.first_move = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::start_fade_in_grab (ArdourCanvas::Item* item, GdkEvent* event)
|
Editor::start_fade_in_grab (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
{
|
{
|
||||||
|
@ -2257,6 +2344,39 @@ Editor::start_cursor_grab (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
show_verbose_time_cursor (cursor->current_frame, 10);
|
show_verbose_time_cursor (cursor->current_frame, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::start_cursor_grab_no_stop (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
|
{
|
||||||
|
drag_info.item = item;
|
||||||
|
drag_info.motion_callback = &Editor::cursor_drag_motion_callback;
|
||||||
|
drag_info.finished_callback = &Editor::cursor_drag_finished_ensure_locate_callback;
|
||||||
|
|
||||||
|
start_grab (event);
|
||||||
|
|
||||||
|
if ((drag_info.data = (item->get_data ("cursor"))) == 0) {
|
||||||
|
fatal << _("programming error: cursor canvas item has no cursor data pointer!") << endmsg;
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
|
||||||
|
Cursor* cursor = (Cursor *) drag_info.data;
|
||||||
|
nframes64_t where = event_frame (event, 0, 0);
|
||||||
|
|
||||||
|
snap_to(where);
|
||||||
|
playhead_cursor->set_position (where);
|
||||||
|
|
||||||
|
if (cursor == playhead_cursor) {
|
||||||
|
_dragging_playhead = true;
|
||||||
|
|
||||||
|
if (session && session->is_auditioning()) {
|
||||||
|
session->cancel_audition ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
drag_info.pointer_frame_offset = drag_info.grab_frame - cursor->current_frame;
|
||||||
|
|
||||||
|
show_verbose_time_cursor (cursor->current_frame, 10);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::cursor_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
Editor::cursor_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
{
|
{
|
||||||
|
@ -2294,12 +2414,28 @@ Editor::cursor_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
void
|
void
|
||||||
Editor::cursor_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
Editor::cursor_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
{
|
{
|
||||||
if (drag_info.first_move) return;
|
_dragging_playhead = false;
|
||||||
|
|
||||||
|
if (drag_info.first_move) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
cursor_drag_motion_callback (item, event);
|
cursor_drag_motion_callback (item, event);
|
||||||
|
|
||||||
|
if (item == &playhead_cursor->canvas_item) {
|
||||||
|
if (session) {
|
||||||
|
session->request_locate (playhead_cursor->current_frame, drag_info.was_rolling);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::cursor_drag_finished_ensure_locate_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
|
{
|
||||||
_dragging_playhead = false;
|
_dragging_playhead = false;
|
||||||
|
|
||||||
|
cursor_drag_motion_callback (item, event);
|
||||||
|
|
||||||
if (item == &playhead_cursor->canvas_item) {
|
if (item == &playhead_cursor->canvas_item) {
|
||||||
if (session) {
|
if (session) {
|
||||||
session->request_locate (playhead_cursor->current_frame, drag_info.was_rolling);
|
session->request_locate (playhead_cursor->current_frame, drag_info.was_rolling);
|
||||||
|
@ -3100,12 +3236,14 @@ Editor::start_line_grab (AutomationLine* line, GdkEvent* event)
|
||||||
nframes64_t frame_within_region;
|
nframes64_t frame_within_region;
|
||||||
|
|
||||||
/* need to get x coordinate in terms of parent (TimeAxisItemView)
|
/* need to get x coordinate in terms of parent (TimeAxisItemView)
|
||||||
origin.
|
origin, and ditto for y.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
cx = event->button.x;
|
cx = event->button.x;
|
||||||
cy = event->button.y;
|
cy = event->button.y;
|
||||||
|
|
||||||
line->parent_group().w2i (cx, cy);
|
line->parent_group().w2i (cx, cy);
|
||||||
|
|
||||||
frame_within_region = (nframes64_t) floor (cx * frames_per_unit);
|
frame_within_region = (nframes64_t) floor (cx * frames_per_unit);
|
||||||
|
|
||||||
if (!line->control_points_adjacent (frame_within_region, current_line_drag_info.before,
|
if (!line->control_points_adjacent (frame_within_region, current_line_drag_info.before,
|
||||||
|
@ -3121,6 +3259,11 @@ Editor::start_line_grab (AutomationLine* line, GdkEvent* event)
|
||||||
|
|
||||||
start_grab (event, fader_cursor);
|
start_grab (event, fader_cursor);
|
||||||
|
|
||||||
|
/* store grab start in parent frame */
|
||||||
|
|
||||||
|
drag_info.grab_x = cx;
|
||||||
|
drag_info.grab_y = cy;
|
||||||
|
|
||||||
double fraction = 1.0 - (cy / line->height());
|
double fraction = 1.0 - (cy / line->height());
|
||||||
|
|
||||||
line->start_drag (0, drag_info.grab_frame, fraction);
|
line->start_drag (0, drag_info.grab_frame, fraction);
|
||||||
|
@ -3145,9 +3288,9 @@ Editor::line_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
|
|
||||||
// calculate zero crossing point. back off by .01 to stay on the
|
// calculate zero crossing point. back off by .01 to stay on the
|
||||||
// positive side of zero
|
// positive side of zero
|
||||||
double _unused = 0;
|
|
||||||
double zero_gain_y = (1.0 - ZERO_GAIN_FRACTION) * line->height() - .01;
|
double zero_gain_y = (1.0 - ZERO_GAIN_FRACTION) * line->height() - .01;
|
||||||
line->parent_group().i2w(_unused, zero_gain_y);
|
|
||||||
|
// line->parent_group().i2w(_unused, zero_gain_y);
|
||||||
|
|
||||||
// make sure we hit zero when passing through
|
// make sure we hit zero when passing through
|
||||||
if ((cy < zero_gain_y and (cy - dy) > zero_gain_y)
|
if ((cy < zero_gain_y and (cy - dy) > zero_gain_y)
|
||||||
|
@ -3160,6 +3303,7 @@ Editor::line_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
cy = max (0.0, cy);
|
cy = max (0.0, cy);
|
||||||
cy = min ((double) line->height(), cy);
|
cy = min ((double) line->height(), cy);
|
||||||
|
|
||||||
|
|
||||||
double fraction = 1.0 - (cy / line->height());
|
double fraction = 1.0 - (cy / line->height());
|
||||||
|
|
||||||
bool push;
|
bool push;
|
||||||
|
@ -3976,7 +4120,6 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
}
|
}
|
||||||
|
|
||||||
begin_reversible_command (op_string);
|
begin_reversible_command (op_string);
|
||||||
|
|
||||||
changed_position = (drag_info.last_frame_position != (nframes64_t) (clicked_regionview->region()->position()));
|
changed_position = (drag_info.last_frame_position != (nframes64_t) (clicked_regionview->region()->position()));
|
||||||
changed_tracks = (trackview_by_y_position (drag_info.current_pointer_y) != &clicked_regionview->get_time_axis_view());
|
changed_tracks = (trackview_by_y_position (drag_info.current_pointer_y) != &clicked_regionview->get_time_axis_view());
|
||||||
|
|
||||||
|
@ -3994,6 +4137,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
|
|
||||||
TimeAxisView* dest_tv = trackview_by_y_position (iy1);
|
TimeAxisView* dest_tv = trackview_by_y_position (iy1);
|
||||||
RouteTimeAxisView* dest_rtv = dynamic_cast<RouteTimeAxisView*>(dest_tv);
|
RouteTimeAxisView* dest_rtv = dynamic_cast<RouteTimeAxisView*>(dest_tv);
|
||||||
|
|
||||||
nframes64_t where;
|
nframes64_t where;
|
||||||
|
|
||||||
if (rv->region()->locked()) {
|
if (rv->region()->locked()) {
|
||||||
|
@ -5538,7 +5682,9 @@ Editor::end_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
selection->clear_tracks();
|
if (!getenv("ARDOUR_SAE")) {
|
||||||
|
selection->clear_tracks();
|
||||||
|
}
|
||||||
selection->clear_regions();
|
selection->clear_regions();
|
||||||
selection->clear_points ();
|
selection->clear_points ();
|
||||||
selection->clear_lines ();
|
selection->clear_lines ();
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
#include <gtkmm2ext/window_title.h>
|
#include <gtkmm2ext/window_title.h>
|
||||||
#include <gtkmm2ext/popup.h>
|
#include <gtkmm2ext/popup.h>
|
||||||
|
|
||||||
|
|
||||||
#include <ardour/audioengine.h>
|
#include <ardour/audioengine.h>
|
||||||
#include <ardour/session.h>
|
#include <ardour/session.h>
|
||||||
#include <ardour/audioplaylist.h>
|
#include <ardour/audioplaylist.h>
|
||||||
|
@ -148,8 +147,6 @@ Editor::split_regions_at (nframes64_t where, RegionSelection& regions)
|
||||||
snap_to (where);
|
snap_to (where);
|
||||||
}
|
}
|
||||||
|
|
||||||
cerr << "Split " << regions.size() << " at " << where << endl;
|
|
||||||
|
|
||||||
for (RegionSelection::iterator a = regions.begin(); a != regions.end(); ) {
|
for (RegionSelection::iterator a = regions.begin(); a != regions.end(); ) {
|
||||||
|
|
||||||
RegionSelection::iterator tmp;
|
RegionSelection::iterator tmp;
|
||||||
|
@ -2008,6 +2005,36 @@ Editor::add_location_from_playhead_cursor ()
|
||||||
add_location_mark (session->audible_frame());
|
add_location_mark (session->audible_frame());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::add_locations_from_audio_region ()
|
||||||
|
{
|
||||||
|
RegionSelection rs;
|
||||||
|
|
||||||
|
get_regions_for_action (rs);
|
||||||
|
|
||||||
|
if (rs.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
session->begin_reversible_command (rs.size () > 1 ? _("add markers") : _("add marker"));
|
||||||
|
XMLNode &before = session->locations()->get_state();
|
||||||
|
|
||||||
|
cerr << "Add locations\n";
|
||||||
|
|
||||||
|
for (RegionSelection::iterator i = rs.begin (); i != rs.end (); ++i) {
|
||||||
|
|
||||||
|
boost::shared_ptr<Region> region = (*i)->region ();
|
||||||
|
|
||||||
|
Location *location = new Location (region->position(), region->last_frame(), region->name(), Location::IsRangeMarker);
|
||||||
|
|
||||||
|
session->locations()->add (location, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
XMLNode &after = session->locations()->get_state();
|
||||||
|
session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
|
||||||
|
session->commit_reversible_command ();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::add_location_from_audio_region ()
|
Editor::add_location_from_audio_region ()
|
||||||
{
|
{
|
||||||
|
@ -2019,15 +2046,31 @@ Editor::add_location_from_audio_region ()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RegionView* rv = *(rs.begin());
|
|
||||||
boost::shared_ptr<Region> region = rv->region();
|
|
||||||
|
|
||||||
Location *location = new Location (region->position(), region->last_frame(), region->name(), Location::IsRangeMarker);
|
|
||||||
session->begin_reversible_command (_("add marker"));
|
session->begin_reversible_command (_("add marker"));
|
||||||
XMLNode &before = session->locations()->get_state();
|
XMLNode &before = session->locations()->get_state();
|
||||||
|
|
||||||
|
string markername;
|
||||||
|
|
||||||
|
if (rs.size() > 1) { // more than one region selected
|
||||||
|
session->locations()->next_available_name(markername, "regions");
|
||||||
|
} else {
|
||||||
|
RegionView* rv = *(rs.begin());
|
||||||
|
boost::shared_ptr<Region> region = rv->region();
|
||||||
|
markername = region->name();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!choose_new_marker_name(markername)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
cerr << "Add location\n";
|
||||||
|
|
||||||
|
// single range spanning all selected
|
||||||
|
Location *location = new Location (rs.start(), rs.end_frame(), markername, Location::IsRangeMarker);
|
||||||
session->locations()->add (location, true);
|
session->locations()->add (location, true);
|
||||||
XMLNode &after = session->locations()->get_state();
|
|
||||||
session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
|
XMLNode &after = session->locations()->get_state();
|
||||||
|
session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
|
||||||
session->commit_reversible_command ();
|
session->commit_reversible_command ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3607,7 +3650,7 @@ Editor::unfreeze_route ()
|
||||||
void*
|
void*
|
||||||
Editor::_freeze_thread (void* arg)
|
Editor::_freeze_thread (void* arg)
|
||||||
{
|
{
|
||||||
PBD::ThreadCreated (pthread_self(), X_("Freeze"));
|
PBD::notify_gui_about_thread_creation (pthread_self(), X_("Freeze"));
|
||||||
return static_cast<Editor*>(arg)->freeze_thread ();
|
return static_cast<Editor*>(arg)->freeze_thread ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4733,6 +4776,28 @@ Editor::toggle_region_opaque ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::toggle_record_enable ()
|
||||||
|
{
|
||||||
|
bool new_state = false;
|
||||||
|
bool first = true;
|
||||||
|
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
||||||
|
RouteTimeAxisView *rtav = dynamic_cast<RouteTimeAxisView *>(*i);
|
||||||
|
if (!rtav)
|
||||||
|
continue;
|
||||||
|
if (!rtav->is_track())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (first) {
|
||||||
|
new_state = !rtav->track()->record_enabled();
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
rtav->track()->set_record_enable(new_state, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::set_fade_length (bool in)
|
Editor::set_fade_length (bool in)
|
||||||
{
|
{
|
||||||
|
@ -5216,17 +5281,26 @@ Editor::select_next_route()
|
||||||
|
|
||||||
TimeAxisView* current = selection->tracks.front();
|
TimeAxisView* current = selection->tracks.front();
|
||||||
|
|
||||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
RouteUI *rui;
|
||||||
if (*i == current) {
|
do {
|
||||||
++i;
|
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||||
if (i != track_views.end()) {
|
if (*i == current) {
|
||||||
selection->set (*i);
|
++i;
|
||||||
} else {
|
if (i != track_views.end()) {
|
||||||
selection->set (*(track_views.begin()));
|
current = (*i);
|
||||||
|
} else {
|
||||||
|
current = (*(track_views.begin()));
|
||||||
|
//selection->set (*(track_views.begin()));
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
rui = dynamic_cast<RouteUI *>(current);
|
||||||
|
} while ( current->hidden() || (rui != NULL && !rui->route()->active()));
|
||||||
|
|
||||||
|
selection->set(current);
|
||||||
|
|
||||||
|
ensure_track_visible(current);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -5239,17 +5313,55 @@ Editor::select_prev_route()
|
||||||
|
|
||||||
TimeAxisView* current = selection->tracks.front();
|
TimeAxisView* current = selection->tracks.front();
|
||||||
|
|
||||||
for (TrackViewList::reverse_iterator i = track_views.rbegin(); i != track_views.rend(); ++i) {
|
RouteUI *rui;
|
||||||
if (*i == current) {
|
do {
|
||||||
++i;
|
for (TrackViewList::reverse_iterator i = track_views.rbegin(); i != track_views.rend(); ++i) {
|
||||||
if (i != track_views.rend()) {
|
if (*i == current) {
|
||||||
selection->set (*i);
|
++i;
|
||||||
} else {
|
if (i != track_views.rend()) {
|
||||||
selection->set (*(track_views.rbegin()));
|
current = (*i);
|
||||||
|
} else {
|
||||||
|
current = *(track_views.rbegin());
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
rui = dynamic_cast<RouteUI *>(current);
|
||||||
|
} while ( current->hidden() || (rui != NULL && !rui->route()->active()));
|
||||||
|
|
||||||
|
selection->set (current);
|
||||||
|
|
||||||
|
ensure_track_visible(current);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::ensure_track_visible(TimeAxisView *track)
|
||||||
|
{
|
||||||
|
if (track->hidden())
|
||||||
|
return;
|
||||||
|
|
||||||
|
double current_view_min_y = vertical_adjustment.get_value();
|
||||||
|
double current_view_max_y = vertical_adjustment.get_value() + vertical_adjustment.get_page_size() - canvas_timebars_vsize;
|
||||||
|
|
||||||
|
double track_min_y = track->y_position;
|
||||||
|
double track_max_y = track->y_position + (double)track->effective_height;
|
||||||
|
|
||||||
|
if (track_min_y >= current_view_min_y &&
|
||||||
|
track_max_y <= current_view_max_y) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double new_value;
|
||||||
|
|
||||||
|
if (track_min_y < current_view_min_y) {
|
||||||
|
// Track is above the current view
|
||||||
|
new_value = track_min_y;
|
||||||
|
} else {
|
||||||
|
// Track is below the current view
|
||||||
|
new_value = track->y_position + (double)track->effective_height + canvas_timebars_vsize - vertical_adjustment.get_page_size();
|
||||||
|
}
|
||||||
|
|
||||||
|
vertical_adjustment.set_value(new_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -6032,26 +6144,34 @@ Editor::insert_time (nframes64_t pos, nframes64_t frames, InsertTimeOption opt,
|
||||||
begin_reversible_command (_("insert time"));
|
begin_reversible_command (_("insert time"));
|
||||||
|
|
||||||
for (TrackSelection::iterator x = selection->tracks.begin(); x != selection->tracks.end(); ++x) {
|
for (TrackSelection::iterator x = selection->tracks.begin(); x != selection->tracks.end(); ++x) {
|
||||||
|
/* regions */
|
||||||
boost::shared_ptr<Playlist> pl = (*x)->playlist();
|
boost::shared_ptr<Playlist> pl = (*x)->playlist();
|
||||||
|
|
||||||
if (!pl) {
|
if (pl) {
|
||||||
continue;
|
|
||||||
|
XMLNode &before = pl->get_state();
|
||||||
|
|
||||||
|
if (opt == SplitIntersected) {
|
||||||
|
pl->split (pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
pl->shift (pos, frames, (opt == MoveIntersected), ignore_music_glue);
|
||||||
|
|
||||||
|
XMLNode &after = pl->get_state();
|
||||||
|
|
||||||
|
session->add_command (new MementoCommand<Playlist> (*pl, &before, &after));
|
||||||
|
commit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
XMLNode &before = pl->get_state();
|
/* automation */
|
||||||
|
RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*x);
|
||||||
if (opt == SplitIntersected) {
|
if (rtav) {
|
||||||
pl->split (pos);
|
rtav->route ()->shift (pos, frames);
|
||||||
|
commit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
pl->shift (pos, frames, (opt == MoveIntersected), ignore_music_glue);
|
|
||||||
|
|
||||||
XMLNode &after = pl->get_state();
|
|
||||||
|
|
||||||
session->add_command (new MementoCommand<Playlist> (*pl, &before, &after));
|
|
||||||
commit = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* markers */
|
||||||
if (markers_too) {
|
if (markers_too) {
|
||||||
bool moved = false;
|
bool moved = false;
|
||||||
XMLNode& before (session->locations()->get_state());
|
XMLNode& before (session->locations()->get_state());
|
||||||
|
@ -6185,21 +6305,22 @@ Editor::goto_visual_state (uint32_t n)
|
||||||
void
|
void
|
||||||
Editor::start_visual_state_op (uint32_t n)
|
Editor::start_visual_state_op (uint32_t n)
|
||||||
{
|
{
|
||||||
cerr << "Start\n";
|
cerr << "Start visual op\n";
|
||||||
if (visual_state_op_connection.empty()) {
|
if (visual_state_op_connection.empty()) {
|
||||||
cerr << "\tqueue\n";
|
|
||||||
visual_state_op_connection = Glib::signal_timeout().connect (bind (mem_fun (*this, &Editor::end_visual_state_op), n), 1000);
|
visual_state_op_connection = Glib::signal_timeout().connect (bind (mem_fun (*this, &Editor::end_visual_state_op), n), 1000);
|
||||||
|
cerr << "\tqueued new timeout\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::cancel_visual_state_op (uint32_t n)
|
Editor::cancel_visual_state_op (uint32_t n)
|
||||||
{
|
{
|
||||||
cerr << "Cancel\n";
|
|
||||||
if (!visual_state_op_connection.empty()) {
|
if (!visual_state_op_connection.empty()) {
|
||||||
cerr << "\tgoto\n";
|
cerr << "cancel visual op, time to goto\n";
|
||||||
visual_state_op_connection.disconnect();
|
visual_state_op_connection.disconnect();
|
||||||
goto_visual_state (n);
|
goto_visual_state (n);
|
||||||
|
} else {
|
||||||
|
cerr << "cancel visual op, do nothing\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <ardour/audiofilesource.h>
|
#include <ardour/audiofilesource.h>
|
||||||
#include <ardour/silentfilesource.h>
|
#include <ardour/silentfilesource.h>
|
||||||
#include <ardour/session_region.h>
|
#include <ardour/session_region.h>
|
||||||
|
#include <ardour/profile.h>
|
||||||
|
|
||||||
|
|
||||||
#include <gtkmm2ext/stop_signal.h>
|
#include <gtkmm2ext/stop_signal.h>
|
||||||
|
@ -777,8 +778,6 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
|
||||||
int cellx;
|
int cellx;
|
||||||
int celly;
|
int celly;
|
||||||
|
|
||||||
// cerr << "Button press release, button = " << ev->button << endl;
|
|
||||||
|
|
||||||
if (region_list_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
|
if (region_list_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
|
||||||
if ((iter = region_list_model->get_iter (path))) {
|
if ((iter = region_list_model->get_iter (path))) {
|
||||||
region = (*iter)[region_list_columns.region];
|
region = (*iter)[region_list_columns.region];
|
||||||
|
@ -787,14 +786,12 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
|
||||||
|
|
||||||
if (Keyboard::is_context_menu_event (ev)) {
|
if (Keyboard::is_context_menu_event (ev)) {
|
||||||
show_region_list_display_context_menu (ev->button, ev->time);
|
show_region_list_display_context_menu (ev->button, ev->time);
|
||||||
cerr << "\tcontext menu event, event handled\n";
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (region == 0) {
|
if (region == 0) {
|
||||||
region_list_display.get_selection()->unselect_all();
|
region_list_display.get_selection()->unselect_all();
|
||||||
deselect_all();
|
deselect_all();
|
||||||
cerr << "\tSelection cleared\n";
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -807,7 +804,6 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
|
||||||
if (!Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
|
if (!Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
|
||||||
consider_auditioning (region);
|
consider_auditioning (region);
|
||||||
}
|
}
|
||||||
cerr << "\taudition, event handled\n";
|
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -815,7 +811,6 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
cerr << "\tnot handled\n";
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1036,14 +1031,17 @@ Editor::region_list_display_drag_data_received (const RefPtr<Gdk::DragContext>&
|
||||||
vector<ustring> paths;
|
vector<ustring> paths;
|
||||||
|
|
||||||
if (data.get_target() == "GTK_TREE_MODEL_ROW") {
|
if (data.get_target() == "GTK_TREE_MODEL_ROW") {
|
||||||
cerr << "Delete drag data drop to treeview\n";
|
|
||||||
region_list_display.on_drag_data_received (context, x, y, data, info, time);
|
region_list_display.on_drag_data_received (context, x, y, data, info, time);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (convert_drop_to_paths (paths, context, x, y, data, info, time) == 0) {
|
if (convert_drop_to_paths (paths, context, x, y, data, info, time) == 0) {
|
||||||
nframes64_t pos = 0;
|
nframes64_t pos = 0;
|
||||||
do_embed (paths, Editing::ImportDistinctFiles, ImportAsRegion, pos);
|
if (Profile->get_sae() || Config->get_only_copy_imported_files()) {
|
||||||
|
do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion, SrcBest, pos);
|
||||||
|
} else {
|
||||||
|
do_embed (paths, Editing::ImportDistinctFiles, ImportAsRegion, pos);
|
||||||
|
}
|
||||||
context->drag_finish (true, false, time);
|
context->drag_finish (true, false, time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -643,14 +643,10 @@ Editor::route_list_display_drag_data_received (const RefPtr<Gdk::DragContext>& c
|
||||||
const SelectionData& data,
|
const SelectionData& data,
|
||||||
guint info, guint time)
|
guint info, guint time)
|
||||||
{
|
{
|
||||||
cerr << "RouteLD::dddr target = " << data.get_target() << endl;
|
|
||||||
|
|
||||||
if (data.get_target() == "GTK_TREE_MODEL_ROW") {
|
if (data.get_target() == "GTK_TREE_MODEL_ROW") {
|
||||||
cerr << "Delete drag data drop to treeview\n";
|
|
||||||
route_list_display.on_drag_data_received (context, x, y, data, info, time);
|
route_list_display.on_drag_data_received (context, x, y, data, info, time);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cerr << "some other kind of drag\n";
|
|
||||||
context->drag_finish (true, false, time);
|
context->drag_finish (true, false, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -786,114 +782,6 @@ Editor::move_selected_tracks (bool up)
|
||||||
}
|
}
|
||||||
|
|
||||||
route_display_model->reorder (neworder);
|
route_display_model->reorder (neworder);
|
||||||
|
|
||||||
|
session->sync_order_keys (_order_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
vector<boost::shared_ptr<Route> > selected_block;
|
|
||||||
boost::shared_ptr<Route> target_unselected_route;
|
|
||||||
bool last_track_was_selected = false;
|
|
||||||
vector<int> neworder;
|
|
||||||
TreeModel::Children rows = route_display_model->children();
|
|
||||||
TreeModel::Children::iterator ri;
|
|
||||||
uint32_t old_key;
|
|
||||||
uint32_t new_key;
|
|
||||||
int n;
|
|
||||||
|
|
||||||
/* preload "neworder" with the current order */
|
|
||||||
|
|
||||||
for (n = 0, ri = rows.begin(); ri != rows.end(); ++ri, ++n) {
|
|
||||||
neworder.push_back (n);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (ri = rows.begin(); ri != rows.end(); ++ri) {
|
|
||||||
|
|
||||||
TimeAxisView* tv = (*ri)[route_display_columns.tv];
|
|
||||||
boost::shared_ptr<Route> route = (*ri)[route_display_columns.route];
|
|
||||||
|
|
||||||
if (selection->selected (tv)) {
|
|
||||||
|
|
||||||
selected_block.push_back (route);
|
|
||||||
cerr << "--SAVE as SELECTED " << route->name() << endl;
|
|
||||||
last_track_was_selected = true;
|
|
||||||
continue;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if (!last_track_was_selected) {
|
|
||||||
/* keep moving through unselected tracks, but save this
|
|
||||||
one in case we need it later as the one that will
|
|
||||||
move *down* as the selected block moves up.
|
|
||||||
*/
|
|
||||||
target_unselected_route = route;
|
|
||||||
cerr << "--pre-SAVE as UNSELECTED " << route->name() << endl;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
last_track_was_selected = false;
|
|
||||||
|
|
||||||
if (!up) {
|
|
||||||
/* this is the track immediately after a selected block,
|
|
||||||
and this is the one that will move *up* as
|
|
||||||
the selected block moves down.
|
|
||||||
*/
|
|
||||||
|
|
||||||
target_unselected_route = route;
|
|
||||||
cerr << "--post-SAVE as UNSELECTED " << route->name() << endl;
|
|
||||||
} else {
|
|
||||||
cerr << "--(up) plan to use existing unselected target\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cerr << "TRANSITION: sel = " << selected_block.size() << " unsel = " << target_unselected_route << endl;
|
|
||||||
|
|
||||||
/* transitioned between selected/not-selected */
|
|
||||||
|
|
||||||
uint32_t distance;
|
|
||||||
|
|
||||||
for (vector<boost::shared_ptr<Route> >::iterator x = selected_block.begin(); x != selected_block.end(); ++x) {
|
|
||||||
old_key = (*x)->order_key (_order_key);
|
|
||||||
new_key = compute_new_key (old_key, up, 1, rows.size());
|
|
||||||
neworder[new_key] = old_key;
|
|
||||||
cerr << "--SELECTED, reorder from " << old_key << " => " << new_key << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* now move the unselected tracks in the opposite direction */
|
|
||||||
|
|
||||||
if (!selected_block.empty() && target_unselected_route) {
|
|
||||||
distance = selected_block.size();
|
|
||||||
old_key = target_unselected_route->order_key (_order_key);
|
|
||||||
new_key = compute_new_key (old_key, !up, distance, rows.size());
|
|
||||||
neworder[new_key] = old_key;
|
|
||||||
cerr << "--UNSELECTED, reorder from " << old_key << " => " << new_key << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
selected_block.clear ();
|
|
||||||
target_unselected_route.reset ();
|
|
||||||
}
|
|
||||||
|
|
||||||
cerr << "when done ... sel = " << selected_block.size() << " unsel = " << target_unselected_route << endl;
|
|
||||||
|
|
||||||
if (!selected_block.empty() || target_unselected_route) {
|
|
||||||
|
|
||||||
/* left over blocks */
|
|
||||||
|
|
||||||
uint32_t distance;
|
|
||||||
|
|
||||||
for (vector<boost::shared_ptr<Route> >::iterator x = selected_block.begin(); x != selected_block.end(); ++x) {
|
|
||||||
old_key = (*x)->order_key (_order_key);
|
|
||||||
new_key = compute_new_key (old_key, up, 1, rows.size());
|
|
||||||
neworder[new_key] = old_key;
|
|
||||||
cerr << "--SELECTED, reorder from " << old_key << " => " << new_key << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!selected_block.empty() && target_unselected_route) {
|
|
||||||
distance = selected_block.size();
|
|
||||||
old_key = target_unselected_route->order_key (_order_key);
|
|
||||||
new_key = compute_new_key (old_key, !up, distance, rows.size());
|
|
||||||
neworder[new_key] = old_key;
|
|
||||||
cerr << "--UNSELECTED, reorder from " << old_key << " => " << new_key << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
route_display_model->reorder (neworder);
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "actions.h"
|
#include "actions.h"
|
||||||
#include "gtk-custom-hruler.h"
|
#include "gtk-custom-hruler.h"
|
||||||
#include "gui_thread.h"
|
#include "gui_thread.h"
|
||||||
|
#include "time_axis_view.h"
|
||||||
|
|
||||||
#include "i18n.h"
|
#include "i18n.h"
|
||||||
|
|
||||||
|
@ -64,6 +65,14 @@ Editor::initialize_rulers ()
|
||||||
_ruler_separator->set_name("TimebarPadding");
|
_ruler_separator->set_name("TimebarPadding");
|
||||||
_ruler_separator->show();
|
_ruler_separator->show();
|
||||||
|
|
||||||
|
_minsec_ruler = gtk_custom_hruler_new ();
|
||||||
|
minsec_ruler = Glib::wrap (_minsec_ruler);
|
||||||
|
minsec_ruler->set_name ("MinSecRuler");
|
||||||
|
minsec_ruler->set_size_request (-1, (int)timebar_height);
|
||||||
|
gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_minsec_ruler), &ruler_metrics[ruler_metric_minsec]);
|
||||||
|
minsec_ruler->hide ();
|
||||||
|
minsec_ruler->set_no_show_all();
|
||||||
|
|
||||||
_smpte_ruler = gtk_custom_hruler_new ();
|
_smpte_ruler = gtk_custom_hruler_new ();
|
||||||
smpte_ruler = Glib::wrap (_smpte_ruler);
|
smpte_ruler = Glib::wrap (_smpte_ruler);
|
||||||
smpte_ruler->set_name ("SMPTERuler");
|
smpte_ruler->set_name ("SMPTERuler");
|
||||||
|
@ -90,11 +99,13 @@ Editor::initialize_rulers ()
|
||||||
frames_ruler->hide ();
|
frames_ruler->hide ();
|
||||||
frames_ruler->set_no_show_all();
|
frames_ruler->set_no_show_all();
|
||||||
|
|
||||||
_minsec_ruler = gtk_custom_hruler_new ();
|
_bbt_ruler = gtk_custom_hruler_new ();
|
||||||
minsec_ruler = Glib::wrap (_minsec_ruler);
|
bbt_ruler = Glib::wrap (_bbt_ruler);
|
||||||
minsec_ruler->set_name ("MinSecRuler");
|
bbt_ruler->set_name ("BBTRuler");
|
||||||
minsec_ruler->set_size_request (-1, (int)timebar_height);
|
bbt_ruler->set_size_request (-1, (int)timebar_height);
|
||||||
gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_minsec_ruler), &ruler_metrics[ruler_metric_minsec]);
|
gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_bbt_ruler), &ruler_metrics[ruler_metric_bbt]);
|
||||||
|
bbt_ruler->hide ();
|
||||||
|
bbt_ruler->set_no_show_all();
|
||||||
minsec_ruler->hide ();
|
minsec_ruler->hide ();
|
||||||
minsec_ruler->set_no_show_all();
|
minsec_ruler->set_no_show_all();
|
||||||
minsec_nmarks = 0;
|
minsec_nmarks = 0;
|
||||||
|
@ -532,66 +543,76 @@ Editor::restore_ruler_visibility ()
|
||||||
|
|
||||||
if (node) {
|
if (node) {
|
||||||
if ((prop = node->property ("smpte")) != 0) {
|
if ((prop = node->property ("smpte")) != 0) {
|
||||||
if (prop->value() == "yes")
|
if (prop->value() == "yes") {
|
||||||
ruler_timecode_action->set_active (true);
|
ruler_timecode_action->set_active (true);
|
||||||
else
|
} else {
|
||||||
ruler_timecode_action->set_active (false);
|
ruler_timecode_action->set_active (false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((prop = node->property ("bbt")) != 0) {
|
if ((prop = node->property ("bbt")) != 0) {
|
||||||
if (prop->value() == "yes")
|
if (prop->value() == "yes") {
|
||||||
ruler_bbt_action->set_active (true);
|
ruler_bbt_action->set_active (true);
|
||||||
else
|
} else {
|
||||||
ruler_bbt_action->set_active (false);
|
ruler_bbt_action->set_active (false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((prop = node->property ("frames")) != 0) {
|
if ((prop = node->property ("frames")) != 0) {
|
||||||
if (prop->value() == "yes")
|
if (prop->value() == "yes") {
|
||||||
ruler_samples_action->set_active (true);
|
ruler_samples_action->set_active (true);
|
||||||
else
|
} else {
|
||||||
ruler_samples_action->set_active (false);
|
ruler_samples_action->set_active (false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((prop = node->property ("minsec")) != 0) {
|
if ((prop = node->property ("minsec")) != 0) {
|
||||||
if (prop->value() == "yes")
|
if (prop->value() == "yes") {
|
||||||
ruler_minsec_action->set_active (true);
|
ruler_minsec_action->set_active (true);
|
||||||
else
|
} else {
|
||||||
ruler_minsec_action->set_active (false);
|
ruler_minsec_action->set_active (false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((prop = node->property ("tempo")) != 0) {
|
if ((prop = node->property ("tempo")) != 0) {
|
||||||
if (prop->value() == "yes")
|
if (prop->value() == "yes") {
|
||||||
ruler_tempo_action->set_active (true);
|
ruler_tempo_action->set_active (true);
|
||||||
else
|
} else {
|
||||||
ruler_tempo_action->set_active (false);
|
ruler_tempo_action->set_active (false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((prop = node->property ("meter")) != 0) {
|
if ((prop = node->property ("meter")) != 0) {
|
||||||
if (prop->value() == "yes")
|
if (prop->value() == "yes") {
|
||||||
ruler_meter_action->set_active (true);
|
ruler_meter_action->set_active (true);
|
||||||
else
|
} else {
|
||||||
ruler_meter_action->set_active (false);
|
ruler_meter_action->set_active (false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((prop = node->property ("marker")) != 0) {
|
if ((prop = node->property ("marker")) != 0) {
|
||||||
if (prop->value() == "yes")
|
if (prop->value() == "yes") {
|
||||||
ruler_marker_action->set_active (true);
|
ruler_marker_action->set_active (true);
|
||||||
else
|
} else {
|
||||||
ruler_marker_action->set_active (false);
|
ruler_marker_action->set_active (false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((prop = node->property ("rangemarker")) != 0) {
|
if ((prop = node->property ("rangemarker")) != 0) {
|
||||||
if (prop->value() == "yes")
|
if (prop->value() == "yes") {
|
||||||
ruler_range_action->set_active (true);
|
ruler_range_action->set_active (true);
|
||||||
else
|
} else {
|
||||||
ruler_range_action->set_active (false);
|
ruler_range_action->set_active (false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((prop = node->property ("transportmarker")) != 0) {
|
if ((prop = node->property ("transportmarker")) != 0) {
|
||||||
if (prop->value() == "yes")
|
if (prop->value() == "yes") {
|
||||||
ruler_loop_punch_action->set_active (true);
|
ruler_loop_punch_action->set_active (true);
|
||||||
else
|
} else {
|
||||||
ruler_loop_punch_action->set_active (false);
|
ruler_loop_punch_action->set_active (false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((prop = node->property ("cdmarker")) != 0) {
|
if ((prop = node->property ("cdmarker")) != 0) {
|
||||||
if (prop->value() == "yes")
|
if (prop->value() == "yes") {
|
||||||
ruler_cd_marker_action->set_active (true);
|
ruler_cd_marker_action->set_active (true);
|
||||||
else
|
} else {
|
||||||
ruler_cd_marker_action->set_active (false);
|
ruler_cd_marker_action->set_active (false);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// this session doesn't yet know about the cdmarker ruler
|
// this session doesn't yet know about the cdmarker ruler
|
||||||
|
@ -610,7 +631,6 @@ Editor::restore_ruler_visibility ()
|
||||||
}
|
}
|
||||||
|
|
||||||
no_ruler_shown_update = false;
|
no_ruler_shown_update = false;
|
||||||
|
|
||||||
update_ruler_visibility ();
|
update_ruler_visibility ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -816,10 +836,17 @@ Editor::update_ruler_visibility ()
|
||||||
vertical_adjustment.set_value (full_canvas_height - canvas_height + 1);
|
vertical_adjustment.set_value (full_canvas_height - canvas_height + 1);
|
||||||
} else {
|
} else {
|
||||||
_trackview_group->property_y () = - get_trackview_group_vertical_offset ();
|
_trackview_group->property_y () = - get_trackview_group_vertical_offset ();
|
||||||
|
_background_group->property_y () = - get_trackview_group_vertical_offset ();
|
||||||
_trackview_group->move (0, 0);
|
_trackview_group->move (0, 0);
|
||||||
|
_background_group->move (0, 0);
|
||||||
last_trackview_group_vertical_offset = get_trackview_group_vertical_offset ();
|
last_trackview_group_vertical_offset = get_trackview_group_vertical_offset ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gdouble bottom_track_pos = vertical_adjustment.get_value() + canvas_height - canvas_timebars_vsize;
|
||||||
|
if (trackview_by_y_position(bottom_track_pos) != 0) {
|
||||||
|
trackview_by_y_position(bottom_track_pos)->clip_to_viewport ();
|
||||||
|
}
|
||||||
|
|
||||||
ruler_label_vbox.set_size_request (-1, (int)(timebar_height * visible_rulers));
|
ruler_label_vbox.set_size_request (-1, (int)(timebar_height * visible_rulers));
|
||||||
time_canvas_vbox.set_size_request (-1,-1);
|
time_canvas_vbox.set_size_request (-1,-1);
|
||||||
|
|
||||||
|
|
|
@ -106,8 +106,7 @@ Editor::tempo_map_changed (Change ignored)
|
||||||
tempo_lines->tempo_map_changed();
|
tempo_lines->tempo_map_changed();
|
||||||
|
|
||||||
compute_current_bbt_points(leftmost_frame, leftmost_frame + current_page_frames());
|
compute_current_bbt_points(leftmost_frame, leftmost_frame + current_page_frames());
|
||||||
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
|
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); // redraw metric markers
|
||||||
update_tempo_based_rulers ();// redraw metric markers
|
|
||||||
redraw_measures ();
|
redraw_measures ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,8 +119,17 @@ Editor::redisplay_tempo (bool immediate_redraw)
|
||||||
|
|
||||||
compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_frames()); // redraw rulers and measures
|
compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_frames()); // redraw rulers and measures
|
||||||
|
|
||||||
redraw_measures();
|
compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_frames());
|
||||||
update_tempo_based_rulers ();
|
if (immediate_redraw) {
|
||||||
|
redraw_measures ();
|
||||||
|
} else {
|
||||||
|
#ifdef GTKOSX
|
||||||
|
redraw_measures ();
|
||||||
|
#else
|
||||||
|
Glib::signal_idle().connect (mem_fun (*this, &Editor::redraw_measures));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
update_tempo_based_rulers (); // redraw rulers and measures
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -72,7 +72,8 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
|
||||||
quick_button (_("Quick but Ugly")),
|
quick_button (_("Quick but Ugly")),
|
||||||
antialias_button (_("Skip Anti-aliasing")),
|
antialias_button (_("Skip Anti-aliasing")),
|
||||||
stretch_opts_label (_("Contents:")),
|
stretch_opts_label (_("Contents:")),
|
||||||
precise_button (_("Strict Linear"))
|
precise_button (_("Strict Linear")),
|
||||||
|
preserve_formants_button(_("Preserve Formants"))
|
||||||
{
|
{
|
||||||
set_modal (true);
|
set_modal (true);
|
||||||
set_position (Gtk::WIN_POS_MOUSE);
|
set_position (Gtk::WIN_POS_MOUSE);
|
||||||
|
@ -112,6 +113,9 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
|
||||||
|
|
||||||
pitch_cent_spinner.set_digits (1);
|
pitch_cent_spinner.set_digits (1);
|
||||||
|
|
||||||
|
upper_button_box.pack_start (preserve_formants_button, false, false);
|
||||||
|
|
||||||
|
|
||||||
add_button (_("Shift"), Gtk::RESPONSE_ACCEPT);
|
add_button (_("Shift"), Gtk::RESPONSE_ACCEPT);
|
||||||
|
|
||||||
get_vbox()->pack_start (upper_button_box, false, false);
|
get_vbox()->pack_start (upper_button_box, false, false);
|
||||||
|
@ -281,6 +285,7 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
|
||||||
bool peaklock = true;
|
bool peaklock = true;
|
||||||
bool longwin = false;
|
bool longwin = false;
|
||||||
bool shortwin = false;
|
bool shortwin = false;
|
||||||
|
bool preserve_formants = false;
|
||||||
string txt;
|
string txt;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -290,6 +295,7 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
|
||||||
} transients = Transients;
|
} transients = Transients;
|
||||||
|
|
||||||
precise = current_timefx->precise_button.get_active();
|
precise = current_timefx->precise_button.get_active();
|
||||||
|
preserve_formants = current_timefx->preserve_formants_button.get_active();
|
||||||
|
|
||||||
txt = current_timefx->stretch_opts_selector.get_active_text ();
|
txt = current_timefx->stretch_opts_selector.get_active_text ();
|
||||||
|
|
||||||
|
@ -312,10 +318,14 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
|
||||||
|
|
||||||
if (realtime) options |= RubberBandStretcher::OptionProcessRealTime;
|
if (realtime) options |= RubberBandStretcher::OptionProcessRealTime;
|
||||||
if (precise) options |= RubberBandStretcher::OptionStretchPrecise;
|
if (precise) options |= RubberBandStretcher::OptionStretchPrecise;
|
||||||
|
if (preserve_formants) options |= RubberBandStretcher::OptionFormantPreserved;
|
||||||
|
|
||||||
if (!peaklock) options |= RubberBandStretcher::OptionPhaseIndependent;
|
if (!peaklock) options |= RubberBandStretcher::OptionPhaseIndependent;
|
||||||
if (longwin) options |= RubberBandStretcher::OptionWindowLong;
|
if (longwin) options |= RubberBandStretcher::OptionWindowLong;
|
||||||
if (shortwin) options |= RubberBandStretcher::OptionWindowShort;
|
if (shortwin) options |= RubberBandStretcher::OptionWindowShort;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
switch (transients) {
|
switch (transients) {
|
||||||
case NoTransients:
|
case NoTransients:
|
||||||
options |= RubberBandStretcher::OptionTransientsSmooth;
|
options |= RubberBandStretcher::OptionTransientsSmooth;
|
||||||
|
@ -455,7 +465,7 @@ Editor::do_timefx (TimeFXDialog& dialog)
|
||||||
void*
|
void*
|
||||||
Editor::timefx_thread (void *arg)
|
Editor::timefx_thread (void *arg)
|
||||||
{
|
{
|
||||||
PBD::ThreadCreated (pthread_self(), X_("TimeFX"));
|
PBD::notify_gui_about_thread_creation (pthread_self(), X_("TimeFX"));
|
||||||
|
|
||||||
TimeFXDialog* tsd = static_cast<TimeFXDialog*>(arg);
|
TimeFXDialog* tsd = static_cast<TimeFXDialog*>(arg);
|
||||||
|
|
||||||
|
|
|
@ -131,7 +131,6 @@ ExportRangeMarkersDialog::get_target_filepath(string path, string filename, stri
|
||||||
return target_filepath;
|
return target_filepath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ExportRangeMarkersDialog::is_filepath_valid(string &filepath)
|
ExportRangeMarkersDialog::is_filepath_valid(string &filepath)
|
||||||
{
|
{
|
||||||
|
@ -148,10 +147,10 @@ ExportRangeMarkersDialog::is_filepath_valid(string &filepath)
|
||||||
|
|
||||||
if ( (stat (filepath.c_str(), &statbuf) != 0) ||
|
if ( (stat (filepath.c_str(), &statbuf) != 0) ||
|
||||||
(!S_ISDIR (statbuf.st_mode)) ) {
|
(!S_ISDIR (statbuf.st_mode)) ) {
|
||||||
string txt = _("Please select an existing target directory. Files are not allowed!");
|
string txt = _("Please select an existing target directory. Files are not allowed!");
|
||||||
MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true);
|
MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true);
|
||||||
msg.run();
|
msg.run();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// directory needs to exist and be writable
|
// directory needs to exist and be writable
|
||||||
|
@ -166,7 +165,6 @@ ExportRangeMarkersDialog::is_filepath_valid(string &filepath)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ExportRangeMarkersDialog::init_progress_computing(Locations::LocationList& locations)
|
ExportRangeMarkersDialog::init_progress_computing(Locations::LocationList& locations)
|
||||||
{
|
{
|
||||||
|
|
|
@ -454,7 +454,7 @@ GainMeterBase::meter_press(GdkEventButton* ev)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (ev->button == 2) {
|
if (Keyboard::is_button2_event(ev)) {
|
||||||
|
|
||||||
// Primary-button2 click is the midi binding click
|
// Primary-button2 click is the midi binding click
|
||||||
// button2-click is "momentary"
|
// button2-click is "momentary"
|
||||||
|
@ -465,7 +465,7 @@ GainMeterBase::meter_press(GdkEventButton* ev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ev->button == 1 || ev->button == 2) {
|
if (ev->button == 1 || Keyboard::is_button2_event (ev)) {
|
||||||
|
|
||||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
|
if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,6 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
|
||||||
//set_homogeneous (false);
|
//set_homogeneous (false);
|
||||||
|
|
||||||
pack1(main_contents);
|
pack1(main_contents);
|
||||||
|
|
||||||
settings_box.set_homogeneous (false);
|
settings_box.set_homogeneous (false);
|
||||||
|
|
||||||
HBox* constraint_hbox = manage (new HBox);
|
HBox* constraint_hbox = manage (new HBox);
|
||||||
|
@ -92,16 +91,25 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
|
||||||
smaller_hbox->pack_start (latency_gui, false, false, 10);
|
smaller_hbox->pack_start (latency_gui, false, false, 10);
|
||||||
smaller_hbox->pack_start (preset_combo, false, false);
|
smaller_hbox->pack_start (preset_combo, false, false);
|
||||||
smaller_hbox->pack_start (save_button, false, false);
|
smaller_hbox->pack_start (save_button, false, false);
|
||||||
|
smaller_hbox->pack_start (bypass_button, false, true);
|
||||||
|
|
||||||
constraint_hbox->set_spacing (5);
|
constraint_hbox->set_spacing (5);
|
||||||
constraint_hbox->pack_start (*smaller_hbox, true, false);
|
constraint_hbox->set_homogeneous (false);
|
||||||
constraint_hbox->pack_end (bypass_button, false, false);
|
|
||||||
|
VBox* v1_box = manage (new VBox);
|
||||||
|
VBox* v2_box = manage (new VBox);
|
||||||
constraint_hbox->pack_start (eqgui_toggle, false, false);
|
constraint_hbox->pack_start (eqgui_toggle, false, false);
|
||||||
|
|
||||||
settings_box.pack_end (*constraint_hbox, false, false);
|
v1_box->pack_start (*smaller_hbox, false, true);
|
||||||
|
v2_box->pack_start (focus_button, false, true);
|
||||||
|
|
||||||
main_contents.pack_start (settings_box, false, false);
|
main_contents.pack_start (settings_box, false, false);
|
||||||
|
|
||||||
|
constraint_hbox->pack_end (*v2_box, false, false);
|
||||||
|
constraint_hbox->pack_end (*v1_box, false, false);
|
||||||
|
|
||||||
|
main_contents.pack_start (*constraint_hbox, false, false);
|
||||||
|
|
||||||
if ( is_scrollable ) {
|
if ( is_scrollable ) {
|
||||||
scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
|
scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
|
||||||
scroller.set_name ("PluginEditor");
|
scroller.set_name ("PluginEditor");
|
||||||
|
@ -120,7 +128,8 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
|
||||||
eqgui_toggle.signal_toggled().connect( mem_fun(*this, &GenericPluginUI::toggle_plugin_analysis));
|
eqgui_toggle.signal_toggled().connect( mem_fun(*this, &GenericPluginUI::toggle_plugin_analysis));
|
||||||
|
|
||||||
pi->ActiveChanged.connect (bind(mem_fun(*this, &GenericPluginUI::processor_active_changed),
|
pi->ActiveChanged.connect (bind(mem_fun(*this, &GenericPluginUI::processor_active_changed),
|
||||||
boost::weak_ptr<Processor>(pi)));
|
boost::weak_ptr<Processor>(pi)));
|
||||||
|
|
||||||
bypass_button.set_active (!pi->active());
|
bypass_button.set_active (!pi->active());
|
||||||
|
|
||||||
build ();
|
build ();
|
||||||
|
@ -202,7 +211,7 @@ GenericPluginUI::build ()
|
||||||
/* if we are scrollable, just use one long column */
|
/* if we are scrollable, just use one long column */
|
||||||
|
|
||||||
if (!is_scrollable) {
|
if (!is_scrollable) {
|
||||||
if (x++ > 7){
|
if (x++ > 20){
|
||||||
frame = manage (new Frame);
|
frame = manage (new Frame);
|
||||||
frame->set_name ("BaseFrame");
|
frame->set_name ("BaseFrame");
|
||||||
box = manage (new VBox);
|
box = manage (new VBox);
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
|
@ -64,6 +64,7 @@ guint Keyboard::TertiaryModifier = GDK_SHIFT_MASK; // Shift
|
||||||
guint Keyboard::Level4Modifier = GDK_CONTROL_MASK; // Control
|
guint Keyboard::Level4Modifier = GDK_CONTROL_MASK; // Control
|
||||||
guint Keyboard::CopyModifier = GDK_MOD1_MASK; // Alt/Option
|
guint Keyboard::CopyModifier = GDK_MOD1_MASK; // Alt/Option
|
||||||
guint Keyboard::RangeSelectModifier = GDK_SHIFT_MASK;
|
guint Keyboard::RangeSelectModifier = GDK_SHIFT_MASK;
|
||||||
|
guint Keyboard::button2_modifiers = Keyboard::SecondaryModifier|Keyboard::Level4Modifier;
|
||||||
#else
|
#else
|
||||||
guint Keyboard::PrimaryModifier = GDK_CONTROL_MASK; // Control
|
guint Keyboard::PrimaryModifier = GDK_CONTROL_MASK; // Control
|
||||||
guint Keyboard::SecondaryModifier = GDK_MOD1_MASK; // Alt/Option
|
guint Keyboard::SecondaryModifier = GDK_MOD1_MASK; // Alt/Option
|
||||||
|
@ -71,8 +72,10 @@ guint Keyboard::TertiaryModifier = GDK_SHIFT_MASK; // Shift
|
||||||
guint Keyboard::Level4Modifier = GDK_MOD4_MASK; // Mod4/Windows
|
guint Keyboard::Level4Modifier = GDK_MOD4_MASK; // Mod4/Windows
|
||||||
guint Keyboard::CopyModifier = GDK_CONTROL_MASK;
|
guint Keyboard::CopyModifier = GDK_CONTROL_MASK;
|
||||||
guint Keyboard::RangeSelectModifier = GDK_SHIFT_MASK;
|
guint Keyboard::RangeSelectModifier = GDK_SHIFT_MASK;
|
||||||
|
guint Keyboard::button2_modifiers = 0; /* not used */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
Keyboard* Keyboard::_the_keyboard = 0;
|
Keyboard* Keyboard::_the_keyboard = 0;
|
||||||
Gtk::Window* Keyboard::current_window = 0;
|
Gtk::Window* Keyboard::current_window = 0;
|
||||||
bool Keyboard::_some_magic_widget_has_focus = false;
|
bool Keyboard::_some_magic_widget_has_focus = false;
|
||||||
|
@ -265,10 +268,20 @@ Keyboard::snooper (GtkWidget *widget, GdkEventKey *event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->type == GDK_KEY_RELEASE && event->keyval == GDK_w && modifier_state_equals (event->state, PrimaryModifier)) {
|
/* Special keys that we want to handle in
|
||||||
if (current_window) {
|
any dialog, no matter whether it uses
|
||||||
current_window->hide ();
|
the regular set of accelerators or not
|
||||||
current_window = 0;
|
*/
|
||||||
|
|
||||||
|
if (event->type == GDK_KEY_RELEASE && modifier_state_equals (event->state, PrimaryModifier)) {
|
||||||
|
switch (event->keyval) {
|
||||||
|
case GDK_w:
|
||||||
|
if (current_window) {
|
||||||
|
current_window->hide ();
|
||||||
|
current_window = 0;
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,25 +304,29 @@ Keyboard::enter_window (GdkEventCrossing *ev, Gtk::Window* win)
|
||||||
bool
|
bool
|
||||||
Keyboard::leave_window (GdkEventCrossing *ev, Gtk::Window* win)
|
Keyboard::leave_window (GdkEventCrossing *ev, Gtk::Window* win)
|
||||||
{
|
{
|
||||||
switch (ev->detail) {
|
if (ev) {
|
||||||
case GDK_NOTIFY_INFERIOR:
|
switch (ev->detail) {
|
||||||
if (debug_keyboard) {
|
case GDK_NOTIFY_INFERIOR:
|
||||||
cerr << "INFERIOR crossing ... out\n";
|
if (debug_keyboard) {
|
||||||
}
|
cerr << "INFERIOR crossing ... out\n";
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case GDK_NOTIFY_VIRTUAL:
|
case GDK_NOTIFY_VIRTUAL:
|
||||||
if (debug_keyboard) {
|
if (debug_keyboard) {
|
||||||
cerr << "VIRTUAL crossing ... out\n";
|
cerr << "VIRTUAL crossing ... out\n";
|
||||||
}
|
}
|
||||||
/* fallthru */
|
/* fallthru */
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (debug_keyboard) {
|
if (debug_keyboard) {
|
||||||
cerr << "REAL CROSSING ... out\n";
|
cerr << "REAL CROSSING ... out\n";
|
||||||
cerr << "clearing current target\n";
|
cerr << "clearing current target\n";
|
||||||
|
}
|
||||||
|
state.clear ();
|
||||||
|
current_window = 0;
|
||||||
}
|
}
|
||||||
state.clear ();
|
} else {
|
||||||
current_window = 0;
|
current_window = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,12 +380,23 @@ Keyboard::set_snap_modifier (guint mod)
|
||||||
bool
|
bool
|
||||||
Keyboard::is_edit_event (GdkEventButton *ev)
|
Keyboard::is_edit_event (GdkEventButton *ev)
|
||||||
{
|
{
|
||||||
|
|
||||||
return (ev->type == GDK_BUTTON_PRESS || ev->type == GDK_BUTTON_RELEASE) &&
|
return (ev->type == GDK_BUTTON_PRESS || ev->type == GDK_BUTTON_RELEASE) &&
|
||||||
(ev->button == Keyboard::edit_button()) &&
|
(ev->button == Keyboard::edit_button()) &&
|
||||||
((ev->state & RelevantModifierKeyMask) == Keyboard::edit_modifier());
|
((ev->state & RelevantModifierKeyMask) == Keyboard::edit_modifier());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Keyboard::is_button2_event (GdkEventButton* ev)
|
||||||
|
{
|
||||||
|
#ifdef GTKOSX
|
||||||
|
return (ev->button == 2) ||
|
||||||
|
((ev->button == 1) &&
|
||||||
|
((ev->state & Keyboard::button2_modifiers) == Keyboard::button2_modifiers));
|
||||||
|
#else
|
||||||
|
return ev->button == 2;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Keyboard::is_delete_event (GdkEventButton *ev)
|
Keyboard::is_delete_event (GdkEventButton *ev)
|
||||||
{
|
{
|
||||||
|
|
|
@ -107,6 +107,7 @@ class Keyboard : public sigc::trackable, PBD::Stateful
|
||||||
static bool is_edit_event (GdkEventButton*);
|
static bool is_edit_event (GdkEventButton*);
|
||||||
static bool is_delete_event (GdkEventButton*);
|
static bool is_delete_event (GdkEventButton*);
|
||||||
static bool is_context_menu_event (GdkEventButton*);
|
static bool is_context_menu_event (GdkEventButton*);
|
||||||
|
static bool is_button2_event (GdkEventButton*);
|
||||||
|
|
||||||
static Keyboard& the_keyboard() { return *_the_keyboard; }
|
static Keyboard& the_keyboard() { return *_the_keyboard; }
|
||||||
|
|
||||||
|
@ -143,6 +144,7 @@ class Keyboard : public sigc::trackable, PBD::Stateful
|
||||||
static guint delete_but;
|
static guint delete_but;
|
||||||
static guint delete_mod;
|
static guint delete_mod;
|
||||||
static guint snap_mod;
|
static guint snap_mod;
|
||||||
|
static guint button2_modifiers;
|
||||||
static Gtk::Window* current_window;
|
static Gtk::Window* current_window;
|
||||||
static std::string user_keybindings_path;
|
static std::string user_keybindings_path;
|
||||||
static bool can_save_keybindings;
|
static bool can_save_keybindings;
|
||||||
|
|
|
@ -151,6 +151,10 @@ fixup_bundle_environment ()
|
||||||
setenv ("ARDOUR_CONFIG_PATH", path.c_str(), 1);
|
setenv ("ARDOUR_CONFIG_PATH", path.c_str(), 1);
|
||||||
setenv ("ARDOUR_DATA_PATH", path.c_str(), 1);
|
setenv ("ARDOUR_DATA_PATH", path.c_str(), 1);
|
||||||
|
|
||||||
|
path = dir_path;
|
||||||
|
path += "/../Resources";
|
||||||
|
setenv ("ARDOUR_INSTANT_XML_PATH", path.c_str(), 1);
|
||||||
|
|
||||||
cstr = getenv ("LADSPA_PATH");
|
cstr = getenv ("LADSPA_PATH");
|
||||||
if (cstr) {
|
if (cstr) {
|
||||||
path = cstr;
|
path = cstr;
|
||||||
|
@ -264,7 +268,6 @@ fixup_bundle_environment ()
|
||||||
path += "/../Resources/gdk-pixbuf.loaders";
|
path += "/../Resources/gdk-pixbuf.loaders";
|
||||||
|
|
||||||
setenv ("GDK_PIXBUF_MODULE_FILE", path.c_str(), 1);
|
setenv ("GDK_PIXBUF_MODULE_FILE", path.c_str(), 1);
|
||||||
cerr << "Set GDK_PIXBUF_MODULE_FILE to " << path << endl;
|
|
||||||
|
|
||||||
if (getenv ("ARDOUR_WITH_JACK")) {
|
if (getenv ("ARDOUR_WITH_JACK")) {
|
||||||
// JACK driver dir
|
// JACK driver dir
|
||||||
|
@ -297,12 +300,9 @@ int main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
vector<Glib::ustring> null_file_list;
|
vector<Glib::ustring> null_file_list;
|
||||||
|
|
||||||
cerr << "here we go\n";
|
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
fixup_bundle_environment ();
|
fixup_bundle_environment ();
|
||||||
#endif
|
#endif
|
||||||
cerr << "just did it\n";
|
|
||||||
|
|
||||||
Glib::thread_init();
|
Glib::thread_init();
|
||||||
gtk_set_locale ();
|
gtk_set_locale ();
|
||||||
|
|
|
@ -152,7 +152,6 @@ Matrix::reset_size ()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
float w = 0;
|
float w = 0;
|
||||||
float w1;
|
|
||||||
float h = 0;
|
float h = 0;
|
||||||
cairo_text_extents_t extents;
|
cairo_text_extents_t extents;
|
||||||
cairo_t* cr;
|
cairo_t* cr;
|
||||||
|
|
|
@ -321,6 +321,16 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
|
||||||
|
|
||||||
RouteUI::set_route (rt);
|
RouteUI::set_route (rt);
|
||||||
|
|
||||||
|
if (input_selector) {
|
||||||
|
delete input_selector;
|
||||||
|
input_selector = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (output_selector) {
|
||||||
|
delete output_selector;
|
||||||
|
output_selector = 0;
|
||||||
|
}
|
||||||
|
|
||||||
panners.set_io (rt);
|
panners.set_io (rt);
|
||||||
gpm.set_io (rt);
|
gpm.set_io (rt);
|
||||||
pre_processor_box.set_route (rt);
|
pre_processor_box.set_route (rt);
|
||||||
|
@ -364,6 +374,7 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
|
||||||
#endif /* VARISPEED_IN_MIXER_STRIP */
|
#endif /* VARISPEED_IN_MIXER_STRIP */
|
||||||
|
|
||||||
button_table.attach (*rec_enable_button, 0, 2, 2, 3);
|
button_table.attach (*rec_enable_button, 0, 2, 2, 3);
|
||||||
|
rec_enable_button->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_route->phase_invert()) {
|
if (_route->phase_invert()) {
|
||||||
|
@ -386,6 +397,9 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete route_ops_menu;
|
||||||
|
route_ops_menu = 0;
|
||||||
|
|
||||||
ARDOUR_UI::instance()->tooltips().set_tip (comment_button, _route->comment().empty() ?
|
ARDOUR_UI::instance()->tooltips().set_tip (comment_button, _route->comment().empty() ?
|
||||||
_("Click to Add/Edit Comments"):
|
_("Click to Add/Edit Comments"):
|
||||||
_route->comment());
|
_route->comment());
|
||||||
|
@ -518,20 +532,19 @@ MixerStrip::set_width (Width w, void* owner)
|
||||||
|
|
||||||
switch (w) {
|
switch (w) {
|
||||||
case Wide:
|
case Wide:
|
||||||
set_size_request (-1, -1);
|
|
||||||
|
|
||||||
if (rec_enable_button) {
|
if (rec_enable_button) {
|
||||||
((Gtk::Label*)rec_enable_button->get_child())->set_text (_("record"));
|
((Gtk::Label*)rec_enable_button->get_child())->set_text (_("Record"));
|
||||||
}
|
}
|
||||||
((Gtk::Label*)mute_button->get_child())->set_text (_("Mute"));
|
((Gtk::Label*)mute_button->get_child())->set_text (_("Mute"));
|
||||||
((Gtk::Label*)solo_button->get_child())->set_text (_("Solo"));
|
((Gtk::Label*)solo_button->get_child())->set_text (_("Solo"));
|
||||||
|
|
||||||
if (_route->comment() == "") {
|
if (_route->comment() == "") {
|
||||||
comment_button.unset_bg (STATE_NORMAL);
|
comment_button.unset_bg (STATE_NORMAL);
|
||||||
((Gtk::Label*)comment_button.get_child())->set_text (_("comments"));
|
((Gtk::Label*)comment_button.get_child())->set_text (_("Comments"));
|
||||||
} else {
|
} else {
|
||||||
comment_button.modify_bg (STATE_NORMAL, color());
|
comment_button.modify_bg (STATE_NORMAL, color());
|
||||||
((Gtk::Label*)comment_button.get_child())->set_text (_("*comments*"));
|
((Gtk::Label*)comment_button.get_child())->set_text (_("*Comments*"));
|
||||||
}
|
}
|
||||||
|
|
||||||
((Gtk::Label*)gpm.gain_automation_style_button.get_child())->set_text (gpm.astyle_string(gain_automation->automation_style()));
|
((Gtk::Label*)gpm.gain_automation_style_button.get_child())->set_text (gpm.astyle_string(gain_automation->automation_style()));
|
||||||
|
@ -539,6 +552,7 @@ MixerStrip::set_width (Width w, void* owner)
|
||||||
((Gtk::Label*)panners.pan_automation_style_button.get_child())->set_text (panners.astyle_string(_route->panner().automation_style()));
|
((Gtk::Label*)panners.pan_automation_style_button.get_child())->set_text (panners.astyle_string(_route->panner().automation_style()));
|
||||||
((Gtk::Label*)panners.pan_automation_state_button.get_child())->set_text (panners.astate_string(_route->panner().automation_state()));
|
((Gtk::Label*)panners.pan_automation_state_button.get_child())->set_text (panners.astate_string(_route->panner().automation_state()));
|
||||||
Gtkmm2ext::set_size_request_to_display_given_text (name_button, "long", 2, 2);
|
Gtkmm2ext::set_size_request_to_display_given_text (name_button, "long", 2, 2);
|
||||||
|
set_size_request (-1, -1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Narrow:
|
case Narrow:
|
||||||
|
@ -564,12 +578,13 @@ MixerStrip::set_width (Width w, void* owner)
|
||||||
set_size_request (max (50, gpm.get_gm_width()), -1);
|
set_size_request (max (50, gpm.get_gm_width()), -1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
update_input_display ();
|
update_input_display ();
|
||||||
update_output_display ();
|
update_output_display ();
|
||||||
mix_group_changed (0);
|
mix_group_changed (0);
|
||||||
name_changed ();
|
name_changed ();
|
||||||
|
#ifdef GTKOSX
|
||||||
|
WidthChanged();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1084,7 +1099,7 @@ void
|
||||||
MixerStrip::build_route_ops_menu ()
|
MixerStrip::build_route_ops_menu ()
|
||||||
{
|
{
|
||||||
using namespace Menu_Helpers;
|
using namespace Menu_Helpers;
|
||||||
route_ops_menu = manage (new Menu);
|
route_ops_menu = new Menu;
|
||||||
route_ops_menu->set_name ("ArdourContextMenu");
|
route_ops_menu->set_name ("ArdourContextMenu");
|
||||||
|
|
||||||
MenuList& items = route_ops_menu->items();
|
MenuList& items = route_ops_menu->items();
|
||||||
|
@ -1107,11 +1122,10 @@ MixerStrip::build_route_ops_menu ()
|
||||||
denormal_menu_item = dynamic_cast<CheckMenuItem *> (&items.back());
|
denormal_menu_item = dynamic_cast<CheckMenuItem *> (&items.back());
|
||||||
denormal_menu_item->set_active (_route->denormal_protection());
|
denormal_menu_item->set_active (_route->denormal_protection());
|
||||||
|
|
||||||
build_remote_control_menu ();
|
|
||||||
|
|
||||||
items.push_back (SeparatorElem());
|
|
||||||
if (!Profile->get_sae()) {
|
if (!Profile->get_sae()) {
|
||||||
items.push_back (MenuElem (_("Remote Control ID"), *remote_control_menu));
|
build_remote_control_menu ();
|
||||||
|
items.push_back (SeparatorElem());
|
||||||
|
items.push_back (MenuElem (_("Remote Control ID"), *remote_control_menu));
|
||||||
}
|
}
|
||||||
|
|
||||||
items.push_back (SeparatorElem());
|
items.push_back (SeparatorElem());
|
||||||
|
@ -1121,7 +1135,7 @@ MixerStrip::build_route_ops_menu ()
|
||||||
gint
|
gint
|
||||||
MixerStrip::name_button_button_press (GdkEventButton* ev)
|
MixerStrip::name_button_button_press (GdkEventButton* ev)
|
||||||
{
|
{
|
||||||
if (ev->button == 1) {
|
if (ev->button == 1 || ev->button == 3) {
|
||||||
list_route_operations ();
|
list_route_operations ();
|
||||||
|
|
||||||
Menu_Helpers::MenuList& items = route_ops_menu->items();
|
Menu_Helpers::MenuList& items = route_ops_menu->items();
|
||||||
|
|
|
@ -96,6 +96,10 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
|
||||||
ARDOUR::RouteGroup* mix_group() const;
|
ARDOUR::RouteGroup* mix_group() const;
|
||||||
void set_route (boost::shared_ptr<ARDOUR::Route>);
|
void set_route (boost::shared_ptr<ARDOUR::Route>);
|
||||||
|
|
||||||
|
#ifdef GTKOSX
|
||||||
|
sigc::signal<void> WidthChanged;
|
||||||
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class Mixer_UI;
|
friend class Mixer_UI;
|
||||||
void set_packed (bool yn);
|
void set_packed (bool yn);
|
||||||
|
|
|
@ -339,7 +339,9 @@ Mixer_UI::add_strip (Session::RouteList& routes)
|
||||||
route->NameChanged.connect (bind (mem_fun(*this, &Mixer_UI::strip_name_changed), strip));
|
route->NameChanged.connect (bind (mem_fun(*this, &Mixer_UI::strip_name_changed), strip));
|
||||||
|
|
||||||
strip->GoingAway.connect (bind (mem_fun(*this, &Mixer_UI::remove_strip), strip));
|
strip->GoingAway.connect (bind (mem_fun(*this, &Mixer_UI::remove_strip), strip));
|
||||||
|
#ifdef GTKOSX
|
||||||
|
strip->WidthChanged.connect (mem_fun(*this, &Mixer_UI::queue_draw_all_strips));
|
||||||
|
#endif
|
||||||
strip->signal_button_release_event().connect (bind (mem_fun(*this, &Mixer_UI::strip_button_release_event), strip));
|
strip->signal_button_release_event().connect (bind (mem_fun(*this, &Mixer_UI::strip_button_release_event), strip));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -767,6 +769,30 @@ Mixer_UI::redisplay_track_list ()
|
||||||
auto_rebind_midi_controls ();
|
auto_rebind_midi_controls ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef GTKOSX
|
||||||
|
void
|
||||||
|
Mixer_UI::queue_draw_all_strips ()
|
||||||
|
{
|
||||||
|
TreeModel::Children rows = track_model->children();
|
||||||
|
TreeModel::Children::iterator i;
|
||||||
|
long order;
|
||||||
|
|
||||||
|
for (order = 0, i = rows.begin(); i != rows.end(); ++i, ++order) {
|
||||||
|
MixerStrip* strip = (*i)[track_columns.strip];
|
||||||
|
|
||||||
|
if (strip == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool visible = (*i)[track_columns.visible];
|
||||||
|
|
||||||
|
if (visible) {
|
||||||
|
strip->queue_draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
Mixer_UI::set_auto_rebinding( bool val )
|
Mixer_UI::set_auto_rebinding( bool val )
|
||||||
{
|
{
|
||||||
|
@ -919,6 +945,9 @@ Mixer_UI::track_display_button_press (GdkEventButton* ev)
|
||||||
bool visible = (*iter)[track_columns.visible];
|
bool visible = (*iter)[track_columns.visible];
|
||||||
(*iter)[track_columns.visible] = !visible;
|
(*iter)[track_columns.visible] = !visible;
|
||||||
}
|
}
|
||||||
|
#ifdef GTKOSX
|
||||||
|
track_display.queue_draw();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -1014,6 +1043,9 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev)
|
||||||
if ((iter = group_model->get_iter (path))) {
|
if ((iter = group_model->get_iter (path))) {
|
||||||
if ((group = (*iter)[group_columns.group]) != 0) {
|
if ((group = (*iter)[group_columns.group]) != 0) {
|
||||||
// edit_mix_group (group);
|
// edit_mix_group (group);
|
||||||
|
#ifdef GTKOSX
|
||||||
|
group_display.queue_draw();
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1025,6 +1057,9 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev)
|
||||||
if ((iter = group_model->get_iter (path))) {
|
if ((iter = group_model->get_iter (path))) {
|
||||||
bool active = (*iter)[group_columns.active];
|
bool active = (*iter)[group_columns.active];
|
||||||
(*iter)[group_columns.active] = !active;
|
(*iter)[group_columns.active] = !active;
|
||||||
|
#ifdef GTKOSX
|
||||||
|
group_display.queue_draw();
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1033,6 +1068,9 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev)
|
||||||
if ((iter = group_model->get_iter (path))) {
|
if ((iter = group_model->get_iter (path))) {
|
||||||
bool visible = (*iter)[group_columns.visible];
|
bool visible = (*iter)[group_columns.visible];
|
||||||
(*iter)[group_columns.visible] = !visible;
|
(*iter)[group_columns.visible] = !visible;
|
||||||
|
#ifdef GTKOSX
|
||||||
|
group_display.queue_draw();
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1281,19 +1319,41 @@ Mixer_UI::set_state (const XMLNode& node)
|
||||||
const XMLProperty* prop;
|
const XMLProperty* prop;
|
||||||
XMLNode* geometry;
|
XMLNode* geometry;
|
||||||
|
|
||||||
if ((geometry = find_named_node (node, "geometry")) == 0) {
|
m_width = default_width;
|
||||||
|
m_height = default_height;
|
||||||
|
m_root_x = 1;
|
||||||
|
m_root_y = 1;
|
||||||
|
|
||||||
m_width = default_width;
|
if ((geometry = find_named_node (node, "geometry")) != 0) {
|
||||||
m_height = default_height;
|
|
||||||
m_root_x = 1;
|
|
||||||
m_root_y = 1;
|
|
||||||
|
|
||||||
} else {
|
XMLProperty* prop;
|
||||||
|
|
||||||
m_width = atoi(geometry->property("x-size")->value().c_str());
|
if ((prop = geometry->property("x_size")) == 0) {
|
||||||
m_height = atoi(geometry->property("y-size")->value().c_str());
|
prop = geometry->property ("x-size");
|
||||||
m_root_x = atoi(geometry->property("x-pos")->value().c_str());
|
}
|
||||||
m_root_y = atoi(geometry->property("y-pos")->value().c_str());
|
if (prop) {
|
||||||
|
m_width = atoi(prop->value());
|
||||||
|
}
|
||||||
|
if ((prop = geometry->property("y_size")) == 0) {
|
||||||
|
prop = geometry->property ("y-size");
|
||||||
|
}
|
||||||
|
if (prop) {
|
||||||
|
m_height = atoi(prop->value());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((prop = geometry->property ("x_pos")) == 0) {
|
||||||
|
prop = geometry->property ("x-pos");
|
||||||
|
}
|
||||||
|
if (prop) {
|
||||||
|
m_root_x = atoi (prop->value());
|
||||||
|
|
||||||
|
}
|
||||||
|
if ((prop = geometry->property ("y_pos")) == 0) {
|
||||||
|
prop = geometry->property ("y-pos");
|
||||||
|
}
|
||||||
|
if (prop) {
|
||||||
|
m_root_y = atoi (prop->value());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set_window_pos_and_size ();
|
set_window_pos_and_size ();
|
||||||
|
@ -1369,12 +1429,24 @@ Mixer_UI::pane_allocation_handler (Allocation& alloc, Gtk::Paned* which)
|
||||||
int width, height;
|
int width, height;
|
||||||
static int32_t done[3] = { 0, 0, 0 };
|
static int32_t done[3] = { 0, 0, 0 };
|
||||||
|
|
||||||
if ((geometry = find_named_node (*node, "geometry")) == 0) {
|
width = default_width;
|
||||||
width = default_width;
|
height = default_height;
|
||||||
height = default_height;
|
|
||||||
} else {
|
if ((geometry = find_named_node (*node, "geometry")) != 0) {
|
||||||
width = atoi(geometry->property("x-size")->value());
|
|
||||||
height = atoi(geometry->property("y-size")->value());
|
|
||||||
|
if ((prop = geometry->property ("x_size")) == 0) {
|
||||||
|
prop = geometry->property ("x-size");
|
||||||
|
}
|
||||||
|
if (prop) {
|
||||||
|
width = atoi (prop->value());
|
||||||
|
}
|
||||||
|
if ((prop = geometry->property ("y_size")) == 0) {
|
||||||
|
prop = geometry->property ("y-size");
|
||||||
|
}
|
||||||
|
if (prop) {
|
||||||
|
height = atoi (prop->value());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (which == static_cast<Gtk::Paned*> (&rhs_pane1)) {
|
if (which == static_cast<Gtk::Paned*> (&rhs_pane1)) {
|
||||||
|
|
|
@ -152,6 +152,9 @@ class Mixer_UI : public Gtk::Window
|
||||||
void redisplay_track_list ();
|
void redisplay_track_list ();
|
||||||
bool no_track_list_redisplay;
|
bool no_track_list_redisplay;
|
||||||
bool track_display_button_press (GdkEventButton*);
|
bool track_display_button_press (GdkEventButton*);
|
||||||
|
#ifdef GTKOSX
|
||||||
|
void queue_draw_all_strips ();
|
||||||
|
#endif
|
||||||
|
|
||||||
void track_list_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&);
|
void track_list_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&);
|
||||||
void track_list_delete (const Gtk::TreeModel::Path&);
|
void track_list_delete (const Gtk::TreeModel::Path&);
|
||||||
|
|
|
@ -108,28 +108,30 @@
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%WINDOW%>b")
|
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%WINDOW%>b")
|
||||||
(gtk_accel_path "<Actions>/Editor/normalize-region" "<%SECONDARY%>n")
|
(gtk_accel_path "<Actions>/Editor/normalize-region" "<%SECONDARY%>n")
|
||||||
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "<%SECONDARY%>m")
|
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "<%SECONDARY%>m")
|
||||||
(gtk_accel_path "<Actions>/Common/goto-mixer" "<%WINDOW%>m")
|
(gtk_accel_path "<Actions>/Common/toggle-editor-mixer-on-top" "<%WINDOW%>m")
|
||||||
|
|
||||||
;; arrow keys, navigation etc.
|
;; arrow keys, navigation etc.
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/step-tracks-up" "uparrow")
|
(gtk_accel_path "<Actions>/Editor/step-tracks-up" "uparrow")
|
||||||
(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
|
(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%TERTIARY%>uparrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-prev-route" "<%SECONDARY%>uparrow")
|
(gtk_accel_path "<Actions>/Editor/select-prev-route" "<%SECONDARY%>uparrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/move-selected-tracks-up" "<%TERTIARY%>uparrow")
|
(gtk_accel_path "<Actions>/Editor/move-selected-tracks-up" "<%PRIMARY%>uparrow")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/step-tracks-down" "downarrow")
|
(gtk_accel_path "<Actions>/Editor/step-tracks-down" "downarrow")
|
||||||
(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
|
(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%TERTIARY%>downarrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-next-route" "<%SECONDARY%>downarrow")
|
(gtk_accel_path "<Actions>/Editor/select-next-route" "<%SECONDARY%>downarrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/move-selected-tracks-down" "<%TERTIARY%>downarrow")
|
(gtk_accel_path "<Actions>/Editor/move-selected-tracks-down" "<%PRIMARY%>downarrow")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
|
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%PRIMARY%>leftarrow")
|
(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%PRIMARY%>leftarrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%SECONDARY%>leftarrow")
|
(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%SECONDARY%>leftarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Rewind" "<%TERTIARY%>leftarrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
|
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
|
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%PRIMARY%>rightarrow")
|
(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%PRIMARY%>rightarrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%SECONDARY%>rightarrow")
|
(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%SECONDARY%>rightarrow")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/Forward" "<%TERTIARY%>rightarrow")
|
||||||
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
|
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
|
||||||
|
|
||||||
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
|
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
|
||||||
|
@ -214,8 +216,9 @@
|
||||||
(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
|
(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
|
||||||
(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
|
(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
|
||||||
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
|
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
|
||||||
(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "4")
|
(gtk_accel_path "<Actions>/Editor/step-mouse-mode" "4")
|
||||||
(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
|
(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "5")
|
||||||
|
(gtk_accel_path "<Actions>/Transport/ToggleClick" "6")
|
||||||
(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "9")
|
(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "9")
|
||||||
(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
|
(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,206 @@
|
||||||
|
#include <fstream>
|
||||||
|
#include <gtkmm/stock.h>
|
||||||
|
|
||||||
|
#include <ardour/ardour.h>
|
||||||
|
#include <ardour/filesystem_paths.h>
|
||||||
|
|
||||||
|
#include "nag.h"
|
||||||
|
#include "i18n.h"
|
||||||
|
|
||||||
|
using namespace ARDOUR;
|
||||||
|
using namespace std;
|
||||||
|
using namespace Glib;
|
||||||
|
using namespace Gtk;
|
||||||
|
|
||||||
|
NagScreen::NagScreen (std::string context, bool maybe_sub)
|
||||||
|
: ArdourDialog (_("Support Ardour Development"), true)
|
||||||
|
, donate_button (button_group, _("I'd like to make a one-time donation"))
|
||||||
|
, subscribe_button (button_group, _("Tell me more about becoming a subscriber"))
|
||||||
|
, existing_button (button_group, _("I'm already a subscriber!"))
|
||||||
|
, next_time_button (button_group, _("Ask about this the next time I export"))
|
||||||
|
, never_again_button (button_group, _("Never ever ask me about this again"))
|
||||||
|
{
|
||||||
|
if (maybe_sub) {
|
||||||
|
message.set_text (_("Congratulations on your session export.\n\n\
|
||||||
|
It looks as if you may already be a subscriber. If so, thanks, and sorry\n\
|
||||||
|
to bother you again about this - I'm working on improving our subscriber system\n\
|
||||||
|
so that I don't have to keep annoying you with this message.\n\n\
|
||||||
|
If you're not a subscriber, perhaps you might consider supporting my work\n\
|
||||||
|
on Ardour with either a one-time donation or subscription. Nothing will \n\
|
||||||
|
happen if you choose not to do so. However Ardour's continuing development\n\
|
||||||
|
relies on a stable, sustainable income stream. Thanks for using Ardour!"));
|
||||||
|
} else {
|
||||||
|
message.set_text (_("Congratulations on your session export.\n\n\
|
||||||
|
I hope you find Ardour a useful tool. I'd like to ask you to consider supporting\n\
|
||||||
|
its development with either a one-time donation or subscription. Nothing\n\
|
||||||
|
will happen if you choose not to do so. However Ardour's continuing development\n\
|
||||||
|
relies on a stable, sustainable income stream. Thanks for using Ardour!"));
|
||||||
|
}
|
||||||
|
|
||||||
|
button_box.pack_start (donate_button);
|
||||||
|
button_box.pack_start (subscribe_button);
|
||||||
|
button_box.pack_start (existing_button);
|
||||||
|
button_box.pack_start (next_time_button);
|
||||||
|
button_box.pack_start (never_again_button);
|
||||||
|
|
||||||
|
get_vbox()->set_spacing (12);
|
||||||
|
get_vbox()->pack_start (message);
|
||||||
|
get_vbox()->pack_start (button_box);
|
||||||
|
|
||||||
|
set_border_width (12);
|
||||||
|
add_button (Stock::OK, RESPONSE_ACCEPT);
|
||||||
|
}
|
||||||
|
|
||||||
|
NagScreen::~NagScreen ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NagScreen::nag ()
|
||||||
|
{
|
||||||
|
show_all ();
|
||||||
|
|
||||||
|
int response = run ();
|
||||||
|
|
||||||
|
hide ();
|
||||||
|
|
||||||
|
switch (response) {
|
||||||
|
case RESPONSE_ACCEPT:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (donate_button.get_active()) {
|
||||||
|
offer_to_donate ();
|
||||||
|
} else if (subscribe_button.get_active()) {
|
||||||
|
offer_to_subscribe ();
|
||||||
|
} else if (never_again_button.get_active ()) {
|
||||||
|
mark_never_again ();
|
||||||
|
} else if (existing_button.get_active ()) {
|
||||||
|
mark_affirmed_subscriber ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NagScreen*
|
||||||
|
NagScreen::maybe_nag (std::string why)
|
||||||
|
{
|
||||||
|
Glib::ustring path;
|
||||||
|
bool really_subscribed;
|
||||||
|
bool maybe_subscribed;
|
||||||
|
|
||||||
|
path = Glib::build_filename (user_config_directory().to_string(), ".nevernag");
|
||||||
|
|
||||||
|
if (Glib::file_test (path, Glib::FILE_TEST_EXISTS)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
maybe_subscribed = is_subscribed (really_subscribed);
|
||||||
|
|
||||||
|
if (really_subscribed) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new NagScreen (why, maybe_subscribed);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NagScreen::mark_never_again ()
|
||||||
|
{
|
||||||
|
Glib::ustring path;
|
||||||
|
|
||||||
|
path = Glib::build_filename (user_config_directory().to_string(), ".nevernag");
|
||||||
|
|
||||||
|
ofstream nagfile (path.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NagScreen::mark_subscriber ()
|
||||||
|
{
|
||||||
|
Glib::ustring path;
|
||||||
|
|
||||||
|
path = Glib::build_filename (user_config_directory().to_string(), ".askedaboutsub");
|
||||||
|
|
||||||
|
ofstream subsfile (path.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NagScreen::mark_affirmed_subscriber ()
|
||||||
|
{
|
||||||
|
Glib::ustring path;
|
||||||
|
|
||||||
|
path = Glib::build_filename (user_config_directory().to_string(), ".isubscribe");
|
||||||
|
|
||||||
|
ofstream subsfile (path.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
NagScreen::is_subscribed (bool& really)
|
||||||
|
{
|
||||||
|
Glib::ustring path;
|
||||||
|
|
||||||
|
really = false;
|
||||||
|
|
||||||
|
/* what we'd really like here is a way to query paypal
|
||||||
|
for someone's subscription status. thats a bit complicated
|
||||||
|
so for now, just see if they ever told us they were
|
||||||
|
subscribed. we try to trust our users :)
|
||||||
|
*/
|
||||||
|
|
||||||
|
path = Glib::build_filename (user_config_directory().to_string(), ".isubscribe");
|
||||||
|
if (file_test (path, FILE_TEST_EXISTS)) {
|
||||||
|
really = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
path = Glib::build_filename (user_config_directory().to_string(), ".askedaboutsub");
|
||||||
|
if (file_test (path, FILE_TEST_EXISTS)) {
|
||||||
|
/* they never said they were subscribed but they
|
||||||
|
did once express an interest in it.
|
||||||
|
*/
|
||||||
|
really = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NagScreen::offer_to_donate ()
|
||||||
|
{
|
||||||
|
const char* uri = "http://ardour.org/donate";
|
||||||
|
|
||||||
|
/* we don't care if it fails */
|
||||||
|
|
||||||
|
open_uri (uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NagScreen::offer_to_subscribe ()
|
||||||
|
{
|
||||||
|
const char* uri = "http://ardour.org/subscribe";
|
||||||
|
|
||||||
|
if (open_uri (uri)) {
|
||||||
|
mark_subscriber ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
NagScreen::open_uri (const char* uri)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_GTK_OPEN_URI
|
||||||
|
GError* err;
|
||||||
|
return gtk_open_uri (0, uri, GDK_CURRENT_TIME, &err);
|
||||||
|
#else
|
||||||
|
#ifndef __APPLE__
|
||||||
|
std::string command = "xdg-open ";
|
||||||
|
command += uri;
|
||||||
|
spawn_command_line_async (command);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
|
extern bool cocoa_open_url (const char*);
|
||||||
|
return cocoa_open_url (uri);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
#ifndef __gtk_ardour_nag_h__
|
||||||
|
#define __gtk_ardour_nag_h__
|
||||||
|
|
||||||
|
#include "ardour_dialog.h"
|
||||||
|
|
||||||
|
#include <gtkmm/label.h>
|
||||||
|
#include <gtkmm/radiobutton.h>
|
||||||
|
#include <gtkmm/buttonbox.h>
|
||||||
|
|
||||||
|
class NagScreen : public ArdourDialog
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
~NagScreen();
|
||||||
|
|
||||||
|
static NagScreen* maybe_nag (std::string context);
|
||||||
|
void nag ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
NagScreen (std::string context, bool maybe_subscriber);
|
||||||
|
|
||||||
|
Gtk::Label message;
|
||||||
|
Gtk::VButtonBox button_box;
|
||||||
|
Gtk::RadioButtonGroup button_group;
|
||||||
|
Gtk::RadioButton donate_button;
|
||||||
|
Gtk::RadioButton subscribe_button;
|
||||||
|
Gtk::RadioButton existing_button;
|
||||||
|
Gtk::RadioButton next_time_button;
|
||||||
|
Gtk::RadioButton never_again_button;
|
||||||
|
|
||||||
|
void mark_never_again ();
|
||||||
|
void mark_subscriber ();
|
||||||
|
void mark_affirmed_subscriber ();
|
||||||
|
void offer_to_donate ();
|
||||||
|
void offer_to_subscribe ();
|
||||||
|
bool open_uri (const char*);
|
||||||
|
static bool is_subscribed (bool& really);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __gtk_ardour_nag_h__ */
|
|
@ -17,9 +17,6 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i18n.h"
|
|
||||||
#include "new_session_dialog.h"
|
|
||||||
|
|
||||||
#include <pbd/error.h>
|
#include <pbd/error.h>
|
||||||
|
|
||||||
#include <ardour/recent_sessions.h>
|
#include <ardour/recent_sessions.h>
|
||||||
|
@ -46,6 +43,8 @@ using namespace ARDOUR;
|
||||||
|
|
||||||
#include "opts.h"
|
#include "opts.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "i18n.h"
|
||||||
|
#include "new_session_dialog.h"
|
||||||
|
|
||||||
NewSessionDialog::NewSessionDialog()
|
NewSessionDialog::NewSessionDialog()
|
||||||
: ArdourDialog ("session control")
|
: ArdourDialog ("session control")
|
||||||
|
@ -426,6 +425,8 @@ NewSessionDialog::NewSessionDialog()
|
||||||
m_notebook->show();
|
m_notebook->show();
|
||||||
m_notebook->show_all_children();
|
m_notebook->show_all_children();
|
||||||
|
|
||||||
|
engine_page_session_folder = X_("");
|
||||||
|
engine_page_session_name = X_("");
|
||||||
|
|
||||||
set_default_response (Gtk::RESPONSE_OK);
|
set_default_response (Gtk::RESPONSE_OK);
|
||||||
if (!ARDOUR_COMMAND_LINE::session_name.length()) {
|
if (!ARDOUR_COMMAND_LINE::session_name.length()) {
|
||||||
|
@ -466,7 +467,9 @@ NewSessionDialog::run ()
|
||||||
/* nothing to display */
|
/* nothing to display */
|
||||||
return Gtk::RESPONSE_OK;
|
return Gtk::RESPONSE_OK;
|
||||||
}
|
}
|
||||||
|
if (!(page_set & NewPage) && !(page_set & OpenPage)) {
|
||||||
|
set_response_sensitive (Gtk::RESPONSE_OK, true);
|
||||||
|
}
|
||||||
return ArdourDialog::run ();
|
return ArdourDialog::run ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -521,13 +524,13 @@ void
|
||||||
NewSessionDialog::set_session_name (const Glib::ustring& name)
|
NewSessionDialog::set_session_name (const Glib::ustring& name)
|
||||||
{
|
{
|
||||||
m_name->set_text (name);
|
m_name->set_text (name);
|
||||||
|
engine_page_session_name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
NewSessionDialog::set_session_folder(const Glib::ustring& dir)
|
NewSessionDialog::set_session_folder(const Glib::ustring& dir)
|
||||||
{
|
{
|
||||||
Glib::ustring realdir = dir;
|
Glib::ustring realdir = dir;
|
||||||
char* res;
|
|
||||||
|
|
||||||
/* this little tangled mess is a result of 4 things:
|
/* this little tangled mess is a result of 4 things:
|
||||||
|
|
||||||
|
@ -547,15 +550,17 @@ NewSessionDialog::set_session_folder(const Glib::ustring& dir)
|
||||||
|
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
|
|
||||||
if((res = realpath (dir.c_str(), buf)) != 0) {
|
if(realpath (dir.c_str(), buf) != 0) {
|
||||||
if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
|
if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
|
||||||
realdir = Glib::path_get_dirname (realdir);
|
realdir = Glib::path_get_dirname (realdir);
|
||||||
}
|
}
|
||||||
m_folder->set_current_folder (realdir);
|
m_folder->set_current_folder (realdir);
|
||||||
|
engine_page_session_folder = realdir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
char* res;
|
||||||
if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
|
if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
|
||||||
realdir = Glib::path_get_dirname (realdir);
|
realdir = Glib::path_get_dirname (realdir);
|
||||||
cerr << "didn't exist, use " << realdir << endl;
|
cerr << "didn't exist, use " << realdir << endl;
|
||||||
|
@ -593,6 +598,9 @@ NewSessionDialog::session_name() const
|
||||||
case NewPage:
|
case NewPage:
|
||||||
case EnginePage:
|
case EnginePage:
|
||||||
/* new or audio setup pages */
|
/* new or audio setup pages */
|
||||||
|
if (!(page_set & OpenPage) && !(page_set & NewPage)) {
|
||||||
|
return Glib::filename_from_utf8(engine_page_session_name);
|
||||||
|
}
|
||||||
return Glib::filename_from_utf8(m_name->get_text());
|
return Glib::filename_from_utf8(m_name->get_text());
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -613,8 +621,12 @@ NewSessionDialog::session_folder() const
|
||||||
return Glib::filename_from_utf8(m_folder->get_filename());
|
return Glib::filename_from_utf8(m_folder->get_filename());
|
||||||
|
|
||||||
case EnginePage:
|
case EnginePage:
|
||||||
|
if (!(page_set & OpenPage) && !(page_set & NewPage)) {
|
||||||
|
/* just engine page, nothing else */
|
||||||
|
return Glib::filename_from_utf8(engine_page_session_folder);
|
||||||
|
}
|
||||||
if (page_set == EnginePage) {
|
if (page_set == EnginePage) {
|
||||||
/* just engine page, nothing else : use m_folder since it should be set */
|
/* use m_folder since it should be set */
|
||||||
return Glib::filename_from_utf8(m_folder->get_filename());
|
return Glib::filename_from_utf8(m_folder->get_filename());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -216,6 +216,8 @@ protected:
|
||||||
|
|
||||||
bool on_new_session_page;
|
bool on_new_session_page;
|
||||||
bool have_engine;
|
bool have_engine;
|
||||||
|
Glib::ustring engine_page_session_folder;
|
||||||
|
Glib::ustring engine_page_session_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NEW_SESSION_DIALOG_H
|
#endif // NEW_SESSION_DIALOG_H
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <ardour/auditioner.h>
|
#include <ardour/auditioner.h>
|
||||||
#include <ardour/sndfilesource.h>
|
#include <ardour/sndfilesource.h>
|
||||||
#include <ardour/crossfade.h>
|
#include <ardour/crossfade.h>
|
||||||
|
#include <ardour/profile.h>
|
||||||
#include <midi++/manager.h>
|
#include <midi++/manager.h>
|
||||||
#include <midi++/factory.h>
|
#include <midi++/factory.h>
|
||||||
#include <gtkmm2ext/stop_signal.h>
|
#include <gtkmm2ext/stop_signal.h>
|
||||||
|
@ -148,9 +149,11 @@ OptionEditor::OptionEditor (ARDOUR_UI& uip, PublicEditor& ed, Mixer_UI& mixui)
|
||||||
setup_keyboard_options ();
|
setup_keyboard_options ();
|
||||||
setup_auditioner_editor ();
|
setup_auditioner_editor ();
|
||||||
|
|
||||||
notebook.pages().push_back (TabElem (sync_packer, _("Sync")));
|
if (!Profile->get_sae()) {
|
||||||
notebook.pages().push_back (TabElem (path_table, _("Paths/Files")));
|
notebook.pages().push_back (TabElem (sync_packer, _("Sync")));
|
||||||
notebook.pages().push_back (TabElem (keyboard_mouse_table, _("Kbd/Mouse")));
|
notebook.pages().push_back (TabElem (path_table, _("Paths/Files")));
|
||||||
|
notebook.pages().push_back (TabElem (keyboard_mouse_table, _("Kbd/Mouse")));
|
||||||
|
}
|
||||||
notebook.pages().push_back (TabElem (click_packer, _("Click")));
|
notebook.pages().push_back (TabElem (click_packer, _("Click")));
|
||||||
notebook.pages().push_back (TabElem (audition_packer, _("Audition")));
|
notebook.pages().push_back (TabElem (audition_packer, _("Audition")));
|
||||||
notebook.pages().push_back (TabElem (misc_packer, _("Misc")));
|
notebook.pages().push_back (TabElem (misc_packer, _("Misc")));
|
||||||
|
|
|
@ -154,6 +154,7 @@ PannerUI::set_io (boost::shared_ptr<IO> io)
|
||||||
panner = 0;
|
panner = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setup_pan ();
|
||||||
|
|
||||||
pan_changed (0);
|
pan_changed (0);
|
||||||
update_pan_sensitive ();
|
update_pan_sensitive ();
|
||||||
|
@ -225,14 +226,12 @@ PannerUI::get_controllable()
|
||||||
bool
|
bool
|
||||||
PannerUI::panning_link_button_press (GdkEventButton* ev)
|
PannerUI::panning_link_button_press (GdkEventButton* ev)
|
||||||
{
|
{
|
||||||
cerr << "link press\n";
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
PannerUI::panning_link_button_release (GdkEventButton* ev)
|
PannerUI::panning_link_button_release (GdkEventButton* ev)
|
||||||
{
|
{
|
||||||
cerr << "link release\n";
|
|
||||||
if (!ignore_toggle) {
|
if (!ignore_toggle) {
|
||||||
_io->panner().set_linked (!_io->panner().linked());
|
_io->panner().set_linked (!_io->panner().linked());
|
||||||
}
|
}
|
||||||
|
@ -328,6 +327,7 @@ PannerUI::panner_changed ()
|
||||||
{
|
{
|
||||||
ENSURE_GUI_THREAD (mem_fun(*this, &PannerUI::panner_changed));
|
ENSURE_GUI_THREAD (mem_fun(*this, &PannerUI::panner_changed));
|
||||||
setup_pan ();
|
setup_pan ();
|
||||||
|
pan_changed (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -573,6 +573,7 @@ PannerUI::pan_changed (void *src)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
|
/* bring pan bar state up to date */
|
||||||
update_pan_bars (false);
|
update_pan_bars (false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -806,7 +807,7 @@ PannerUI::pan_automation_state_changed ()
|
||||||
pan_watching.disconnect();
|
pan_watching.disconnect();
|
||||||
|
|
||||||
if (x) {
|
if (x) {
|
||||||
pan_watching = ARDOUR_UI::RapidScreenUpdate.connect (mem_fun (*this, &PannerUI::effective_pan_display));
|
pan_watching = ARDOUR_UI::RapidScreenUpdate.connect (mem_fun (*this, &PannerUI::effective_pan_display));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -458,7 +458,7 @@ PluginEqGui::plot_impulse_phase(Gtk::Widget *w, cairo_t *cr)
|
||||||
float avgY = 0.0;
|
float avgY = 0.0;
|
||||||
int avgNum = 0;
|
int avgNum = 0;
|
||||||
|
|
||||||
float width = w->get_width();
|
// float width = w->get_width();
|
||||||
float height = w->get_height();
|
float height = w->get_height();
|
||||||
|
|
||||||
cairo_set_source_rgba(cr, 0.95, 0.3, 0.2, 1.0);
|
cairo_set_source_rgba(cr, 0.95, 0.3, 0.2, 1.0);
|
||||||
|
@ -508,7 +508,7 @@ PluginEqGui::draw_scales_power(Gtk::Widget *w, cairo_t *cr)
|
||||||
|
|
||||||
cairo_font_extents_t extents;
|
cairo_font_extents_t extents;
|
||||||
cairo_font_extents(cr, &extents);
|
cairo_font_extents(cr, &extents);
|
||||||
float fontXOffset = extents.descent + 1.0;
|
// float fontXOffset = extents.descent + 1.0;
|
||||||
|
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
|
||||||
|
@ -607,7 +607,7 @@ PluginEqGui::plot_impulse_amplitude(Gtk::Widget *w, cairo_t *cr)
|
||||||
float avgY = 0.0;
|
float avgY = 0.0;
|
||||||
int avgNum = 0;
|
int avgNum = 0;
|
||||||
|
|
||||||
float width = w->get_width();
|
// float width = w->get_width();
|
||||||
float height = w->get_height();
|
float height = w->get_height();
|
||||||
|
|
||||||
cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
|
cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
|
||||||
|
@ -656,7 +656,7 @@ PluginEqGui::plot_signal_amplitude_difference(Gtk::Widget *w, cairo_t *cr)
|
||||||
float avgY = 0.0;
|
float avgY = 0.0;
|
||||||
int avgNum = 0;
|
int avgNum = 0;
|
||||||
|
|
||||||
float width = w->get_width();
|
// float width = w->get_width();
|
||||||
float height = w->get_height();
|
float height = w->get_height();
|
||||||
|
|
||||||
cairo_set_source_rgb(cr, 0.0, 1.0, 0.0);
|
cairo_set_source_rgb(cr, 0.0, 1.0, 0.0);
|
||||||
|
|
|
@ -46,6 +46,7 @@ class PluginSelector : public ArdourDialog
|
||||||
void on_show ();
|
void on_show ();
|
||||||
|
|
||||||
Gtk::Menu& plugin_menu ();
|
Gtk::Menu& plugin_menu ();
|
||||||
|
void show_manager ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PluginInterestedObject* interested_object;
|
PluginInterestedObject* interested_object;
|
||||||
|
@ -129,7 +130,6 @@ class PluginSelector : public ArdourDialog
|
||||||
|
|
||||||
void plugin_chosen_from_menu (const ARDOUR::PluginInfoPtr&);
|
void plugin_chosen_from_menu (const ARDOUR::PluginInfoPtr&);
|
||||||
Gtk::Menu* _menu;
|
Gtk::Menu* _menu;
|
||||||
void show_manager ();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __ardour_plugin_selector_h__
|
#endif // __ardour_plugin_selector_h__
|
||||||
|
|
|
@ -183,6 +183,22 @@ PluginUIWindow::on_leave_notify_event (GdkEventCrossing *ev)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
PluginUIWindow::on_focus_in_event (GdkEventFocus *ev)
|
||||||
|
{
|
||||||
|
Window::on_focus_in_event (ev);
|
||||||
|
//Keyboard::the_keyboard().magic_widget_grab_focus ();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
PluginUIWindow::on_focus_out_event (GdkEventFocus *ev)
|
||||||
|
{
|
||||||
|
Window::on_focus_out_event (ev);
|
||||||
|
//Keyboard::the_keyboard().magic_widget_drop_focus ();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PluginUIWindow::on_show ()
|
PluginUIWindow::on_show ()
|
||||||
{
|
{
|
||||||
|
@ -295,10 +311,6 @@ PluginUIWindow::create_lv2_editor(boost::shared_ptr<PluginInsert> insert)
|
||||||
bool
|
bool
|
||||||
PluginUIWindow::on_key_press_event (GdkEventKey* event)
|
PluginUIWindow::on_key_press_event (GdkEventKey* event)
|
||||||
{
|
{
|
||||||
if (non_gtk_gui) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!key_press_focus_accelerator_handler (*this, event)) {
|
if (!key_press_focus_accelerator_handler (*this, event)) {
|
||||||
return PublicEditor::instance().on_key_press_event(event);
|
return PublicEditor::instance().on_key_press_event(event);
|
||||||
} else {
|
} else {
|
||||||
|
@ -347,6 +359,20 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
|
||||||
|
|
||||||
bypass_button.set_name ("PluginBypassButton");
|
bypass_button.set_name ("PluginBypassButton");
|
||||||
bypass_button.signal_toggled().connect (mem_fun(*this, &PlugUIBase::bypass_toggled));
|
bypass_button.signal_toggled().connect (mem_fun(*this, &PlugUIBase::bypass_toggled));
|
||||||
|
focus_button.add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
|
||||||
|
|
||||||
|
focus_button.signal_button_release_event().connect (mem_fun(*this, &PlugUIBase::focus_toggled));
|
||||||
|
focus_button.add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
|
||||||
|
|
||||||
|
/* these images are not managed, so that we can remove them at will */
|
||||||
|
|
||||||
|
focus_out_image = new Image (get_icon (X_("computer_keyboard")));
|
||||||
|
focus_in_image = new Image (get_icon (X_("computer_keyboard_active")));
|
||||||
|
|
||||||
|
focus_button.add (*focus_out_image);
|
||||||
|
|
||||||
|
ARDOUR_UI::instance()->set_tip (&focus_button, _("Click to focus all keyboard events on this plugin window"), "");
|
||||||
|
ARDOUR_UI::instance()->set_tip (&bypass_button, _("Click to enable/disable this plugin"), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -376,6 +402,7 @@ PlugUIBase::save_plugin_setting ()
|
||||||
prompter.set_prompt(_("Name of New Preset:"));
|
prompter.set_prompt(_("Name of New Preset:"));
|
||||||
prompter.add_button (Gtk::Stock::ADD, Gtk::RESPONSE_ACCEPT);
|
prompter.add_button (Gtk::Stock::ADD, Gtk::RESPONSE_ACCEPT);
|
||||||
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
|
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
|
||||||
|
prompter.set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY);
|
||||||
|
|
||||||
prompter.show_all();
|
prompter.show_all();
|
||||||
|
|
||||||
|
@ -403,14 +430,29 @@ PlugUIBase::bypass_toggled ()
|
||||||
|
|
||||||
if ((x = bypass_button.get_active()) == insert->active()) {
|
if ((x = bypass_button.get_active()) == insert->active()) {
|
||||||
insert->set_active (!x);
|
insert->set_active (!x);
|
||||||
if (insert->active()) {
|
|
||||||
bypass_button.set_label (_("Bypass"));
|
|
||||||
} else {
|
|
||||||
bypass_button.set_label (_("Active"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
PlugUIBase::focus_toggled (GdkEventButton* ev)
|
||||||
|
{
|
||||||
|
if (Keyboard::the_keyboard().some_magic_widget_has_focus()) {
|
||||||
|
Keyboard::the_keyboard().magic_widget_drop_focus();
|
||||||
|
focus_button.remove ();
|
||||||
|
focus_button.add (*focus_out_image);
|
||||||
|
focus_out_image->show ();
|
||||||
|
ARDOUR_UI::instance()->set_tip (&focus_button, _("Click to focus all keyboard events on this plugin window"), "");
|
||||||
|
} else {
|
||||||
|
Keyboard::the_keyboard().magic_widget_grab_focus();
|
||||||
|
focus_button.remove ();
|
||||||
|
focus_button.add (*focus_in_image);
|
||||||
|
focus_in_image->show ();
|
||||||
|
ARDOUR_UI::instance()->set_tip (&focus_button, _("Click to remove keyboard focus from this plugin window"), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PlugUIBase::update_presets ()
|
PlugUIBase::update_presets ()
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,6 +34,8 @@
|
||||||
#include <gtkmm/scrolledwindow.h>
|
#include <gtkmm/scrolledwindow.h>
|
||||||
#include <gtkmm/label.h>
|
#include <gtkmm/label.h>
|
||||||
#include <gtkmm/menu.h>
|
#include <gtkmm/menu.h>
|
||||||
|
#include <gtkmm/image.h>
|
||||||
|
#include <gtkmm/adjustment.h>
|
||||||
#include <gtkmm/togglebutton.h>
|
#include <gtkmm/togglebutton.h>
|
||||||
#include <gtkmm/socket.h>
|
#include <gtkmm/socket.h>
|
||||||
#include <gtkmm/comboboxtext.h>
|
#include <gtkmm/comboboxtext.h>
|
||||||
|
@ -87,11 +89,16 @@ class PlugUIBase : public virtual sigc::trackable
|
||||||
Gtk::ComboBoxText preset_combo;
|
Gtk::ComboBoxText preset_combo;
|
||||||
Gtk::Button save_button;
|
Gtk::Button save_button;
|
||||||
Gtk::ToggleButton bypass_button;
|
Gtk::ToggleButton bypass_button;
|
||||||
|
Gtk::EventBox focus_button;
|
||||||
|
|
||||||
LatencyGUI latency_gui;
|
LatencyGUI latency_gui;
|
||||||
|
|
||||||
|
Gtk::Image* focus_out_image;
|
||||||
|
Gtk::Image* focus_in_image;
|
||||||
|
|
||||||
void setting_selected();
|
void setting_selected();
|
||||||
void save_plugin_setting (void);
|
void save_plugin_setting (void);
|
||||||
|
bool focus_toggled(GdkEventButton*);
|
||||||
void bypass_toggled();
|
void bypass_toggled();
|
||||||
void processor_active_changed (boost::weak_ptr<ARDOUR::Processor> p);
|
void processor_active_changed (boost::weak_ptr<ARDOUR::Processor> p);
|
||||||
};
|
};
|
||||||
|
@ -223,6 +230,8 @@ class PluginUIWindow : public Gtk::Window
|
||||||
|
|
||||||
bool on_enter_notify_event (GdkEventCrossing*);
|
bool on_enter_notify_event (GdkEventCrossing*);
|
||||||
bool on_leave_notify_event (GdkEventCrossing*);
|
bool on_leave_notify_event (GdkEventCrossing*);
|
||||||
|
bool on_focus_in_event (GdkEventFocus*);
|
||||||
|
bool on_focus_out_event (GdkEventFocus*);
|
||||||
bool on_key_press_event (GdkEventKey*);
|
bool on_key_press_event (GdkEventKey*);
|
||||||
bool on_key_release_event (GdkEventKey*);
|
bool on_key_release_event (GdkEventKey*);
|
||||||
void on_show ();
|
void on_show ();
|
||||||
|
|
12995
gtk2_ardour/po/de_DE.po
12995
gtk2_ardour/po/de_DE.po
File diff suppressed because it is too large
Load Diff
|
@ -120,7 +120,7 @@ ProcessorBox::ProcessorBox (Placement pcmnt, Session& sess, PluginSelector &plug
|
||||||
processor_display.get_column(0)->set_sizing(TREE_VIEW_COLUMN_FIXED);
|
processor_display.get_column(0)->set_sizing(TREE_VIEW_COLUMN_FIXED);
|
||||||
processor_display.get_column(0)->set_fixed_width(48);
|
processor_display.get_column(0)->set_fixed_width(48);
|
||||||
processor_display.add_object_drag (columns.processor.index(), "processors");
|
processor_display.add_object_drag (columns.processor.index(), "processors");
|
||||||
processor_display.signal_object_drop.connect (mem_fun (*this, &ProcessorBox::object_drop));
|
processor_display.signal_drop.connect (mem_fun (*this, &ProcessorBox::object_drop));
|
||||||
|
|
||||||
TreeViewColumn* name_col = processor_display.get_column(0);
|
TreeViewColumn* name_col = processor_display.get_column(0);
|
||||||
CellRendererText* renderer = dynamic_cast<CellRendererText*>(processor_display.get_column_cell_renderer (0));
|
CellRendererText* renderer = dynamic_cast<CellRendererText*>(processor_display.get_column_cell_renderer (0));
|
||||||
|
@ -167,22 +167,11 @@ ProcessorBox::route_going_away ()
|
||||||
no_processor_redisplay = true;
|
no_processor_redisplay = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ProcessorBox::object_drop (string type, uint32_t cnt, const boost::shared_ptr<Processor>* ptr)
|
ProcessorBox::object_drop (const list<boost::shared_ptr<Processor> >& procs)
|
||||||
{
|
{
|
||||||
if (type != "processors" || cnt == 0 || !ptr) {
|
paste_processor_list (procs);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* do something with the dropped processors */
|
|
||||||
|
|
||||||
list<boost::shared_ptr<Processor> > processors;
|
|
||||||
|
|
||||||
for (uint32_t n = 0; n < cnt; ++n) {
|
|
||||||
processors.push_back (ptr[n]);
|
|
||||||
}
|
|
||||||
|
|
||||||
paste_processor_list (processors);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -310,8 +299,14 @@ ProcessorBox::processor_button_press_event (GdkEventButton *ev)
|
||||||
|
|
||||||
// this is purely informational but necessary
|
// this is purely informational but necessary
|
||||||
ProcessorSelected (processor); // emit
|
ProcessorSelected (processor); // emit
|
||||||
|
|
||||||
|
} else if (!processor && ev->button == 1 && ev->type == GDK_2BUTTON_PRESS) {
|
||||||
|
|
||||||
|
choose_plugin ();
|
||||||
|
_plugin_selector.show_manager ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -343,7 +338,7 @@ ProcessorBox::processor_button_release_event (GdkEventButton *ev)
|
||||||
show_processor_menu(ev->time);
|
show_processor_menu(ev->time);
|
||||||
ret = true;
|
ret = true;
|
||||||
|
|
||||||
} else if (processor && (ev->button == 2) && (Keyboard::no_modifier_keys_pressed (ev) && ((ev->state & Gdk::BUTTON2_MASK) == Gdk::BUTTON2_MASK))) {
|
} else if (processor && Keyboard::is_button2_event (ev) && (Keyboard::no_modifier_keys_pressed (ev) && ((ev->state & Gdk::BUTTON2_MASK) == Gdk::BUTTON2_MASK))) {
|
||||||
|
|
||||||
/* button2-click with no modifiers */
|
/* button2-click with no modifiers */
|
||||||
|
|
||||||
|
@ -400,6 +395,10 @@ ProcessorBox::use_plugins (const SelectedPlugins& plugins)
|
||||||
|
|
||||||
Route::ProcessorStreams err_streams;
|
Route::ProcessorStreams err_streams;
|
||||||
|
|
||||||
|
if (Config->get_new_plugins_active()) {
|
||||||
|
processor->set_active (true);
|
||||||
|
}
|
||||||
|
|
||||||
if (_route->add_processor (processor, &err_streams)) {
|
if (_route->add_processor (processor, &err_streams)) {
|
||||||
weird_plugin_dialog (**p, err_streams, _route);
|
weird_plugin_dialog (**p, err_streams, _route);
|
||||||
// XXX SHAREDPTR delete plugin here .. do we even need to care?
|
// XXX SHAREDPTR delete plugin here .. do we even need to care?
|
||||||
|
@ -538,6 +537,9 @@ ProcessorBox::send_io_finished (IOSelector::Result r, boost::weak_ptr<Processor>
|
||||||
|
|
||||||
case IOSelector::Accepted:
|
case IOSelector::Accepted:
|
||||||
_route->add_processor (processor);
|
_route->add_processor (processor);
|
||||||
|
if (Profile->get_sae()) {
|
||||||
|
processor->set_active (true);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -775,9 +777,10 @@ ProcessorBox::cut_processors ()
|
||||||
|
|
||||||
no_processor_redisplay = true;
|
no_processor_redisplay = true;
|
||||||
for (vector<boost::shared_ptr<Processor> >::iterator i = to_be_removed.begin(); i != to_be_removed.end(); ++i) {
|
for (vector<boost::shared_ptr<Processor> >::iterator i = to_be_removed.begin(); i != to_be_removed.end(); ++i) {
|
||||||
// Do not cut inserts or sends
|
// Do not cut inserts
|
||||||
|
if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0 ||
|
||||||
|
(boost::dynamic_pointer_cast<Send>((*i)) != 0)) {
|
||||||
|
|
||||||
if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0) {
|
|
||||||
void* gui = (*i)->get_gui ();
|
void* gui = (*i)->get_gui ();
|
||||||
|
|
||||||
if (gui) {
|
if (gui) {
|
||||||
|
@ -814,8 +817,9 @@ ProcessorBox::copy_processors ()
|
||||||
}
|
}
|
||||||
|
|
||||||
for (vector<boost::shared_ptr<Processor> >::iterator i = to_be_copied.begin(); i != to_be_copied.end(); ++i) {
|
for (vector<boost::shared_ptr<Processor> >::iterator i = to_be_copied.begin(); i != to_be_copied.end(); ++i) {
|
||||||
// Do not copy processors or sends
|
// Do not copy inserts
|
||||||
if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0) {
|
if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0 ||
|
||||||
|
(boost::dynamic_pointer_cast<Send>((*i)) != 0)) {
|
||||||
node->add_child_nocopy ((*i)->get_state());
|
node->add_child_nocopy ((*i)->get_state());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -905,11 +909,11 @@ ProcessorBox::paste_processors ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ProcessorBox::paste_processor_list (list<boost::shared_ptr<Processor> >& processors)
|
ProcessorBox::paste_processor_list (const list<boost::shared_ptr<Processor> >& processors)
|
||||||
{
|
{
|
||||||
list<boost::shared_ptr<Processor> > copies;
|
list<boost::shared_ptr<Processor> > copies;
|
||||||
|
|
||||||
for (list<boost::shared_ptr<Processor> >::iterator i = processors.begin(); i != processors.end(); ++i) {
|
for (list<boost::shared_ptr<Processor> >::const_iterator i = processors.begin(); i != processors.end(); ++i) {
|
||||||
|
|
||||||
boost::shared_ptr<Processor> copy = Processor::clone (*i);
|
boost::shared_ptr<Processor> copy = Processor::clone (*i);
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue