drumstick 2.7.2
pianoscene.h
Go to the documentation of this file.
1/*
2 Virtual Piano Widget for Qt
3 Copyright (C) 2008-2022, 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>
25#include <QTouchEvent>
28#include "pianokey.h"
29#include "keylabel.h"
30
36namespace drumstick { namespace widgets {
37
46 class DRUMSTICK_EXPORT PianoScene : public QGraphicsScene
47 {
48 Q_OBJECT
49 public:
50 PianoScene ( const int baseOctave,
51 const int numKeys,
52 const int startKey,
53 const QColor& keyPressedColor = QColor(),
54 QObject * parent = nullptr );
56
57 QSize sizeHint() const;
58 void setKeyboardMap( KeyboardMap *map );
59 KeyboardMap *getKeyboardMap() const;
60 PianoHandler *getPianoHandler() const;
61 void setPianoHandler(PianoHandler *handler);
62
63 PianoPalette getHighlightPalette();
64 void setHighlightPalette( const PianoPalette& p );
65 PianoPalette getBackgroundPalette();
66 void setBackgroundPalette( const PianoPalette& p );
67 PianoPalette getForegroundPalette();
68 void setForegroundPalette( const PianoPalette& p );
69
70 bool showColorScale() const;
71 void setShowColorScale(const bool show);
72
73 QColor getKeyPressedColor() const;
74 void setKeyPressedColor(const QColor& color);
75 void resetKeyPressedColor();
76
77 int getMinNote() const;
78 void setMinNote(const int note);
79 int getMaxNote() const;
80 void setMaxNote(const int note);
81 int getTranspose() const;
82 void setTranspose(const int transpose);
83
84 LabelVisibility showLabels() const;
85 void setShowLabels(const LabelVisibility show);
86 LabelAlteration alterations() const;
87 void setAlterations(const LabelAlteration use);
88 LabelCentralOctave getOctave() const;
89 void setOctave(const LabelCentralOctave octave);
90 LabelOrientation getOrientation() const;
91 void setOrientation(const LabelOrientation orientation);
92
93 bool isKeyboardEnabled() const;
94 void setKeyboardEnabled( const bool enable );
95 bool isMouseEnabled() const;
96 void setMouseEnabled( const bool enable );
97 bool isTouchEnabled() const;
98 void setTouchEnabled( const bool enable );
99 bool velocityTint() const;
100 void setVelocityTint( const bool enable );
101 bool isOctaveStart( const int note );
102
103 void showNoteOn( const int note, QColor color, int vel = -1 );
104 void showNoteOn( const int note, int vel = -1 );
105 void showNoteOff( const int note, int vel = -1 );
106 int baseOctave() const;
107 void setBaseOctave( const int base );
108 int numKeys() const;
109 int startKey() const;
110 void allKeysOff();
111 void keyOn( const int note );
112 void keyOff( const int note );
113 bool getRawKeyboardMode() const;
114 void setRawKeyboardMode(const bool b);
115 void useCustomNoteNames(const QStringList& names);
116 void useStandardNoteNames();
117 QStringList customNoteNames() const;
118 QStringList standardNoteNames() const;
119 int getVelocity();
120 void setVelocity(const int velocity);
121 int getChannel() const;
122 void setChannel(const int channel);
123 void retranslate();
124 void refreshLabels();
125 void hideOrShowKeys();
126 void refreshKeys();
127
128 void setKeyPicture(const bool natural, const QPixmap& pix);
129 QPixmap getKeyPicture(const bool natural);
130
131 void setUseKeyPictures(const bool enable);
132 bool getUseKeyPictures() const;
133
134 void saveData(QByteArray& ba);
135 void loadData(QByteArray& ba);
136
137 bool touchScreenEvent(QTouchEvent *touchEvent);
138
139 void setUsingNativeFilter(const bool newState);
140 bool isUsingNativeFilter() const;
141
142 void setOctaveSubscript(const bool enable);
143 bool octaveSubscript() const;
144
145 signals:
153 void noteOn(int n, int v);
161 void noteOff(int n, int v);
167 void signalName(const QString& name);
168
169 protected:
170 void showKeyOn( PianoKey *key, QColor color, int vel );
171 void showKeyOn( PianoKey *key, int vel );
172 void showKeyOff( PianoKey *key, int vel );
173 void displayKeyOn(PianoKey *key);
174 void keyOn( PianoKey *key );
175 void keyOff( PianoKey *key );
176 void keyOn( PianoKey *key, qreal pressure );
177 void keyOff( PianoKey *key, qreal pressure );
178 PianoKey *getKeyForPos( const QPointF &p ) const;
179 PianoKey *getPianoKey( const int key ) const;
180 QString noteName( PianoKey *key );
181 void mouseMoveEvent ( QGraphicsSceneMouseEvent *mouseEvent ) override;
182 void mousePressEvent ( QGraphicsSceneMouseEvent *mouseEvent ) override;
183 void mouseReleaseEvent ( QGraphicsSceneMouseEvent *mouseEvent ) override;
184 void keyPressEvent ( QKeyEvent *keyEvent ) override;
185 void keyReleaseEvent ( QKeyEvent *keyEvent ) override;
186 bool event(QEvent *event) override;
187
188 void triggerNoteOn( const int note, const int vel );
189 void triggerNoteOff( const int note, const int vel );
190 int getNoteFromKey( const int key ) const;
191 void setHighlightColorFromPolicy(PianoKey *key, const int vel);
192
193 private:
194 class PianoScenePrivate;
195 QScopedPointer<PianoScenePrivate> d;
196 };
197
200}} // namespace drumstick::widgets
201
202#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:74
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:47
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:121
LabelCentralOctave
Labels Central Octave.
Definition: pianokeybd.h:151
LabelVisibility
Labels Visibility.
Definition: pianokeybd.h:110
LabelOrientation
Labels Orientation.
Definition: pianokeybd.h:131
QHash< int, int > KeyboardMap
KeyboardMap.
Definition: pianokeybd.h:98
Declaration of the KeyLabel class.
Drumstick common.
Definition: alsaclient.cpp:68
Declaration of the PianoKey class.
Piano Keyboard Widget.
Piano Palette declarations.