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>
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  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 PianoHandler class callbacks.
Definition: pianokeybd.h:73
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:131
The PianoPalette class.
Definition: pianopalette.h:60
QHash< int, int > KeyboardMap
KeyboardMap.
Definition: pianokeybd.h:98
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:110
Declaration of the KeyLabel class.
LabelAlteration
Labels for Alterations.
Definition: pianokeybd.h:121
LabelCentralOctave
Labels Central Octave.
Definition: pianokeybd.h:151
Piano Keyboard Widget.
The QEvent class is the base class of all event classes.
Piano Palette declarations.