Closing BR #126
authorMarcus Eggenberger <egs@quassel-irc.org>
Tue, 11 Mar 2008 00:22:50 +0000 (00:22 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Tue, 11 Mar 2008 00:22:50 +0000 (00:22 +0000)
- MouseWheelEvents in the nick selector no longer trigger nick changes
- nick selector shows now own user modes
- implemented user modes
Breaking protocol again! \o/

src/common/ircuser.cpp
src/common/ircuser.h
src/common/network.h
src/core/ircserverhandler.cpp
src/qtui/inputwidget.cpp
src/qtui/inputwidget.h
version.inc

index 54a5764..ed875e0 100644 (file)
@@ -287,16 +287,24 @@ void IrcUser::setUserModes(const QString &modes) {
   emit userModesSet(modes);
 }
 
   emit userModesSet(modes);
 }
 
-void IrcUser::addUserMode(const QString &mode) {
-  if(!_userModes.contains(mode)) {
-    _userModes += mode;
-    emit userModeAdded(mode);
+void IrcUser::addUserModes(const QString &modes) {
+  if(modes.isEmpty())
+    return;
+
+  for(int i = 0; i < modes.count(); i++) {
+    if(!_userModes.contains(modes[i]))
+      _userModes += modes[i];
   }
   }
+
+  emit userModesAdded(modes);
 }
 
 }
 
-void IrcUser::removeUserMode(const QString &mode) {
-  if(_userModes.contains(mode)) {
-    _userModes.remove(mode);
-    emit userModeRemoved(mode);
+void IrcUser::removeUserModes(const QString &modes) {
+  if(modes.isEmpty())
+    return;
+
+  for(int i = 0; i < modes.count(); i++) {
+    _userModes.remove(modes[i]);
   }
   }
+  emit userModesRemoved(modes);
 }
 }
index 3a46af8..ea1eb3f 100644 (file)
@@ -48,7 +48,7 @@ class IrcUser : public SyncableObject {
   Q_PROPERTY(int lastAwayMessage READ lastAwayMessage WRITE setLastAwayMessage STORED false)
 
   Q_PROPERTY(QStringList channels READ channels STORED false)
   Q_PROPERTY(int lastAwayMessage READ lastAwayMessage WRITE setLastAwayMessage STORED false)
 
   Q_PROPERTY(QStringList channels READ channels STORED false)
-  //  Q_PROPERTY(QStringList usermodes READ usermodes WRITE setUsermodes)
+  Q_PROPERTY(QString userModes READ userModes WRITE setUserModes)
 
 public:
   IrcUser(const QString &hostmask, Network *network);
 
 public:
   IrcUser(const QString &hostmask, Network *network);
@@ -102,8 +102,8 @@ public slots:
   void partChannel(IrcChannel *channel);
   void partChannel(const QString &channelname);
 
   void partChannel(IrcChannel *channel);
   void partChannel(const QString &channelname);
 
-  void addUserMode(const QString &mode);
-  void removeUserMode(const QString &mode);
+  void addUserModes(const QString &modes);
+  void removeUserModes(const QString &modes);
 
 signals:
   void userSet(QString user);
 
 signals:
   void userSet(QString user);
@@ -123,11 +123,8 @@ signals:
   // void channelJoined(QString channel);
   void channelParted(QString channel);
 
   // void channelJoined(QString channel);
   void channelParted(QString channel);
 
-  void userModeAdded(QString mode);
-  void userModeRemoved(QString mode);
-
-//   void setUsermodes(const QSet<QString> &usermodes);
-//   QSet<QString> usermodes() const;
+  void userModesAdded(QString modes);
+  void userModesRemoved(QString modes);
 
 private slots:
   void updateObjectName();
 
 private slots:
   void updateObjectName();
index d065306..bf430f8 100644 (file)
@@ -95,6 +95,7 @@ public:
   QString networkName() const;
   QString currentServer() const;
   QString myNick() const;
   QString networkName() const;
   QString currentServer() const;
   QString myNick() const;
+  inline IrcUser *me() const { return ircUser(myNick()); }
   IdentityId identity() const;
   QStringList nicks() const;
   QStringList channels() const;
   IdentityId identity() const;
   QStringList nicks() const;
   QStringList channels() const;
index ae92b09..31d5bec 100644 (file)
@@ -228,6 +228,30 @@ void IrcServerHandler::handleMode(const QString &prefix, const QList<QByteArray>
     
   } else {
     // pure User Modes
     
   } else {
     // pure User Modes
+    IrcUser *ircUser = network()->newIrcUser(params[0]);
+    QString modeString(serverDecode(params[1]));
+    QString addModes;
+    QString removeModes;
+    bool add = false;
+    for(int c = 0; c < modeString.count(); c++) {
+      if(modeString[c] == '+') {
+       add = true;
+       continue;
+      }
+      if(modeString[c] == '-') {
+       add = false;
+       continue;
+      }
+      if(add)
+       addModes += modeString[c];
+      else
+       removeModes += modeString[c];
+    }
+    if(!addModes.isEmpty())
+      ircUser->addUserModes(addModes);
+    if(!removeModes.isEmpty())
+      ircUser->removeUserModes(removeModes);
+    
     // FIXME: redirect
     emit displayMsg(Message::Mode, BufferInfo::StatusBuffer, "", serverDecode(params).join(" "), prefix);
   }
     // FIXME: redirect
     emit displayMsg(Message::Mode, BufferInfo::StatusBuffer, "", serverDecode(params).join(" "), prefix);
   }
