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:
Paul Davis 2008-12-12 14:43:24 +00:00
parent 30daaebaa2
commit bc89fe0147
252 changed files with 28174 additions and 14382 deletions

View File

@ -1,2 +0,0 @@
Makefile.in
Makefile

View File

@ -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

View File

@ -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

View File

@ -1,7 +0,0 @@
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Full information on building Ardour can be found at:
http://ardour.org/building
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

View File

@ -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 минут.

View File

@ -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!

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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" выводит список
доступных ключей программы.

View File

@ -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"

View File

@ -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
View File

@ -1,5 +1,3 @@
Please see the DOCUMENTATION directory.
If you plan to compile ardour from scratch, BUILD is required reading.
Please see the Ardour web site at http://ardour.org/ for all documentation.

View File

@ -49,6 +49,7 @@ opts.AddOptions(
BoolOption('NLS', 'Set to turn on i18n support', 1),
PathOption('PREFIX', 'Set the install "prefix"', '/usr/local'),
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('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),
@ -285,9 +286,9 @@ def create_stored_revision (target = None, source = None, env = None):
print "Using packaged svn revision"
return
else:
print "Your source does not include revision information."
print "Please check out the code from a repository or use a properly packaged version!"
sys.exit (-1)
if not os.path.exists('libs/ardour/ardour/svn_revision.h'):
print "This release of ardour is missing libs/ardour/ardour/svn_revision.h. Blame the packager."
sys.exit (-1)
try:
text = "#include <ardour/svn_revision.h>\n"
@ -605,6 +606,9 @@ if env['LV2']:
else:
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'].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
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' :
@ -869,15 +879,15 @@ if env['LIBLO']:
def prep_libcheck(topenv, libinfo):
if topenv['IS_OSX']:
#
# rationale: GTK-Quartz uses jhbuild and installs to $HOME/gtk/inst by default.
# All libraries needed should be built against this location
# rationale: GTK-Quartz uses jhbuild and installs to ~/gtk/inst by default.
# All libraries needed should be built against this location
if topenv['GTKOSX']:
GTKROOT = os.path.expanduser ('~/gtk/inst')
libinfo.Append(CPPPATH= GTKROOT + "/include", LIBPATH= 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")
GTKROOT = os.path.expanduser ('~/gtk/inst')
libinfo.Append(CPPPATH= GTKROOT + "/include", LIBPATH= GTKROOT + "/lib")
libinfo.Append(CXXFLAGS="-I" + GTKROOT + "/include", LINKFLAGS="-L" + GTKROOT + "/lib")
prep_libcheck(env, env)
@ -934,6 +944,45 @@ else:
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)
libraries['boost'] = LibraryInfo ()
@ -1040,6 +1089,11 @@ else:
env = conf.Finish()
if env['GTKOSX']:
clearlooks_version = 'libs/clearlooks-newer'
else:
clearlooks_version = 'libs/clearlooks-older'
if env['SYSLIBS']:
syslibdeps = \
@ -1124,7 +1178,7 @@ if env['SYSLIBS']:
# 'libs/flowcanvas',
'libs/gtkmm2ext',
'gtk2_ardour',
'libs/clearlooks'
clearlooks_version
]
else:
@ -1143,6 +1197,9 @@ else:
libraries['pangomm'] = LibraryInfo(LIBS='pangomm',
LIBPATH='#libs/gtkmm2/pango',
CPPPATH='#libs/gtkmm2/pango')
libraries['cairomm'] = LibraryInfo(LIBS='cairomm',
LIBPATH='#libs/cairomm',
CPPPATH='#libs/cairomm')
libraries['atkmm'] = LibraryInfo(LIBS='atkmm',
LIBPATH='#libs/gtkmm2/atk',
CPPPATH='#libs/gtkmm2/atk')
@ -1206,22 +1263,23 @@ else:
'libs/libgnomecanvasmm',
'libs/gtkmm2ext',
'gtk2_ardour',
'libs/clearlooks',
'libs/cairomm'
'libs/cairomm',
clearlooks_version
]
#
# * always build the LGPL control protocol lib, since we link against it from libardour
# * ditto for generic MIDI
# * tranzport checks whether it should build internally, but we need here so that
# its included in the tarball
# * tranzport & wiimote check whether they should build internally, but we need them here
# so that they are included in the tarball
#
surface_subdirs = [ 'libs/surfaces/control_protocol',
'libs/surfaces/generic_midi',
'libs/surfaces/tranzport',
'libs/surfaces/mackie',
'libs/surfaces/powermate'
'libs/surfaces/powermate',
'libs/surfaces/wiimote'
]
if env['SURFACES']:
@ -1337,6 +1395,21 @@ if not conf.CheckFunc('posix_memalign'):
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
sysrcbuild = env.SubstInFile ('ardour_system.rc','ardour.rc.in', SUBST_DICT = subst_dict)
@ -1369,7 +1442,7 @@ Default (sysrcbuild)
Precious (env['DISTTREE'])
env.Distribute (env['DISTTREE'],
[ 'SConstruct',
[ 'SConstruct',
'COPYING', 'PACKAGER_README', 'README',
'ardour.rc.in',
'tools/config.guess',
@ -1384,12 +1457,10 @@ env.Distribute (env['DISTTREE'],
'icons/icon/ardour_icon_tango_48px_blue.png',
'icons/icon/ardour_icon_tango_48px_red.png'
] +
glob.glob ('DOCUMENTATION/AUTHORS*') +
glob.glob ('DOCUMENTATION/CONTRIBUTORS*') +
glob.glob ('DOCUMENTATION/TRANSLATORS*') +
glob.glob ('DOCUMENTATION/BUILD*') +
glob.glob ('DOCUMENTATION/FAQ*') +
glob.glob ('DOCUMENTATION/README*')
glob.glob ('ardour.1*') +
glob.glob ('libs/clearlooks-newer/*.c') +
glob.glob ('libs/clearlooks-newer/*.h') +
glob.glob ('libs/clearlooks-newer/SConscript')
)
srcdist = env.Tarball(env['TARBALL'], [ env['DISTTREE'], the_revision ])

View File

@ -39,13 +39,33 @@
<Option name="periodic-safety-backups" value="1"/>
<Option name="periodic-safety-backup-interval" value="120"/>
<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="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>
<extra>
<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"/>
<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>
</Ardour>

View File

@ -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")

View File

@ -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")

View File

@ -4,9 +4,9 @@
;
;; punctuation
(gtk_accel_path "<Actions>/Editor/center-playhead" "Escape")
(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>/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-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/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/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-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
@ -40,25 +37,26 @@
(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>/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>/Editor/set-fade-out-length" "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/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/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>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>/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/insert-region" "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>/Main/Open" "<%PRIMARY%>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")
;; MITTELZEILE
(gtk_accel_path "<Actions>/Editor/trim-front" "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>/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")
@ -86,25 +89,27 @@
(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/zoom-to-region" "y")
(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/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/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/mute-unmute-region" "m")
@ -116,26 +121,35 @@
(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" "<%TERTIARY%>End")
(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%><%PRIMARY%>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" "<%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-prev-route" "uparrow")
@ -152,37 +166,50 @@
(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/jump-backward-to-mark" "<%PRIMARY%>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/jump-forward-to-mark" "<%PRIMARY%>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>/Common/ToggleMaximalEditor" "F11")
(gtk_accel_path "<Actions>/Editor/select-all" "F14")
(gtk_accel_path "<Actions>/Editor/invert-selection" "F15")
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "F16")
; (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/ToggleAutoReturn" "4")
(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "9")
(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")
;;
@ -246,7 +273,6 @@
; (gtk_accel_path "<Actions>/Editor/View" "")
; (gtk_accel_path "<Actions>/Editor/ZoomFocus" "")
; (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-previous-region-sync" "")
; (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-thirds" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-thirtyseconds" "")
; (gtk_accel_path "<Actions>/Transport/PlaySelection" "")
; (gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "")
; (gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "")
; (gtk_accel_path "<Actions>/Transport/Playwion" "")
; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
@ -384,19 +410,19 @@
; (gtk_accel_path "<Actions>/options/UseMMC" "")
; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
; (gtk_accel_path "<Actions>/processormenu/activate" "")
; (gtk_accel_path "<Actions>/processormenu/activate_all" "")
; (gtk_accel_path "<Actions>/processormenu/clear" "")
; (gtk_accel_path "<Actions>/processormenu/copy" "")
; (gtk_accel_path "<Actions>/processormenu/cut" "")
; (gtk_accel_path "<Actions>/processormenu/deactivate" "")
; (gtk_accel_path "<Actions>/processormenu/deactivate_all" "")
; (gtk_accel_path "<Actions>/processormenu/deselectall" "<%PRIMARY%><%TERTIARY%>a")
; (gtk_accel_path "<Actions>/processormenu/edit" "")
; (gtk_accel_path "<Actions>/processormenu/newinsert" "")
; (gtk_accel_path "<Actions>/processormenu/newplugin" "")
; (gtk_accel_path "<Actions>/processormenu/newsend" "")
; (gtk_accel_path "<Actions>/processormenu/paste" "")
; (gtk_accel_path "<Actions>/processormenu/rename" "")
; (gtk_accel_path "<Actions>/processormenu/selectall" "")
; (gtk_accel_path "<Actions>/redirectmenu/activate" "")
; (gtk_accel_path "<Actions>/redirectmenu/activate_all" "")
; (gtk_accel_path "<Actions>/redirectmenu/clear" "")
; (gtk_accel_path "<Actions>/redirectmenu/copy" "")
; (gtk_accel_path "<Actions>/redirectmenu/cut" "")
; (gtk_accel_path "<Actions>/redirectmenu/deactivate" "")
; (gtk_accel_path "<Actions>/redirectmenu/deactivate_all" "")
; (gtk_accel_path "<Actions>/redirectmenu/deselectall" "<%PRIMARY%><%TERTIARY%>a")
; (gtk_accel_path "<Actions>/redirectmenu/edit" "")
; (gtk_accel_path "<Actions>/redirectmenu/newinsert" "")
; (gtk_accel_path "<Actions>/redirectmenu/newplugin" "")
; (gtk_accel_path "<Actions>/redirectmenu/newsend" "")
; (gtk_accel_path "<Actions>/redirectmenu/paste" "")
; (gtk_accel_path "<Actions>/redirectmenu/rename" "")
; (gtk_accel_path "<Actions>/redirectmenu/selectall" "")
;(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")

View File

@ -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")

View File

@ -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")

View File

@ -204,6 +204,7 @@ midi_streamview.cc
midi_time_axis.cc
mixer_strip.cc
mixer_ui.cc
nag.cc
new_session_dialog.cc
option_editor.cc
opts.cc
@ -402,8 +403,28 @@ for style in ['', 'BOLD', 'ITALIC']:
key = '%' + key + '%'
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 = { }
@ -436,7 +457,7 @@ else:
keybindings_dict['%LEVEL4%'] = env['WINDOWS_KEY']
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'
src_file = target_file + '.in'
Default (env.SubstInFile (target_file, src_file, SUBST_DICT = keybindings_dict))
@ -455,6 +476,9 @@ Default(ardourdev)
Default(ardoursh)
Default(ardour_dark_theme)
Default(ardour_light_theme)
Default(ardour_dark_sae_theme)
Default(ardour_light_sae_theme)
Default(ardour_menus)
if env['VST']:
Default(ardourlib)
@ -480,12 +504,17 @@ if env['NLS']:
# 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_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'), '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'), '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'), '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
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))
@ -539,12 +568,19 @@ env.Alias ('tarball', env.Distribute (env['DISTTREE'],
'ardour.sh.in',
'ardev_common.sh.in',
'ardev', 'ardbg',
'ardour3_ui_dark.rc.in', 'ardour3_ui_light.rc.in', 'splash.png',
'ardour.menus', 'ardour-sae.menus',
'ardour3_ui_dark.rc.in',
'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',
'ergonomic-us.bindings.in',
'SAE-us.bindings.in',
'SAE-de.bindings.in',
'SAE-us-keypad.bindings.in',
'SAE-us-nokeypad.bindings.in',
'SAE-de-keypad.bindings.in',
'SAE-de-nokeypad.bindings.in',
'ardour3_ui_default.conf',
'editor_xpms',
'ardour2.xml',
@ -556,6 +592,7 @@ env.Alias ('tarball', env.Distribute (env['DISTTREE'],
icon_files +
skipped_files +
audiounit_files +
lv2_files +
gtkosx_files +
x11_files +
freesound_files +

View File

@ -120,52 +120,56 @@ static const gchar * paypal_xpm[] = {
#endif
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_("Nimal Ratnayake"),
N_("Mike Täht"),
N_("John Anderson"),
N_("Marcus Andersson"),
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_("Roland Stigge"),
N_("Hans Fugal"),
N_("Christopher George"),
N_("Jeremy Hall"),
N_("Audun Halland"),
N_("Steve Harris"),
N_("Carl Hetherington"),
N_("Rob Holland"),
N_("Robert Jordens"),
N_("Stefan Kersten"),
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[] = {
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_("Portuguese:\n\tRui Nuno Capela <rncbc@rncbc.org>\n"),
N_("Brazilian Portuguese:\n\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\

View File

@ -4,14 +4,18 @@ cd `dirname "$0"`/..
export ARDOUR_PATH=gtk2_ardour/icons:gtk2_ardour/pixmaps: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 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.
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%

View File

@ -161,6 +161,9 @@
<menuitem action='toggle-fade-in-active'/>
<menuitem action='set-fade-out-length'/>
<menuitem action='toggle-fade-out-active'/>
<separator/>
<menuitem action='toggle-selected-region-fades'/>
<menuitem action='toggle-region-fades'/>
</menu>
<menu action="SelectMenu">
<menuitem action='select-all'/>
@ -172,10 +175,14 @@
<menuitem action='select-all-within-cursors'/>
<menuitem action='select-all-in-punch-range'/>
<menuitem action='select-all-in-loop-range'/>
<separator/>
<menuitem action='select-next-route'/>
<menuitem action='select-prev-route'/>
</menu>
</menu>
<menu action='TrackMenu'>
<menuitem action='remove-track'/>
<menuitem action='AddTrackBus'/>
<menuitem action="move-selected-tracks-up"/>
<menuitem action="move-selected-tracks-down"/>
@ -193,7 +200,6 @@
<menuitem action='logarithmic-waveforms'/>
</menu>
<menuitem action='toggle-track-active'/>
<menuitem action='remove-track'/>
</menu>
<menu action='RegionMenu'>
@ -266,8 +272,8 @@
</menu>
<menu action="WindowMenu">
<menuitem action='goto-editor'/>
<menuitem action='goto-mixer'/>
<menuitem action='toggle-editor-mixer-on-top'/>
<menuitem action='ToggleLocations'/>
<menuitem action='ToggleKeyEditor'/>
<menuitem action='ToggleThemeManager'/>
@ -306,17 +312,16 @@
<menuitem action='edit-at-selected-marker'/>
</menu>
<menu action='KeyMouseActions'>
<menuitem action='select-next-route'/>
<menuitem action='select-prev-route'/>
<menuitem action='focus-on-clock'/>
<menuitem action='GotoZero'/>
<menuitem action='GotoStart'/>
<menuitem action='GotoEnd'/>
<separator/>
<menuitem action='step-mouse-mode'/>
<menuitem action='set-mouse-mode-object'/>
<menuitem action='set-mouse-mode-range'/>
<menuitem action='set-mouse-mode-gain'/>
<menuitem action='set-mouse-mode-zoom'/>
<menuitem action='set-mouse-mode-timefx'/>
<separator/>
<menuitem action='cycle-edit-point'/>
<menuitem action='cycle-edit-point-with-marker'/>
<menuitem action='toggle-edit-mode'/>
@ -331,7 +336,6 @@
</menubar>
<<<<<<< .working
<popup action="RulerMenuPopup">
<menuitem action="toggle-minsec-ruler"/>
<menuitem action="toggle-samples-ruler"/>
@ -345,21 +349,8 @@
</popup>
<popup name='processormenu'>
=======
<popup action="RulerMenuPopup">
<menuitem action="toggle-minsec-ruler"/>
<menuitem action="toggle-samples-ruler"/>
<menuitem action="toggle-bbt-ruler"/>
<menuitem action='delete'/>
<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='newinsert'/>
<menuitem action='newsend'/>
@ -369,7 +360,6 @@
<menuitem action='cut'/>
<menuitem action='copy'/>
<menuitem action='paste'/>
<menuitem action='delete'/>
<separator/>
<menuitem action='rename'/>
<separator/>

View File

@ -10,18 +10,15 @@
<menuitem action='Save'/>
<menuitem action='Snapshot'/>
<menuitem action='SaveTemplate'/>
<menu name='Metadata' action='Metadata'>
<menuitem action='EditMetadata'/>
<menuitem action='ImportMetadata'/>
</menu>
<separator/>
<menuitem action='AddTrackBus'/>
<separator/>
<menuitem action='addExistingAudioFiles'/>
<menuitem action='importFromSession'/>
<separator/>
<menu name='Export' action='Export'>
<menuitem action='ExportAudio'/>
<menuitem action='ExportSession'/>
<menuitem action='ExportSelection'/>
<menuitem action='ExportRangeMarkers'/>
</menu>
<separator/>
<menu name='Cleanup' action='Cleanup'>
@ -29,6 +26,10 @@
<menuitem action='FlushWastebasket'/>
</menu>
<separator/>
#ifdef GTKOSX
<menuitem action='ToggleOptionsEditor'/>
<menuitem action='About'/>
#endif
<menuitem action='Quit'/>
</menu>
@ -59,6 +60,7 @@
<menuitem action='TransitionToReverse'/>
<separator/>
<menu action="MovePlayHeadMenu">
<menuitem action='set-playhead'/>
<menuitem action='playhead-to-edit'/>
@ -85,7 +87,6 @@
<menuitem action='GotoStart'/>
<menuitem action='GotoEnd'/>
<menuitem action='GotoWallClock'/>
</menu>
<menu action="MoveActiveMarkMenu">
@ -194,6 +195,7 @@
<menuitem action='select-prev-route'/>
<menuitem action='brush-at-mouse'/>
<separator/>
<menuitem action='step-mouse-mode'/>
<menuitem action='set-mouse-mode-object'/>
<menuitem action='set-mouse-mode-range'/>
<menuitem action='set-mouse-mode-gain'/>
@ -209,6 +211,10 @@
<separator/>
<menuitem action='break-drag'/>
</menu>
#ifndef GTKOSX
<separator/>
<menuitem action='ToggleOptionsEditor'/>
#endif
</menu>
<menu action='RegionMenu'>
@ -236,6 +242,11 @@
<menuitem action='duplicate-region'/>
<menuitem action='multi-duplicate-region'/>
<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 action='TrackMenu'>
@ -379,7 +390,6 @@
<menuitem action='ToggleMaximalEditor'/>
<menuitem action='show-editor-mixer'/>
<menuitem action='show-editor-list'/>
<menuitem action='ToggleMeasureVisibility'/>
<menuitem action='toggle-waveform-visible'/>
<menuitem action='ToggleWaveformsWhileRecording'/>
@ -406,11 +416,10 @@
<separator/>
<menuitem action='goto-editor'/>
<menuitem action='goto-mixer'/>
<menuitem action='ToggleOptionsEditor'/>
<menuitem action='toggle-editor-mixer-on-top'/>
<menuitem action='ToggleInspector'/>
<menuitem action='ToggleLocations'/>
<menuitem action='ToggleKeyEditor'/>
<menuitem action='ToggleBundleManager'/>
<menuitem action='ToggleThemeManager'/>
<menuitem action='ToggleBigClock'/>
<menuitem action='toggle-rhythm-ferret'/>
@ -432,7 +441,6 @@
</menu>
<menu action='SyncMenu'>
<menuitem action='SendMTC'/>
<menuitem action='SendMidiClock'/>
<menuitem action='SendMMC'/>
<menuitem action='UseMMC'/>
</menu>
@ -513,6 +521,7 @@
<menuitem action='SoloInPlace'/>
<menuitem action='SoloViaBus'/>
<menuitem action='ShowSoloMutes'/>
<menuitem action='SoloMuteOverride'/>
</menu>
<menu action='Crossfades'>
<menuitem action='toggle-xfades-active'/>
@ -539,6 +548,7 @@
<menu action='MiscOptions'>
<menuitem action='UseOSC'/>
<menuitem action='StopPluginsWithTransport'/>
<menuitem action='NewPluginsActive'/>
<menuitem action='DoNotRunPluginsWhileRecording'/>
<menuitem action='LatchedRecordEnable'/>
<menuitem action='RegionEquivalentsOverlap'/>
@ -551,9 +561,9 @@
<menuitem action='PrimaryClockDeltaEditCursor'/>
<menuitem action='SecondaryClockDeltaEditCursor'/>
<menuitem action='OnlyCopyImportedFiles'/>
<menuitem action='ShowTrackMeters'/>
<menuitem action='DefaultNarrowMS'/>
<menuitem action='link-region-and-track-selection'/>
<menuitem action='NameNewMarkers'/>
<menuitem action='RubberbandingSnapsToGrid'/>
<menuitem action='AutoAnalyseAudio'/>
<menuitem action='toggle-region-fades'/>
@ -579,7 +589,7 @@
<menuitem action="toggle-loop-punch-ruler"/>
</popup>
<popup name='processormenu'>
<popup name='redirectmenu'>
<menuitem action='newplugin'/>
<menuitem action='newinsert'/>
<menuitem action='newsend'/>

View File

@ -18,6 +18,25 @@ if [ "$MLOCK_LIMIT" != "unlimited" ]; then
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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,12 +2,13 @@
<Ardour>
<Canvas>
<Option name="active crossfade" value="e8ed3d77"/>
<Option name="audio bus base" value="dbd1ea68"/>
<Option name="audio track base" value="c6d3d868"/>
<Option name="audio bus base" value="abe1aa68"/>
<Option name="audio master bus base" value="ebb1b168"/>
<Option name="audio track base" value="c3c3c868"/>
<Option name="automation line" value="44bc59ff"/>
<Option name="automation track fill" value="a0a0ce68"/>
<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="control point fill" value="000000ff"/>
<Option name="control point outline" value="000000ff"/>
@ -42,13 +43,13 @@
<Option name="location punch" value="7c3a3aff"/>
<Option name="location range" value="497a59ff"/>
<Option name="marker bar separator" value="30303088"/>
<Option name="markerbar" value="9898a3ff"/>
<Option name="markerbar" value="9898a3a0"/>
<Option name="MarkerDragLine" value="004f00f9"/>
<Option name="marker label" value="000000ff"/>
<Option name="MarkerTrack" value="ddddd8ff"/>
<Option name="MeasureLineBar" value="8c8c988c"/>
<Option name="MeasureLineBeat" value="72727266"/>
<Option name="meterbar" value="666672ff"/>
<Option name="meterbar" value="666672a0"/>
<Option name="MeterColorBase" value="0000ffff"/>
<Option name="MeterColorClip" value="ff0000ff"/>
<Option name="MeterColorMid" value="73f9baff"/>
@ -63,7 +64,7 @@
<Option name="PunchLine" value="a80000ff"/>
<Option name="RangeDragBarRect" value="969696c6"/>
<Option name="RangeDragRect" value="82c696c6"/>
<Option name="rangemarker bar" value="7f7f8cff"/>
<Option name="rangemarker bar" value="7f7f8ca0"/>
<Option name="RecordingRect" value="e5c6c6ff"/>
<Option name="region base" value="99a7b584"/>
<Option name="RubberBandRect" value="c6c6c659"/>
@ -72,16 +73,19 @@
<Option name="selected region base" value="130505ff"/>
<Option name="selected waveform fill" value="e6e6fac8"/>
<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="Selection" value="636363b2"/>
<Option name="tempo bar" value="72727fff"/>
<Option name="tempo bar" value="72727fa0"/>
<Option name="TempoMarker" value="f2425bff"/>
<Option name="TimeAxisFrame" value="000000cb"/>
<Option name="time-stretch-fill" value="e2b5b596"/>
<Option name="time-stretch-outline" value="63636396"/>
<Option name="TransportDragRect" value="969696c6"/>
<Option name="TransportLoopRect" value="1e7728f9"/>
<Option name="TransportMarkerBar" value="8c8c96ff"/>
<Option name="TransportMarkerBar" value="8c8c96a0"/>
<Option name="TransportPunchRect" value="6d2828e5"/>
<Option name="TrimHandleLocked" value="ea0f0f28"/>
<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

View File

@ -18,6 +18,7 @@
*/
#include <iostream>
#include <sigc++/bind.h>
#include <gtkmm2ext/doi.h>
@ -25,6 +26,13 @@
#include "keyboard.h"
#include "ardour_ui.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)
: Dialog (title, modal, use_seperator)
@ -60,6 +68,7 @@ ArdourDialog::on_leave_notify_event (GdkEventCrossing *ev)
void
ArdourDialog::on_unmap ()
{
Keyboard::the_keyboard().leave_window (0, this);
Dialog::on_unmap ();
}
@ -77,9 +86,17 @@ ArdourDialog::on_show ()
Dialog::on_show ();
}
void ArdourDialog::init ()
void
ArdourDialog::init ()
{
session = 0;
set_type_hint(Gdk::WINDOW_TYPE_HINT_DIALOG);
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);
}

View File

@ -40,6 +40,9 @@ class ArdourDialog : public Gtk::Dialog
ArdourDialog (Gtk::Window& parent, std::string title, bool modal = false, bool use_separator = false);
~ArdourDialog();
static int close_all_current_dialogs (int response);
bool on_key_press_event (GdkEventKey *);
bool on_enter_notify_event (GdkEventCrossing*);
bool on_leave_notify_event (GdkEventCrossing*);
void on_unmap ();
@ -55,8 +58,12 @@ class ArdourDialog : public Gtk::Dialog
set_session (0);
}
static void close_all_dialogs () { CloseAllDialogs(); }
private:
void init ();
static sigc::signal<void> CloseAllDialogs;
};
#endif // __ardour_dialog_h__

View File

@ -211,6 +211,15 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
session_loaded = false;
last_speed_displayed = -1.0f;
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;
@ -352,11 +361,12 @@ ARDOUR_UI::post_engine ()
/* set default clock modes */
if (Profile->get_sae()) {
primary_clock.set_mode (AudioClock::MinSec);
primary_clock.set_mode (AudioClock::BBT);
secondary_clock.set_mode (AudioClock::MinSec);
} else {
primary_clock.set_mode (AudioClock::SMPTE);
secondary_clock.set_mode (AudioClock::BBT);
}
secondary_clock.set_mode (AudioClock::BBT);
/* start the time-of-day-clock */
@ -640,7 +650,7 @@ void
ARDOUR_UI::startup ()
{
string name, path;
new_session_dialog = new NewSessionDialog();
bool backend_audio_is_running = EngineControl::engine_running();
@ -762,6 +772,7 @@ If you still wish to quit, please use the\n\n\
session->set_deletion_in_progress ();
}
ArdourDialog::close_all_dialogs ();
engine->stop (true);
save_ardour_state ();
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
ARDOUR_UI::save_template ()
@ -2242,7 +2245,7 @@ ARDOUR_UI::loading_message (const std::string& msg)
splash->message (msg);
flush_pending ();
}
void
ARDOUR_UI::idle_load (const Glib::ustring& path)
{
@ -2255,11 +2258,16 @@ ARDOUR_UI::idle_load (const Glib::ustring& path)
load_session (Glib::path_get_dirname (path), basename_nosuffix (path));
}
} else {
ARDOUR_COMMAND_LINE::session_name = path;
if (new_session_dialog) {
/* make it break out of Dialog::run() and
start again.
*/
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_DELETE_EVENT:
if (!session) {
if (engine && engine->running()) {
engine->stop (true);
}
quit();
}
new_session_dialog->hide ();
@ -2381,7 +2392,7 @@ ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be
if (session_name[0] == '/' ||
(session_name.length() > 2 && session_name[0] == '.' && session_name[1] == '/') ||
(session_name.length() > 3 && session_name[0] == '.' && session_name[1] == '.' && session_name[2] == '/')) {
session_path = Glib::path_get_dirname (session_name);
session_name = Glib::path_get_basename (session_name);
@ -2439,7 +2450,7 @@ ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be
loadit:
new_session_dialog->hide ();
if (load_session (session_path, session_name, template_name)) {
/* force a retry */
response = Gtk::RESPONSE_NONE;
@ -2519,10 +2530,10 @@ ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_na
MessageDialog msg (err.what(),
true,
Gtk::MESSAGE_INFO,
Gtk::BUTTONS_OK_CANCEL);
Gtk::BUTTONS_CLOSE);
msg.set_title (_("Loading Error"));
msg.set_secondary_text (_("Click the OK button to try again."));
msg.set_title (_("Port Registration Error"));
msg.set_secondary_text (_("Click the Close button to try again."));
msg.set_position (Gtk::WIN_POS_CENTER);
pop_back_splash ();
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),
true,
Gtk::MESSAGE_INFO,
Gtk::BUTTONS_OK_CANCEL);
Gtk::BUTTONS_CLOSE);
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);
pop_back_splash ();
msg.present ();
@ -2630,6 +2641,9 @@ ARDOUR_UI::build_session (const Glib::ustring& path, const Glib::ustring& snap_n
connect_to_session (new_session);
session_loaded = true;
new_session->save_state(new_session->name());
return 0;
}
@ -2947,8 +2961,6 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
/* 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 (track) {
session_add_midi_track(count);
@ -2995,10 +3007,17 @@ ARDOUR_UI::editor_settings () const
} else {
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) {
node = new XMLNode (X_("Editor"));
}
return node;
}
@ -3032,13 +3051,17 @@ ARDOUR_UI::halt_on_xrun_message ()
void
ARDOUR_UI::xrun_handler(nframes_t where)
{
if (!session) {
return;
}
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);
}
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 ();
}
}

View File

@ -119,6 +119,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void hide_about ();
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());
bool session_loaded;
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);
static gint hide_and_quit (GdkEventAny *ev, ArdourDialog *);
XMLNode* editor_settings() const;
XMLNode* mixer_settings () const;
XMLNode* keyboard_settings () const;
@ -287,8 +287,10 @@ class ARDOUR_UI : public Gtkmm2ext::UI
Gtk::Tooltips _tooltips;
void goto_editor_window ();
void goto_mixer_window ();
void goto_editor_window ();
void goto_mixer_window ();
void toggle_editor_mixer_on_top ();
bool _mixer_on_top;
Gtk::Table adjuster_table;
Gtk::Frame adjuster_frame;
@ -313,7 +315,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void startup ();
void shutdown ();
void finish();
int ask_about_saving_session (const string & why);
/* periodic safety backup, to be precise */
@ -715,6 +716,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void set_denormal_model (ARDOUR::DenormalModel);
void toggle_sync_order_keys ();
void toggle_new_plugins_active();
void toggle_StopPluginsWithTransport();
void toggle_DoNotRunPluginsWhileRecording();
void toggle_VerifyRemoveLastCapture();
@ -725,6 +727,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void toggle_GainReduceFastTransport();
void toggle_LatchedSolo();
void toggle_ShowSoloMutes();
void toggle_SoloMuteOverride();
void toggle_LatchedRecordEnable ();
void toggle_RegionEquivalentsOverlap ();
void toggle_PrimaryClockDeltaEditCursor ();

View File

@ -192,6 +192,10 @@ ARDOUR_UI::setup_transport ()
transport_tearoff = manage (new TearOff (transport_tearoff_hbox));
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_base.set_name ("TransportBase");

View File

@ -99,6 +99,7 @@ ARDOUR_UI::goto_editor_window ()
editor->show_window ();
editor->present ();
_mixer_on_top = false;
flush_pending ();
}
@ -107,12 +108,30 @@ ARDOUR_UI::goto_mixer_window ()
{
mixer->show_window ();
mixer->present ();
_mixer_on_top = true;
flush_pending ();
}
void
ARDOUR_UI::toggle_editor_mixer_on_top ()
{
if (_mixer_on_top) {
goto_editor_window ();
} else {
goto_mixer_window ();
}
}
gint
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();
return TRUE;
#endif
}

View File

@ -193,7 +193,7 @@ ARDOUR_UI::install_actions ()
common_actions = ActionGroup::create (X_("Common"));
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 */
@ -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-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));
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);
@ -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_("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_("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));
@ -514,6 +516,8 @@ ARDOUR_UI::install_actions ()
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_toggle_action (option_actions, X_("ShowSoloMutes"), _("Show solo muting"), mem_fun (*this, &ARDOUR_UI::toggle_ShowSoloMutes));
ActionManager::session_sensitive_actions.push_back (act);
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));
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));
if (engine->can_request_hardware_monitoring()) {
if (!engine->can_request_hardware_monitoring()) {
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));

