/* * This file is part of the Polkit-tqt project * Copyright (C) 2009 Daniel Nicoletti * Copyright (C) 2009 Dario Freddi * * 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" #include #include #include namespace PolkitTQt { namespace Gui { //-------------------------------------- // ActionButtonPrivate //-------------------------------------- void ActionButtonPrivate::addButton(TQButton *button) { buttons.append(button); TQObject::connect(button, TQ_SIGNAL(clicked()), q, TQ_SLOT(streamClicked())); TQObject::connect(q, TQ_SIGNAL(toggled(bool)), button, TQ_SLOT(toggle())); q->updateButton(); } void ActionButtonPrivate::removeButton(TQButton *button) { if (buttons.contains(button)) { TQObject::disconnect(button, TQ_SIGNAL(clicked(bool)), q, TQ_SLOT(streamClicked())); TQObject::disconnect(q, TQ_SIGNAL(toggled(bool)), button, TQ_SLOT(toggle())); TQValueList::iterator butIt = buttons.find(button); if (butIt != buttons.end()) { buttons.remove(butIt); } } } //-------------------------------------- // ActionButton //-------------------------------------- ActionButton::ActionButton(ActionButtonPrivate &dd, const TQString &actionId, TQObject *parent) : Action(actionId, parent), d(&dd) { d->q = this; connect(this, TQ_SIGNAL(dataChanged()), this, TQ_SLOT(updateButton())); } ActionButton::ActionButton(TQButton *button, const TQString &actionId, TQObject *parent) : Action(actionId, parent), d(new ActionButtonPrivate()) { d->q = this; d->buttons.append(button); setButton(button); connect(this, TQ_SIGNAL(dataChanged()), this, TQ_SLOT(updateButton())); } ActionButton::~ActionButton() { delete d; } void ActionButton::streamClicked() { emit clicked(::tqt_cast(this->sender())); } void ActionButton::updateButton() { for (TQButton *&ent : d->buttons) { if (isVisible()) { ent->show(); } else { ent->hide(); } ent->setEnabled(isEnabled()); //if (!toolTip().isNull()) //{ // ent->setToolTip(toolTip()); //} //if (!whatsThis().isNull()) //{ // ent->setWhatsThis(whatsThis()); //} ent->setPixmap(iconSet().pixmap()); // setPixmap() clears the button text, so setText() must be called afterwards ent->setText(text()); // if the item cannot do the action anymore // lets revert to the initial state if (ent->isToggleButton()) { ent->setDown(isOn()); } } } bool ActionButton::activate() { bool tg = false; for (TQButton *&ent : d->buttons) { if (ent->isToggleButton()) { // we set the the current Action state ent->setDown(isOn()); // toggle the action cause we are not directly connected there.. tg = true; } } if (tg) { toggle(); } return Action::activate(); } void ActionButton::setButton(TQButton *button) { // First, let's clear the list while (!d->buttons.isEmpty()) { d->removeButton(d->buttons.first()); } // And then add it d->addButton(button); } TQButton* ActionButton::button() const { return d->buttons.first(); } } } #include "polkit-tqt-gui-actionbutton.moc"