File: toolbuttonmenu.h

package info (click to toggle)
musescore 2.3.2%2Bdfsg2-7~deb10u1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 187,932 kB
  • sloc: cpp: 264,610; xml: 176,707; sh: 3,311; ansic: 1,384; python: 356; makefile: 188; perl: 82; pascal: 78
file content (69 lines) | stat: -rw-r--r-- 2,591 bytes parent folder | download | duplicates (10)
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
67
68
69
//=============================================================================
//  toolbuttonmenu.h
//
//  Copyright (C) 2016 Peter Jonas <shoogle@users.noreply.github.com>
//
//  This program is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License version 2
//  as published by the Free Software Foundation and appearing in
//  the file LICENCE.GPL
//=============================================================================

#ifndef TOOLBUTTONMENU_H
#define TOOLBUTTONMENU_H

#include "accessibletoolbutton.h"

namespace Ms {

//---------------------------------------------------------
//   ToolButtonMenu
//   ==============
//   This creates a button with an arrow next to it. Clicking the button triggers the default
//   action, while pressing the arrow brings up a menu of alternative actions and/or other
//   actions. Selecting an alternative action has some effect on the default action's icon
//   and/or its behavior. Other actions have no effect on the default action.
//---------------------------------------------------------

class ToolButtonMenu : public AccessibleToolButton { // : public QToolButton {
      Q_OBJECT

   public:
      enum class TYPES {
            // What happens to the default action if an alternative (non-default) action is triggered?
            FIXED, // default action is also triggered but is otherwise unchanged.
            ICON_CHANGED, // default action is triggered and its icon is modified and/or set to that of the triggering action.
            ACTION_SWAPPED // default action is not triggered. Triggering action (and its icon) become the new default.
            };

   private:
      TYPES _type;
      QActionGroup* _alternativeActions;

   public:
      ToolButtonMenu(QString str,
                     TYPES type,
                     QAction* defaultAction,
                     QActionGroup* alternativeActions,
                     QWidget* parent);
      void addAction(QAction* a) { menu()->addAction(a); }
      void addSeparator() { menu()->addSeparator(); }
      void addActions(QList<QAction*> actions) { for (QAction* a : actions) addAction(a); }

   private:
      void switchIcon(QAction* a) {
            Q_ASSERT(_type == TYPES::ICON_CHANGED && _alternativeActions->actions().contains(a));
            defaultAction()->setIcon(a->icon());
            }

   protected:
      virtual void changeIcon(QAction* a) { switchIcon(a); }

   private slots:
      void handleAlternativeAction(QAction* a);

      };

} // namespace Ms

#endif // TOOLBUTTONMENU_H