You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
4.5 KiB
C++
167 lines
4.5 KiB
C++
/*
|
|
* This file is part of the Polkit-tqt project
|
|
* Copyright (C) 2009 Daniel Nicoletti <dantti85-pk@yahoo.com.br>
|
|
* Copyright (C) 2009 Dario Freddi <drf@kde.org>
|
|
*
|
|
* 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 "polkit-tqt-gui-actionbutton.h"
|
|
|
|
#include "polkit-tqt-gui-actionbutton_p.h"
|
|
|
|
namespace PolkitTQt
|
|
{
|
|
|
|
namespace Gui
|
|
{
|
|
|
|
ActionButton::ActionButton(TQAbstractButton *button, const TQString &actionId, TQObject *parent)
|
|
: Action(actionId, parent)
|
|
, d_ptr(new ActionButtonPrivate(TQList<TQAbstractButton *>() << button))
|
|
{
|
|
d_ptr->q_ptr = this;
|
|
|
|
setButton(button);
|
|
connect(this, SIGNAL(dataChanged()), SLOT(updateButton()));
|
|
}
|
|
|
|
ActionButton::ActionButton(ActionButtonPrivate &dd, const TQString &actionId, TQObject *parent)
|
|
: Action(actionId, parent)
|
|
, d_ptr(&dd)
|
|
{
|
|
d_ptr->q_ptr = this;
|
|
|
|
connect(this, SIGNAL(dataChanged()), SLOT(updateButton()));
|
|
}
|
|
|
|
ActionButton::~ActionButton()
|
|
{
|
|
delete d_ptr;
|
|
}
|
|
|
|
void ActionButtonPrivate::updateButton()
|
|
{
|
|
TQ_Q(ActionButton);
|
|
|
|
TQ_FOREACH(TQAbstractButton *ent, buttons) {
|
|
ent->setVisible(q->isVisible());
|
|
ent->setEnabled(q->isEnabled());
|
|
ent->setText(q->text());
|
|
if (!q->toolTip().isNull()) {
|
|
ent->setToolTip(q->toolTip());
|
|
}
|
|
if (!q->whatsThis().isNull()) {
|
|
ent->setWhatsThis(q->whatsThis());
|
|
}
|
|
ent->setIcon(q->icon());
|
|
// if the item cannot do the action anymore
|
|
// lets revert to the initial state
|
|
if (ent->isCheckable()) {
|
|
ent->setChecked(q->isChecked());
|
|
}
|
|
}
|
|
}
|
|
|
|
bool ActionButton::activate()
|
|
{
|
|
TQ_D(ActionButton);
|
|
|
|
bool tg = false;
|
|
TQ_FOREACH(TQAbstractButton *ent, d->buttons) {
|
|
if (ent->isCheckable()) {
|
|
// we set the the current Action state
|
|
ent->setChecked(isChecked());
|
|
// toggle the action cause we are not directly connected there..
|
|
tg = true;
|
|
}
|
|
}
|
|
|
|
if (tg) {
|
|
toggle();
|
|
}
|
|
|
|
return Action::activate();
|
|
}
|
|
|
|
void ActionButton::setButton(TQAbstractButton *button)
|
|
{
|
|
TQ_D(ActionButton);
|
|
|
|
// First, let's clear the list
|
|
TQ_FOREACH(TQAbstractButton *ent, d->buttons) {
|
|
d->removeButton(ent);
|
|
}
|
|
|
|
// And then add it
|
|
d->addButton(button);
|
|
}
|
|
|
|
void ActionButtonPrivate::addButton(TQAbstractButton *button)
|
|
{
|
|
TQ_Q(ActionButton);
|
|
|
|
buttons.append(button);
|
|
TQObject::connect(button, SIGNAL(clicked(bool)), q, SLOT(streamClicked(bool)));
|
|
TQObject::connect(q, SIGNAL(toggled(bool)), button, SLOT(toggle()));
|
|
if (q->isCheckable()) {
|
|
// the button should follow our first buttons
|
|
button->setCheckable(true);
|
|
} else if (button->isCheckable()) {
|
|
// if we are not checkable BUT the button
|
|
// is (eg a TQCheckBox) we should set all buttons to
|
|
// checkable.
|
|
TQ_FOREACH(TQAbstractButton *ent, buttons) {
|
|
ent->setCheckable(true);
|
|
}
|
|
// set the checkable state of Action to store the initial state
|
|
q->setCheckable(true);
|
|
}
|
|
// call this after m_activateOnCheck receives the value
|
|
updateButton();
|
|
}
|
|
|
|
void ActionButtonPrivate::removeButton(TQAbstractButton *button)
|
|
{
|
|
TQ_Q(ActionButton);
|
|
|
|
if (buttons.contains(button)) {
|
|
TQObject::disconnect(button, SIGNAL(clicked(bool)), q, SLOT(streamClicked(bool)));
|
|
TQObject::disconnect(q, SIGNAL(toggled(bool)), button, SLOT(toggle()));
|
|
buttons.removeOne(button);
|
|
}
|
|
}
|
|
|
|
TQAbstractButton *ActionButton::button() const
|
|
{
|
|
TQ_D(const ActionButton);
|
|
|
|
return d->buttons.first();
|
|
}
|
|
|
|
void ActionButtonPrivate::streamClicked(bool c)
|
|
{
|
|
TQ_Q(ActionButton);
|
|
|
|
TQ_EMIT q->clicked(qobject_cast<TQAbstractButton *>(q->sender()), c);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#include "polkit-tqt-gui-actionbutton.moc"
|