kwave  18.07.70
MenuGroup.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  MenuGroup.cpp - controls a group of menu nodes
3  -------------------
4  begin : Mon Jan 10 2000
5  copyright : (C) 2000 by Thomas Eschenbacher
6  email : Thomas.Eschenbacher@gmx.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "config.h"
19 
20 #include <QHash>
21 #include <QObject>
22 
23 #include <QActionGroup>
24 
25 #include "libgui/MenuGroup.h"
26 #include "libgui/MenuNode.h"
27 
28 //*****************************************************************************
30  const QString &name,
32  :m_parent(parent),
33  m_name(name),
34  m_members(),
35  m_action_group((mode == EXCLUSIVE) ? new QActionGroup(parent) : Q_NULLPTR),
36  m_enabled(true)
37 {
38  Q_ASSERT(parent);
39  Q_ASSERT(m_name.length());
40 
41  // register this group in the top level group list
42  QHash<QString, Kwave::MenuGroup *> &group_list = m_parent->groupList();
43  if (!group_list.contains(m_name))
44  group_list[m_name] = this;
45 
46  if (m_action_group)
47  m_action_group->setExclusive(true);
48 }
49 
50 //*****************************************************************************
52 {
53  clear();
54 
55  // de-register this group from the top level group list
56  QHash<QString, Kwave::MenuGroup *> &group_list = m_parent->groupList();
57  if (group_list.contains(m_name))
58  group_list.remove(m_name);
59 }
60 
61 //*****************************************************************************
63 {
64  if (node && !m_members.contains(node)) {
65  m_members.append(node);
66  if (m_action_group && node->action())
67  m_action_group->addAction(node->action());
68  }
69 }
70 
71 //*****************************************************************************
73 {
74  if (node && m_members.contains(node)) {
75  m_members.removeAll(node);
76  if (m_action_group && node->action())
77  m_action_group->removeAction(node->action());
78  }
79 }
80 
81 //*****************************************************************************
83 {
84  foreach (Kwave::MenuNode *member, m_members) {
85  if (member) member->setEnabled(enable);
86  }
87 }
88 
89 //*****************************************************************************
90 void Kwave::MenuGroup::selectItem(const QString &uid)
91 {
92  Kwave::MenuNode *new_selection = Q_NULLPTR;
93 
94  foreach (Kwave::MenuNode *member, m_members) {
95  if (member && (uid == member->uid()))
96  new_selection = member; // new selected member found !
97  else
98  member->setChecked(false); // remove check from others
99  }
100 
101  // select the new one if found
102  if (new_selection) new_selection->setChecked(true);
103 
104 }
105 
106 //*****************************************************************************
108 {
109  // de-register all member nodes from us
110  while (!m_members.isEmpty())
111  leave(m_members.first());
112 }
113 
114 //***************************************************************************
115 //***************************************************************************
virtual ~MenuGroup()
Definition: MenuGroup.cpp:51
virtual void join(Kwave::MenuNode *node)
Definition: MenuGroup.cpp:62
virtual QHash< QString, Kwave::MenuGroup * > & groupList()
Definition: MenuNode.cpp:370
virtual void clear()
Definition: MenuGroup.cpp:107
QActionGroup * m_action_group
Definition: MenuGroup.h:116
QString m_name
Definition: MenuGroup.h:110
const char name[16]
Definition: memcpy.c:510
virtual void setEnabled(bool enable)
Definition: MenuNode.cpp:163
QList< Kwave::MenuNode * > m_members
Definition: MenuGroup.h:113
virtual void selectItem(const QString &uid)
Definition: MenuGroup.cpp:90
virtual void leave(Kwave::MenuNode *node)
Definition: MenuGroup.cpp:72
virtual void setChecked(bool check)
Definition: MenuNode.cpp:169
MenuGroup(Kwave::MenuNode *parent, const QString &name, Kwave::MenuGroup::Mode mode)
Definition: MenuGroup.cpp:29
const QString & uid() const
Definition: MenuNode.h:85
virtual void setEnabled(bool enable)
Definition: MenuGroup.cpp:82
virtual QAction * action()
Definition: MenuNode.h:80
Kwave::MenuNode * m_parent
Definition: MenuGroup.h:107