drumstick  2.6.0
pianoscene.h
Go to the documentation of this file.
1 /*
2  Virtual Piano Widget for Qt5
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>
26 #include <drumstick/pianokeybd.h>
27 #include <drumstick/pianopalette.h>
28 #include "pianokey.h"
29 #include "keylabel.h"
30 
36 namespace 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 );
55  ~PianoScene();
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  signals:
150  void noteOn(int n, int v);
158  void noteOff(int n, int v);
164  void signalName(const QString& name);
165 
166  protected:
167  void showKeyOn( PianoKey *key, QColor color, int vel );
168  void showKeyOn( PianoKey *key, int vel );
169  void showKeyOff( PianoKey *key, int vel );
170  void displayKeyOn(PianoKey *key);
171  void keyOn( PianoKey *key );
172  void keyOff( PianoKey *key );
173  void keyOn( PianoKey *key, qreal pressure );
174  void keyOff( PianoKey *key, qreal pressure );
175  PianoKey *getKeyForPos( const QPointF &p ) const;
176  PianoKey *getPianoKey( const int key ) const;
177  QString noteName( PianoKey *key );
178  void mouseMoveEvent ( QGraphicsSceneMouseEvent *mouseEvent ) override;
179  void mousePressEvent ( QGraphicsSceneMouseEvent *mouseEvent ) override;
180  void mouseReleaseEvent ( QGraphicsSceneMouseEvent *mouseEvent ) override;
181  void keyPressEvent ( QKeyEvent *keyEvent ) override;
182  void keyReleaseEvent ( QKeyEvent *keyEvent ) override;
183  bool event(QEvent *event) override;
184 
185  void triggerNoteOn( const int note, const int vel );
186  void triggerNoteOff( const int note, const int vel );
187  int getNoteFromKey( const int key ) const;
188  void setHighlightColorFromPolicy(PianoKey *key, const int vel);
189 
190  private:
191  class PianoScenePrivate;
192  QScopedPointer<PianoScenePrivate> d;
193  };
194 
197 }} // namespace drumstick::widgets
198 
199 #endif /*PIANOSCENE_H_*/
The PianoHandler class callbacks.
Definition: pianokeybd.h:71
The QGraphicsScene class provides a surface for managing a large number of 2D graphical items...
The PianoScene class is a QGraphicsScene composed by a number of graphics items: the piano keys...
Definition: pianoscene.h:46
LabelOrientation
Labels Orientation.
Definition: pianokeybd.h:127
The PianoPalette class.
Definition: pianopalette.h:60
QHash< int, int > KeyboardMap
KeyboardMap.
Definition: pianokeybd.h:96
The QObject class is the base class of all Qt objects.
Declaration of the PianoKey class.
Drumstick common.
Definition: alsaclient.cpp:68
LabelVisibility
Labels Visibility.
Definition: pianokeybd.h:108
Declaration of the KeyLabel class.
LabelAlteration
Labels for Alterations.
Definition: pianokeybd.h:118
LabelCentralOctave
Labels Central Octave.
Definition: pianokeybd.h:145
Piano Keyboard Widget.
The QEvent class is the base class of all event classes.
Piano Palette declarations.