making the requester type configurable
[quassel.git] / src / uisupport / action.cpp
1 /***************************************************************************
2  *   Copyright (C) 2005-08 by the Quassel Project                          *
3  *   devel@quassel-irc.org                                                 *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) any later version.                                   *
9  *                                                                         *
10  *   This program is distributed in the hope that it will be useful,       *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with this program; if not, write to the                         *
17  *   Free Software Foundation, Inc.,                                       *
18  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19  ***************************************************************************
20  * Parts of this implementation are taken from KDE's kaction.cpp           *
21  ***************************************************************************/
22
23 #include <QApplication>
24
25 #include "action.h"
26
27 Action::Action(QObject *parent) : QWidgetAction(parent) {
28   init();
29 }
30
31 Action::Action(const QString &text, QObject *parent, const QObject *receiver, const char *slot, const QKeySequence &shortcut)
32 : QWidgetAction(parent) {
33   init();
34   setText(text);
35   setShortcut(shortcut);
36   if(receiver && slot)
37     connect(this, SIGNAL(triggered()), receiver, slot);
38 }
39
40 Action::Action(const QIcon &icon, const QString &text, QObject *parent, const QObject *receiver, const char *slot, const QKeySequence &shortcut)
41 : QWidgetAction(parent) {
42   init();
43   setIcon(icon);
44   setText(text);
45   setShortcut(shortcut);
46   if(receiver && slot)
47     connect(this, SIGNAL(triggered()), receiver, slot);
48 }
49
50 void Action::init() {
51   connect(this, SIGNAL(triggered(bool)), this, SLOT(slotTriggered()));
52
53   setProperty("isShortcutConfigurable", true);
54 }
55
56 void Action::slotTriggered() {
57   emit triggered(QApplication::mouseButtons(), QApplication::keyboardModifiers());
58 }
59
60 bool Action::isShortcutConfigurable() const {
61   return property("isShortcutConfigurable").toBool();
62 }
63
64 void Action::setShortcutConfigurable(bool b) {
65   setProperty("isShortcutConfigurable", b);
66 }
67
68 QKeySequence Action::shortcut(ShortcutTypes type) const {
69   Q_ASSERT(type);
70   if(type == DefaultShortcut)
71     return property("defaultShortcut").value<QKeySequence>();
72
73   if(shortcuts().count()) return shortcuts().value(0);
74   return QKeySequence();
75 }
76
77 void Action::setShortcut(const QShortcut &shortcut, ShortcutTypes type) {
78   setShortcut(shortcut.key(), type);
79 }
80
81 void Action::setShortcut(const QKeySequence &key, ShortcutTypes type) {
82   Q_ASSERT(type);
83
84   if(type & DefaultShortcut)
85     setProperty("defaultShortcut", key);
86
87   if(type & ActiveShortcut)
88     QAction::setShortcut(key);
89 }