drumstick 2.3.1
pianoscene.h
Go to the documentation of this file.
1/*
2 Virtual Piano Widget for Qt5
3 Copyright (C) 2008-2021, Pedro Lopez-Cabanillas <plcl@users.sf.net>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License along
16 with this program; If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#ifndef PIANOSCENE_H_
20#define PIANOSCENE_H_
21
22#include <QGraphicsScene>
23#include <QScopedPointer>
24#include <QHash>
27#include "pianokey.h"
28#include "keylabel.h"
29
35namespace drumstick { namespace widgets {
36
45 class DRUMSTICK_EXPORT PianoScene : public QGraphicsScene
46 {
47 Q_OBJECT
48 public:
49 PianoScene ( const int baseOctave,
50 const int numKeys,
51 const int startKey,
52 const QColor& keyPressedColor = QColor(),
53 QObject * parent = nullptr );
55
56 QSize sizeHint() const;
57 void setKeyboardMap( KeyboardMap *map );
58 KeyboardMap *getKeyboardMap() const;
59 PianoHandler *getPianoHandler() const;
60 void setPianoHandler(PianoHandler *handler);
61
62 PianoPalette getHighlightPalette();
63 void setHighlightPalette( const PianoPalette& p );
64 PianoPalette getBackgroundPalette();
65 void setBackgroundPalette( const PianoPalette& p );
66 PianoPalette getForegroundPalette();
67 void setForegroundPalette( const PianoPalette& p );
68
69 bool showColorScale() const;
70 void setShowColorScale(const bool show);
71
72 QColor getKeyPressedColor() const;
73 void setKeyPressedColor(const QColor& color);
74 void resetKeyPressedColor();
75
76 int getMinNote() const;
77 void setMinNote(const int note);
78 int getMaxNote() const;
79 void setMaxNote(const int note);
80 int getTranspose() const;
81 void setTranspose(const int transpose);
82
83 LabelVisibility showLabels() const;
84 void setShowLabels(const LabelVisibility show);
85 LabelAlteration alterations() const;
86 void setAlterations(const LabelAlteration use);
87 LabelCentralOctave getOctave() const;
88 void setOctave(const LabelCentralOctave octave);
89 LabelOrientation getOrientation() const;
90 void setOrientation(const LabelOrientation orientation);
91
92 bool isKeyboardEnabled() const;
93 void setKeyboardEnabled( const bool enable );
94 bool isMouseEnabled() const;
95 void setMouseEnabled( const bool enable );
96 bool isTouchEnabled() const;
97 void setTouchEnabled( const bool enable );
98 bool velocityTint() const;
99 void setVelocityTint( const bool enable );
100 bool isOctaveStart( const int note );
101
102 void showNoteOn( const int note, QColor color, int vel = -1 );
103 void showNoteOn( const int note, int vel = -1 );
104 void showNoteOff( const int note, int vel = -1 );
105 int baseOctave() const;
106 void setBaseOctave( const int base );
107 int numKeys() const;
108 int startKey() const;
109 void allKeysOff();
110 void keyOn( const int note );
111 void keyOff( const int note );
112 bool getRawKeyboardMode() const;
113 void setRawKeyboardMode(const bool b);
114 void useCustomNoteNames(const QStringList& names);
115 void useStandardNoteNames();
116 QStringList customNoteNames() const;
117 QStringList standardNoteNames() const;
118 int getVelocity();
119 void setVelocity(const int velocity);
120 int getChannel() const;
121 void setChannel(const int channel);
122 void retranslate();
123 void refreshLabels();
124 void hideOrShowKeys();
125 void refreshKeys();
126
127 void setKeyPicture(const bool natural, const QPixmap& pix);
128 QPixmap getKeyPicture(const bool natural);
129
130 void setUseKeyPictures(const bool enable);
131 bool getUseKeyPictures() const;
132
133 void saveData(QByteArray& ba);
134 void loadData(QByteArray& ba);
135
136 signals:
144 void noteOn(int n, int v);
152 void noteOff(int n, int v);
158 void signalName(const QString& name);
159
160 protected:
161 void showKeyOn( PianoKey *key, QColor color, int vel );
162 void showKeyOn( PianoKey *key, int vel );
163 void showKeyOff( PianoKey *key, int vel );
164 void displayKeyOn(PianoKey *key);
165 void keyOn( PianoKey *key );
166 void keyOff( PianoKey *key );
167 void keyOn( PianoKey *key, qreal pressure );
168 void keyOff( PianoKey *key, qreal pressure );
169 PianoKey *getKeyForPos( const QPointF &p ) const;
170 PianoKey *getPianoKey( const int key ) const;
171 QString noteName( PianoKey *key );
172 void mouseMoveEvent ( QGraphicsSceneMouseEvent *mouseEvent ) override;
173 void mousePressEvent ( QGraphicsSceneMouseEvent *mouseEvent ) override;
174 void mouseReleaseEvent ( QGraphicsSceneMouseEvent *mouseEvent ) override;
175 void keyPressEvent ( QKeyEvent *keyEvent ) override;
176 void keyReleaseEvent ( QKeyEvent *keyEvent ) override;
177 bool event(QEvent *event) override;
178
179 void triggerNoteOn( const int note, const int vel );
180 void triggerNoteOff( const int note, const int vel );
181 int getNoteFromKey( const int key ) const;
182 void setHighlightColorFromPolicy(PianoKey *key, const int vel);
183
184 private:
185 class PianoScenePrivate;
186 QScopedPointer<PianoScenePrivate> d;
187 };
188
191}} // namespace drumstick::widgets
192
193#endif /*PIANOSCENE_H_*/
The QEvent class is the base class of all event classes.
The QGraphicsScene class provides a surface for managing a large number of 2D graphical items.
The QObject class is the base class of all Qt objects.
The PianoHandler class callbacks.
Definition: pianokeybd.h:72
The PianoPalette class.
Definition: pianopalette.h:61
The PianoScene class is a QGraphicsScene composed by a number of graphics items: the piano keys.
Definition: pianoscene.h:46
void noteOff(int n, int v)
This signal is emitted for each Note Off MIDI event created using the computer keyboard,...
void signalName(const QString &name)
signalName is emitted for each note created, and contains a string with the MIDI note number and the ...
void noteOn(int n, int v)
This signal is emitted for each Note On MIDI event created using the computer keyboard,...
LabelAlteration
Labels for Alterations.
Definition: pianokeybd.h:118
LabelCentralOctave
Labels Central Octave.
Definition: pianokeybd.h:145
LabelVisibility
Labels Visibility.
Definition: pianokeybd.h:108
LabelOrientation
Labels Orientation.
Definition: pianokeybd.h:127
QHash< int, int > KeyboardMap
KeyboardMap.
Definition: pianokeybd.h:96
Declaration of the KeyLabel class.
Drumstick common.
Definition: alsaclient.cpp:68
Declaration of the PianoKey class.
Piano Keyboard Widget.
Piano Palette declarations.