drumstick  2.0.0
pianoscene.h
Go to the documentation of this file.
1 /*
2  Virtual Piano Widget for Qt5
3  Copyright (C) 2008-2020, 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 <drumstick/pianokeybd.h>
26 #include <drumstick/pianopalette.h>
27 #include "pianokey.h"
28 #include "keylabel.h"
29 
35 namespace 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 );
54  ~PianoScene();
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 
125  signals:
133  void noteOn(int n, int v);
141  void noteOff(int n, int v);
147  void signalName(const QString& name);
148 
149  protected:
150  void showKeyOn( PianoKey *key, QColor color, int vel );
151  void showKeyOn( PianoKey *key, int vel );
152  void showKeyOff( PianoKey *key, int vel );
153  void displayKeyOn(PianoKey *key);
154  void keyOn( PianoKey *key );
155  void keyOff( PianoKey *key );
156  void keyOn( PianoKey *key, qreal pressure );
157  void keyOff( PianoKey *key, qreal pressure );
158  PianoKey *getKeyForPos( const QPointF &p ) const;
159  PianoKey *getPianoKey( const int key ) const;
160  QString noteName( PianoKey *key );
161  void mouseMoveEvent ( QGraphicsSceneMouseEvent *mouseEvent ) override;
162  void mousePressEvent ( QGraphicsSceneMouseEvent *mouseEvent ) override;
163  void mouseReleaseEvent ( QGraphicsSceneMouseEvent *mouseEvent ) override;
164  void keyPressEvent ( QKeyEvent *keyEvent ) override;
165  void keyReleaseEvent ( QKeyEvent *keyEvent ) override;
166  bool event(QEvent *event) override;
167 
168  void triggerNoteOn( const int note, const int vel );
169  void triggerNoteOff( const int note, const int vel );
170  int getNoteFromKey( const int key ) const;
171  void setHighlightColorFromPolicy(PianoKey *key, const int vel);
172  void hideOrShowKeys();
173  void refreshKeys();
174 
175  private:
176  class PianoScenePrivate;
177  QScopedPointer<PianoScenePrivate> d;
178  };
179 
182 }} // namespace drumstick::widgets
183 
184 #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:60
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.