View File

@ -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
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);
}
void
ARDOUR_UI::toggle_SoloMuteOverride()
{
ActionManager::toggle_config_state ("options", "SoloMuteOverride", &Configuration::set_solo_mute_override, &Configuration::get_solo_mute_override);
}
void
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);
} else if (PARAM_IS ("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")) {
map_solo_model ();
} 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);
} else if (PARAM_IS ("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")) {
ActionManager::map_some_state ("options", "LatchedRecordEnable", &Configuration::get_latched_record_enable);
} else if (PARAM_IS ("verify-remove-last-capture")) {

View File

@ -1,3 +1,6 @@
#undef Marker
#define Marker FuckYouAppleAndYourLackOfNameSpaces
#include <pbd/error.h>
#include <ardour/audio_unit.h>
#include <ardour/insert.h>
@ -18,6 +21,11 @@
#import <AudioUnit/AUCocoaUIView.h>
#import <CoreAudioKit/AUGenericView.h>
#undef Marker
#include "keyboard.h"
#include "utils.h"
#include "public_editor.h"
#include "i18n.h"
using namespace ARDOUR;
@ -57,15 +65,27 @@ AUPluginUI::AUPluginUI (boost::shared_ptr<PluginInsert> insert)
/* 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_border_width (6);
top_box.pack_end (bypass_button, false, true);
top_box.pack_end (automation_mode_selector, 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);
top_box.pack_end (*v2_box, false, false);
top_box.pack_end (*v1_box, false, false);
set_spacing (6);
pack_start (top_box, false, false);
@ -617,14 +637,16 @@ create_au_gui (boost::shared_ptr<PluginInsert> plugin_insert, VBox** box)
bool
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;
}
bool
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;
}

View File

@ -636,14 +636,19 @@ AudioClock::set_bbt (nframes_t when, bool force)
char buf[16];
BBT_Time bbt;
session->tempo_map().bbt_time (when, bbt);
/* handle a common case */
if (is_duration && when == 0) {
bbt.bars = 0;
bbt.beats = 0;
if (is_duration) {
if (when == 0) {
bbt.bars = 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);
@ -1897,6 +1902,11 @@ AudioClock::bbt_frame_from_display (nframes_t pos) const
any.bbt.beats = atoi (beats_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);
return ret;

View File

@ -47,16 +47,20 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
_region_view (rv),
name_label (_("NAME:")),
audition_button (_("play")),
time_table (3, 2),
start_clock (X_("regionstart"), true, X_("AudioRegionEditorClock"), true),
time_table (5, 2),
position_clock (X_("regionposition"), true, X_("AudioRegionEditorClock"), true),
end_clock (X_("regionend"), true, X_("AudioRegionEditorClock"), true),
length_clock (X_("regionlength"), true, X_("AudioRegionEditorClock"), true, true),
sync_offset_clock (X_("regionsyncoffset"), true, X_("AudioRegionEditorClock"), true, true)
/* 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);
length_clock.set_session (&_session);
sync_offset_clock.set_session (&_session);
start_clock.set_session (&_session);
name_entry.set_name ("AudioRegionEditorEntry");
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_end (top_row_button_hbox, true, true);
start_label.set_name ("AudioRegionEditorLabel");
start_label.set_text (_("START:"));
position_label.set_name ("AudioRegionEditorLabel");
position_label.set_text (_("POSITION:"));
end_label.set_name ("AudioRegionEditorLabel");
end_label.set_text (_("END:"));
length_label.set_name ("AudioRegionEditorLabel");
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_row_spacings (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);
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);
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 (start_clock, 1, 2, 0, 1, Gtk::FILL, Gtk::FILL);
time_table.attach (position_alignment, 0, 1, 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_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_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 (sep1, false, false);
lower_hbox.pack_start (sep2, false, false);
@ -128,7 +146,7 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
show_all();
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));
@ -147,7 +165,8 @@ AudioRegionEditor::region_changed (Change what_changed)
if (what_changed & NameChanged) {
name_changed ();
}
if (what_changed & BoundsChanged) {
if (what_changed & Change (BoundsChanged|StartChanged|Region::SyncOffsetChanged)) {
bounds_changed (what_changed);
}
}
@ -190,7 +209,7 @@ AudioRegionEditor::connect_editor_events ()
{
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));
length_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::length_clock_changed));
@ -199,7 +218,7 @@ AudioRegionEditor::connect_editor_events ()
}
void
AudioRegionEditor::start_clock_changed ()
AudioRegionEditor::position_clock_changed ()
{
_session.begin_reversible_command (_("change region start position"));
@ -207,7 +226,7 @@ AudioRegionEditor::start_clock_changed ()
if (pl) {
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();
_session.add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
@ -276,10 +295,24 @@ AudioRegionEditor::name_changed ()
void
AudioRegionEditor::bounds_changed (Change what_changed)
{
if (what_changed & Change ((PositionChanged|LengthChanged))) {
start_clock.set (_region->position(), true);
if ((what_changed & Change (PositionChanged|LengthChanged)) == Change (PositionChanged|LengthChanged)) {
position_clock.set (_region->position(), true);
end_clock.set (_region->position() + _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);
}
}

View File

@ -74,17 +74,22 @@ class AudioRegionEditor : public RegionEditor
Gtk::Table time_table;
Gtk::Label start_label;
Gtk::Label position_label;
Gtk::Label end_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 length_alignment;
Gtk::Alignment sync_alignment;
Gtk::Alignment start_alignment;
AudioClock start_clock;
AudioClock position_clock;
AudioClock end_clock;
AudioClock length_clock;
AudioClock sync_offset_clock;
AudioClock start_clock;
Gtk::HSeparator sep3;
Gtk::VSeparator sep1;
@ -99,7 +104,7 @@ class AudioRegionEditor : public RegionEditor
void activation ();
void name_entry_changed ();
void start_clock_changed ();
void position_clock_changed ();
void end_clock_changed ();
void length_clock_changed ();

View File

@ -32,6 +32,7 @@
#include <ardour/playlist_templates.h>
#include <ardour/source.h>
#include <ardour/region_factory.h>
#include <ardour/profile.h>
#include "audio_streamview.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));
} else {
region_view = new AudioRegionView (canvas_group, _trackview, region,
_samples_per_unit, region_color);
_samples_per_unit, region_color);
}
break;
case Destructive:
@ -821,9 +822,12 @@ AudioStreamView::color_handler ()
//case cAudioBusBase:
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

View File

@ -377,6 +377,65 @@ AudioTimeAxisView::update_pans (bool show)
++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
AudioTimeAxisView::show_all_automation ()

View File

@ -67,7 +67,6 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
_base_rect (0),
_view (show_regions ? new AutomationStreamView(*this) : NULL),
_name (nom),
height_button (_("h")),
clear_button (_("clear")),
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->property_x1() = 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();
/* 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")))));
height_button.set_name ("TrackSizeButton");
auto_button.set_name ("TrackVisualButton");
clear_button.set_name ("TrackVisualButton");
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();
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(clear_button, _("clear 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 */
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 (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 ();
height_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::height_clicked));
clear_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::clear_clicked));
hide_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::hide_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);
}
void
AutomationTimeAxisView::height_clicked ()
{
popup_size_menu (0);
}
void
AutomationTimeAxisView::clear_clicked ()
{
@ -380,10 +373,9 @@ void
AutomationTimeAxisView::set_height (uint32_t h)
{
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 ();
assert(state_parent);
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 ();
auto_button.show();
height_button.show();
clear_button.show();
hide_button.show_all();
@ -446,15 +437,11 @@ AutomationTimeAxisView::set_height (uint32_t h)
name_hbox.show_all ();
auto_button.hide();
height_button.hide();
clear_button.hide();
hide_button.hide();
}
} else if (h >= hNormal){
auto_button.show();
height_button.show();
clear_button.show();
hide_button.show_all();
} else if (h >= hNormal){
cerr << "track grown, but neither changed_between_small_and_normal nor first_call_to_set_height set!" << endl;
}
if (changed) {

View File

@ -122,7 +122,6 @@ class AutomationTimeAxisView : public TimeAxisView {
bool first_call_to_set_height;
Gtk::Button hide_button;
Gtk::Button height_button;
Gtk::Button clear_button;
Gtk::Button auto_button;
Gtk::Menu* automation_menu;
@ -140,7 +139,6 @@ class AutomationTimeAxisView : public TimeAxisView {
void add_line (boost::shared_ptr<AutomationLine>);
void clear_clicked ();
void height_clicked ();
void hide_clicked ();
void auto_clicked ();

View File

@ -1359,8 +1359,9 @@ gnome_canvas_waveview_render (GnomeCanvasItem *item,
prev_pymax = pymax;
prev_pymin = pymin;
}
}
else if(waveview->filled && rectify) {
} else if (waveview->filled && rectify) {
int prev_pymax = -1;
int last_pymax = -1;
int next_pymax;
@ -1611,11 +1612,10 @@ gnome_canvas_waveview_draw (GnomeCanvasItem *item,
int cache_index;
double zbegin, zend;
gboolean rectify;
double n;
double origin;
double clip_length;
double xoff;
double yoff;
double yoff = 0.0;
double ulx;
double uly;
double lrx;
@ -1748,7 +1748,8 @@ gnome_canvas_waveview_draw (GnomeCanvasItem *item,
yoff = origin - (waveview->half_height * max) + 0.5;
if (n == ulx) {
if (xoff == ulx) {
/* first point */
cairo_move_to (cr, xoff+0.5, yoff);
} else {
cairo_line_to (cr, xoff+0.5, yoff);

View File

@ -1,5 +1,6 @@
CANVAS_VARIABLE(canvasvar_ActiveCrossfade, "active crossfade")
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_AutomationLine, "automation line")
CANVAS_VARIABLE(canvasvar_AutomationTrackFill, "automation track fill")

View File

@ -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;
}

View File

@ -36,6 +36,7 @@
#include <ardour/audiosource.h>
#include <ardour/playlist_templates.h>
#include <ardour/region_factory.h>
#include <ardour/profile.h>
#include <gtkmm2ext/gtk_ui.h>
@ -48,6 +49,7 @@
#include "canvas_impl.h"
#include "simplerect.h"
#include "waveview.h"
#include "actions.h"
using namespace std;
using namespace ARDOUR;
@ -99,6 +101,8 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d
set_name ("CrossfadeEditWindow");
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);
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->set_name ("CrossfadeEditButton");
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_buttons.push_back (pbutton);
@ -219,6 +224,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d
pbutton->add (*pxmap);
pbutton->set_name ("CrossfadeEditButton");
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_buttons.push_back (pbutton);
@ -398,7 +404,7 @@ CrossfadeEditor::point_event (GdkEvent* event, Point* point)
if (Keyboard::is_delete_event (&event->button)) {
fade[current].points.remove (point);
delete point;
}
}
redraw ();
break;
@ -853,58 +859,19 @@ CrossfadeEditor::build_presets ()
fade_out_presets = new Presets;
/* 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.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 ("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));
p->push_back (PresetPoint (0.000000, 0.000000));
p->push_back (PresetPoint (0.166667, 0.166366));
p->push_back (PresetPoint (0.333333, 0.332853));
p->push_back (PresetPoint (0.500000, 0.499459));
p->push_back (PresetPoint (0.666667, 0.666186));
p->push_back (PresetPoint (0.833333, 0.833033));
p->push_back (PresetPoint (1.000000, 1.000000));
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 = new Preset ("S(1)-curve", "crossfade_in_default");
p->push_back (PresetPoint (0, 0));
p->push_back (PresetPoint (0.1, 0.01));
p->push_back (PresetPoint (0.2, 0.03));
@ -912,59 +879,80 @@ CrossfadeEditor::build_presets ()
p->push_back (PresetPoint (0.9, 0.99));
p->push_back (PresetPoint (1, 1));
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 */
// 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 ("crossfade_out_constant");
p = new Preset ("Linear (-6dB cut)", "crossfade_out_dipped");
p->push_back (PresetPoint (0, 1));
p->push_back (PresetPoint (0.228111, 0.988889));
p->push_back (PresetPoint (0.347926, 0.972222));
p->push_back (PresetPoint (0.529954, 0.886111));
p->push_back (PresetPoint (0.753456, 0.658333));
p->push_back (PresetPoint (0.9262673, 0.308333));
p->push_back (PresetPoint (1, 0));
p->push_back (PresetPoint (0.000000, 1.000000));
p->push_back (PresetPoint (0.166667, 0.833033));
p->push_back (PresetPoint (0.333333, 0.666186));
p->push_back (PresetPoint (0.500000, 0.499459));
p->push_back (PresetPoint (0.666667, 0.332853));
p->push_back (PresetPoint (0.833333, 0.166366));
p->push_back (PresetPoint (1.000000, 0.000000));
fade_out_presets->push_back (p);
// p = new Preset ("regout2.xpm");
p = new Preset ("crossfade_out_slow-fade");
p->push_back (PresetPoint (0, 1));
p->push_back (PresetPoint (0.080645, 0.730556));
p->push_back (PresetPoint (0.277778, 0.289256));
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 = new Preset ("S(1)-Curve", "crossfade_out_default");
p->push_back (PresetPoint (0, 1));
p->push_back (PresetPoint (0.1, 0.99));
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 (1, 0));
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
@ -1037,7 +1079,7 @@ CrossfadeEditor::x_coordinate (double& xfract) const
{
xfract = min (1.0, xfract);
xfract = max (0.0, xfract);
return canvas_border + (xfract * effective_width());
}
@ -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;
}

View File

@ -62,15 +62,20 @@ class CrossfadeEditor : public ArdourDialog
};
struct Preset : public list<PresetPoint> {
const char* 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;
static Presets* fade_in_presets;
static Presets* fade_out_presets;
protected:
bool on_key_press_event (GdkEventKey*);
bool on_key_release_event (GdkEventKey*);
private:
boost::shared_ptr<ARDOUR::Crossfade> xfade;

View File

@ -175,7 +175,7 @@ CrossfadeView::redraw_curves ()
}
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) {
fade_in->hide();
@ -190,6 +190,7 @@ CrossfadeView::redraw_curves ()
vec = new float[npoints];
crossfade->fade_in().curve().get_vector (0, crossfade->length(), vec, npoints);
for (int i = 0, pci = 0; i < npoints; ++i) {
Art::Point &p = (*points)[pci++];
p.set_x(i);

View File

@ -369,6 +369,7 @@ Editor::Editor ()
range_marker_drag_rect = 0;
marker_drag_line = 0;
set_midi_edit_mode (MidiEditPencil, true);
_edit_point = EditAtMouse;
set_mouse_mode (MouseObject, true);
frames_per_unit = 2048; /* too early to use reset_zoom () */
@ -944,22 +945,24 @@ Editor::set_entered_track (TimeAxisView* tav)
void
Editor::show_window ()
{
show_all_children ();
if (! is_visible ()) {
show_all ();
/* re-hide editor list if necessary */
editor_list_button_toggled ();
/* re-hide editor list if necessary */
editor_list_button_toggled ();
/* now reset all audio_time_axis heights, because widgets might need
to be re-hidden
*/
TimeAxisView *tv;
/* now reset all audio_time_axis heights, because widgets might need
to be re-hidden
*/
TimeAxisView *tv;
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
tv = (static_cast<TimeAxisView*>(*i));
tv->reset_height ();
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
tv = (static_cast<TimeAxisView*>(*i));
tv->reset_height ();
}
}
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));
cout<< "OSC: Recieved: "<< action_item << endl;
RefPtr<Action> act;
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_point_clock.set_mode(AudioClock::BBT);
edit_point_clock.set_session (session);
zoom_range_clock.set_session (session);
_playlist_selector->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 ();
@ -1338,16 +1351,16 @@ Editor::connect_to_session (Session *t)
redisplay_named_selections ();
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 ();
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
(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 ();
/* don't show master bus in a new session */
@ -1889,10 +1902,11 @@ void
Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> region, Menu_Helpers::MenuList& edit_items)
{
using namespace Menu_Helpers;
Gtk::MenuItem* foo_item;
Menu *region_menu = manage (new Menu);
MenuList& items = region_menu->items();
region_menu->set_name ("ArdourContextMenu");
boost::shared_ptr<AudioRegion> ar;
boost::shared_ptr<MidiRegion> mr;
@ -2031,7 +2045,12 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> regi
/* 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 (SeparatorElem());
@ -2054,7 +2073,15 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> regi
trim_menu->set_name ("ArdourContextMenu");
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)));
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 Punch"), mem_fun(*this, &Editor::trim_region_to_punch)));
@ -2063,6 +2090,10 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> regi
items.push_back (MenuElem (_("Split"), (mem_fun(*this, &Editor::split_region))));
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))));
region_edit_menu_split_multichannel_item = &items.back();
@ -2418,23 +2449,56 @@ Editor::set_state (const XMLNode& node)
_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;
g.base_height = default_height;
x = 1;
y = 1;
xoff = 0;
yoff = 21;
if ((geometry = find_named_node (node, "geometry")) != 0) {
} else {
XMLProperty* prop;
g.base_width = atoi(geometry->property("x-size")->value());
g.base_height = atoi(geometry->property("y-size")->value());
x = atoi(geometry->property("x-pos")->value());
y = atoi(geometry->property("y-pos")->value());
xoff = atoi(geometry->property("x-off")->value());
yoff = atoi(geometry->property("y-off")->value());
if ((prop = geometry->property("x_size")) == 0) {
prop = geometry->property ("x-size");
}
if (prop) {
g.base_width = atoi(prop->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);
@ -2941,7 +3005,7 @@ Editor::setup_toolbar ()
#ifdef GTKOSX
const guint32 FUDGE = 38; // Combo's are stupid - they steal space from the entry for the button
#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
/* Mode Buttons (tool selection) */
@ -2996,7 +3060,9 @@ Editor::setup_toolbar ()
vector<string> edit_mode_strings;
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_selector.set_name ("EditModeSelector");
@ -3010,6 +3076,10 @@ Editor::setup_toolbar ()
mouse_mode_tearoff = manage (new TearOff (*mode_box));
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->tearoff_window()));
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->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->tearoff_window()));
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,
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;
p = (const char *) malloc (txt.length() + 1);
txt.copy ((char *) p, txt.length(), 0);
((char*)p)[txt.length()] = '\0';
while (p)
{
if (*p != '#')
@ -3320,8 +3401,9 @@ Editor::convert_drop_to_paths (vector<ustring>& paths,
p++;
q = p;
while (*q && (*q != '\n') && (*q != '\r'))
while (*q && (*q != '\n') && (*q != '\r')) {
q++;
}
if (q > p)
{
@ -3340,6 +3422,8 @@ Editor::convert_drop_to_paths (vector<ustring>& paths,
p++;
}
free ((void*)p);
if (uris.empty()) {
return -1;
}
@ -3638,7 +3722,11 @@ Editor::cycle_edit_mode ()
{
switch (Config->get_edit_mode()) {
case Slide:
Config->set_edit_mode (Splice);
if (Profile->get_sae()) {
Config->set_edit_mode (Lock);
} else {
Config->set_edit_mode (Splice);
}
break;
case Splice:
Config->set_edit_mode (Lock);
@ -3911,12 +3999,23 @@ Editor::pane_allocation_handler (Allocation &alloc, Paned* which)
static int32_t done;
XMLNode* geometry;
if ((geometry = find_named_node (*node, "geometry")) == 0) {
width = default_width;
height = default_height;
} else {
width = atoi(geometry->property("x-size")->value());
height = atoi(geometry->property("y-size")->value());
width = default_width;
height = default_height;
if ((geometry = find_named_node (*node, "geometry")) != 0) {
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)) {
@ -4594,6 +4693,8 @@ Editor::set_frames_per_unit (double fpu)
void
Editor::post_zoom ()
{
nframes64_t cef = 0;
// convert fpu to frame count
nframes64_t frames = (nframes64_t) floor (frames_per_unit * canvas_width);
@ -4614,9 +4715,16 @@ Editor::post_zoom ()
}
}
ZoomChanged (); /* EMIT_SIGNAL */
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 ();
if (playhead_cursor) {
@ -4663,6 +4771,10 @@ Editor::idle_visual_changer ()
VisualChange::Type p = pending_visual_change.pending;
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) {
set_frames_per_unit (pending_visual_change.frames_per_unit);
@ -4672,25 +4784,34 @@ Editor::idle_visual_changer ()
update_tempo_based_rulers ();
}
if (p & VisualChange::TimeOrigin) {
horizontal_adjustment.set_value (pending_visual_change.time_origin / frames_per_unit);
}
nframes64_t csf=0, cef=0;
nframes64_t current_time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
nframes64_t csf=0, cef=0;
nframes64_t current_time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
if (session) {
csf = session->current_start_frame();
cef = session->current_end_frame();
}
/* if we seek beyond the current end of the canvas, move the end */
if (session) {
csf = session->current_start_frame();
cef = session->current_end_frame();
}
/* if we seek beyond the current end of the canvas, move the end */
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);
}
#ifdef FIX_THIS_FOR_V3
if (last_time_origin == horizontal_adjustment.get_value() ) {
/* changed signal not emitted */
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
pending_visual_change.idle_handler_id = -1;
@ -5016,6 +5137,9 @@ Editor::first_idle ()
for (TrackViewList::iterator t = track_views.begin(); t != track_views.end(); ++t) {
(*t)->first_idle();
}
// first idle adds route children (automation tracks), so we need to redisplay here
redisplay_route_list();
if (dialog) {
delete dialog;
@ -5171,7 +5295,7 @@ Editor::add_to_idle_resize (TimeAxisView* view, uint32_t h)
{
if (resize_idle_id < 0) {
resize_idle_id = g_idle_add (_idle_resizer, this);
}
}
resize_idle_target = h;
@ -5189,6 +5313,7 @@ Editor::idle_resize ()
(*i)->idle_resize (resize_idle_target);
}
pending_resizes.clear();
flush_canvas ();
resize_idle_id = -1;
return false;
}

View File

@ -323,6 +323,7 @@ class Editor : public PublicEditor
void toggle_measure_visibility ();
void toggle_logo_visibility ();
double get_physical_screen_width () const { return physical_screen_width; };
double physical_screen_width;
double physical_screen_height;
@ -342,7 +343,6 @@ class Editor : public PublicEditor
void toggle_region_fades_visible ();
void toggle_selected_region_fades (int dir);
void update_region_fade_visibility ();
void toggle_auto_xfade ();
void toggle_xfades_active ();
void toggle_xfade_visibility ();
@ -649,6 +649,13 @@ class Editor : public PublicEditor
ArdourCanvas::Group* cd_marker_bar_group;
/** 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;
/* The group containing all trackviews. Only scrolled vertically. */
@ -779,6 +786,7 @@ class Editor : public PublicEditor
static const double timebar_height;
guint32 visible_timebars;
gdouble canvas_timebars_vsize;
gdouble get_canvas_timebars_vsize () const { return canvas_timebars_vsize; }
Gtk::Menu *editor_ruler_menu;
ArdourCanvas::SimpleRect* tempo_bar;
@ -899,6 +907,8 @@ class Editor : public PublicEditor
sigc::connection control_scroll_connection;
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; }
double last_trackview_group_vertical_offset;
void tie_vertical_scrolling ();
@ -1138,6 +1148,7 @@ class Editor : public PublicEditor
void toggle_region_mute ();
void toggle_region_lock ();
void toggle_region_opaque ();
void toggle_record_enable ();
void set_region_lock_style (ARDOUR::Region::PositionLockStyle);
void raise_region ();
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 _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 drop_paths_part_two (const 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&);
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_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 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,
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 */
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 *);
static void *_import_thread (void *);
void* import_thread ();
void finish_import ();
/* to support this ... */
@ -1338,6 +1357,7 @@ class Editor : public PublicEditor
void add_location_mark (nframes64_t where);
void add_location_from_audio_region ();
void add_locations_from_audio_region ();
void add_location_from_selection ();
void set_loop_from_selection (bool play);
void set_punch_from_selection ();
@ -1382,6 +1402,7 @@ class Editor : public PublicEditor
double snap_threshold;
void handle_gui_changes (const string &, void *);
bool ignore_gui_changes;
void hide_all_tracks (bool with_select);
@ -1397,6 +1418,8 @@ class Editor : public PublicEditor
Gtk::Menu fade_context_menu;
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_out_grab (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_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_finished_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_selection_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_control_point_grab (ArdourCanvas::Item*, GdkEvent*);
void start_line_grab_from_regionview (ArdourCanvas::Item*, GdkEvent*);
@ -1784,7 +1809,9 @@ public:
ArdourCanvas::SimpleRect* range_marker_drag_rect;
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_preroll_rect;
ArdourCanvas::SimpleRect *transport_bar_postroll_rect;
@ -1996,7 +2023,6 @@ public:
guint info,
guint time);
void drop_paths (const Glib::RefPtr<Gdk::DragContext>& context,
gint x,
gint y,
@ -2109,6 +2135,7 @@ public:
Gtk::ComboBoxText stretch_opts_selector;
Gtk::Label stretch_opts_label;
Gtk::ToggleButton precise_button;
Gtk::ToggleButton preserve_formants_button;
Gtk::HBox opts_box;
Gtk::Button* cancel_button;
@ -2151,7 +2178,9 @@ public:
void detach_tearoff (Gtk::Box* b, Gtk::Window* w);
void reattach_tearoff (Gtk::Box* b, Gtk::Window* w, int32_t n);
#ifdef GTKOSX
void ensure_all_elements_drawn ();
#endif
/* nudging tracks */
void nudge_track (bool use_edit_point, bool forwards);
@ -2250,6 +2279,7 @@ public:
bool entered_track_canvas (GdkEventCrossing*);
void set_entered_track (TimeAxisView*);
void set_entered_regionview (RegionView*);
void ensure_track_visible (TimeAxisView*);
gint left_automation_track ();
bool _new_regionviews_show_envelope;

View File

@ -57,6 +57,8 @@ Editor::register_actions ()
ActionManager::register_action (editor_actions, X_("LatchMenu"), _("Latch"));
ActionManager::register_action (editor_actions, X_("Layering"), _("Layering"));
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_("MarkerMenu"), _("Markers"));
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));
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));
ActionManager::session_sensitive_actions.push_back (act);
@ -378,6 +383,7 @@ Editor::register_actions ()
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));
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));
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));
@ -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));
ActionManager::session_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));
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)));
ActionManager::session_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::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-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;
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)));
@ -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-with-marker", _("Change edit point (w/Marker)"), bind (mem_fun (*this, &Editor::cycle_edit_point), true));
ActionManager::register_action (editor_actions, "set-edit-splice", _("Splice"), bind (mem_fun (*this, &Editor::set_edit_mode), Splice));
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-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, "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_tempo_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()) {
ruler_bbt_action->set_active (true);
ruler_cd_marker_action->set_active (false);
ruler_timecode_action->set_active (false);
ruler_minsec_action->set_active (true);
} else {
ruler_bbt_action->set_active (false);
ruler_cd_marker_action->set_active (true);
ruler_timecode_action->set_active (true);
ruler_minsec_action->set_active (false);

View File

@ -57,6 +57,7 @@
#include "midi_time_axis.h"
#include "session_import_dialog.h"
#include "utils.h"
#include "gui_thread.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) {
string tmp (Glib::path_get_basename (i->second->path()));
if (tmp == wave_name) {
wave_name_exists = true;
break;
@ -226,7 +226,6 @@ Editor::check_whether_and_how_to_import(string path, bool all_or_nothing)
int function = 1;
if (wave_name_exists) {
string message;
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("Skip all", 4); // All or rest?
dialog.show();
@ -322,29 +320,11 @@ Editor::get_nth_selected_midi_track (int nth) const
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
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;
vector<ustring> to_import;
bool ok = true;
int nth = 0;
if (interthread_progress_window == 0) {
@ -352,11 +332,13 @@ Editor::_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mo
}
if (chns == Editing::ImportMergeFiles) {
/* create 1 region from all paths, add to 1 track,
ignore "track"
*/
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);
if (check == 2) {
cancel = true;
@ -365,20 +347,21 @@ Editor::_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mo
}
if (!cancel) {
if (import_sndfiles (paths, mode, quality, pos, 1, 1, track, false)) {
ok = false;
}
import_sndfiles (paths, mode, quality, pos, 1, 1, track, false, paths.size());
}
} else {
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) {
int check = check_whether_and_how_to_import(*a, true);
if (check == 2 ) {
// skip
// user said skip
continue;
}
@ -390,81 +373,48 @@ Editor::_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mo
}
switch (chns) {
case Editing::ImportDistinctFiles:
case Editing::ImportDistinctFiles:
to_import.clear ();
to_import.push_back (*a);
if (mode == Editing::ImportToTrack) {
track = get_nth_selected_audio_track (nth++);
}
ok = (import_sndfiles (to_import, mode, quality, pos, 1, -1, track, replace, total) == 0);
break;
case Editing::ImportDistinctChannels:
to_import.clear ();
to_import.push_back (*a);
ok = (import_sndfiles (to_import, mode, quality, pos, -1, -1, track, replace, total) == 0);
break;
case Editing::ImportSerializeFiles:
to_import.clear ();
to_import.push_back (*a);
to_import.clear ();
to_import.push_back (*a);
ok = (import_sndfiles (to_import, mode, quality, pos, 1, 1, track, replace, total) == 0);
break;
if (mode == Editing::ImportToTrack) {
track = get_nth_selected_audio_track (nth++);
}
if (import_sndfiles (to_import, mode, quality, pos, 1, -1, track, replace)) {
ok = false;
}
break;
case Editing::ImportDistinctChannels:
to_import.clear ();
to_import.push_back (*a);
if (import_sndfiles (to_import, mode, quality, pos, -1, -1, track, replace)) {
ok = false;
}
break;
case Editing::ImportSerializeFiles:
to_import.clear ();
to_import.push_back (*a);
/* 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;
case Editing::ImportMergeFiles:
// Not entered, handled in earlier if() branch
break;
}
}
if (ok) {
session->save_state ("");
}
interthread_progress_window->hide_all ();
}
}
bool
Editor::idle_do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos)
{
_do_embed (paths, chns, mode, pos);
return false;
interthread_progress_window->hide_all ();
}
void
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;
bool check_sample_rate = true;
@ -531,7 +481,7 @@ Editor::_do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mod
int
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());
@ -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_bar.set_fraction (0.0f);
interthread_cancel_label.set_text (_("Cancel Import"));
current_interthread_info = &import_status;
current_interthread_info = &import_status;
import_status.paths = paths;
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.quality = quality;
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
(bind (mem_fun(*this, &Editor::import_progress_timeout), (gpointer) 0), 500);
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()
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_detach (import_status.thread);
while (!(import_status.done || import_status.cancel)) {
while (!import_status.done && !import_status.cancel) {
gtk_main_iteration ();
}
interthread_progress_window->hide ();
import_status.done = true;
interthread_progress_connection.disconnect ();
/* import thread finished - see if we should build a new track */
boost::shared_ptr<AudioRegion> r;
if (import_status.cancel || import_status.sources.empty()) {
goto out;
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 ("");
}
/* update position from results */
pos = import_status.pos;
}
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);
return 0;
}
@ -600,7 +561,7 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
int ret = 0;
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) {
@ -710,8 +671,6 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
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
(DataType::AUDIO, *session, path, n,
(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,
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 */
@ -922,7 +881,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t
void *
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;
return ed->import_thread ();

View File

@ -18,6 +18,7 @@
*/
#include <libgnomecanvasmm/init.h>
#include <libgnomecanvasmm/pixbuf.h>
#include <jack/types.h>
#include <gtkmm2ext/utils.h>
@ -29,9 +30,11 @@
#include "waveview.h"
#include "simplerect.h"
#include "simpleline.h"
#include "imageframe.h"
#include "waveview_p.h"
#include "simplerect_p.h"
#include "simpleline_p.h"
#include "imageframe_p.h"
#include "canvas_impl.h"
#include "editing.h"
#include "rgb_macros.h"
@ -39,11 +42,6 @@
#include "time_axis_view.h"
#include "audio_time_axis.h"
#ifdef WITH_CMT
#include "imageframe.h"
#include "imageframe_p.h"
#endif
#include "i18n.h"
using namespace std;
@ -65,10 +63,7 @@ extern "C"
GType gnome_canvas_simpleline_get_type(void);
GType gnome_canvas_simplerect_get_type(void);
GType gnome_canvas_waveview_get_type(void);
#ifdef WITH_CMT
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_simplerect_get_type(), &Gnome::Canvas::SimpleRect_Class::wrap_new);
Glib::wrap_register(gnome_canvas_waveview_get_type(), &Gnome::Canvas::WaveView_Class::wrap_new);
#ifdef WITH_CMT
Glib::wrap_register(gnome_canvas_imageframe_get_type(), &Gnome::Canvas::ImageFrame_Class::wrap_new);
#endif
// Glib::wrap_register(gnome_canvas_imageframe_get_type(), &Gnome::Canvas::ImageFrame_Class::wrap_new);
// Register the gtkmm gtypes:
(void) Gnome::Canvas::WaveView::get_type();
(void) Gnome::Canvas::SimpleLine::get_type();
(void) Gnome::Canvas::SimpleRect::get_type();
#ifdef WITH_CMT
(void) Gnome::Canvas::ImageFrame::get_type();
#endif
}
void
Editor::initialize_canvas ()
{
@ -114,7 +102,7 @@ Editor::initialize_canvas ()
track_canvas->set_dither (Gdk::RGB_DITHER_NONE);
Glib::RefPtr<Gdk::Screen> screen = get_screen();
if (!screen) {
screen = Gdk::Screen::get_default();
}
@ -128,10 +116,12 @@ Editor::initialize_canvas ()
verbose_canvas_cursor = new ArdourCanvas::Text (*track_canvas->root());
verbose_canvas_cursor->property_font_desc() = *font;
verbose_canvas_cursor->property_anchor() = ANCHOR_NW;
delete font;
delete font;
verbose_cursor_visible = false;
/* on the bottom, an image */
if (Profile->get_sae()) {
Image img (::get_icon (X_("saelogo")));
@ -143,58 +133,92 @@ Editor::initialize_canvas ()
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->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->hide();
/* a group to hold time (measure) lines */
time_line_group = new ArdourCanvas::Group (*_master_group, 0.0, 0.0);
_background_group = new ArdourCanvas::Group (*track_canvas->root());
_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 ();
_trackview_group = new ArdourCanvas::Group (*_master_group, 0.0, 0.0);
_region_motion_group = new ArdourCanvas::Group (*_trackview_group, 0.0, 0.0);
_trackview_group = new ArdourCanvas::Group (*_master_group);
_region_motion_group = new ArdourCanvas::Group (*_trackview_group);
/* el barrio */
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.0);
meter_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
if (Profile->get_sae()) {
meter_bar = new ArdourCanvas::SimpleRect (*meter_bar_group, 0.0, 0.0, physical_screen_width, timebar_height - 1);
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_pixels() = 1;
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));
tempo_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
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_pixels() = 1;
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));
range_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
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_pixels() = 1;
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));
transport_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
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_pixels() = 1;
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));
marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
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_pixels() = 1;
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));
cd_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
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_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);
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);
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->property_width_pixels() = 1;
@ -228,14 +252,14 @@ Editor::initialize_canvas ()
transport_punchin_line->property_x1() = 0.0;
transport_punchin_line->property_y1() = 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_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_y1() = 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();
// used to show zoom mode active zooming
@ -263,7 +287,6 @@ Editor::initialize_canvas ()
if (logo_item) {
logo_item->lower_to_bottom ();
}
/* 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));
@ -283,7 +306,6 @@ Editor::initialize_canvas ()
// Drag-N-Drop from the region list can generate this target
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/uri-list"));
@ -326,17 +348,13 @@ Editor::track_canvas_size_allocated ()
}
full_canvas_height = height + canvas_timebars_vsize;
} else {
return true;
}
if (height_changed) {
if (playhead_cursor) {
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) {
(*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 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 ();
@ -360,7 +376,7 @@ Editor::track_canvas_size_allocated ()
redisplay_tempo (false);
Resized (); /* EMIT_SIGNAL */
return false;
}
@ -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());
/* 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) {
req->height = height;
controls_layout.property_height () = (guint) floor (pos);
controls_layout.property_height_request () = height;
}
if (changed) {
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
@ -429,56 +447,27 @@ Editor::track_canvas_drag_data_received (const RefPtr<Gdk::DragContext>& context
const SelectionData& data,
guint info, guint time)
{
cerr << "drop on canvas, target = " << data.get_target() << endl;
if (data.get_target() == "regions") {
drop_regions (context, x, y, data, info, time);
}
else if(data.get_target() == "routes") {
drop_routes (context, x, y, data, info, time);
}
else {
} else {
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
Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
int x, int y,
const SelectionData& data,
guint info, guint time)
Editor::drop_paths_part_two (const vector<ustring>& paths, nframes64_t frame, double ypos)
{
TimeAxisView* tvp;
RouteTimeAxisView* tv;
double cy;
vector<ustring> paths;
string spath;
GdkEvent ev;
nframes64_t frame;
AudioTimeAxisView* tv;
if (convert_drop_to_paths (paths, context, x, y, data, info, time)) {
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) {
if ((tvp = trackview_by_y_position (ypos)) == 0) {
/* 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);
}
} 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 */
if (tv->get_diskstream()) {
/* select the track, then embed */
/* select the track, then embed/import */
selection->set (tv);
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 {
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);
}
@ -518,30 +544,16 @@ Editor::drop_regions (const RefPtr<Gdk::DragContext>& context,
const SelectionData& data,
guint info, guint time)
{
const SerializedObjectPointers<boost::shared_ptr<Region> >* sr =
reinterpret_cast<const SerializedObjectPointers<boost::shared_ptr<Region> > *> (data.get_data());
std::list<boost::shared_ptr<Region> > regions;
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];
insert_region_list_drag (r, x, y);
}
boost::shared_ptr<AudioRegion> ar;
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);
if ((ar = boost::dynamic_pointer_cast<AudioRegion>(*r)) != 0) {
insert_region_list_drag (ar, x, y);
}
}
context->drag_finish (true, false, time);
@ -648,20 +660,24 @@ Editor::autoscroll_canvas ()
double new_pixel;
double target_pixel;
if (autoscroll_x > 0) {
autoscroll_x_distance = (unit_to_frame (drag_info.current_pointer_x) - (leftmost_frame + current_page_frames())) / 3;
} else if (autoscroll_x < 0) {
autoscroll_x_distance = (leftmost_frame - unit_to_frame (drag_info.current_pointer_x)) / 3;
if (autoscroll_x_distance != 0) {
if (autoscroll_x > 0) {
autoscroll_x_distance = (unit_to_frame (drag_info.current_pointer_x) - (leftmost_frame + current_page_frames())) / 3;
} else if (autoscroll_x < 0) {
autoscroll_x_distance = (leftmost_frame - unit_to_frame (drag_info.current_pointer_x)) / 3;
}
}
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;
if (autoscroll_y_distance != 0) {
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;
}
}
if (autoscroll_x < 0) {
if (leftmost_frame < autoscroll_x_distance) {
new_frame = 0;
@ -725,6 +741,8 @@ Editor::autoscroll_canvas ()
reset_x_origin (new_frame);
}
vertical_adjustment.set_value (new_pixel);
/* fake an event. */
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);
vertical_adjustment.set_value (new_pixel);
autoscroll_cnt++;
if (autoscroll_cnt == 1) {
@ -830,20 +846,33 @@ Editor::scroll_canvas_horizontally ()
_master_group->move (-x_delta, 0);
timebar_group->move (-x_delta, 0);
time_line_group->move (-x_delta, 0);
cursor_group->move (-x_delta, 0);
update_fixed_rulers ();
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
Editor::scroll_canvas_vertically ()
{
/* vertical scrolling only */
double y_delta;
y_delta = last_trackview_group_vertical_offset - get_trackview_group_vertical_offset ();
_trackview_group->move (0, y_delta);
_background_group->move (0, y_delta);
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
(*i)->clip_to_viewport ();
@ -875,7 +904,7 @@ Editor::color_handler()
{
playhead_cursor->canvas_item.property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_PlayHead.get();
verbose_canvas_cursor->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_VerboseCanvasCursor.get();
meter_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MeterBar.get();
meter_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();
@ -946,3 +975,4 @@ Editor::flush_canvas ()
// gdk_window_process_updates (GTK_LAYOUT(track_canvas->gobj())->bin_window, true);
}
}

View File

@ -35,10 +35,7 @@ Editor::Cursor::Cursor (Editor& ed, bool (Editor::*callbck)(GdkEvent*,ArdourCanv
canvas_item (*editor.cursor_group),
length(1.0)
{
/* "randomly" initialize coords */
points.push_back(Gnome::Art::Point(1.0, 0.0));
points.push_back(Gnome::Art::Point(-1.0, 0.0)); // first x-coord needs to be a non-normal value
points.push_back(Gnome::Art::Point(1.0, 1.0));
canvas_item.property_points() = points;

View File

@ -140,6 +140,9 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev)
if ((iter = group_model->get_iter (path))) {
if ((group = (*iter)[group_columns.routegroup]) != 0) {
// edit_route_group (group);
#ifdef GTKOSX
edit_group_display.queue_draw();
#endif
return true;
}
}
@ -151,6 +154,9 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev)
if ((iter = group_model->get_iter (path))) {
bool active = (*iter)[group_columns.is_active];
(*iter)[group_columns.is_active] = !active;
#ifdef GTKOSX
edit_group_display.queue_draw();
#endif
return true;
}
break;
@ -159,6 +165,9 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev)
if ((iter = group_model->get_iter (path))) {
bool visible = (*iter)[group_columns.is_visible];
(*iter)[group_columns.is_visible] = !visible;
#ifdef GTKOSX
edit_group_display.queue_draw();
#endif
return true;
}
break;

View File

@ -155,6 +155,16 @@ Editor::ensure_all_elements_drawn ()
}
#endif
void
Editor::show_editor_list (bool yn)
{
if (yn) {
the_notebook.show();
} else {
the_notebook.hide();
}
}
void
Editor::create_editor_mixer ()
{
@ -169,16 +179,6 @@ Editor::create_editor_mixer ()
current_mixer_strip->set_embedded (true);
}
void
Editor::show_editor_list (bool yn)
{
if (yn) {
the_notebook.show();
} else {
the_notebook.hide();
}
}
void
Editor::set_selected_mixer_strip (TimeAxisView& view)
{
@ -228,7 +228,6 @@ Editor::set_selected_mixer_strip (TimeAxisView& view)
}
double current = 0.0;
bool currentInitialized = 0;
void
Editor::update_current_screen ()

