From 672e56cd731d1cbc08941bf98d76699cd9fc4514 Mon Sep 17 00:00:00 2001
From: Tobias Markmann <tm@ayena.de>
Date: Fri, 16 Jan 2015 21:50:59 +0100
Subject: Fix UI update issue and enabled state of "Display Notice" in Notices
 view

EventModel was missing calls to endResetModel() in two return-paths.
In addition the limit for inactiveEvents was out-of-sync in different places.
The "Display Notice" button is now disabled if there is no notice left
to display.

Test-Information:

Tested on Mac OS X 10.9.5.

Change-Id: I2b74b942f58e80a9c1a46f434ffcebf8e1ce64bf

diff --git a/Swift/QtUI/EventViewer/EventModel.cpp b/Swift/QtUI/EventViewer/EventModel.cpp
index 1d1a378..889bcac 100644
--- a/Swift/QtUI/EventViewer/EventModel.cpp
+++ b/Swift/QtUI/EventViewer/EventModel.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2014 Isode Limited.
+ * Copyright (c) 2010-2015 Isode Limited.
  * All rights reserved.
  * See the COPYING file for more information.
  */
@@ -9,6 +9,11 @@
 #include <Swiften/Base/Log.h>
 
 namespace Swift {
+
+namespace {
+	const int inactiveEventsLimit = 50;
+}
+
 EventModel::EventModel() {
 	
 }
@@ -75,8 +80,8 @@ void EventModel::addEvent(boost::shared_ptr<StanzaEvent> event, bool active) {
 		activeEvents_.push_front(new QtEvent(event, active));
 	} else {
 		inactiveEvents_.push_front(new QtEvent(event, active));
-		if (inactiveEvents_.size() > 50) {
-			removeEvent(inactiveEvents_[20]->getEvent());
+		if (inactiveEvents_.size() > inactiveEventsLimit) {
+			removeEvent(inactiveEvents_[inactiveEventsLimit]->getEvent());
 		}
 	}
 	endResetModel();
@@ -87,6 +92,7 @@ void EventModel::removeEvent(boost::shared_ptr<StanzaEvent> event) {
 	for (int i = inactiveEvents_.size() - 1; i >= 0; i--) {
 		if (event == inactiveEvents_[i]->getEvent()) {
 			inactiveEvents_.removeAt(i);
+			endResetModel();
 			return;
 		}
 	}
@@ -94,6 +100,7 @@ void EventModel::removeEvent(boost::shared_ptr<StanzaEvent> event) {
 	for (int i = 0; i < activeEvents_.size(); i++) {
 		if (event == activeEvents_[i]->getEvent()) {
 			activeEvents_.removeAt(i);
+			endResetModel();
 			return;
 		}
 	}
diff --git a/Swift/QtUI/EventViewer/EventModel.h b/Swift/QtUI/EventViewer/EventModel.h
index 50334da..cf259f2 100644
--- a/Swift/QtUI/EventViewer/EventModel.h
+++ b/Swift/QtUI/EventViewer/EventModel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010 Isode Limited.
+ * Copyright (c) 2010-2015 Isode Limited.
  * All rights reserved.
  * See the COPYING file for more information.
  */
@@ -20,7 +20,7 @@ class EventModel : public QAbstractListModel {
 	Q_OBJECT
 	public:
 		EventModel();
-		~EventModel();
+		virtual ~EventModel();
 		void addEvent(boost::shared_ptr<StanzaEvent> event, bool active);
 		void removeEvent(boost::shared_ptr<StanzaEvent> event);
 		QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
@@ -28,7 +28,7 @@ class EventModel : public QAbstractListModel {
 		QtEvent* getItem(int row) const;
 		int getNewEventCount();
 	protected:
-		QModelIndex	index ( int row, int column = 0, const QModelIndex & parent = QModelIndex() ) const;
+		QModelIndex index(int row, int column = 0, const QModelIndex & parent = QModelIndex()) const;
 	private:
 		QList<QtEvent*> activeEvents_;
 		QList<QtEvent*> inactiveEvents_;
diff --git a/Swift/QtUI/EventViewer/QtEventWindow.cpp b/Swift/QtUI/EventViewer/QtEventWindow.cpp
index 06bfd98..3072497 100644
--- a/Swift/QtUI/EventViewer/QtEventWindow.cpp
+++ b/Swift/QtUI/EventViewer/QtEventWindow.cpp
@@ -1,6 +1,6 @@
 
 /*
- * Copyright (c) 2010 Isode Limited.
+ * Copyright (c) 2010-2015 Isode Limited.
  * All rights reserved.
  * See the COPYING file for more information.
  */
@@ -51,7 +51,6 @@ QtEventWindow::QtEventWindow(UIEventStream* eventStream) : EventWindow(false) {
 	connect(readButton_, SIGNAL(clicked()), this, SLOT(handleReadClicked()));
 	connect(view_, SIGNAL(clicked(const QModelIndex&)), this, SLOT(handleItemClicked(const QModelIndex&)));
 	connect(view_, SIGNAL(activated(const QModelIndex&)), this, SLOT(handleItemActivated(const QModelIndex&)));
-	
 }
 
 QtEventWindow::~QtEventWindow() {
@@ -106,12 +105,14 @@ void QtEventWindow::addEvent(boost::shared_ptr<StanzaEvent> event, bool active)
 	view_->clearSelection();
 	model_->addEvent(event, active);
 	emit onNewEventCountUpdated(model_->getNewEventCount());
+	readButton_->setEnabled(model_->rowCount() > 0);
 }
 
 void QtEventWindow::removeEvent(boost::shared_ptr<StanzaEvent> event) {
 	view_->clearSelection();
 	model_->removeEvent(event);
 	emit onNewEventCountUpdated(model_->getNewEventCount());
+	readButton_->setEnabled(model_->rowCount() > 0);
 }
 
 }
-- 
cgit v0.10.2-6-g49f6