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
|
/***************************************************************************
MenuGroup.cpp - controls a group of menu nodes
-------------------
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. *
* *
***************************************************************************/
#include <QHash>
#include <QObject>
#include <QActionGroup>
#include "libgui/MenuGroup.h"
#include "libgui/MenuNode.h"
//*****************************************************************************
Kwave::MenuGroup::MenuGroup(Kwave::MenuNode *parent,
const QString &name,
Kwave::MenuGroup::Mode mode)
:m_parent(parent),
m_name(name),
m_members(),
m_action_group((mode == EXCLUSIVE) ?
new(std::nothrow) QActionGroup(parent) : nullptr)
{
Q_ASSERT(parent);
Q_ASSERT(m_name.length());
// register this group in the top level group list
QHash<QString, Kwave::MenuGroup *> &group_list = m_parent->groupList();
if (!group_list.contains(m_name))
group_list[m_name] = this;
if (m_action_group)
m_action_group->setExclusive(true);
}
//*****************************************************************************
Kwave::MenuGroup::~MenuGroup()
{
clear();
// de-register this group from the top level group list
QHash<QString, Kwave::MenuGroup *> &group_list = m_parent->groupList();
if (group_list.contains(m_name))
group_list.remove(m_name);
}
//*****************************************************************************
void Kwave::MenuGroup::join(Kwave::MenuNode *node)
{
if (node && !m_members.contains(node)) {
m_members.append(node);
if (m_action_group && node->action())
m_action_group->addAction(node->action());
}
}
//*****************************************************************************
void Kwave::MenuGroup::leave(Kwave::MenuNode *node)
{
if (node && m_members.contains(node)) {
m_members.removeAll(node);
if (m_action_group && node->action())
m_action_group->removeAction(node->action());
}
}
//*****************************************************************************
void Kwave::MenuGroup::setEnabled(bool enable)
{
foreach (Kwave::MenuNode *member, m_members) {
if (member) member->setEnabled(enable);
}
}
//*****************************************************************************
void Kwave::MenuGroup::selectItem(const QString &uid)
{
Kwave::MenuNode *new_selection = nullptr;
foreach (Kwave::MenuNode *member, m_members) {
if (member == nullptr) continue;
if (uid == member->uid())
new_selection = member; // new selected member found !
else
member->setChecked(false); // remove check from others
}
// select the new one if found
if (new_selection) new_selection->setChecked(true);
}
//*****************************************************************************
void Kwave::MenuGroup::clear()
{
// de-register all member nodes from us
while (!m_members.isEmpty())
leave(m_members.first());
}
//***************************************************************************
//***************************************************************************
|