From 8cda7417b97aa63a32cff197a7b1eae4a7c712b6 Mon Sep 17 00:00:00 2001 From: Olivier Langella <Olivier.Langella@moulon.inra.fr> Date: Wed, 22 Mar 2017 23:01:21 +0100 Subject: [PATCH] load in separate thread --- src/files/xpipfile.cpp | 19 ++++---- src/files/xpipfile.h | 1 + src/grouping/groupingpeptidemass.cpp | 2 +- src/grouping/groupingpeptidemass.h | 2 +- src/gui/mainwindow.cpp | 71 +++++++++++++++++++--------- src/gui/mainwindow.h | 13 +++-- 6 files changed, 72 insertions(+), 36 deletions(-) diff --git a/src/files/xpipfile.cpp b/src/files/xpipfile.cpp index d3aa2cea9..ef6509710 100644 --- a/src/files/xpipfile.cpp +++ b/src/files/xpipfile.cpp @@ -27,21 +27,24 @@ XpipFile::XpipFile(const QUrl & xpip_source) : _xpip_source(xpip_source) } - XpipFile::XpipFile(const QFileInfo & xpip_source): _xpip_source(xpip_source.absoluteFilePath()) +XpipFile::XpipFile(const QFileInfo & xpip_source): _xpip_source(xpip_source.absoluteFilePath()) { } +XpipFile::XpipFile(const XpipFile & other) : _xpip_source(other._xpip_source) +{ +} XpipFile::~XpipFile() { } ProjectSp XpipFile::getProjectSp() const { - ProjectSp project_sp = Project().makeProjectSp(); - - project_sp.get()->readXpipFile(QFileInfo(_xpip_source.toLocalFile())); - - return (project_sp); - -} \ No newline at end of file + ProjectSp project_sp = Project().makeProjectSp(); + + project_sp.get()->readXpipFile(QFileInfo(_xpip_source.toLocalFile())); + + return (project_sp); + +} diff --git a/src/files/xpipfile.h b/src/files/xpipfile.h index 666be1512..12ee8cff0 100644 --- a/src/files/xpipfile.h +++ b/src/files/xpipfile.h @@ -31,6 +31,7 @@ class XpipFile public: XpipFile(const QUrl & xpip_source); XpipFile(const QFileInfo & xpip_source); + XpipFile(const XpipFile & other); ~XpipFile(); ProjectSp getProjectSp() const; diff --git a/src/grouping/groupingpeptidemass.cpp b/src/grouping/groupingpeptidemass.cpp index c5d6c430d..7dc382e8c 100644 --- a/src/grouping/groupingpeptidemass.cpp +++ b/src/grouping/groupingpeptidemass.cpp @@ -28,7 +28,7 @@ GroupingPeptideMass::GroupingPeptideMass() { - _p_monitor = new pappso::GrpGroupingMonitor(); + //_p_monitor = new pappso::GrpGroupingMonitor(); _p_grp_experiment = new pappso::GrpExperiment(_p_monitor); } diff --git a/src/grouping/groupingpeptidemass.h b/src/grouping/groupingpeptidemass.h index f6644b57d..2d585026c 100644 --- a/src/grouping/groupingpeptidemass.h +++ b/src/grouping/groupingpeptidemass.h @@ -40,7 +40,7 @@ protected : GroupingPeptideMass(); private : - pappso::GrpGroupingMonitor * _p_monitor; + pappso::GrpGroupingMonitor * _p_monitor = nullptr; pappso::GrpExperiment * _p_grp_experiment; }; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index cf31011b2..eee5f2c95 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -25,38 +25,53 @@ #include <QSettings> #include <QFileDialog> #include <QMessageBox> +#include <QDebug> #include "mainwindow.h" #include "ui_main.h" -#include "files/xpipfile.h" #include "gui/peptide_list_view/peptidelistwindow.h" #include <pappsomspp/pappsoexception.h> -void PwizLoaderThread::doMsDataFileLoad(const QString & parameter) { - pwiz::msdata::MSDataFile* p_ms_data_file = getPwizMSDataFile(parameter); - /* ... here is the expensive or blocking operation ... */ - emit msDataReady(p_ms_data_file); +void XtpLoaderThread::doXpipFileLoad(QString filename) { + qDebug() << "XtpLoaderThread::doXpipFileLoad begin "<< filename; + try { + QFileInfo new_xpip_file; + new_xpip_file.setFile(filename); + + + XpipFile xpip_file(new_xpip_file); + ProjectSp project_sp = xpip_file.getProjectSp(); + + emit projectReady(project_sp); + + } + catch (pappso::PappsoException & error) { + emit projectNotReady(tr("Error while reading XPIP file :\n%1").arg(error.qwhat())); + } + + qDebug() << "XtpLoaderThread::doXpipFileLoad end"; } + MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::Main) { ui->setupUi(this); - PwizLoaderThread *worker = new PwizLoaderThread; + XtpLoaderThread *worker = new XtpLoaderThread; worker->moveToThread(&workerThread); /* */ workerThread.start(); - //QDockWidget *dock = new QDockWidget(tr("Protein List"), this); + _protein_list_window = new ProteinListWindow(this); - _protein_list_window->show(); + //QDockWidget *dock = new QDockWidget(tr("Protein List"), this); //dock->setWidget(_protein_list_window); //addDockWidget(Qt::RightDockWidgetArea, dock); - + qRegisterMetaType<ProjectSp>("ProjectSp"); #if QT_VERSION >= 0x050000 // Qt5 code /* @@ -67,6 +82,9 @@ MainWindow::MainWindow(QWidget *parent): #else // Qt4 code connect (_protein_list_window, SIGNAL(proteinMatchClicked(ProteinMatch *)), this ,SLOT(doProteinMatchClicked(ProteinMatch *))); + + connect(this, SIGNAL(operateXpipFile(QString)), worker,SLOT(doXpipFileLoad(QString))); + connect(worker, SIGNAL(projectReady(ProjectSp)), this,SLOT(doProjectReady(ProjectSp))); /* connect(&workerThread, SIGNAL(finished()), worker, SLOT(deleteLater())); connect(this, SIGNAL(operateMsDataFile(QString)), worker,SLOT(doMsDataFileLoad(QString))); @@ -99,6 +117,21 @@ void MainWindow::viewError(QString error) { } +void MainWindow::doProjectReady(ProjectSp project_sp) { + + try { + project_sp.get()->startGrouping(); + } + catch (pappso::PappsoException & error) { + viewError(tr("Error while grouping :\n%1").arg(error.qwhat())); + } + setProjectSp(project_sp); +} + + +void MainWindow::doProjectNotReady(QString error) { + viewError(tr("Error while grouping :\n%1").arg(error)); +} void MainWindow::doProteinMatchClicked(ProteinMatch * protein_match) { PeptideListWindow * peptide_window = new PeptideListWindow(this); @@ -118,23 +151,17 @@ void MainWindow::selectXpipFile() { if (filename.isEmpty()) { return; } - QFileInfo new_xpip_file; - new_xpip_file.setFile(filename); - - XpipFile xpip_file(new_xpip_file); - - _project_sp = xpip_file.getProjectSp(); - _protein_list_window->setIdentificationGroup(_project_sp.get()->getCurrentIdentificationGroupP()); + emit operateXpipFile(filename); } catch (pappso::PappsoException & error) { viewError(tr("Error while reading XPIP file :\n%1").arg(error.qwhat())); } - try { - _project_sp.get()->startGrouping(); - } - catch (pappso::PappsoException & error) { - viewError(tr("Error while grouping :\n%1").arg(error.qwhat())); - } } + +void MainWindow::setProjectSp(ProjectSp project_sp) { + _project_sp = project_sp; + _protein_list_window->setIdentificationGroup(_project_sp.get()->getCurrentIdentificationGroupP()); + _protein_list_window->show(); +} diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 2bf67e3a1..70fdc312f 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -36,6 +36,7 @@ #include "../utils/readspectrum.h" #include "protein_list_view/proteinlistwindow.h" #include "core/project.h" +#include "files/xpipfile.h" @@ -44,7 +45,7 @@ class Main; } -class PwizLoaderThread : public QObject +class XtpLoaderThread : public QObject { Q_OBJECT public: @@ -55,10 +56,11 @@ protected: void closeEvent(QCloseEvent *event); public slots: - void doMsDataFileLoad(const QString & parameter); + void doXpipFileLoad(QString filename); signals: - void msDataReady(pwiz::msdata::MSDataFile * p_ms_data_file); + void projectReady(ProjectSp project_sp); + void projectNotReady(QString error); }; class MainWindow: public QMainWindow { @@ -73,16 +75,19 @@ public: public slots: void selectXpipFile(); void doProteinMatchClicked(ProteinMatch * protein_match); + void doProjectReady(ProjectSp project_sp); + void doProjectNotReady(QString error); //void peptideEdited(QString peptideStr); // void setColor(const QColor &color); // void setShape(Shape shape); signals: //void peptideChanged(pappso::PeptideSp peptide); - + void operateXpipFile(QString xpip_file); protected: void closeEvent(QCloseEvent *event) override; + void setProjectSp(ProjectSp project_sp); private: -- GitLab