From 8b17f1bad397489b6d1e1fd30b3691c6fdd376ab Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Mon, 18 Feb 2008 13:16:26 +0000 Subject: [PATCH 1/1] The input line is now enabled disabled correctly according to the current buffer state --- src/client/networkmodel.cpp | 19 ++++++++++++------- src/client/networkmodel.h | 3 +-- src/qtui/inputwidget.cpp | 14 ++++++++++++++ src/qtui/inputwidget.h | 2 +- version.inc | 2 +- 5 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index be13afd5..3e380d41 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -42,6 +42,11 @@ BufferItem::BufferItem(BufferInfo bufferInfo, AbstractTreeItem *parent) Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled; if(bufferType() == BufferInfo::QueryBuffer) flags |= Qt::ItemIsDropEnabled; + + if(bufferType() == BufferInfo::StatusBuffer) { + NetworkItem *networkItem = qobject_cast(parent); + connect(networkItem, SIGNAL(dataChanged()), this, SIGNAL(dataChanged())); + } setFlags(flags); } @@ -221,7 +226,12 @@ void BufferItem::part(IrcUser *ircUser) { } void BufferItem::removeUserFromCategory(IrcUser *ircUser) { - Q_ASSERT(_ircChannel); + if(!_ircChannel) { + // If we parted the channel there might still be some ircUsers connected. + // in that case we just ignore the call + Q_ASSERT(childCount() == 0); + return; + } bool success = false; UserCategoryItem *categoryItem = 0; @@ -311,11 +321,6 @@ quint64 NetworkItem::id() const { return qHash(_networkId); } -void NetworkItem::setActive(bool connected) { - Q_UNUSED(connected); - emit dataChanged(); -} - bool NetworkItem::isActive() const { if(_network) return _network->isConnected(); @@ -357,7 +362,7 @@ void NetworkItem::attachNetwork(Network *network) { connect(network, SIGNAL(ircChannelAdded(QString)), this, SLOT(attachIrcChannel(QString))); connect(network, SIGNAL(connectedSet(bool)), - this, SLOT(setActive(bool))); + this, SIGNAL(dataChanged())); // FIXME: connect this and that... diff --git a/src/client/networkmodel.h b/src/client/networkmodel.h index 961c1ca3..41e5f1d7 100644 --- a/src/client/networkmodel.h +++ b/src/client/networkmodel.h @@ -110,6 +110,7 @@ public: NetworkItem(const NetworkId &netid, AbstractTreeItem *parent = 0); virtual quint64 id() const; + inline const NetworkId &networkId() const { return _networkId; } virtual QVariant data(int column, int row) const; bool isActive() const; @@ -124,8 +125,6 @@ public slots: void attachNetwork(Network *network); void attachIrcChannel(const QString &channelName); - - void setActive(bool connected); private: NetworkId _networkId; diff --git a/src/qtui/inputwidget.cpp b/src/qtui/inputwidget.cpp index 0745d666..0f4a7ee4 100644 --- a/src/qtui/inputwidget.cpp +++ b/src/qtui/inputwidget.cpp @@ -43,7 +43,12 @@ InputWidget::~InputWidget() { } void InputWidget::setModel(BufferModel *bufferModel) { + if(_bufferModel) { + disconnect(_bufferModel, 0, this, 0); + } _bufferModel = bufferModel; + connect(bufferModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), + this, SLOT(dataChanged(QModelIndex, QModelIndex))); } void InputWidget::setSelectionModel(QItemSelectionModel *selectionModel) { @@ -74,6 +79,15 @@ void InputWidget::currentChanged(const QModelIndex ¤t, const QModelIndex & ui.inputEdit->setEnabled(current.data(NetworkModel::ItemActiveRole).value()); } +void InputWidget::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) { + QItemSelectionRange changedArea(topLeft, bottomRight); + QModelIndex currentIndex = Client::bufferModel()->currentIndex(); + if(changedArea.contains(currentIndex)) { + ui.inputEdit->setEnabled(currentIndex.data(NetworkModel::ItemActiveRole).value()); + } +}; + + const Network *InputWidget::currentNetwork() const { if(!validBuffer) return 0; diff --git a/src/qtui/inputwidget.h b/src/qtui/inputwidget.h index 86a76938..70449d2c 100644 --- a/src/qtui/inputwidget.h +++ b/src/qtui/inputwidget.h @@ -49,7 +49,7 @@ protected slots: // virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint); // virtual void commitData(QWidget *editor); virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); -// virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); + virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); // virtual void editorDestroyed(QObject *editor); // virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); // virtual void rowsInserted(const QModelIndex &parent, int start, int end); diff --git a/version.inc b/version.inc index 62ba3531..329e0ff3 100644 --- a/version.inc +++ b/version.inc @@ -5,7 +5,7 @@ quasselVersion = "0.2.0-pre"; quasselDate = "2008-02-18"; - quasselBuild = 530; + quasselBuild = 531; //! Minimum client build number the core needs clientBuildNeeded = 526; -- 2.20.1