View File

@ -367,8 +367,15 @@ Editor::step_mouse_mode (bool next)
{
switch (current_mouse_mode()) {
case MouseObject:
if (next) set_mouse_mode (MouseRange);
else set_mouse_mode (MouseTimeFX);
if (next) {
if (Profile->get_sae()) {
set_mouse_mode (MouseZoom);
} else {
set_mouse_mode (MouseRange);
}
} else {
set_mouse_mode (MouseTimeFX);
}
break;
case MouseRange:
@ -377,8 +384,19 @@ Editor::step_mouse_mode (bool next)
break;
case MouseZoom:
if (next) set_mouse_mode (MouseGain);
else set_mouse_mode (MouseRange);
if (next) {
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;
case MouseGain:
@ -387,8 +405,15 @@ Editor::step_mouse_mode (bool next)
break;
case MouseTimeFX:
if (next) set_mouse_mode (MouseAudition);
else set_mouse_mode (MouseGain);
if (next) {
set_mouse_mode (MouseAudition);
} else {
if (Profile->get_sae()) {
set_mouse_mode (MouseZoom);
} else {
set_mouse_mode (MouseGain);
}
}
break;
case MouseAudition:
@ -508,10 +533,11 @@ Editor::set_midi_edit_cursor (MidiEditMode m)
void
Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
/* in object/audition/timefx mode, any button press sets
the selection if the object can be selected. this is a
bit of hack, because we want to avoid this if the
mouse operation is a region alignment.
/* in object/audition/timefx/gain-automation mode,
any button press sets the selection if the object
can be selected. this is a bit of hack, because
we want to avoid this if the mouse operation is a
region alignment.
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) &&
(mouse_mode != MouseAudition || item_type != RegionItem) &&
(mouse_mode != MouseTimeFX || item_type != RegionItem) &&
(mouse_mode != MouseGain) &&
(mouse_mode != MouseRange)) ||
((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3)) {
@ -537,7 +564,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
}
}
}
Selection::Operation op = Keyboard::selection_type (event->button.state);
bool press = (event->type == GDK_BUTTON_PRESS);
@ -602,7 +629,7 @@ bool
Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
Glib::RefPtr<Gdk::Window> canvas_window = const_cast<Editor*>(this)->track_canvas->get_window();
if (canvas_window) {
Glib::RefPtr<const Gdk::Window> pointer_window;
int x, y;
@ -626,7 +653,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
}
button_selection (item, event, item_type);
if (drag_info.item == 0 &&
(Keyboard::is_delete_event (&event->button) ||
Keyboard::is_context_menu_event (&event->button) ||
@ -680,27 +707,43 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
}
return true;
case MarkerBarItem:
case TempoBarItem:
return true;
case MeterBarItem:
if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
start_cursor_grab_no_stop(&playhead_cursor->canvas_item, event);
}
return true;
break;
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;
break;
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;
break;
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;
break;
default:
break;
}
@ -830,7 +873,13 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
case MouseGain:
switch (item_type) {
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;
case GainLineItem:
@ -982,7 +1031,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
{
nframes64_t where = event_frame (event, 0, 0);
AutomationTimeAxisView* atv = 0;
/* no action if we're recording */
if (session && session->actively_recording()) {
@ -1001,7 +1050,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
button_selection (item, event, item_type);
/* edit events get handled here */
if (drag_info.item == 0 && Keyboard::is_edit_event (&event->button)) {
switch (item_type) {
case RegionItem:
@ -1163,36 +1212,44 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
return true;
case MarkerBarItem:
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
snap_to (where, 0, true);
if (!_dragging_playhead) {
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;
case CdMarkerBarItem:
// if we get here then a dragged range wasn't done
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
snap_to (where, 0, true);
if (!_dragging_playhead) {
// if we get here then a dragged range wasn't done
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;
case TempoBarItem:
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
snap_to (where);
if (!_dragging_playhead) {
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;
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;
break;
default:
break;
}
switch (mouse_mode) {
case MouseObject:
switch (item_type) {
@ -1219,7 +1276,13 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
switch (item_type) {
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;
break;
@ -1571,7 +1634,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case TempoBarItem:
case MarkerBarItem:
if (is_drawable()) {
track_canvas->get_window()->set_cursor (*timebar_cursor);
track_canvas->get_window()->set_cursor (*current_canvas_cursor);
}
break;
@ -1783,6 +1846,9 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
case PlayheadCursorItem:
case MarkerItem:
case ControlPointItem:
case MarkerBarItem:
case TempoBarItem:
case MeterBarItem:
case RangeMarkerBarItem:
case TransportMarkerBarItem:
case CdMarkerBarItem:
@ -1809,7 +1875,9 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
if (!from_autoscroll) {
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 not_handled;
@ -1819,6 +1887,15 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
}
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 MouseRange:
case MouseZoom:
@ -1829,7 +1906,9 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
if (!from_autoscroll) {
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 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 (event->button.button == 2) {
if (Keyboard::is_button2_event (&event->button)) {
if (Keyboard::modifier_state_equals (event->button.state, Keyboard::SecondaryModifier)) {
drag_info.y_constrained = true;
drag_info.x_constrained = false;
@ -1998,6 +2077,14 @@ Editor::end_grab (ArdourCanvas::Item* item, GdkEvent* event)
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
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);
}
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
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
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);
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;
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);
@ -3100,12 +3236,14 @@ Editor::start_line_grab (AutomationLine* line, GdkEvent* event)
nframes64_t frame_within_region;
/* need to get x coordinate in terms of parent (TimeAxisItemView)
origin.
origin, and ditto for y.
*/
cx = event->button.x;
cy = event->button.y;
line->parent_group().w2i (cx, cy);
frame_within_region = (nframes64_t) floor (cx * frames_per_unit);
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);
/* store grab start in parent frame */
drag_info.grab_x = cx;
drag_info.grab_y = cy;
double fraction = 1.0 - (cy / line->height());
line->start_drag (0, drag_info.grab_frame, fraction);
@ -3136,7 +3279,7 @@ Editor::line_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
AutomationLine* line = reinterpret_cast<AutomationLine *> (drag_info.data);
double dy = drag_info.current_pointer_y - drag_info.last_pointer_y;
if (event->button.state & Keyboard::SecondaryModifier) {
dy *= 0.1;
}
@ -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
// positive side of zero
double _unused = 0;
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
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 = min ((double) line->height(), cy);
double fraction = 1.0 - (cy / line->height());
bool push;
@ -3976,7 +4120,6 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
}
begin_reversible_command (op_string);
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());
@ -3994,13 +4137,14 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
TimeAxisView* dest_tv = trackview_by_y_position (iy1);
RouteTimeAxisView* dest_rtv = dynamic_cast<RouteTimeAxisView*>(dest_tv);
nframes64_t where;
if (rv->region()->locked()) {
++i;
continue;
}
if (changed_position && !drag_info.x_constrained) {
where = rv->region()->position() - drag_delta;
} else {
@ -5538,7 +5682,9 @@ Editor::end_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event)
}
} else {
selection->clear_tracks();
if (!getenv("ARDOUR_SAE")) {
selection->clear_tracks();
}
selection->clear_regions();
selection->clear_points ();
selection->clear_lines ();

View File

@ -38,7 +38,6 @@
#include <gtkmm2ext/window_title.h>
#include <gtkmm2ext/popup.h>
#include <ardour/audioengine.h>
#include <ardour/session.h>
#include <ardour/audioplaylist.h>
@ -148,8 +147,6 @@ Editor::split_regions_at (nframes64_t where, RegionSelection& regions)
snap_to (where);
}
cerr << "Split " << regions.size() << " at " << where << endl;
for (RegionSelection::iterator a = regions.begin(); a != regions.end(); ) {
RegionSelection::iterator tmp;
@ -2008,6 +2005,36 @@ Editor::add_location_from_playhead_cursor ()
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
Editor::add_location_from_audio_region ()
{
@ -2019,15 +2046,31 @@ Editor::add_location_from_audio_region ()
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"));
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);
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 ();
}
@ -3607,7 +3650,7 @@ Editor::unfreeze_route ()
void*
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 ();
}
@ -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
Editor::set_fade_length (bool in)
{
@ -5216,17 +5281,26 @@ Editor::select_next_route()
TimeAxisView* current = selection->tracks.front();
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
if (*i == current) {
++i;
if (i != track_views.end()) {
selection->set (*i);
} else {
selection->set (*(track_views.begin()));
RouteUI *rui;
do {
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
if (*i == current) {
++i;
if (i != track_views.end()) {
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
@ -5239,17 +5313,55 @@ Editor::select_prev_route()
TimeAxisView* current = selection->tracks.front();
for (TrackViewList::reverse_iterator i = track_views.rbegin(); i != track_views.rend(); ++i) {
if (*i == current) {
++i;
if (i != track_views.rend()) {
selection->set (*i);
} else {
selection->set (*(track_views.rbegin()));
RouteUI *rui;
do {
for (TrackViewList::reverse_iterator i = track_views.rbegin(); i != track_views.rend(); ++i) {
if (*i == current) {
++i;
if (i != track_views.rend()) {
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
@ -6032,26 +6144,34 @@ Editor::insert_time (nframes64_t pos, nframes64_t frames, InsertTimeOption opt,
begin_reversible_command (_("insert time"));
for (TrackSelection::iterator x = selection->tracks.begin(); x != selection->tracks.end(); ++x) {
/* regions */
boost::shared_ptr<Playlist> pl = (*x)->playlist();
if (!pl) {
continue;
if (pl) {
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();
if (opt == SplitIntersected) {
pl->split (pos);
/* automation */
RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*x);
if (rtav) {
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) {
bool moved = false;
XMLNode& before (session->locations()->get_state());
@ -6185,22 +6305,23 @@ Editor::goto_visual_state (uint32_t n)
void
Editor::start_visual_state_op (uint32_t n)
{
cerr << "Start\n";
cerr << "Start visual op\n";
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);
cerr << "\tqueued new timeout\n";
}
}
void
Editor::cancel_visual_state_op (uint32_t n)
{
cerr << "Cancel\n";
if (!visual_state_op_connection.empty()) {
cerr << "\tgoto\n";
cerr << "cancel visual op, time to goto\n";
visual_state_op_connection.disconnect();
goto_visual_state (n);
}
} else {
cerr << "cancel visual op, do nothing\n";
}
}
bool

View File

@ -29,6 +29,7 @@
#include <ardour/audiofilesource.h>
#include <ardour/silentfilesource.h>
#include <ardour/session_region.h>
#include <ardour/profile.h>
#include <gtkmm2ext/stop_signal.h>
@ -777,8 +778,6 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
int cellx;
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 ((iter = region_list_model->get_iter (path))) {
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)) {
show_region_list_display_context_menu (ev->button, ev->time);
cerr << "\tcontext menu event, event handled\n";
return true;
}
if (region == 0) {
region_list_display.get_selection()->unselect_all();
deselect_all();
cerr << "\tSelection cleared\n";
return false;
}
@ -807,7 +804,6 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
if (!Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
consider_auditioning (region);
}
cerr << "\taudition, event handled\n";
return true;
break;
@ -815,7 +811,6 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
break;
}
cerr << "\tnot handled\n";
return false;
}
@ -1036,14 +1031,17 @@ Editor::region_list_display_drag_data_received (const RefPtr<Gdk::DragContext>&
vector<ustring> paths;
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);
return;
}
if (convert_drop_to_paths (paths, context, x, y, data, info, time) == 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);
}
}

View File

@ -147,7 +147,7 @@ void
Editor::handle_gui_changes (const string & what, void *src)
{
ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::handle_gui_changes), what, src));
if (what == "track_height") {
/* Optional :make tracks change height while it happens, instead
of on first-idle
@ -643,14 +643,10 @@ Editor::route_list_display_drag_data_received (const RefPtr<Gdk::DragContext>& c
const SelectionData& data,
guint info, guint time)
{
cerr << "RouteLD::dddr target = " << data.get_target() << endl;
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);
return;
}
cerr << "some other kind of drag\n";
context->drag_finish (true, false, time);
}
@ -786,114 +782,6 @@ Editor::move_selected_tracks (bool up)
}
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

View File

@ -33,6 +33,7 @@
#include "actions.h"
#include "gtk-custom-hruler.h"
#include "gui_thread.h"
#include "time_axis_view.h"
#include "i18n.h"
@ -64,6 +65,14 @@ Editor::initialize_rulers ()
_ruler_separator->set_name("TimebarPadding");
_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 = Glib::wrap (_smpte_ruler);
smpte_ruler->set_name ("SMPTERuler");
@ -90,11 +99,13 @@ Editor::initialize_rulers ()
frames_ruler->hide ();
frames_ruler->set_no_show_all();
_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]);
_bbt_ruler = gtk_custom_hruler_new ();
bbt_ruler = Glib::wrap (_bbt_ruler);
bbt_ruler->set_name ("BBTRuler");
bbt_ruler->set_size_request (-1, (int)timebar_height);
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->set_no_show_all();
minsec_nmarks = 0;
@ -532,66 +543,76 @@ Editor::restore_ruler_visibility ()
if (node) {
if ((prop = node->property ("smpte")) != 0) {
if (prop->value() == "yes")
if (prop->value() == "yes") {
ruler_timecode_action->set_active (true);
else
} else {
ruler_timecode_action->set_active (false);
}
}
if ((prop = node->property ("bbt")) != 0) {
if (prop->value() == "yes")
if (prop->value() == "yes") {
ruler_bbt_action->set_active (true);
else
} else {
ruler_bbt_action->set_active (false);
}
}
if ((prop = node->property ("frames")) != 0) {
if (prop->value() == "yes")
if (prop->value() == "yes") {
ruler_samples_action->set_active (true);
else
} else {
ruler_samples_action->set_active (false);
}
}
if ((prop = node->property ("minsec")) != 0) {
if (prop->value() == "yes")
if (prop->value() == "yes") {
ruler_minsec_action->set_active (true);
else
} else {
ruler_minsec_action->set_active (false);
}
}
if ((prop = node->property ("tempo")) != 0) {
if (prop->value() == "yes")
if (prop->value() == "yes") {
ruler_tempo_action->set_active (true);
else
} else {
ruler_tempo_action->set_active (false);
}
}
if ((prop = node->property ("meter")) != 0) {
if (prop->value() == "yes")
if (prop->value() == "yes") {
ruler_meter_action->set_active (true);
else
} else {
ruler_meter_action->set_active (false);
}
}
if ((prop = node->property ("marker")) != 0) {
if (prop->value() == "yes")
if (prop->value() == "yes") {
ruler_marker_action->set_active (true);
else
} else {
ruler_marker_action->set_active (false);
}
}
if ((prop = node->property ("rangemarker")) != 0) {
if (prop->value() == "yes")
if (prop->value() == "yes") {
ruler_range_action->set_active (true);
else
} else {
ruler_range_action->set_active (false);
}
}
if ((prop = node->property ("transportmarker")) != 0) {
if (prop->value() == "yes")
if (prop->value() == "yes") {
ruler_loop_punch_action->set_active (true);
else
} else {
ruler_loop_punch_action->set_active (false);
}
}
if ((prop = node->property ("cdmarker")) != 0) {
if (prop->value() == "yes")
if (prop->value() == "yes") {
ruler_cd_marker_action->set_active (true);
else
} else {
ruler_cd_marker_action->set_active (false);
}
} else {
// this session doesn't yet know about the cdmarker ruler
@ -610,7 +631,6 @@ Editor::restore_ruler_visibility ()
}
no_ruler_shown_update = false;
update_ruler_visibility ();
}
@ -816,10 +836,17 @@ Editor::update_ruler_visibility ()
vertical_adjustment.set_value (full_canvas_height - canvas_height + 1);
} else {
_trackview_group->property_y () = - get_trackview_group_vertical_offset ();
_background_group->property_y () = - get_trackview_group_vertical_offset ();
_trackview_group->move (0, 0);
_background_group->move (0, 0);
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));
time_canvas_vbox.set_size_request (-1,-1);

View File

@ -106,8 +106,7 @@ Editor::tempo_map_changed (Change ignored)
tempo_lines->tempo_map_changed();
compute_current_bbt_points(leftmost_frame, leftmost_frame + current_page_frames());
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
update_tempo_based_rulers ();// redraw metric markers
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); // redraw metric markers
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
redraw_measures();
update_tempo_based_rulers ();
compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_frames());
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

View File

@ -72,7 +72,8 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
quick_button (_("Quick but Ugly")),
antialias_button (_("Skip Anti-aliasing")),
stretch_opts_label (_("Contents:")),
precise_button (_("Strict Linear"))
precise_button (_("Strict Linear")),
preserve_formants_button(_("Preserve Formants"))
{
set_modal (true);
set_position (Gtk::WIN_POS_MOUSE);
@ -112,6 +113,9 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
pitch_cent_spinner.set_digits (1);
upper_button_box.pack_start (preserve_formants_button, false, false);
add_button (_("Shift"), Gtk::RESPONSE_ACCEPT);
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 longwin = false;
bool shortwin = false;
bool preserve_formants = false;
string txt;
enum {
@ -290,6 +295,7 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
} transients = Transients;
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 ();
@ -312,10 +318,14 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
if (realtime) options |= RubberBandStretcher::OptionProcessRealTime;
if (precise) options |= RubberBandStretcher::OptionStretchPrecise;
if (preserve_formants) options |= RubberBandStretcher::OptionFormantPreserved;
if (!peaklock) options |= RubberBandStretcher::OptionPhaseIndependent;
if (longwin) options |= RubberBandStretcher::OptionWindowLong;
if (shortwin) options |= RubberBandStretcher::OptionWindowShort;
switch (transients) {
case NoTransients:
options |= RubberBandStretcher::OptionTransientsSmooth;
@ -455,7 +465,7 @@ Editor::do_timefx (TimeFXDialog& dialog)
void*
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);

View File

@ -131,7 +131,6 @@ ExportRangeMarkersDialog::get_target_filepath(string path, string filename, stri
return target_filepath;
}
bool
ExportRangeMarkersDialog::is_filepath_valid(string &filepath)
{
@ -148,10 +147,10 @@ ExportRangeMarkersDialog::is_filepath_valid(string &filepath)
if ( (stat (filepath.c_str(), &statbuf) != 0) ||
(!S_ISDIR (statbuf.st_mode)) ) {
string txt = _("Please select an existing target directory. Files are not allowed!");
MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true);
msg.run();
return false;
string txt = _("Please select an existing target directory. Files are not allowed!");
MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true);
msg.run();
return false;
}
// directory needs to exist and be writable
@ -166,7 +165,6 @@ ExportRangeMarkersDialog::is_filepath_valid(string &filepath)
return true;
}
void
ExportRangeMarkersDialog::init_progress_computing(Locations::LocationList& locations)
{

View File

@ -454,7 +454,7 @@ GainMeterBase::meter_press(GdkEventButton* ev)
} else {
if (ev->button == 2) {
if (Keyboard::is_button2_event(ev)) {
// Primary-button2 click is the midi binding click
// 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))) {

View File

@ -77,7 +77,6 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
//set_homogeneous (false);
pack1(main_contents);
settings_box.set_homogeneous (false);
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 (preset_combo, 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->pack_start (*smaller_hbox, true, false);
constraint_hbox->pack_end (bypass_button, false, false);
constraint_hbox->set_homogeneous (false);
VBox* v1_box = manage (new VBox);
VBox* v2_box = manage (new VBox);
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);
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 ) {
scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
scroller.set_name ("PluginEditor");
@ -120,9 +128,10 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
eqgui_toggle.signal_toggled().connect( mem_fun(*this, &GenericPluginUI::toggle_plugin_analysis));
pi->ActiveChanged.connect (bind(mem_fun(*this, &GenericPluginUI::processor_active_changed),
boost::weak_ptr<Processor>(pi)));
bypass_button.set_active (!pi->active());
boost::weak_ptr<Processor>(pi)));
bypass_button.set_active (!pi->active());
build ();
}
@ -202,7 +211,7 @@ GenericPluginUI::build ()
/* if we are scrollable, just use one long column */
if (!is_scrollable) {
if (x++ > 7){
if (x++ > 20){
frame = manage (new Frame);
frame->set_name ("BaseFrame");
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

View File

@ -64,6 +64,7 @@ guint Keyboard::TertiaryModifier = GDK_SHIFT_MASK; // Shift
guint Keyboard::Level4Modifier = GDK_CONTROL_MASK; // Control
guint Keyboard::CopyModifier = GDK_MOD1_MASK; // Alt/Option
guint Keyboard::RangeSelectModifier = GDK_SHIFT_MASK;
guint Keyboard::button2_modifiers = Keyboard::SecondaryModifier|Keyboard::Level4Modifier;
#else
guint Keyboard::PrimaryModifier = GDK_CONTROL_MASK; // Control
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::CopyModifier = GDK_CONTROL_MASK;
guint Keyboard::RangeSelectModifier = GDK_SHIFT_MASK;
guint Keyboard::button2_modifiers = 0; /* not used */
#endif
Keyboard* Keyboard::_the_keyboard = 0;
Gtk::Window* Keyboard::current_window = 0;
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)) {
if (current_window) {
current_window->hide ();
current_window = 0;
/* Special keys that we want to handle in
any dialog, no matter whether it uses
the regular set of accelerators or not
*/
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
Keyboard::leave_window (GdkEventCrossing *ev, Gtk::Window* win)
{
switch (ev->detail) {
case GDK_NOTIFY_INFERIOR:
if (debug_keyboard) {
cerr << "INFERIOR crossing ... out\n";
if (ev) {
switch (ev->detail) {
case GDK_NOTIFY_INFERIOR:
if (debug_keyboard) {
cerr << "INFERIOR crossing ... out\n";
}
break;
case GDK_NOTIFY_VIRTUAL:
if (debug_keyboard) {
cerr << "VIRTUAL crossing ... out\n";
}
/* fallthru */
default:
if (debug_keyboard) {
cerr << "REAL CROSSING ... out\n";
cerr << "clearing current target\n";
}
state.clear ();
current_window = 0;
}
break;
case GDK_NOTIFY_VIRTUAL:
if (debug_keyboard) {
cerr << "VIRTUAL crossing ... out\n";
}
/* fallthru */
default:
if (debug_keyboard) {
cerr << "REAL CROSSING ... out\n";
cerr << "clearing current target\n";
}
state.clear ();
} else {
current_window = 0;
}
@ -363,12 +380,23 @@ Keyboard::set_snap_modifier (guint mod)
bool
Keyboard::is_edit_event (GdkEventButton *ev)
{
return (ev->type == GDK_BUTTON_PRESS || ev->type == GDK_BUTTON_RELEASE) &&
(ev->button == Keyboard::edit_button()) &&
((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
Keyboard::is_delete_event (GdkEventButton *ev)
{

View File

@ -107,6 +107,7 @@ class Keyboard : public sigc::trackable, PBD::Stateful
static bool is_edit_event (GdkEventButton*);
static bool is_delete_event (GdkEventButton*);
static bool is_context_menu_event (GdkEventButton*);
static bool is_button2_event (GdkEventButton*);
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_mod;
static guint snap_mod;
static guint button2_modifiers;
static Gtk::Window* current_window;
static std::string user_keybindings_path;
static bool can_save_keybindings;

View File

@ -151,6 +151,10 @@ fixup_bundle_environment ()
setenv ("ARDOUR_CONFIG_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");
if (cstr) {
path = cstr;
@ -264,7 +268,6 @@ fixup_bundle_environment ()
path += "/../Resources/gdk-pixbuf.loaders";
setenv ("GDK_PIXBUF_MODULE_FILE", path.c_str(), 1);
cerr << "Set GDK_PIXBUF_MODULE_FILE to " << path << endl;
if (getenv ("ARDOUR_WITH_JACK")) {
// JACK driver dir
@ -297,12 +300,9 @@ int main (int argc, char *argv[])
{
vector<Glib::ustring> null_file_list;
cerr << "here we go\n";
#ifdef __APPLE__
fixup_bundle_environment ();
#endif
cerr << "just did it\n";
Glib::thread_init();
gtk_set_locale ();

View File

@ -152,7 +152,6 @@ Matrix::reset_size ()
*/
float w = 0;
float w1;
float h = 0;
cairo_text_extents_t extents;
cairo_t* cr;

View File

@ -321,6 +321,16 @@ MixerStrip::set_route (boost::shared_ptr<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);
gpm.set_io (rt);
pre_processor_box.set_route (rt);
@ -364,6 +374,7 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
#endif /* VARISPEED_IN_MIXER_STRIP */
button_table.attach (*rec_enable_button, 0, 2, 2, 3);
rec_enable_button->show();
}
if (_route->phase_invert()) {
@ -385,6 +396,9 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
meter_point_label.set_text (_("post"));
break;
}
delete route_ops_menu;
route_ops_menu = 0;
ARDOUR_UI::instance()->tooltips().set_tip (comment_button, _route->comment().empty() ?
_("Click to Add/Edit Comments"):
@ -518,20 +532,19 @@ MixerStrip::set_width (Width w, void* owner)
switch (w) {
case Wide:
set_size_request (-1, -1);
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*)solo_button->get_child())->set_text (_("Solo"));
if (_route->comment() == "") {
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 {
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()));
@ -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_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);
set_size_request (-1, -1);
break;
case Narrow:
@ -564,12 +578,13 @@ MixerStrip::set_width (Width w, void* owner)
set_size_request (max (50, gpm.get_gm_width()), -1);
break;
}
update_input_display ();
update_output_display ();
mix_group_changed (0);
name_changed ();
#ifdef GTKOSX
WidthChanged();
#endif
}
void
@ -1084,7 +1099,7 @@ void
MixerStrip::build_route_ops_menu ()
{
using namespace Menu_Helpers;
route_ops_menu = manage (new Menu);
route_ops_menu = new Menu;
route_ops_menu->set_name ("ArdourContextMenu");
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->set_active (_route->denormal_protection());
build_remote_control_menu ();
items.push_back (SeparatorElem());
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());
@ -1121,7 +1135,7 @@ MixerStrip::build_route_ops_menu ()
gint
MixerStrip::name_button_button_press (GdkEventButton* ev)
{
if (ev->button == 1) {
if (ev->button == 1 || ev->button == 3) {
list_route_operations ();
Menu_Helpers::MenuList& items = route_ops_menu->items();

View File

@ -96,6 +96,10 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
ARDOUR::RouteGroup* mix_group() const;
void set_route (boost::shared_ptr<ARDOUR::Route>);
#ifdef GTKOSX
sigc::signal<void> WidthChanged;
#endif
protected:
friend class Mixer_UI;
void set_packed (bool yn);

View File

@ -271,7 +271,7 @@ Mixer_UI::show_window ()
present ();
if (!_visible) {
set_window_pos_and_size ();
/* now reset each strips width so the right widgets are shown */
MixerStrip* ms;
@ -339,7 +339,9 @@ Mixer_UI::add_strip (Session::RouteList& routes)
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));
#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));
}
@ -767,6 +769,30 @@ Mixer_UI::redisplay_track_list ()
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
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];
(*iter)[track_columns.visible] = !visible;
}
#ifdef GTKOSX
track_display.queue_draw();
#endif
}
}
return true;
@ -1014,6 +1043,9 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev)
if ((iter = group_model->get_iter (path))) {
if ((group = (*iter)[group_columns.group]) != 0) {
// edit_mix_group (group);
#ifdef GTKOSX
group_display.queue_draw();
#endif
return true;
}
}
@ -1025,6 +1057,9 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev)
if ((iter = group_model->get_iter (path))) {
bool active = (*iter)[group_columns.active];
(*iter)[group_columns.active] = !active;
#ifdef GTKOSX
group_display.queue_draw();
#endif
return true;
}
break;
@ -1033,6 +1068,9 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev)
if ((iter = group_model->get_iter (path))) {
bool visible = (*iter)[group_columns.visible];
(*iter)[group_columns.visible] = !visible;
#ifdef GTKOSX
group_display.queue_draw();
#endif
return true;
}
break;
@ -1281,19 +1319,41 @@ Mixer_UI::set_state (const XMLNode& node)
const XMLProperty* prop;
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;
if ((geometry = find_named_node (node, "geometry")) != 0) {
m_width = default_width;
m_height = default_height;
m_root_x = 1;
m_root_y = 1;
XMLProperty* prop;
} else {
if ((prop = geometry->property("x_size")) == 0) {
prop = geometry->property ("x-size");
}
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());
}
m_width = atoi(geometry->property("x-size")->value().c_str());
m_height = atoi(geometry->property("y-size")->value().c_str());
m_root_x = atoi(geometry->property("x-pos")->value().c_str());
m_root_y = atoi(geometry->property("y-pos")->value().c_str());
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 ();
@ -1369,12 +1429,24 @@ Mixer_UI::pane_allocation_handler (Allocation& alloc, Gtk::Paned* which)
int width, height;
static int32_t done[3] = { 0, 0, 0 };
if ((geometry = find_named_node (*node, "geometry")) == 0) {
width = default_width;
height = default_height;
} else {
width = atoi(geometry->property("x-size")->value());
height = atoi(geometry->property("y-size")->value());
width = default_width;
height = default_height;
if ((geometry = find_named_node (*node, "geometry")) != 0) {
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)) {

View File

@ -152,6 +152,9 @@ class Mixer_UI : public Gtk::Window
void redisplay_track_list ();
bool no_track_list_redisplay;
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_delete (const Gtk::TreeModel::Path&);

View File

@ -108,28 +108,30 @@
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%WINDOW%>b")
(gtk_accel_path "<Actions>/Editor/normalize-region" "<%SECONDARY%>n")
(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.
(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/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>/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/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/tab-to-transient-backwards" "<%PRIMARY%>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/playhead-to-next-region-boundary" "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>/Transport/Forward" "<%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")
@ -214,8 +216,9 @@
(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/ToggleAutoReturn" "4")
(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
(gtk_accel_path "<Actions>/Editor/step-mouse-mode" "4")
(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-edit-range" "0")

206
gtk2_ardour/nag.cc Normal file
View File

@ -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
}

39
gtk2_ardour/nag.h Normal file
View File

@ -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__ */

View File

@ -17,9 +17,6 @@
*/
#include "i18n.h"
#include "new_session_dialog.h"
#include <pbd/error.h>
#include <ardour/recent_sessions.h>
@ -46,6 +43,8 @@ using namespace ARDOUR;
#include "opts.h"
#include "utils.h"
#include "i18n.h"
#include "new_session_dialog.h"
NewSessionDialog::NewSessionDialog()
: ArdourDialog ("session control")
@ -426,6 +425,8 @@ NewSessionDialog::NewSessionDialog()
m_notebook->show();
m_notebook->show_all_children();
engine_page_session_folder = X_("");
engine_page_session_name = X_("");
set_default_response (Gtk::RESPONSE_OK);
if (!ARDOUR_COMMAND_LINE::session_name.length()) {
@ -466,7 +467,9 @@ NewSessionDialog::run ()
/* nothing to display */
return Gtk::RESPONSE_OK;
}
if (!(page_set & NewPage) && !(page_set & OpenPage)) {
set_response_sensitive (Gtk::RESPONSE_OK, true);
}
return ArdourDialog::run ();
}
@ -521,13 +524,13 @@ void
NewSessionDialog::set_session_name (const Glib::ustring& name)
{
m_name->set_text (name);
engine_page_session_name = name;
}
void
NewSessionDialog::set_session_folder(const Glib::ustring& dir)
{
Glib::ustring realdir = dir;
char* res;
/* 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];
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)) {
realdir = Glib::path_get_dirname (realdir);
}
m_folder->set_current_folder (realdir);
engine_page_session_folder = realdir;
}
#else
char* res;
if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
realdir = Glib::path_get_dirname (realdir);
cerr << "didn't exist, use " << realdir << endl;
@ -593,6 +598,9 @@ NewSessionDialog::session_name() const
case NewPage:
case EnginePage:
/* 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());
default:
break;
@ -613,8 +621,12 @@ NewSessionDialog::session_folder() const
return Glib::filename_from_utf8(m_folder->get_filename());
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) {
/* 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());
}
break;

View File

@ -216,6 +216,8 @@ protected:
bool on_new_session_page;
bool have_engine;
Glib::ustring engine_page_session_folder;
Glib::ustring engine_page_session_name;
};
#endif // NEW_SESSION_DIALOG_H

View File

@ -28,6 +28,7 @@
#include <ardour/auditioner.h>
#include <ardour/sndfilesource.h>
#include <ardour/crossfade.h>
#include <ardour/profile.h>
#include <midi++/manager.h>
#include <midi++/factory.h>
#include <gtkmm2ext/stop_signal.h>
@ -148,9 +149,11 @@ OptionEditor::OptionEditor (ARDOUR_UI& uip, PublicEditor& ed, Mixer_UI& mixui)
setup_keyboard_options ();
setup_auditioner_editor ();
notebook.pages().push_back (TabElem (sync_packer, _("Sync")));
notebook.pages().push_back (TabElem (path_table, _("Paths/Files")));
notebook.pages().push_back (TabElem (keyboard_mouse_table, _("Kbd/Mouse")));
if (!Profile->get_sae()) {
notebook.pages().push_back (TabElem (sync_packer, _("Sync")));
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 (audition_packer, _("Audition")));
notebook.pages().push_back (TabElem (misc_packer, _("Misc")));

View File

@ -154,6 +154,7 @@ PannerUI::set_io (boost::shared_ptr<IO> io)
panner = 0;
}
setup_pan ();
pan_changed (0);
update_pan_sensitive ();
@ -225,14 +226,12 @@ PannerUI::get_controllable()
bool
PannerUI::panning_link_button_press (GdkEventButton* ev)
{
cerr << "link press\n";
return true;
}
bool
PannerUI::panning_link_button_release (GdkEventButton* ev)
{
cerr << "link release\n";
if (!ignore_toggle) {
_io->panner().set_linked (!_io->panner().linked());
}
@ -259,7 +258,7 @@ PannerUI::update_pan_linkage ()
bool x = _io->panner().linked();
bool bx = panning_link_button.get_active();
if (x != bx) {
ignore_toggle = true;
@ -328,6 +327,7 @@ PannerUI::panner_changed ()
{
ENSURE_GUI_THREAD (mem_fun(*this, &PannerUI::panner_changed));
setup_pan ();
pan_changed (0);
}
void
@ -573,6 +573,7 @@ PannerUI::pan_changed (void *src)
break;
case 2:
/* bring pan bar state up to date */
update_pan_bars (false);
break;
@ -806,7 +807,7 @@ PannerUI::pan_automation_state_changed ()
pan_watching.disconnect();
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));
}
}

View File

@ -458,7 +458,7 @@ PluginEqGui::plot_impulse_phase(Gtk::Widget *w, cairo_t *cr)
float avgY = 0.0;
int avgNum = 0;
float width = w->get_width();
// float width = w->get_width();
float height = w->get_height();
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(cr, &extents);
float fontXOffset = extents.descent + 1.0;
// float fontXOffset = extents.descent + 1.0;
char buf[256];
@ -607,7 +607,7 @@ PluginEqGui::plot_impulse_amplitude(Gtk::Widget *w, cairo_t *cr)
float avgY = 0.0;
int avgNum = 0;
float width = w->get_width();
// float width = w->get_width();
float height = w->get_height();
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;
int avgNum = 0;
float width = w->get_width();
// float width = w->get_width();
float height = w->get_height();
cairo_set_source_rgb(cr, 0.0, 1.0, 0.0);

View File

@ -46,6 +46,7 @@ class PluginSelector : public ArdourDialog
void on_show ();
Gtk::Menu& plugin_menu ();
void show_manager ();
private:
PluginInterestedObject* interested_object;
@ -129,7 +130,6 @@ class PluginSelector : public ArdourDialog
void plugin_chosen_from_menu (const ARDOUR::PluginInfoPtr&);
Gtk::Menu* _menu;
void show_manager ();
};
#endif // __ardour_plugin_selector_h__

View File

@ -183,6 +183,22 @@ PluginUIWindow::on_leave_notify_event (GdkEventCrossing *ev)
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
PluginUIWindow::on_show ()
{
@ -295,10 +311,6 @@ PluginUIWindow::create_lv2_editor(boost::shared_ptr<PluginInsert> insert)
bool
PluginUIWindow::on_key_press_event (GdkEventKey* event)
{
if (non_gtk_gui) {
return false;
}
if (!key_press_focus_accelerator_handler (*this, event)) {
return PublicEditor::instance().on_key_press_event(event);
} else {
@ -347,6 +359,20 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
bypass_button.set_name ("PluginBypassButton");
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
@ -376,6 +402,7 @@ PlugUIBase::save_plugin_setting ()
prompter.set_prompt(_("Name of New Preset:"));
prompter.add_button (Gtk::Stock::ADD, Gtk::RESPONSE_ACCEPT);
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
prompter.set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY);
prompter.show_all();
@ -403,14 +430,29 @@ PlugUIBase::bypass_toggled ()
if ((x = bypass_button.get_active()) == insert->active()) {
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
PlugUIBase::update_presets ()
{

View File

@ -34,6 +34,8 @@
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/label.h>
#include <gtkmm/menu.h>
#include <gtkmm/image.h>
#include <gtkmm/adjustment.h>
#include <gtkmm/togglebutton.h>
#include <gtkmm/socket.h>
#include <gtkmm/comboboxtext.h>
@ -87,11 +89,16 @@ class PlugUIBase : public virtual sigc::trackable
Gtk::ComboBoxText preset_combo;
Gtk::Button save_button;
Gtk::ToggleButton bypass_button;
Gtk::EventBox focus_button;
LatencyGUI latency_gui;
Gtk::Image* focus_out_image;
Gtk::Image* focus_in_image;
void setting_selected();
void save_plugin_setting (void);
bool focus_toggled(GdkEventButton*);
void bypass_toggled();
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_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_release_event (GdkEventKey*);
void on_show ();

File diff suppressed because it is too large Load Diff

View File

@ -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_fixed_width(48);
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);
CellRendererText* renderer = dynamic_cast<CellRendererText*>(processor_display.get_column_cell_renderer (0));
@ -167,22 +167,11 @@ ProcessorBox::route_going_away ()
no_processor_redisplay = true;
}
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) {
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);
paste_processor_list (procs);
}
void
@ -310,7 +299,13 @@ ProcessorBox::processor_button_press_event (GdkEventButton *ev)
// this is purely informational but necessary
ProcessorSelected (processor); // emit
} else if (!processor && ev->button == 1 && ev->type == GDK_2BUTTON_PRESS) {
choose_plugin ();
_plugin_selector.show_manager ();
}
return ret;
}
@ -343,7 +338,7 @@ ProcessorBox::processor_button_release_event (GdkEventButton *ev)
show_processor_menu(ev->time);
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 */
@ -399,6 +394,10 @@ ProcessorBox::use_plugins (const SelectedPlugins& plugins)
boost::shared_ptr<Processor> processor (new PluginInsert (_session, *p, _placement));
Route::ProcessorStreams err_streams;
if (Config->get_new_plugins_active()) {
processor->set_active (true);
}
if (_route->add_processor (processor, &err_streams)) {
weird_plugin_dialog (**p, err_streams, _route);
@ -538,6 +537,9 @@ ProcessorBox::send_io_finished (IOSelector::Result r, boost::weak_ptr<Processor>
case IOSelector::Accepted:
_route->add_processor (processor);
if (Profile->get_sae()) {
processor->set_active (true);
}
break;
}
@ -775,9 +777,10 @@ ProcessorBox::cut_processors ()
no_processor_redisplay = true;
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 ();
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) {
// Do not copy processors or sends
if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0) {
// Do not copy inserts
if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0 ||
(boost::dynamic_pointer_cast<Send>((*i)) != 0)) {
node->add_child_nocopy ((*i)->get_state());
}
}
@ -905,11 +909,11 @@ ProcessorBox::paste_processors ()
}
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;
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);

Some files were not shown because too many files have changed in this diff Show More