Files
lmms/include/InstrumentSoundShapingView.h
Michael Gregorius 8821d88c09 InstrumentSoundShaping refactoring (#7229)
* Accessors for volume, cutoff, resonance

Add private accessors for the volume, cutoff and resonance parameters (envelope and LFO).

This makes the code less technical and more readable as it for example removes lots of static casts. The casts are now done in a special helper method that returns the parameters for a given target.

* Remove EnvelopeAndLfoParameters array

Remove the `EnvelopeAndLfoParameters` array and use explicit instances for volume, cutoff, resonance. This simplifies construction and initialization of the instances.

Besides the array this also removes the `Target` enum and the `NumTargets` value.

To simplify storage and retrieval of the parameters three private methods have been added which provide the node names of the volume, cutoff and resonance parameters.

Adjust `InstrumentSoundShapingView` to the removed `NumTargets` property.

* Use references instead of pointers

Use references to the volume, cutoff and resonance parameters instead of pointers.

* Remove friend relationship

Remove the friend relationship between `InstrumentSoundShaping` and its related view by providing the models via getters.

* Get rid of targetNames

Get rid of `InstrumentSoundShaping::targetNames` by using translations and strings directly. Move the remaining stuff into `InstrumentSoundShapingView` until it is removed there as well.

* Explicit EnvelopeAndLfoViews

Remove the array of EnvelopeAndLfoViews and use dedicated instances instead.

This also enables the final removal of the remaining `targetNames`.

* Move the code of some getters

Move the code of some getters into the header file.

* Several code review changes

Apply some code review proposals.

Co-authored-by: Sotonye Atemie <sakertooth@gmail.com>

---------

Co-authored-by: Sotonye Atemie <sakertooth@gmail.com>
2025-03-09 11:25:00 +01:00

79 lines
1.9 KiB
C++

/*
* InstrumentSoundShapingView.h - view for InstrumentSoundShaping class
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
* This file is part of LMMS - https://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program (see COPYING); if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
*/
#ifndef LMMS_GUI_INSTRUMENT_SOUND_SHAPING_VIEW_H
#define LMMS_GUI_INSTRUMENT_SOUND_SHAPING_VIEW_H
#include <QWidget>
#include "InstrumentSoundShaping.h"
#include "ModelView.h"
class QLabel;
namespace lmms::gui
{
class EnvelopeAndLfoView;
class ComboBox;
class GroupBox;
class Knob;
class TabWidget;
class InstrumentSoundShapingView : public QWidget, public ModelView
{
Q_OBJECT
public:
InstrumentSoundShapingView( QWidget * _parent );
~InstrumentSoundShapingView() override;
void setFunctionsHidden( bool hidden );
private:
void modelChanged() override;
InstrumentSoundShaping * m_ss = nullptr;
TabWidget * m_targetsTabWidget;
EnvelopeAndLfoView* m_volumeView;
EnvelopeAndLfoView* m_cutoffView;
EnvelopeAndLfoView* m_resonanceView;
// filter-stuff
GroupBox * m_filterGroupBox;
ComboBox * m_filterComboBox;
Knob * m_filterCutKnob;
Knob * m_filterResKnob;
QLabel* m_singleStreamInfoLabel;
};
} // namespace lmms::gui
#endif // LMMS_GUI_INSTRUMENT_SOUND_SHAPING_VIEW_H