File: enableplayforwidget.cpp

package info (click to toggle)
musescore 2.0.3%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 202,532 kB
  • ctags: 58,769
  • sloc: cpp: 257,595; xml: 172,226; ansic: 139,931; python: 6,565; sh: 6,383; perl: 423; makefile: 290; awk: 142; pascal: 67; sed: 3
file content (66 lines) | stat: -rw-r--r-- 2,643 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "enableplayforwidget.h"
#include "musescore.h"

namespace Ms {


EnablePlayForWidget::EnablePlayForWidget(QWidget* target)
      {
      QAction* playAction = getAction("play");
      _target = target;
      _localPlayAction = new QAction(_target);
      _localPlayAction->setData(playAction->data());
      _localPlayAction->setCheckable(playAction->isCheckable());
      _localPlayAction->setChecked(playAction->isChecked());
      _localPlayAction->setShortcuts(playAction->shortcuts());
      _localPlayAction->setShortcutContext(Qt::WidgetShortcut);
      _target->addAction(_localPlayAction);
      qApp->installEventFilter(_target);
      QObject::connect(_localPlayAction, SIGNAL(triggered()), mscore->playButton(), SLOT(click()));
      }

void EnablePlayForWidget::showEvent(QShowEvent*)
      {
      _target->setFocus();
      }

//--------------------------------------------------------------------------------------------------
// eventFilter
//
// If any child of the target widget has focus when Escape Key is pressed it loses the focus
// and the target gains focus
// Also, it makes sure that the global play action and _localPlayAction always have the same shortcut
//--------------------------------------------------------------------------------------------------
bool EnablePlayForWidget::eventFilter(QObject* obj, QEvent* e)
      {
      if (obj == getAction("play")) {
            _localPlayAction->setShortcuts(getAction("play")->shortcuts());
            }

      if (obj->isWidgetType() &&
          e->type() == QEvent::KeyPress &&
          obj != _target && // if obj == target, it means that the target has the focus. this case is handled by target::keyPressEvent
          _target->isAncestorOf(static_cast<QWidget*>(obj))) {
            QKeyEvent* ev = static_cast<QKeyEvent*>(e);
            if (ev->key() == Qt::Key_Escape && ev->modifiers() == Qt::NoModifier) {
                  _target->setFocus();
                  return true;
                  }
            }
      return false;
      }

//-----------------------------------------------------------------------
// connectLocalPlayToDifferentSlot
//
// Note: the _localPlayAction will always be connected to only one slot
// in order not to trigger the global play action twice
// By default it's set to click the play button from the main window
//-----------------------------------------------------------------------

void EnablePlayForWidget::connectLocalPlayToDifferentSlot(QObject *obj, const char *id)
      {
      _localPlayAction->disconnect();
      QObject::connect(_localPlayAction, SIGNAL(triggered()), obj, id);
      }
}