kdelibs/kdeui/actions/kactioncategory.cpp
2014-11-13 01:04:59 +02:00

164 lines
3.7 KiB
C++

/* Copyright (C) 2008 Michael Jansen <kde@michael-jansen.biz>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "kactioncategory.h"
#include <QtGui/QAction>
#include "kaction.h"
struct KActionCategoryPrivate
{
KActionCategoryPrivate( KActionCategory *host );
//! Our host
KActionCategory *q;
//! The text for this category
QString text;
//! List of actions
QList<QAction*> actions;
}; // class KActionCategoryPrivate
KActionCategory::KActionCategory(const QString &text, KActionCollection *parent)
: QObject(parent)
,d( new KActionCategoryPrivate(this) )
{
d->text = text;
}
KActionCategory::~KActionCategory()
{
delete d;
}
const QList<QAction*> KActionCategory::actions() const
{
return d->actions;
}
QAction * KActionCategory::addAction(const QString &name, QAction *action)
{
collection()->addAction(name, action);
addAction(action);
return action;
}
KAction * KActionCategory::addAction(const QString &name, KAction *action)
{
collection()->addAction(name, action);
addAction(action);
return action;
}
KAction * KActionCategory::addAction(
KStandardAction::StandardAction actionType,
const QObject *receiver,
const char *member)
{
KAction *action = collection()->addAction(actionType, receiver, member);
addAction(action);
return action;
}
KAction * KActionCategory::addAction(
KStandardAction::StandardAction actionType,
const QString &name,
const QObject *receiver,
const char *member)
{
KAction *action = collection()->addAction(actionType, name, receiver, member);
addAction(action);
return action;
}
KAction *KActionCategory::addAction(
const QString &name,
const QObject *receiver,
const char *member)
{
KAction *action = collection()->addAction(name, receiver, member);
addAction(action);
return action;
}
void KActionCategory::addAction(QAction *action)
{
// Only add the action if wasn't added earlier.
if (!d->actions.contains(action))
{
d->actions.append(action);
}
}
KActionCollection * KActionCategory::collection() const
{
return qobject_cast<KActionCollection*>(parent());
}
QString KActionCategory::text() const
{
return d->text;
}
void KActionCategory::setText(const QString &text)
{
d->text = text;
}
void KActionCategory::unlistAction(QAction *action)
{
// ATTENTION:
// This method is called from KActionCollection with an QObject formerly
// known as a QAction during _k_actionDestroyed(). So don't do fancy stuff
// here that needs a real QAction!
// Get the index for the action
int index = d->actions.indexOf(action);
// Action not found.
if (index==-1) return;
// Remove the action
d->actions.takeAt(index);
}
KActionCategoryPrivate::KActionCategoryPrivate( KActionCategory *host )
: q(host)
{}
#include "moc_kactioncategory.cpp"