/* * MixerChannelView.h * * Copyright (c) 2024 saker * * 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_MIXER_CHANNEL_VIEW_H #define LMMS_GUI_MIXER_CHANNEL_VIEW_H #include #include #include #include #include #include #include "EffectRackView.h" #include "Fader.h" #include "Knob.h" #include "LcdWidget.h" #include "PixmapButton.h" #include "SendButtonIndicator.h" namespace lmms { class MixerChannel; } namespace lmms::gui { class PeakIndicator; class MixerChannelView : public QWidget { Q_OBJECT Q_PROPERTY(QBrush backgroundActive READ backgroundActive WRITE setBackgroundActive) Q_PROPERTY(QColor strokeOuterActive READ strokeOuterActive WRITE setStrokeOuterActive) Q_PROPERTY(QColor strokeOuterInactive READ strokeOuterInactive WRITE setStrokeOuterInactive) Q_PROPERTY(QColor strokeInnerActive READ strokeInnerActive WRITE setStrokeInnerActive) Q_PROPERTY(QColor strokeInnerInactive READ strokeInnerInactive WRITE setStrokeInnerInactive) public: MixerChannelView(QWidget* parent, MixerView* mixerView, int channelIndex); void paintEvent(QPaintEvent* event) override; void contextMenuEvent(QContextMenuEvent*) override; void mousePressEvent(QMouseEvent*) override; void mouseDoubleClickEvent(QMouseEvent*) override; void keyPressEvent(QKeyEvent* ke) override; void reset(); int channelIndex() const { return m_channelIndex; } void setChannelIndex(int index); QBrush backgroundActive() const { return m_backgroundActive; } void setBackgroundActive(const QBrush& c) { m_backgroundActive = c; } QColor strokeOuterActive() const { return m_strokeOuterActive; } void setStrokeOuterActive(const QColor& c) { m_strokeOuterActive = c; } QColor strokeOuterInactive() const { return m_strokeOuterInactive; } void setStrokeOuterInactive(const QColor& c) { m_strokeOuterInactive = c; } QColor strokeInnerActive() const { return m_strokeInnerActive; } void setStrokeInnerActive(const QColor& c) { m_strokeInnerActive = c; } QColor strokeInnerInactive() const { return m_strokeInnerInactive; } void setStrokeInnerInactive(const QColor& c) { m_strokeInnerInactive = c; } Fader* fader() const { return m_fader; } public slots: void renameChannel(); void resetColor(); void selectColor(); void randomizeColor(); private slots: void renameFinished(); void removeChannel(); void removeUnusedChannels(); void moveChannelLeft(); void moveChannelRight(); private: bool confirmRemoval(int index); QString elideName(const QString& name); MixerChannel* mixerChannel() const; auto isMasterChannel() const -> bool { return m_channelIndex == 0; } private: SendButtonIndicator* m_sendButton; QLabel* m_receiveArrow; QStackedWidget* m_receiveArrowOrSendButton; int m_receiveArrowStackedIndex = -1; int m_sendButtonStackedIndex = -1; Knob* m_sendKnob; LcdWidget* m_channelNumberLcd; QLineEdit* m_renameLineEdit; QGraphicsView* m_renameLineEditView; QLabel* m_sendArrow; AutomatableButton* m_muteButton; AutomatableButton* m_soloButton; PeakIndicator* m_peakIndicator = nullptr; Fader* m_fader; EffectRackView* m_effectRackView; MixerView* m_mixerView; int m_channelIndex = 0; bool m_inRename = false; QBrush m_backgroundActive; QColor m_strokeOuterActive; QColor m_strokeOuterInactive; QColor m_strokeInnerActive; QColor m_strokeInnerInactive; friend class MixerView; }; } // namespace lmms::gui #endif // LMMS_GUI_MIXER_CHANNEL_VIEW_H