Moving InputLine (ex-ChannelWidgetInput) to uisupport, since we'll need
[quassel.git] / src / qtui / mainwin.cpp
index f94ee4a..c5ab8fd 100644 (file)
 #include "mainwin.h"
 
 #include "bufferview.h"
-#include "chatline.h"
+#include "chatline-old.h"
 #include "client.h"
 #include "coreconnectdlg.h"
+#include "nicklistwidget.h"
 #include "serverlist.h"
 #include "settingsdlg.h"
 //#include "settingspage.h"
@@ -31,6 +32,9 @@
 
 #include "topicwidget.h"
 
+#include "selectionmodelsynchronizer.h"
+#include "mappedselectionmodel.h"
+
 MainWin::MainWin(QtUi *_gui, QWidget *parent) : QMainWindow(parent), gui(_gui) {
   ui.setupUi(this);
   setWindowTitle("Quassel IRC");
@@ -41,6 +45,7 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent) : QMainWindow(parent), gui(_gui) {
   statusBar()->showMessage(tr("Waiting for core..."));
   serverListDlg = new ServerListDlg(this);
   settingsDlg = new SettingsDlg(this);
+
 }
 
 void MainWin::init() {
@@ -64,6 +69,18 @@ void MainWin::init() {
   setupMenus();
   setupViews();
 
+  // create nick dock
+  nickDock = new QDockWidget("Nicks", this);
+  nickDock->setObjectName("NickDock");
+  nickDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+
+  nickListWidget = new NickListWidget(nickDock);
+  nickDock->setWidget(nickListWidget);
+
+  addDockWidget(Qt::RightDockWidgetArea, nickDock);
+  ui.menuViews->addAction(nickDock->toggleViewAction());
+
+  // restore mainwin state
   QSettings s;
   s.beginGroup("Geometry");
   //resize(s.value("MainWinSize", QSize(500, 400)).toSize());
@@ -83,23 +100,30 @@ void MainWin::init() {
   if(serverListDlg->showOnStartup()) {
     showServerList();
   }
-
+  
+  setDockNestingEnabled(true);
+  
+  
   // TESTING
-//   setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
-//   setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
+  setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
+  setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
 
-//   setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
-//   setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
-  
-//   QDockWidget *dock = new QDockWidget("Topic Dock", this);
-//   dock->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
+  setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
+  setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
 
-//   TopicWidget *topicwidget = new TopicWidget(dock);
-//   dock->setWidget(topicwidget);
-  
-//   addDockWidget(Qt::TopDockWidgetArea, dock);
 
-//   ui.menuViews->addAction(dock->toggleViewAction());
+  QDockWidget *dock = new QDockWidget("Topic Dock", this);
+  dock->setObjectName("TopicDock");
+  dock->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
+
+  TopicWidget *topicwidget = new TopicWidget(dock);
+  dock->setWidget(topicwidget);
+
+  Client::bufferModel()->mapProperty(0, Qt::DisplayRole, topicwidget, "topic");
+
+  addDockWidget(Qt::TopDockWidgetArea, dock);
+
+  ui.menuViews->addAction(dock->toggleViewAction());
 
 }
 
@@ -128,9 +152,6 @@ void MainWin::setupMenus() {
   connect(ui.actionSettingsDlg, SIGNAL(triggered()), this, SLOT(showSettingsDlg()));
   ui.actionSettingsDlg->setEnabled(false);
   connect(ui.actionAboutQt, SIGNAL(triggered()), QApplication::instance(), SLOT(aboutQt()));
-  // for debugging
-  connect(ui.actionImportBacklog, SIGNAL(triggered()), this, SLOT(importBacklog()));
-  Client::signalProxy()->attachSignal(this, SIGNAL(importOldBacklog()));
 }
 
 void MainWin::setupViews() {
@@ -138,16 +159,16 @@ void MainWin::setupViews() {
   BufferTreeModel *model = Client::bufferModel();
   connect(model, SIGNAL(bufferSelected(Buffer *)), this, SLOT(showBuffer(Buffer *)));
 
-  addBufferView(tr("All Buffers"), model, BufferViewFilter::AllNets, QStringList());
-  addBufferView(tr("All Channels"), model, BufferViewFilter::AllNets|BufferViewFilter::NoQueries|BufferViewFilter::NoServers, QStringList());
-  addBufferView(tr("All Queries"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QStringList());
-  addBufferView(tr("All Networks"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QStringList());
-  addBufferView(tr("Full Custom"), model, BufferViewFilter::FullCustom, QStringList());
+  addBufferView(tr("All Buffers"), model, BufferViewFilter::AllNets, QList<uint>());
+  addBufferView(tr("All Channels"), model, BufferViewFilter::AllNets|BufferViewFilter::NoQueries|BufferViewFilter::NoServers, QList<uint>());
+  addBufferView(tr("All Queries"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QList<uint>());
+  addBufferView(tr("All Networks"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QList<uint>());
+  addBufferView(tr("Full Custom"), model, BufferViewFilter::FullCustom, QList<uint>());
   
   ui.menuViews->addSeparator();
 }
 
-void MainWin::addBufferView(const QString &viewname, QAbstractItemModel *model, const BufferViewFilter::Modes &mode, const QStringList &nets) {
+void MainWin::addBufferView(const QString &viewname, QAbstractItemModel *model, const BufferViewFilter::Modes &mode, const QList<uint> &nets) {
   QDockWidget *dock = new QDockWidget(viewname, this);
   dock->setObjectName(QString("ViewDock-" + viewname)); // should be unique for mainwindow state!
   dock->setAllowedAreas(Qt::RightDockWidgetArea|Qt::LeftDockWidgetArea);
@@ -156,6 +177,7 @@ void MainWin::addBufferView(const QString &viewname, QAbstractItemModel *model,
   //create the view and initialize it's filter
   BufferView *view = new BufferView(dock);
   view->setFilteredModel(model, mode, nets);
+  Client::bufferModel()->synchronizeView(view);
   dock->setWidget(view);
   
   addDockWidget(Qt::LeftDockWidgetArea, dock);
@@ -175,6 +197,7 @@ void MainWin::connectedToCore() {
   ui.actionDisconnectCore->setEnabled(true);
   ui.actionNetworkList->setEnabled(true);
   ui.bufferWidget->show();
+  statusBar()->showMessage(tr("Connected to core."));
 }
 
 void MainWin::disconnectedFromCore() {
@@ -184,7 +207,8 @@ void MainWin::disconnectedFromCore() {
   ui.actionNetworkList->setEnabled(false);
   ui.bufferWidget->hide();
   ui.actionConnectCore->setEnabled(true);
-  //qDebug() << "mainwin disconnected";
+  nickListWidget->reset();
+  statusBar()->showMessage(tr("Not connected to core."));
 }
 
 AbstractUiMsg *MainWin::layoutMsg(const Message &msg) {
@@ -247,15 +271,9 @@ void MainWin::showBuffer(Buffer *b) {
   currentBuffer = b->bufferInfo().groupId();
   //emit bufferSelected(b);
   //qApp->processEvents();
-      
   ui.bufferWidget->setBuffer(b);
+  nickListWidget->setBuffer(b);
+  //if(b->bufferType() == Buffer::ChannelType) nickDock->show();
+  //else nickDock->hide();
   //emit bufferSelected(b);
 }
-
-void MainWin::importBacklog() {
-  if(QMessageBox::warning(this, "Import old backlog?", "Do you want to import your old file-based backlog into new the backlog database?<br>"
-                                "<b>This will permanently delete the contents of your database!</b>",
-                                QMessageBox::Yes|QMessageBox::No) == QMessageBox::Yes) {
-    emit importOldBacklog();
-  }
-}