Save/restore active bufferview
authorManuel Nickschas <sputnick@quassel-irc.org>
Wed, 21 Jul 2010 07:02:43 +0000 (09:02 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Thu, 5 Aug 2010 09:21:39 +0000 (11:21 +0200)
src/qtui/mainwin.cpp
src/qtui/mainwin.h
src/uisupport/bufferview.h

index a144904..334c5c1 100644 (file)
@@ -612,6 +612,28 @@ BufferView *MainWin::activeBufferView() const {
   return dock->isActive() ? qobject_cast<BufferView*>(dock->widget()) : 0;
 }
 
+void MainWin::changeActiveBufferView(int bufferViewId) {
+  if(bufferViewId < 0)
+    return;
+
+  BufferView *current = activeBufferView();
+  if(current) {
+    qobject_cast<BufferViewDock*>(current->parent())->setActive(false);
+    _activeBufferViewIndex = -1;
+  }
+
+  for(int i = 0; i < _bufferViews.count(); i++) {
+    BufferViewDock *dock = _bufferViews.at(i);
+    if(dock->bufferViewId() == bufferViewId && !dock->isHidden()) {
+      _activeBufferViewIndex = i;
+      dock->setActive(true);
+      return;
+    }
+  }
+
+  nextBufferView(); // fallback
+}
+
 void MainWin::changeActiveBufferView(bool backwards) {
   BufferView *current = activeBufferView();
   if(current)
@@ -893,14 +915,21 @@ void MainWin::loadLayout() {
   }
 
   restoreState(state, accountId);
+  int bufferViewId = s.value(QString("ActiveBufferView-%1").arg(accountId), -1).toInt();
+  if(bufferViewId >= 0)
+    changeActiveBufferView(bufferViewId);
+
   _layoutLoaded = true;
 }
 
 void MainWin::saveLayout() {
   QtUiSettings s;
   int accountId = _bufferViews.count()? Client::currentCoreAccount().accountId().toInt() : 0; // only save if we still have a layout!
-  if(accountId > 0)
+  if(accountId > 0) {
     s.setValue(QString("MainWinState-%1").arg(accountId) , saveState(accountId));
+    BufferView *view = activeBufferView();
+    s.setValue(QString("ActiveBufferView-%1").arg(accountId), view ? view->config()->bufferViewId() : -1);
+  }
 }
 
 void MainWin::disconnectedFromCore() {
index bdff05d..e882e0e 100644 (file)
@@ -154,6 +154,7 @@ class MainWin
     void bufferViewToggled(bool enabled);
     void bufferViewVisibilityChanged(bool visible);
     void changeActiveBufferView(bool backwards);
+    void changeActiveBufferView(int bufferViewId);
 
   signals:
     void connectToCore(const QVariantMap &connInfo);
index 5dc1a2d..b4fcbee 100644 (file)
@@ -114,6 +114,7 @@ protected:
 // ==============================
 class BufferViewDock : public QDockWidget {
   Q_OBJECT
+  Q_PROPERTY(bool active READ isActive WRITE setActive STORED true)
 
 public:
   BufferViewDock(BufferViewConfig *config, QWidget *parent);