LMMS
Loading...
Searching...
No Matches
FloatModelEditorBase.h
Go to the documentation of this file.
1/*
2 * FloatModelEditorBase.h - Base editor for float models
3 *
4 * Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
5 * Copyright (c) 2023 Michael Gregorius
6 * Copyright (c) 2026 Dalton Messmer <messmer.dalton/at/gmail.com>
7 *
8 * This file is part of LMMS - https://lmms.io
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public
12 * License as published by the Free Software Foundation; either
13 * version 2 of the License, or (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public
21 * License along with this program (see COPYING); if not, write to the
22 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
23 * Boston, MA 02110-1301 USA.
24 *
25 */
26
27#ifndef LMMS_GUI_FLOAT_MODEL_EDITOR_BASE_H
28#define LMMS_GUI_FLOAT_MODEL_EDITOR_BASE_H
29
30#include <QWidget>
31#include <QPoint>
32#include <optional>
33
35
36namespace lmms::gui
37{
38
39class SimpleTextFloat;
40
41class LMMS_EXPORT FloatModelEditorBase : public QWidget, public FloatModelView
42{
43 Q_OBJECT
44
45 void initUi(const QString & name);
46
47public:
48 enum class DirectionOfManipulation : bool
49 {
50 Vertical,
51 Horizontal
52 };
53
54 FloatModelEditorBase(DirectionOfManipulation directionOfManipulation = DirectionOfManipulation::Vertical, QWidget * _parent = nullptr, const QString & _name = QString());
56
57 // TODO: remove
58 inline void setHintText(const QString & txt_before, const QString & txt_after)
59 {
60 setDescription(txt_before);
61 setUnit(txt_after);
62 }
63
64signals:
67 void sliderMoved(float value);
68
69protected:
70 void contextMenuEvent(QContextMenuEvent * me) override;
71 void dragEnterEvent(QDragEnterEvent * dee) override;
72 void dropEvent(QDropEvent * de) override;
73 void focusOutEvent(QFocusEvent * fe) override;
74 void mousePressEvent(QMouseEvent * me) override;
75 void mouseReleaseEvent(QMouseEvent * me) override;
76 void mouseMoveEvent(QMouseEvent * me) override;
77 void mouseDoubleClickEvent(QMouseEvent * me) override;
78 void paintEvent(QPaintEvent * me) override;
79 void wheelEvent(QWheelEvent * me) override;
80
81#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
82 void enterEvent(QEnterEvent*) override;
83#else
84 void enterEvent(QEvent*) override;
85#endif
86 void leaveEvent(QEvent *event) override;
87
88 virtual float getValue(const QPoint & p);
89
102 virtual QString getCustomFloatingText();
103
118 virtual std::optional<QString> getCustomFloatingTextUpdate()
119 {
120 return getCustomFloatingText();
121 }
122
123 void doConnections() override;
124
125 void showTextFloat(int msecBeforeDisplay, int msecDisplayTime);
126 void showTextFloat();
127
128 const SimpleTextFloat& textFloat() const { return *s_textFloat; }
129
130 void setPosition(const QPoint & p);
131
132 inline float pageSize() const
133 {
134 return (model()->maxValue() - model()->minValue()) / 100.0f;
135 }
136
140
142
143private slots:
144 virtual void enterValue();
145 void friendlyUpdate();
146 void toggleScale();
147
148private:
150};
151
152} // namespace lmms::gui
153
154#endif // LMMS_GUI_FLOAT_MODEL_EDITOR_BASE_H
void setUnit(const QString &unit)
Definition AutomatableModelView.h:69
void setDescription(const QString &desc)
Definition AutomatableModelView.h:64
T value() const
Definition AutomatableModelView.h:59
Definition FloatModelEditorBase.h:42
float pageSize() const
Definition FloatModelEditorBase.h:132
void mousePressEvent(QMouseEvent *me) override
Definition FloatModelEditorBase.cpp:174
void enterEvent(QEnterEvent *) override
Definition FloatModelEditorBase.cpp:247
FloatModelEditorBase(DirectionOfManipulation directionOfManipulation=DirectionOfManipulation::Vertical, QWidget *_parent=nullptr, const QString &_name=QString())
default ctor
Definition FloatModelEditorBase.cpp:52
void toggleScale()
Definition FloatModelEditorBase.cpp:140
QPoint m_lastMousePos
mouse position in last mouseMoveEvent
Definition FloatModelEditorBase.h:137
const SimpleTextFloat & textFloat() const
Definition FloatModelEditorBase.h:128
void setHintText(const QString &txt_before, const QString &txt_after)
Definition FloatModelEditorBase.h:58
DirectionOfManipulation
Definition FloatModelEditorBase.h:49
void leaveEvent(QEvent *event) override
Definition FloatModelEditorBase.cpp:256
bool m_buttonPressed
Definition FloatModelEditorBase.h:139
void paintEvent(QPaintEvent *me) override
Definition FloatModelEditorBase.cpp:276
void wheelEvent(QWheelEvent *me) override
Definition FloatModelEditorBase.cpp:298
void initUi(const QString &name)
to be called by ctors
Definition FloatModelEditorBase.cpp:62
virtual void enterValue()
Definition FloatModelEditorBase.cpp:389
virtual std::optional< QString > getCustomFloatingTextUpdate()
Definition FloatModelEditorBase.h:118
FloatModelEditorBase(const FloatModelEditorBase &other)=delete
void focusOutEvent(QFocusEvent *fe) override
Definition FloatModelEditorBase.cpp:262
DirectionOfManipulation m_directionOfManipulation
Definition FloatModelEditorBase.h:141
virtual QString getCustomFloatingText()
Definition FloatModelEditorBase.cpp:438
void mouseDoubleClickEvent(QMouseEvent *me) override
Definition FloatModelEditorBase.cpp:270
static SimpleTextFloat * s_textFloat
Definition FloatModelEditorBase.h:149
void mouseMoveEvent(QMouseEvent *me) override
Definition FloatModelEditorBase.cpp:209
void contextMenuEvent(QContextMenuEvent *me) override
Definition FloatModelEditorBase.cpp:122
float m_leftOver
Definition FloatModelEditorBase.h:138
void friendlyUpdate()
Definition FloatModelEditorBase.cpp:412
void dropEvent(QDropEvent *de) override
Definition FloatModelEditorBase.cpp:154
virtual float getValue(const QPoint &p)
Definition FloatModelEditorBase.cpp:103
void mouseReleaseEvent(QMouseEvent *me) override
Definition FloatModelEditorBase.cpp:226
void dragEnterEvent(QDragEnterEvent *dee) override
Definition FloatModelEditorBase.cpp:147
Definition SimpleTextFloat.h:39
FloatModel * model()
Definition AutomatableModelView.h:121
static const char * name
Definition pugl.h:1582
Definition AudioPortAudio.cpp:209
TypedModelView< FloatModel > FloatModelView
Definition AutomatableModelView.h:131
uch * p
Definition crypt.c:594