piano.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. This file is part of QTau
  3. Copyright (C) 2013-2018 Tobias "Tomoko" Platen <tplaten@posteo.de>
  4. Copyright (C) 2013 digited <https://github.com/digited>
  5. Copyright (C) 2010-2013 HAL@ShurabaP <https://github.com/haruneko>
  6. QTau is free software: you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation, either version 3 of the License, or
  9. (at your option) any later version.
  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. You should have received a copy of the GNU General Public License
  15. along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. SPDX-License-Identifier: GPL-3.0+
  17. */
  18. #ifndef PIANO_H
  19. #define PIANO_H
  20. #include "Utils.h"
  21. #include <QWidget>
  22. #include <QDebug>
  23. class QPixmap;
  24. //write new PianoRoll that works using affine transformations and modulo 12
  25. class qtauPiano : public QWidget
  26. {
  27. Q_OBJECT
  28. public:
  29. qtauPiano(QWidget *parent = 0);
  30. ~qtauPiano();
  31. void setOffset(int voff);
  32. void configure(const SNoteSetup &newSetup);
  33. signals:
  34. void keyPressed (int keyNum);
  35. void keyReleased(int keyNum);
  36. void scrolled(int delta);
  37. void heightChanged(int newHeight);
  38. public slots:
  39. //
  40. protected:
  41. void paintEvent (QPaintEvent *event);
  42. void resizeEvent (QResizeEvent *event);
  43. void mouseDoubleClickEvent(QMouseEvent *event);
  44. void mouseMoveEvent (QMouseEvent *event);
  45. void mousePressEvent (QMouseEvent *event);
  46. void mouseReleaseEvent (QMouseEvent *event);
  47. void wheelEvent (QWheelEvent *event);
  48. //UNUSED: void onHover(bool inside);
  49. //bool eventFilter(QObject *object, QEvent *event);
  50. void initPiano(int baseOctave, int octavesNum);
  51. QPoint _offset; // graphical offset of keys, used for virtual scrolling
  52. QPixmap *_labelCache;
  53. public:
  54. //-------------------------------------------------------------
  55. typedef enum {
  56. Passive = 0,
  57. Pressed,
  58. Highlighted
  59. } pianoKeyState;
  60. protected:
  61. int _pressedKey;
  62. int _hoveredKey;
  63. SNoteSetup _ns;
  64. };
  65. #endif // PIANO_H