From 4c3832c50876043a15a5e151fc31e9ac5a100058 Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Thu, 9 Jun 2016 14:46:38 +0200
Subject: [PATCH] Unnecessary modelLoaded signal is removed. Default JobItem
 selection on project load.

---
 GUI/coregui/Models/JobModel.h                      |  1 -
 GUI/coregui/Views/JobView.cpp                      |  2 ++
 GUI/coregui/Views/JobWidgets/JobListWidget.cpp     | 13 ++++++-------
 GUI/coregui/Views/JobWidgets/JobListWidget.h       |  6 ++++--
 GUI/coregui/Views/JobWidgets/JobSelectorWidget.cpp | 12 ++++++++++++
 GUI/coregui/Views/JobWidgets/JobSelectorWidget.h   |  1 +
 GUI/coregui/mainwindow/projectdocument.cpp         |  2 --
 7 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/GUI/coregui/Models/JobModel.h b/GUI/coregui/Models/JobModel.h
index 105d172ed7d..111ec4302ad 100644
--- a/GUI/coregui/Models/JobModel.h
+++ b/GUI/coregui/Models/JobModel.h
@@ -58,7 +58,6 @@ signals:
     void aboutToDeleteJobItem(JobItem *item);
     void focusRequest(JobItem *item);
     void globalProgress(int);
-    void modelLoaded();
 
 public slots:
     void onCancelAllJobs();
diff --git a/GUI/coregui/Views/JobView.cpp b/GUI/coregui/Views/JobView.cpp
index dc5621288ad..905bc91069b 100644
--- a/GUI/coregui/Views/JobView.cpp
+++ b/GUI/coregui/Views/JobView.cpp
@@ -78,6 +78,8 @@ void JobView::showEvent(QShowEvent *)
 {
     if(isVisible())
         m_jobActivityStatusBar->show();
+
+    m_docks->jobSelector()->makeSelectionIfNoneSelected();
 }
 
 void JobView::hideEvent(QHideEvent *)
diff --git a/GUI/coregui/Views/JobWidgets/JobListWidget.cpp b/GUI/coregui/Views/JobWidgets/JobListWidget.cpp
index fa7c8e3fd73..6e3034286be 100644
--- a/GUI/coregui/Views/JobWidgets/JobListWidget.cpp
+++ b/GUI/coregui/Views/JobWidgets/JobListWidget.cpp
@@ -63,15 +63,8 @@ void JobListWidget::setModel(JobModel *model)
         m_jobModel = model;
         m_listView->setModel(model);
 
-//        connect(m_listView->selectionModel(),
-//            SIGNAL( selectionChanged(const QItemSelection&, const QItemSelection&) ),
-//            m_jobModel,
-//            SLOT( onSelectionChanged(const QItemSelection&, const QItemSelection&) )
-//            );
-
         connect(m_listViewDelegate, SIGNAL(cancelButtonClicked(QModelIndex)),
         m_jobModel, SLOT(cancelJob(QModelIndex)), Qt::UniqueConnection);
-
     }
 }
 
@@ -80,6 +73,11 @@ QItemSelectionModel *JobListWidget::selectionModel()
     return m_listView->selectionModel();
 }
 
+QModelIndexList JobListWidget::selected()
+{
+    return m_listView->selectionModel()->selectedIndexes();
+}
+
 
 //! setup context menu for listView
 //void JobListWidget::setupContextMenuActions()