index c2ef731..d6f0aad 100644 (file)
 
 #include "inputwidget.h"
 
 
 #include "inputwidget.h"
 
+#include "ircuser.h"
 #include "client.h"
 #include "networkmodel.h"
 #include "jumpkeyhandler.h"
 
 #include "client.h"
 #include "networkmodel.h"
 #include "jumpkeyhandler.h"
 
+
 InputWidget::InputWidget(QWidget *parent)
   : QWidget(parent),
     validBuffer(false),
 InputWidget::InputWidget(QWidget *parent)
   : QWidget(parent),
     validBuffer(false),
@@ -36,6 +38,7 @@ InputWidget::InputWidget(QWidget *parent)
   connect(this, SIGNAL(userInput(BufferInfo, QString)), Client::instance(), SIGNAL(sendInput(BufferInfo, QString)));
   setFocusProxy(ui.inputEdit);
 
   connect(this, SIGNAL(userInput(BufferInfo, QString)), Client::instance(), SIGNAL(sendInput(BufferInfo, QString)));
   setFocusProxy(ui.inputEdit);
 
+  ui.ownNick->installEventFilter(new MouseWheelFilter(this));
   ui.inputEdit->installEventFilter(new JumpKeyHandler(this));  
 }
 
   ui.inputEdit->installEventFilter(new JumpKeyHandler(this));  
 }
 
@@ -100,15 +103,21 @@ void InputWidget::setNetwork(const Network *network) {
     return;
 
   const Network *previousNet = Client::network(_networkId);
     return;
 
   const Network *previousNet = Client::network(_networkId);
-  if(previousNet)
+  if(previousNet) {
     disconnect(previousNet, 0, this, 0);
     disconnect(previousNet, 0, this, 0);
+    if(previousNet->me())
+      disconnect(previousNet->me(), 0, this, 0);
+  }
 
   if(network) {
     _networkId = network->networkId();
 
   if(network) {
     _networkId = network->networkId();
-    connect(network, SIGNAL(myNickSet(QString)),
-           this, SLOT(updateNickSelector()));
-    connect(network, SIGNAL(identitySet(IdentityId)),
-           this, SLOT(setIdentity(IdentityId)));
+    connect(network, SIGNAL(identitySet(IdentityId)), this, SLOT(setIdentity(IdentityId)));
+    if(network->me()) {
+      connect(network->me(), SIGNAL(nickSet(QString)), this, SLOT(updateNickSelector()));
+      connect(network->me(), SIGNAL(userModesSet(QString)), this, SLOT(updateNickSelector()));
+      connect(network->me(), SIGNAL(userModesAdded(QString)), this, SLOT(updateNickSelector()));
+      connect(network->me(), SIGNAL(userModesRemoved(QString)), this, SLOT(updateNickSelector()));
+    }
   }
   setIdentity(network->identity());
 }
   }
   setIdentity(network->identity());
 }
@@ -149,7 +158,10 @@ void InputWidget::updateNickSelector() const {
     nicks.prepend(net->myNick());
     nickIdx = 0;
   }
     nicks.prepend(net->myNick());
     nickIdx = 0;
   }
-  
+
+  if(net->me() && nickIdx < nicks.count())
+    nicks[nickIdx] = net->myNick() + QString(" (%1)").arg(net->me()->userModes());
+      
   ui.ownNick->addItems(nicks);
   ui.ownNick->setCurrentIndex(nickIdx);
 }
   ui.ownNick->addItems(nicks);
   ui.ownNick->setCurrentIndex(nickIdx);
 }
@@ -164,3 +176,17 @@ void InputWidget::changeNick(const QString &newNick) const {
 void InputWidget::sendText(QString text) {
   emit userInput(currentBufferInfo, text);
 }
 void InputWidget::sendText(QString text) {
   emit userInput(currentBufferInfo, text);
 }
+
+
+// MOUSE WHEEL FILTER
+MouseWheelFilter::MouseWheelFilter(QObject *parent)
+  : QObject(parent)
+{
+}
+
+bool MouseWheelFilter::eventFilter(QObject *obj, QEvent *event) {
+  if(event->type() != QEvent::Wheel)
+    return QObject::eventFilter(obj, event);
+  else
+    return true;
+}
index 70449d2..141105f 100644 (file)
@@ -79,4 +79,13 @@ private:
 
 };
 
 
 };
 
+
+class MouseWheelFilter : public QObject {
+  Q_OBJECT
+
+public:
+  MouseWheelFilter(QObject *parent = 0);
+  virtual bool eventFilter(QObject *obj, QEvent *event);
+};
+
 #endif // INPUTWIDGET_H
 #endif // INPUTWIDGET_H
index cb1fb4d..a83d253 100644 (file)
@@ -4,15 +4,15 @@
 { using namespace Global;
 
   quasselVersion = "0.2.0-alpha3-pre";
 { using namespace Global;
 
   quasselVersion = "0.2.0-alpha3-pre";
-  quasselDate = "2008-03-10";
-  quasselBuild = 624;
+  quasselDate = "2008-03-11";
+  quasselBuild = 628;
 
   //! Minimum client build number the core needs
 
   //! Minimum client build number the core needs
-  clientBuildNeeded = 620;
+  clientBuildNeeded = 628;
   clientVersionNeeded = quasselVersion;
 
   //! Minimum core build number the client needs
   clientVersionNeeded = quasselVersion;
 
   //! Minimum core build number the client needs
-  coreBuildNeeded = 620;
+  coreBuildNeeded = 628;
   coreVersionNeeded = quasselVersion;
 
 }
   coreVersionNeeded = quasselVersion;
 
 }