This is an effective NO-OP
* Some methods have been re-named to improve consistency
* Duplicate function calls were removed:
RouteUI::set_route() already updates mute/solo
MixerStrip does not have to update it again
* virtual methods have been protected
ConfigurationChanged() is emitted after processors have been
reconfigured (e.g adding/removing a plugin).
The button state needs to be updated after setup.
Bfore d6315618da this worked because _route->io_changed()
is emitted before the processors are re-configured, and
phase_control()->Changed() triggered an update after that.
PS. The motivation for d6315618da are Mixbusses. They have no input
channels, but a Return processor before the polarity processor.
This fixes an issue when trying to rename a send or insert
to the current name (no-rename).
::rename_processor() checks if io_name_is_legal(),
Since the current name is already in use, a numeric-suffix
was added.
Dumping errors to stderr only is not very useful. Particularly not
on Windows and MacOS.
Even though a user may not be able to address the issue, this
can lead to better reports vs just printing "corrupt state".
On session re-load only automation lanes with events were displayed,
regardless of visibility state. This allowed for inconsistent
state (menu showed them as visible even if they were not).
There are various ways to cancel a dialog. Only checking for
RESPONSE_CANCEL is not sufficient. e.g. Esc causes a delete-event.
* Gtk::RESPONSE_CLOSE
* Gtk::RESPONSE_REJECT
* Gtk::RESPONSE_DELETE_EVENT
* Gtk::RESPONSE_CANCEL
* Gtk::RESPONSE_NO
Among others this fixes "Clicking session > open,
then hitting ESC opens the currently selected folder and session"
If the file has a timestamp, it should be set in the region during import.
This keeps the BWF timestamp from being lost and allows the region context
menu item "Move to original Position" to work.
It does not affect where the region will be positioned during import. That
still follows the import dialog menu selection (playhead, session start,
etc). It just maintains data that the user can decided to use if needed.
This change also allows files to be imported to the source list and then
later placed on the timeline in the correct timestamped position.
So far this is only used for MIDI, missing audio files are
already handled by asking a user to locate them.
The same approach doesn't work for MIDI, since there cannot be
externally referenced (embedded) .mid files (since MIDI is destructive).
This API is not official, and the upcoming official API differs.
The source-code is left in-place since most of it will be
re-usable as-is, regardless.
This is required to toggle the strip to revert from aux-view
to the main route using the aux-send processor itself.
Discuss:
Perhaps this should be reverted, and ProcessorBox::edit_aux_send()
be removed: It is currently possible to create various
inconsistent mixer-states.
* use "Aux" on a Bus, then double-click some Internal-Send to
revert strips. But Aux remains active
* Removing sends while "Aux" is active does not disable Aux.
If the processor box was insensitive those issues won't be present.
However it is convenient to use double-click on the editor-mixer to
access a send's panner ...
If there's no GUI property for the MIDNAM model name, and the plugin has no MIDNAM, there's no reason to set the property to the default
It will pick up the default ("Generic") during update_patch_selector() calling into model_changed
Attempt to re-use GUI property for MIDNAM device mode, and if it doesn't exist, use the first from the model's device mode list.
Also require at least one device mode in the MIDNAM file (via assert) - consider anything else to be malformed
We do not store the MIDNAM model as a GUIObject property if the using the plugin-provided MIDNAM. Selecting a different MIDNAM for
the plugin should now result in that choice being saved/restored correctly.
This all feels crazily complicated, but I don't want to change more of the architecture at this time
This fixes an issue where the size of the window stayed much larger
than its content if there are no sessions in the session search path
after attempting to make a new session and then pressing "back"
* Use a single method to set mixer-strip widget sensitivity
* Update context-menu to only allow show actions that can
currently be performed, depending on active/inactive state.
* Mark all control elements of in-active strips as insenstive
except those required to re-enable the route.
* Also update processor-box and solo-button when showing Aux
Special case Mixbus. Mixbus already shows a "Insensitive" label,
and Mixbus-channelstrip element sensitivity remains to be
implemented before using this mechanism.
This specific change has broader scope than the bare minimum required - we could just move/replicate transport_ctrl.set_session()
after session_sensitive_actions have had their sensitivity set to true. But this "seems" like a more thorough solution,
in that it sets all relevant actions groups before doing anythng else.
gtk/gtksettings.c uses different default themes for
Window and Linux/Mac which results in subtle layout differences,
In particular TreeView headers and Tabs.
"MS-Windows" style is hardcoded in gtk msw_rc_style.c
and ardour's clearlooks.rc starts with different defaults.
This forces the default style to a non-existent one.
(might also help with https://tracker.ardour.org/view.php?id=5605)
Existing function select-all-tracks is now renamed select-all-visible-lanes, to match its behavior.
New function select-all-tracks will select all Tracks, as the name implies.
To maintain consistency for those users who actively used select-all-tracks,
the default shortcut ctrl+t will continue calling select-all-visible-lanes.
Inactive tracks will now hide all controls and display only the track name
in parenthesis.
Color-change is not sufficient by itself to distinguish an inactive track
from an active one (consider the case of just 2 tracks...)
When creating a session from the Editor (after Session > Close,
or directly via Session > New) the engine-dialog needs to be displayed
to allow configuring the sample-rate.
This also consolidates scripted session setup: meta_session_setup()
is now called from build_session(), instead of all callers.
This forces saving session-specific GUI settings (Playhead
position, zoom/scroll with stationary PH, window and pane
positions, etc.
While many GUI operations immediately cause an instant.xml
save, changing the playhead-pos in particular does not, nor
mark the session as modified.
This fixes an issue:
1. open session
2. move playhead
3. close session
4. re-open session, expect playhead at position from (2)
This should not happen -- VST gui_event_loop is only
started if LXVST_XDisplay is not NULL.
However the eventloop itself checks if LXVST_XDisplay is set,
so this might happen with headless builds that still have
access to a display, or due to some async event.
* remove Y-axis dependent velocity (difference between
black/white keys made this not very usable
* remove Bank/Patch selector (there are already three other
Bank/Patch UIs
* move keyboard-layout selection into Preferences > MIDI
Because (a) it makes the startup seem "very long and complicated",
and (b) sometimes fails or crashes weirdly,
or (c) a plugin dialog gets hidden behind the main window, or ...
Overall the first impression of the program may be horrible when
the first step includes discovering VST plugins.
This fixes an issue with arrow-keys (up/down, left/right). Those
were previously only handled when the Virtual Keyboard window itself
had focus.
Also key-repeat for pitch-bend is now ignored and a dedicated timer
is used to queue events. This fixes an issue with the first repeat
taking longer than successive ones, and makes this feature independent
of any desktop user settings.
This unconditionally returns the pitch-bend wheel when used
by mouse-drag/drop. Mouse-wheel retains the "wheel" mode.
<F1>-<F4> key-bindings have been added to jump to discrete values
Extra XML/GUI has not been in use since ages.
Automation Lane visibility is saved as GUIObjectState.
This properly marks DropDown Menu items as active when a
Plugin Automation Lane is displayed
With default QWERTY and QWERTZ layout some keys that are easily
accidentally pressed. Those triggered editor actions,
(e.g. "a" (audition), or "1" (edit-tool)) and are now ignored.
ArdourSans is based on Oxygen from https://fonts.google.com/
Copyright (c) 2012, vernon adams (vern@newtypography.co.uk)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
Declare DoubleArray in GUI context so that runtime uses the symbol
from the .exe (not the .dll).
This is mainly for the benefit of MSVC, that does not allow to use
LuaBridge_API in .exe
This fixes a missing symbol error due to the weird way how
Windows maps the same, identical symbols using different addresses
in .dll and .exe. Here specifically for
int luabridge::CFunc::vectorToArray<double, std::vector<double, std::allocator<double> > >(lua_State*)
which was added in 5e1a73a28c resulting in
gtk2_ardour/luainstance.cc error: explicit instantiation of 'static const void* luabridge::ClassInfo<T>::getStaticKey() [with T = std::vector<double>]' but no definition available [-fpermissive]
gtk2_ardour/luainstance.cc error: explicit instantiation of 'static const void* luabridge::ClassInfo<T>::getClassKey() [with T = std::vector<double>]' but no definition available [-fpermissive]
gtk2_ardour/luainstance.cc error: explicit instantiation of 'static const void* luabridge::ClassInfo<T>::getConstKey() [with T = std::vector<double>]' but no definition available [-fpermissive]
This fixes an workflow edge-case when undoing a paste in order
to paste at a different location on the same track or automation lane.
After undo, any accumulated paste-offset needs to be reset
Directly pack Lua Script buttons into top-level table,
use same size-constraints.
Use consistent Lua Action button width, in particular for buttons 10..12.
prefer "a" instead of "10" for default numeric label