All pastes #1328532 Raw Edit

neoclust

public text v1 · immutable
#1328532 ·published 2009-02-06 00:46 UTC
rendered paste body
Index: src/irc/nicklistview.h===================================================================--- src/irc/nicklistview.h	(revision 921948)+++ src/irc/nicklistview.h	(working copy)@@ -19,10 +19,14 @@ #include "../linkaddressbook/nicklisttooltip.h" #include "images.h" #include "common.h"+#include "application.h" // for PopupIDs...  #include <k3listview.h> #include <KMenu> +class QActionGroup;+class QMenu;+class KAction; class QContextMenuEvent; class QTimer; @@ -40,8 +44,8 @@         void setWhatsThis();          virtual void setSorting(int column, bool ascending);--    public slots:+        +        public slots:         /** When this is called, resort is guaranteed to be called within a hard-coded time (a few seconds).          *  This prevents lots of calls to resort.          */@@ -56,8 +60,11 @@         signals:         /* Will be connected to Channel::popupCommand(int) */         void popupCommand(int id);--    protected:+        +        protected slots:+        void slotActionTriggered(KAction* action);+        +        protected:         void contextMenuEvent(QContextMenuEvent* ce);         virtual bool acceptDrag (QDropEvent* event) const;         void insertAssociationSubMenu();@@ -72,5 +79,38 @@          int m_column;         bool m_ascending;++        private:+        // TODO use a more specific enum for just our actions?+        KAction* createAction(QMenu* menu, const QString& text, Konversation::PopupIDs);++        QActionGroup* m_actionGroup;+        KAction* m_whoisAction;+        KAction* m_versionAction;+        KAction* m_pingAction;+        KAction* m_giveOpAction;+        KAction* m_takeOpAction;+        KAction* m_giveHalfOpAction;+        KAction* m_takeHalfOpAction;+        KAction* m_giveVoiceAction;+        KAction* m_takeVoiceAction;+        KAction* m_modeAction;+        KAction* m_ignoreAction;+        KAction* m_unIgnoreAction;+        KAction* m_kickAction;+        KAction* m_kickBanAction;+        KAction* m_banNickAction;+        KAction* m_banHostAction;+        KAction* m_banDomainAction;+        KAction* m_banUserHostAction;+        KAction* m_banUserDomainAction;+        KAction* m_kickBanHostAction;+        KAction* m_kickBanDomainAction;+        KAction* m_kickBanUserHostAction;+        KAction* m_kickBanUserDomainAction;+        KAction* m_kickBanSubAction;+        KAction* m_addNotifyAction;+        KAction* m_addressbookSubAction;+        KAction* m_sendMailAction; }; #endifIndex: src/irc/nicklistview.cpp===================================================================--- src/irc/nicklistview.cpp	(revision 921948)+++ src/irc/nicklistview.cpp	(working copy)@@ -26,6 +26,8 @@ #include <q3dragobject.h> #include <kauthorized.h> #include <Q3MimeSourceFactory>+#include <qactiongroup.h>+#include <kaction.h>  NickListView::NickListView(QWidget* parent, Channel *chan) : K3ListView(parent)@@ -45,46 +47,48 @@     setDropHighlighter(true);     setDropVisualizer(false); +    m_actionGroup = new QActionGroup(this);+    connect(m_actionGroup, SIGNAL(triggered(QAction*)), this, SLOT(slotActionTriggered(QAction*)));+     if (popup)     {-        popup->insertItem(i18n("&Whois"),Konversation::Whois);-        popup->insertItem(i18n("&Version"),Konversation::Version);-        popup->insertItem(i18n("&Ping"),Konversation::Ping);+        m_whoisAction = createAction(popup,i18n("&Whois"),Konversation::Whois);+        m_versionAction = createAction(popup,i18n("&Version"),Konversation::Version);+        m_pingAction = createAction(popup,i18n("&Ping"),Konversation::Ping);          popup->addSeparator();          if (modes)         {-            modes->insertItem(i18n("Give Op"),Konversation::GiveOp);-            modes->insertItem(i18n("Take Op"),Konversation::TakeOp);-            modes->insertItem(i18n("Give HalfOp"),Konversation::GiveHalfOp);-            modes->insertItem(i18n("Take HalfOp"),Konversation::TakeHalfOp);-            modes->insertItem(i18n("Give Voice"),Konversation::GiveVoice);-            modes->insertItem(i18n("Take Voice"),Konversation::TakeVoice);-            popup->insertItem(i18n("Modes"),modes,Konversation::ModesSub);+            m_giveOpAction = createAction(modes,i18n("Give Op"),Konversation::GiveOp);+            m_takeOpAction = createAction(modes,i18n("Take Op"),Konversation::TakeOp);+            m_giveHalfOpAction = createAction(modes,i18n("Give HalfOp"),Konversation::GiveHalfOp);+            m_takeHalfOpAction = createAction(modes,i18n("Take HalfOp"),Konversation::TakeHalfOp);+            m_giveVoiceAction = createAction(modes,i18n("Give Voice"),Konversation::GiveVoice);+            m_takeVoiceAction = createAction(modes,i18n("Take Voice"),Konversation::TakeVoice);+            m_modeAction = createAction(modes,i18n("Modes"),Konversation::ModesSub);         }          if (kickban)         {--            kickban->insertItem(i18n("Kick"),Konversation::Kick);-            kickban->insertItem(i18n("Kickban"),Konversation::KickBan);-            kickban->insertItem(i18n("Ban Nickname"),Konversation::BanNick);+            m_kickAction = createAction(kickban,i18n("Kick"),Konversation::Kick);+            m_kickBanAction = createAction(kickban,i18n("Kickban"),Konversation::KickBan);+            m_banNickAction = createAction(kickban,i18n("Ban Nickname"),Konversation::BanNick);             kickban->addSeparator();-            kickban->insertItem(i18n("Ban *!*@*.host"),Konversation::BanHost);-            kickban->insertItem(i18n("Ban *!*@domain"),Konversation::BanDomain);-            kickban->insertItem(i18n("Ban *!user@*.host"),Konversation::BanUserHost);-            kickban->insertItem(i18n("Ban *!user@domain"),Konversation::BanUserDomain);+            m_banHostAction = createAction(kickban,i18n("Ban *!*@*.host"),Konversation::BanHost);+            m_banDomainAction = createAction(kickban,i18n("Ban *!*@domain"),Konversation::BanDomain);+            m_banUserHostAction = createAction(kickban,i18n("Ban *!user@*.host"),Konversation::BanUserHost);+            m_banUserDomainAction = createAction(kickban,i18n("Ban *!user@domain"),Konversation::BanUserDomain);             kickban->addSeparator();-            kickban->insertItem(i18n("Kickban *!*@*.host"),Konversation::KickBanHost);-            kickban->insertItem(i18n("Kickban *!*@domain"),Konversation::KickBanDomain);-            kickban->insertItem(i18n("Kickban *!user@*.host"),Konversation::KickBanUserHost);-            kickban->insertItem(i18n("Kickban *!user@domain"),Konversation::KickBanUserDomain);-            popup->insertItem(i18n("Kick / Ban"),kickban,Konversation::KickBanSub);+            m_kickBanHostAction = createAction(kickban,i18n("Kickban *!*@*.host"),Konversation::KickBanHost);+            m_kickBanDomainAction = createAction(kickban,i18n("Kickban *!*@domain"),Konversation::KickBanDomain);+            m_kickBanUserHostAction = createAction(kickban,i18n("Kickban *!user@*.host"),Konversation::KickBanUserHost);+            m_kickBanUserDomainAction = createAction(kickban,i18n("Kickban *!user@domain"),Konversation::KickBanUserDomain);+            m_kickBanSubAction = createAction(kickban,i18n("Kick / Ban"),Konversation::KickBanSub);         } -        popup->insertItem(i18n("Ignore"), Konversation::IgnoreNick);-        popup->insertItem(i18n("Unignore"), Konversation::UnignoreNick);+        m_ignoreAction = createAction(popup,i18n("Ignore"),Konversation::IgnoreNick);+        m_unIgnoreAction = createAction(popup,i18n("Unignore"),Konversation::UnignoreNick);          popup->addSeparator(); @@ -99,14 +103,15 @@             newitem = popup->insertItem(SmallIcon("arrow-right-double"),i18n("Send &File..."),Konversation::DccSend);             popup->setWhatsThis(newitem, "<qt>Send a file to this person.  If you are having problem sending files, or they are sending slowly, see the Konversation Handbook and DCC preferences page.</qt>");         }-        popup->insertItem(SmallIconSet("mail-send"),i18n("&Send Email..."), Konversation::SendEmail);+        m_sendMailAction = createAction(kickban,i18n("&Send Email..."),Konversation::SendEmail);+        m_sendMailAction->setIcon(KIcon("mail-send"));          popup->addSeparator();          if (addressbook)-            popup->insertItem(i18n("Addressbook Associations"), addressbook, Konversation::AddressbookSub);+            m_addressbookSubAction = createAction(kickban,i18n("Addressbook Associations"),Konversation::AddressbookSub); -        popup->insertItem(i18n("Add to Watched Nicks"), Konversation::AddNotify);+        m_addNotifyAction = createAction(kickban,i18n("Add to Watched Nicks"),Konversation::AddNotify);          connect (popup, SIGNAL(activated(int)), this, SIGNAL(popupCommand(int)));         connect (modes, SIGNAL(activated(int)), this, SIGNAL(popupCommand(int)));@@ -116,7 +121,7 @@     }     else     {-        kWarning() << "NickListView::NickListView(): Could not create popup!" << endl;+        kWarning() << "Could not create popup!" ;     }      setShadeSortColumn(false);@@ -332,4 +337,20 @@         return false; } +Q_DECLARE_METATYPE(Konversation::PopupIDs)++KAction* NickListView::createAction(QMenu* menu, const QString& text, Konversation::PopupIDs id)+{+    KAction* action = new KAction(text, menu);+    menu->addAction(action);+    action->setData(QVariant::fromValue(id));+    m_actionGroup->addAction(action);+    return action;+}++void NickListView::slotActionTriggered(QAction* action)+{+    popupCommand(action->data().value<Konversation::PopupIDs>());+}+ // #include "./irc/nicklistview.moc"