Deuglify channel state icons
[quassel.git] / src / qtui / nicklistwidget.cpp
index d647b5d..d2ef8e8 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel Project                          *
+ *   Copyright (C) 2005-09 by the Quassel Project                          *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -20,7 +20,6 @@
 
 #include "nicklistwidget.h"
 
-#include "buffer.h"
 #include "nickview.h"
 #include "client.h"
 #include "networkmodel.h"
@@ -47,6 +46,19 @@ QDockWidget *NickListWidget::dock() const {
     return 0;
 }
 
+void NickListWidget::hideEvent(QHideEvent *event) {
+  emit nickSelectionChanged(QModelIndexList());
+  AbstractItemView::hideEvent(event);
+}
+
+void NickListWidget::showEvent(QShowEvent *event) {
+  NickView *view = qobject_cast<NickView *>(ui.stackedWidget->currentWidget());
+  if(view)
+    emit nickSelectionChanged(view->selectedIndexes());
+
+  AbstractItemView::showEvent(event);
+}
+
 void NickListWidget::showWidget(bool visible) {
   if(!selectionModel())
     return;
@@ -71,6 +83,7 @@ void NickListWidget::currentChanged(const QModelIndex &current, const QModelInde
 
   if(bufferType != BufferInfo::ChannelBuffer) {
     ui.stackedWidget->setCurrentWidget(ui.emptyPage);
+    emit nickSelectionChanged(QModelIndexList());
     return;
   }
 
@@ -92,19 +105,32 @@ void NickListWidget::currentChanged(const QModelIndex &current, const QModelInde
   if(newBufferId == oldBufferId)
     return;
 
+  NickView *view;
   if(nickViews.contains(newBufferId)) {
-    ui.stackedWidget->setCurrentWidget(nickViews.value(newBufferId));
+    view = nickViews.value(newBufferId);
+    ui.stackedWidget->setCurrentWidget(view);
   } else {
-    NickView *view = new NickView(this);
+    view = new NickView(this);
     NickViewFilter *filter = new NickViewFilter(newBufferId, Client::networkModel());
     view->setModel(filter);
     QModelIndex source_current = Client::bufferModel()->mapToSource(current);
     view->setRootIndex(filter->mapFromSource(source_current));
-    view->expandAll();
     nickViews[newBufferId] = view;
     ui.stackedWidget->addWidget(view);
     ui.stackedWidget->setCurrentWidget(view);
+    connect(view, SIGNAL(selectionUpdated()), SLOT(nickSelectionChanged()));
+  }
+  emit nickSelectionChanged(view->selectedIndexes());
+}
+
+void NickListWidget::nickSelectionChanged() {
+  NickView *view = qobject_cast<NickView *>(sender());
+  Q_ASSERT(view);
+  if(view != ui.stackedWidget->currentWidget()) {
+    qDebug() << "Nick selection of hidden view changed!";
+    return;
   }
+  emit nickSelectionChanged(view->selectedIndexes());
 }
 
 void NickListWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) {