Adjust the dialogs of most audio driver settings dialogs by showing them
in a QGroupBox and adjusting their layouts. All dialogs now use
`QFormLayout` to layout their labels and input widgets.
Technical details
------------------
Introduce `AudioDeviceSetupGroupWidget` which is intended to
functionally replace `AudioDeviceSetupWidget` in the long run. This is
likely a temporary replacement in the sense that
`AudioDeviceSetupGroupWidget` will be renamed to
`AudioDeviceSetupWidget` once the latter has been replaced everywhere.
Both classes are very similar and the only difference is that the former
inherits from `QGroupBox` instead of `TabWidget`.
Adjust the using of AswMap so that it is now defined as a map from
`QString` to `AudioDeviceSetupGroupWidget`.
Use `QFormLayout` to layout the widgets of the setup dialogs instead of
hard coding geometries and placement.
TODOs
------
Adjust the widgets for the SoundIO and SndIo cases. These will be a bit
more effort as they are not compiled on my machine.
Adjust the plugins group to also use a QGroupBox and QCheckBoxes. This
finishes the "Performance" page and also finally enables the removal of
the local variables `XDelta` and `YDelta` as well as the lambda
`addLedCheckBox`.
Other changes
--------------
Add a TODO to some unused code for some advanced setting.
Fix layout of the main widget and the buttons widget. Remove an
erroneous ",1" after a statement.
Make the setup dialog resizable and use widgets that dynamically adjust
to the font size set by the user.
Current status of the tabs:
* General: Done
* Performance: Plugins group needs adjustments
* Audio: Individual settings dialogs need adjustments
* MIDI: Not started yet
* Paths: Done
The "Autosave" and "Buffer size" tabs have been slightly redesigned so
that the revert/reset button is next to the slider.
Technical details
------------------
Setting a fixed size has been removed from the setup dialog so that it
can be resized.
The settings widget (`settings_w`) now has a layout to which the sub
dialogs are added. This is done so that the layout sizes are propagated
upwards, i.e. all widgets along the chain now have a layout so that size
hints are determined correctly.
Instances of `TabWidget` are replaced with instances of `QGroupBox`.
Each group box has a layout to which its children, e.g. check boxes, are
added. These group boxes are then added to the layouts of their parents.
Doing so also removes the need to count how many instances have been
added and calculations on where to put the children.
Instances of `LedCheckBox` are replaced with instances of `QCheckBox`.
This is done in the new helper lambda `addCheckBox`. It's very similar
to the previously used `addLedCheckBox` but creates a `QCheckBox`
instead of a `LedCheckBox`. It returns the created `QCheckBox` as a
result. If a layout is provided the created check box is also added to
the layout before it is returned.
The helper lambda `addPathEntry` has been adjusted to create a
`QGroupBox` and to put all its children in a layout.
The helper method `labelWidget` has been adjusted to not set the font
size of the label.
The method `TabBar::addTab` had to be extended with a new default
parameter which controls if the added widget is fixed to the size of
it's parent or not. In the case of the setup dialog we do not want this.
So far the method is only used by the setup dialog and the
`LadspaBrowser` class. So once the `LadspaBrowser` has been made
resizable the default parameter can be removed again and treated as
always being set to false.
Add `QCheckBox` to the `style.css` so that it does not get a green font
due to the palette magic that's done.
Move the implementation of the Model methods into Model.cpp so that
recompiles after changes are much quicker. Make Model::
isDefaultConstructed const.
Fix a crash that occurs if the zooming or snapping model of the Song
Editor is used for automation.
The crash is caused by a failed static_cast to a Model* in
Model::parentModel(). The cast fails because in the constructor of
SongEditor the SongEditor is set as the parent of the zooming and
snapping model:
m_zoomingModel->setParent(this);
m_snappingModel->setParent(this);
This commit is rather a "band aid" fix because it only fixes the crash
by changing the static_cast to a dynamic_cast. However this means that
the name of the automation clip is initially empty.
A better solution would be to not use the Qt parent/child relationships
to implement the model hierarchies.
* Add confirm removal on mixer channels
Add confirm removal popup when the user calls the action "remove channel" on a mixer channel that is in use (receives audio from other channel or track). Set a config variable to keep track if the user don't want to be asked again. Adding a scroll on settings-general tab because there weren't enough space on the area.
* Core Mixer function channel in use
New core Mixer function to check if a given channel is in use (receives audio)
---------
Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
Co-authored-by: saker <sakertooth@Gmail.com>
* Add <QHash> to PluginFactory.h
* Handle one more deprecated QTextStream::endl
* Replace QLayout::setMargin with setContentsMargins
* Replace Qt::MidButton with Qt::MiddleButton
* Replace QPalette::Background with QPalette::Window
* Fix deprecation warnings in LcdFloatSpinBox
Introduce the new class SimpleTextFloat which simply shows a text and
that works like a pseudo tool tip with a narrow margin. It was extracted
from TextFloat to adhere to the single responsibility principle.
The new class is used by:
* Fader: display the current volume when moving the fader
* Knob: display the current value when the knob is moved
* PianoRoll: display the current value when setting the note volume and
panning
Add stylings for the new widget in style.css.
Improve the readability of text floats by removing the hard coded pixel
font size. The widget is now composed of three QLabels which are used to
display the title, text and pixmap. Remove the methods paintEvent and
updateSize because the widget is now updated automatically whenever the
QLabels change state.
Merge both versions of TextFloat::displayMessage because one of them was
only called by the other.
The default constructor of TextFloat now delegates to the "full"
constructor. The latter is private because it is only used from within
displayMessage.
The methods setTitle, setText and setPixmap show/hide their
corresponding labels depending on whether there is text or a pixmap to
show.
Adjust the class Fader so that the text float is shown to the right of
the fader. Otherwise the new implementation would have covered the fader
while it is being moved.
* Position line height fits all tracks when line is moved or updated
* Refactor track height calculation; create connection to update position line height
* Transpose midi clips in song editor
* Fix undo stupidity
* Check boundries when transposing clips
and move transpose function to NoteVector
* Avoid update if nothing has changed
* Make getNoteBounds a separate function
* Rename getNoteBounds to boundsForNotes
* bool operator instead of optional + qobject_cast
* Revert "bool operator instead of optional + qobject_cast"
This reverts commit 98c56a96cf.
* qobject_cast and nullopt