@@ -139,6 +137,7 @@ QItemSelectionModel *JobListWidget::selectionModel()
 
 void JobListWidget::makeJobItemSelected(JobItem *jobItem)
 {
+    Q_ASSERT(jobItem);
     QModelIndexList selected = m_listView->selectionModel()->selectedIndexes();
 
     // Already selected, but we still will emit the signal to notify widgets.
diff --git a/GUI/coregui/Views/JobWidgets/JobListWidget.h b/GUI/coregui/Views/JobWidgets/JobListWidget.h
index 7748875109f..4464faebf0a 100644
--- a/GUI/coregui/Views/JobWidgets/JobListWidget.h
+++ b/GUI/coregui/Views/JobWidgets/JobListWidget.h
@@ -19,6 +19,7 @@
 
 #include "WinDllMacros.h"
 #include <QWidget>
+#include <QModelIndexList>
 
 class JobModel;
 class JobListViewDelegate;
@@ -41,16 +42,17 @@ public:
 
     QItemSelectionModel *selectionModel();
 
+    QModelIndexList selected();
+
 signals:
     void contextMenuRequest(const QPoint &point, const QModelIndex &index);
     void selectionChanged(class JobItem *);
 
 public slots:
     void makeJobItemSelected(class JobItem *jobItem);
-//    void makeJobItemSelected(const QModelIndex &index);
+    void onItemSelectionChanged(class SessionItem *item);
 
 private slots:
-    void onItemSelectionChanged(class SessionItem *item);
 
 private:
     JobListViewDelegate *m_listViewDelegate;
diff --git a/GUI/coregui/Views/JobWidgets/JobSelectorWidget.cpp b/GUI/coregui/Views/JobWidgets/JobSelectorWidget.cpp
index 4cf25c7b8f0..7f0b41ddc10 100644
--- a/GUI/coregui/Views/JobWidgets/JobSelectorWidget.cpp
+++ b/GUI/coregui/Views/JobWidgets/JobSelectorWidget.cpp
@@ -24,6 +24,8 @@
 #include "StyledToolBar.h"
 #include "minisplitter.h"
 #include <QHBoxLayout>
+#include <QItemSelectionModel>
+
 
 JobSelectorWidget::JobSelectorWidget(JobModel *jobModel, QWidget *parent)
     : QWidget(parent)
@@ -75,6 +77,16 @@ void JobSelectorWidget::makeJobItemSelected(JobItem *item)
     m_jobListWidget->makeJobItemSelected(item);
 }
 
+//! If no selection exist, select first item
+
+void JobSelectorWidget::makeSelectionIfNoneSelected()
+{
+    if(m_jobListWidget->selected().isEmpty()) {
+        if(SessionItem *item = m_jobModel->topItem())
+            m_jobListWidget->selectionModel()->select(item->index(), QItemSelectionModel::Select);
+    }
+}
+
 void JobSelectorWidget::onSelectionChanged(JobItem *jobItem)
 {
     m_jobProperties->setItem(jobItem);
diff --git a/GUI/coregui/Views/JobWidgets/JobSelectorWidget.h b/GUI/coregui/Views/JobWidgets/JobSelectorWidget.h
index 42934c3fe78..c99a4135cd8 100644
--- a/GUI/coregui/Views/JobWidgets/JobSelectorWidget.h
+++ b/GUI/coregui/Views/JobWidgets/JobSelectorWidget.h
@@ -43,6 +43,7 @@ signals:
 
 public slots:
     void makeJobItemSelected(JobItem *);
+    void makeSelectionIfNoneSelected();
 
 private slots:
     void onSelectionChanged(JobItem *jobItem);
diff --git a/GUI/coregui/mainwindow/projectdocument.cpp b/GUI/coregui/mainwindow/projectdocument.cpp
index 5b37e6fbbfb..8c5dbc19536 100644
--- a/GUI/coregui/mainwindow/projectdocument.cpp
+++ b/GUI/coregui/mainwindow/projectdocument.cpp
@@ -248,8 +248,6 @@ void ProjectDocument::readFrom(QIODevice *device)
         m_messageService->send_message(this, XML_FORMAT_ERROR, reader.errorString());
         return;
     }
-
-    m_applicationModels->jobModel()->modelLoaded();
 }
 
 void ProjectDocument::writeTo(QIODevice *device)
-- 
GitLab