File: MenuSub.h

package info (click to toggle)
kwave 25.04.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,272 kB
  • sloc: cpp: 56,173; xml: 817; perl: 688; sh: 57; makefile: 11
file content (164 lines) | stat: -rw-r--r-- 6,127 bytes parent folder | download
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/***************************************************************************
              MenuSub.h  -  submenu
                             -------------------
    begin                : Mon Jan 10 2000
    copyright            : (C) 2000 by Thomas Eschenbacher
    email                : Thomas.Eschenbacher@gmx.de
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef MENU_SUB_H
#define MENU_SUB_H

#include "config.h"

#include <QAction>
#include <QIcon>
#include <QMenu>
#include <QString>

#include "libgui/MenuNode.h"

namespace Kwave
{
    /**
     * This is the class for submenu entries in a Menu. It is normally
     * owned by a root menu node, a toplevel menu or another submenu.
     */
    class MenuSub: public Kwave::MenuNode
    {
        Q_OBJECT

    public:
        /**
         * Constructor.
         * @param parent pointer to the node's parent (might be 0)
         * @param menu the already generated QMenu
         * @param name the non-localized name of the submenu
         * @param command the command to be sent when the submenu is
         *                selected (optional, default=0)
         * @param shortcut keyboard shortcut, (optional, default=0)
         * @param uid unique id string (optional, default=0)
         */
        MenuSub(Kwave::MenuNode *parent,
                QMenu *menu,
                const QString &name,
                const QString &command,
                const QKeySequence &shortcut,
                const QString &uid);

        /** Destructor */
        ~MenuSub() override;

        /**
         * Always returns true, as the nodes of this type are branches.
         */
        bool isBranch() const override { return true; }

        /**
         * Inserts a new branch node under the submenu. The new node
         * normally is (derived from) MenuSub.
         * @param name non-localized name of the node
         * @param command the command template used for creating commands of
         *                submenus (leafes) that don't have an own command
         *                but contain data for their parent's command.
         *                Should contain a %s that will be replaced by some
         *                data from a child entry. (this is used for
         *                menus with data selection lists like "recent files)
         *                If not used, pass 0.
         * @param shortcut keyboard shortcut, 0 if unused
         * @param uid unique id string (might be 0)
         * @return pointer to the new branch node
         */
        virtual Kwave::MenuSub *insertBranch(const QString &name,
                                             const QString &command,
                                             const QKeySequence &shortcut,
                                             const QString &uid)
                                             override;

        /**
         * Inserts a new leaf node under the submenu. The new node
         * normally is (derived from) MenuItem.
         * @param name non-localized name of the node
         * @param command the command to be sent when the node is
         *                selected (might be 0)
         * @param shortcut keyboard shortcut, 0 if unused
         * @param uid unique id string (might be 0)
         * @return pointer to the new leaf node
         */
        virtual Kwave::MenuNode *insertLeaf(const QString &name,
                                            const QString &command,
                                            const QKeySequence &shortcut,
                                            const QString &uid) override;

        /** Returns the corresponding menu action */
        QAction *action() override {
            return (m_menu) ? m_menu->menuAction() : nullptr;
        }

        /**
         * Removes a child node of the current node. If the child
         * was not found or is already removed this does nothing.
         * @param child pointer to the child node
         */
        void removeChild(Kwave::MenuNode *child) override;

        /**
         * Handles/interpretes special menu commands.
         * @param command name of a menu node or command
         * @return true if the name was recognized as a command and handled
         */
        bool specialCommand(const QString &command) override;

        /**
         * Shows/hides the current sub menu.
         * @param visible true to show the sub menu, false to hide
         */
        void setVisible(bool visible) override;

        /**
         * Returns true if the node is enabled.
         */
        bool isEnabled() override;

        /**
         * Enables/disables the current menu node.
         * @param enable true to enable the item, false to disable
         */
        void setEnabled(bool enable) override;

        /** Returns the menu nodes' icon. */
        const QIcon icon() override;

        /**
         * Sets a new icon of a menu node.
         * @param icon QPixmap with the icon
         */
        void setIcon(const QIcon &icon) override;

    protected:
        friend class MenuRoot;

        /** return the pointer to our QMenu */
        virtual QMenu *menu() { return m_menu; }

    private:

        /** the QMenu that is controlled */
        QMenu *m_menu;

    };
}

#endif /* MENU_SUB_H */

//***************************************************************************
//***************************************************************************