/*************************************************************************** * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * 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. * * * * This program 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 General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * *************************************************************************** * Parts of this implementation are taken from KDE's kaction.cpp * ***************************************************************************/ #include "action.h" #include "config.h" #include "gtkstyle.h" #include "utils.h" #include #include Action::Action(QObject *parent) : QAction(parent) { init(); } Action::Action(const QString &text, QObject *parent, const QObject *receiver, const char *slot, const QKeySequence &shortcut) : QAction(parent) { init(); setText(text); setShortcut(shortcut); if(receiver && slot) connect(this, SIGNAL(triggered()), receiver, slot); } Action::Action(const QIcon &icon, const QString &text, QObject *parent, const QObject *receiver, const char *slot, const QKeySequence &shortcut) : QAction(parent) { init(); setIcon(icon); setText(text); setShortcut(shortcut); if(receiver && slot) connect(this, SIGNAL(triggered()), receiver, slot); } void Action::initIcon(QAction *act) { if (GtkStyle::isActive() && act) { act->setIconVisibleInMenu(false); } } static const char *constPlainToolTipProperty="plain-tt"; void Action::updateToolTip(QAction *act) { if (!act) { return; } QKeySequence sc=act->shortcut(); if (sc.isEmpty()) { QString tt=act->property(constPlainToolTipProperty).toString(); if (!tt.isEmpty()) { act->setToolTip(tt); act->setProperty(constPlainToolTipProperty, QString()); } } else { QString tt=act->property(constPlainToolTipProperty).toString(); if (tt.isEmpty()) { tt=act->toolTip(); act->setProperty(constPlainToolTipProperty, tt); } act->setToolTip(QString::fromLatin1("%1 %2") .arg(tt) .arg(sc.toString(QKeySequence::NativeText))); } } static const char * constSettingsText="tt-for-settings"; QString Action::settingsText(QAction *act) { return act->property(constSettingsText).isValid() ? act->property(constSettingsText).toString() : Utils::stripAcceleratorMarkers(act->text()); } void Action::init() { connect(this, SIGNAL(triggered(bool)), this, SLOT(slotTriggered())); setProperty("isShortcutConfigurable", true); } void Action::slotTriggered() { emit triggered(QApplication::mouseButtons(), QApplication::keyboardModifiers()); } bool Action::isShortcutConfigurable() const { return property("isShortcutConfigurable").toBool(); } void Action::setShortcutConfigurable(bool b) { setProperty("isShortcutConfigurable", b); } void Action::setSettingsText(const QString &text) { setProperty(constSettingsText, text); } void Action::setSettingsText(Action *parent) { setSettingsText(Utils::strippedText(parent->text())+QLatin1String(" / ")+Utils::strippedText(text())); } QKeySequence Action::shortcut(ShortcutTypes type) const { Q_ASSERT(type); if(type == DefaultShortcut) return property("defaultShortcut").value(); if(shortcuts().count()) return shortcuts().value(0); return QKeySequence(); } void Action::setShortcut(const QShortcut &shortcut, ShortcutTypes type) { setShortcut(shortcut.key(), type); } void Action::setShortcut(const QKeySequence &key, ShortcutTypes type) { Q_ASSERT(type); if(type & DefaultShortcut) setProperty("defaultShortcut", key); if(type & ActiveShortcut) QAction::setShortcut(key); } #include "moc_action.cpp"