Skip to content
Snippets Groups Projects
Commit f4950402 authored by Olivier Langella's avatar Olivier Langella
Browse files

WIP: using thread in project view

parent af7d15d0
No related branches found
No related tags found
No related merge requests found
......@@ -42,7 +42,7 @@ MainWindow::MainWindow(QWidget *parent):
ui->setupUi(this);
setWindowTitle(QString("%1 %2").arg(SOFTWARE_NAME).arg(XTPCPP_VERSION));
WorkerThread *worker = new WorkerThread;
WorkerThread *worker = new WorkerThread(this);
worker->moveToThread(&workerThread);
/*
*/
......@@ -75,23 +75,9 @@ MainWindow::MainWindow(QWidget *parent):
#else
// Qt4 code
connect(this, SIGNAL(operateXpipFile(QString)), worker,SLOT(doXpipFileLoad(QString)));
connect(worker, SIGNAL(projectReady(ProjectSp)), this,SLOT(doProjectReady(ProjectSp)));
connect(this, SIGNAL(operateLoadingResults(bool,AutomaticFilterParameters,QStringList)), worker,SLOT(doLoadingResults(bool,AutomaticFilterParameters,QStringList)));
connect(_p_load_results_dialog, SIGNAL(accepted()), this,SLOT(doAcceptedLoadResultDialog()));
connect(_p_export_spreadsheet_dialog, SIGNAL(accepted()), this,SLOT(doAcceptedExportSpreadsheetDialog()));
connect(worker, SIGNAL(loadingMessage(QString)), this,SLOT(doDisplayLoadingMessage(QString)));
connect(worker, SIGNAL(projectNotReady(QString)), this,SLOT(doProjectNotReady(QString)));
//grouping
connect(this, SIGNAL(operateGrouping(ProjectSp)), worker,SLOT(doGrouping(ProjectSp)));
connect(worker, SIGNAL(groupingFinished()), this,SLOT(doGroupingFinished()));
//masschroq write
connect(this, SIGNAL(operateWritingMassChroqFile(QString, ProjectSp)), worker,SLOT(doWritingMassChroqFile(QString, ProjectSp)));
//writing ODS file :
connect(this, SIGNAL(operateWritingOdsFile(QString, ProjectSp)), worker,SLOT(doWritingOdsFile(QString, ProjectSp)));
connect(worker, SIGNAL(operationFailed(QString)), this,SLOT(doOperationFailed(QString)));
connect(worker, SIGNAL(operationFinished()), this,SLOT(doOperationFinished()));
/*
connect(&workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(this, SIGNAL(operateMsDataFile(QString)), worker,SLOT(doMsDataFileLoad(QString)));
......
......@@ -33,6 +33,7 @@
#include <QMessageBox>
#include <pappsomspp/pappsoexception.h>
#include <numeric>
#include "../workerthread.h"
......@@ -41,6 +42,7 @@ ProjectWindow::ProjectWindow(MainWindow *parent):
ui(new Ui::ProjectView)
{
main_window = parent;
ui->setupUi(this);
_p_fasta_str_li = new QStandardItemModel();
......@@ -53,6 +55,7 @@ ProjectWindow::ProjectWindow(MainWindow *parent):
_p_edit_modifications = new EditModifications(this);
_p_edit_label_methods = new EditLabelMethods(this);
_p_waiting_message_dialog = new WaitingMessageDialog(this);
#if QT_VERSION >= 0x050000
// Qt5 code
......@@ -71,6 +74,10 @@ ProjectWindow::ProjectWindow(MainWindow *parent):
*/
this->setDisabled(true);
WorkerThread * p_worker = new WorkerThread(this);
p_worker->moveToThread(&worker_thread);
}
......@@ -218,51 +225,50 @@ void ProjectWindow::refresh() {
}
void ProjectWindow::doAutomaticFilterParametersChanged(AutomaticFilterParameters parameters) {
qDebug() << "ProjectWindow::doAutomaticFilterParametersChanged begin ";
showWaitingMessage(tr("Updating filters"));
_project_sp.get()->getProteinStore().setRegexpContaminantPattern(ui->contaminant_protein_regexp_line_edit->text());
_project_sp.get()->updateAutomaticFilters(parameters);
//re group
for (IdentificationGroup * identification_group : _project_sp.get()->getIdentificationGroupList()) {
doIdentificationGroupEdited(identification_group);
}
refresh();
qDebug() << "ProjectWindow::doAutomaticFilterParametersChanged emit operateGrouping(_project_sp) ";
emit operateGrouping(_project_sp);
qDebug() << "ProjectWindow::doAutomaticFilterParametersChanged end ";
}
void ProjectWindow::doOperationFailed(QString error) {
hideWaitingMessage();
viewError(error);
}
void ProjectWindow::doOperationFinished() {
hideWaitingMessage();
}
void ProjectWindow::doMassPrecisionUnitChanged(QString combo_value) {
qDebug() << "ProjectWindow::doMassPrecisionUnitChanged begin "<< combo_value;
refresh();
qDebug() << "ProjectWindow::doMassPrecisionUnitChanged end ";
void ProjectWindow::doDisplayLoadingMessage(QString message) {
qDebug() << "ProjectWindow::doDisplayLoadingMessage " << message;
_p_waiting_message_dialog->message(message);
}
void ProjectWindow::doIdentificationGroupEdited(IdentificationGroup * p_ident_group) {
qDebug() << "ProjectWindow::doIdentificationGroupEdited begin " << p_ident_group;
if (p_ident_group == nullptr) {
qDebug() << "ProjectWindow::doIdentificationGroupEdited p_ident_group == nullptr";
}
else {
try {
p_ident_group->startGrouping(_project_sp.get()->getGroupingType());
}
catch (pappso::PappsoException exception_pappso) {
QMessageBox::warning(this,
tr("Error grouping project :"), exception_pappso.qwhat());
}
catch (std::exception exception_std) {
QMessageBox::warning(this,
tr("Error grouping project :"), exception_std.what());
}
void ProjectWindow::doGroupingFinished() {
qDebug() << "ProjectWindow::doGroupingFinished begin " ;
hideWaitingMessage();
//re group
for (IdentificationGroup * p_ident_group : _project_sp.get()->getIdentificationGroupList()) {
refreshGroup(p_ident_group);
}
refresh();
qDebug() << "ProjectWindow::doIdentificationGroupEdited end";
qDebug() << "ProjectWindow::doGroupingFinished end";
}
void ProjectWindow::doMassPrecisionUnitChanged(QString combo_value) {
qDebug() << "ProjectWindow::doMassPrecisionUnitChanged begin "<< combo_value;
refresh();
qDebug() << "ProjectWindow::doMassPrecisionUnitChanged end ";
}
void ProjectWindow::doViewPeptideList(IdentificationGroup * p_ident_group, ProteinMatch * protein_match) {
......@@ -350,12 +356,12 @@ void ProjectWindow::doViewProteinList(IdentificationGroup* p_identification_grou
void ProjectWindow::setProjectSp(ProjectSp project_sp) {
qDebug() << "ProjectWindow::setProjectSp begin" ;
_project_sp = project_sp;
qDebug() << "ProjectWindow::setProjectSp begin " << _project_sp.get()->getFastaFileStore().getFastaFileList().size() ;
_fastafile_list = _project_sp.get()->getFastaFileStore().getFastaFileList();
_p_fasta_str_li->removeRows(0, _p_fasta_str_li->rowCount());
for (FastaFileSp fasta_file : _fastafile_list ) {
......@@ -365,8 +371,8 @@ void ProjectWindow::setProjectSp(ProjectSp project_sp) {
_p_fasta_str_li->appendRow(item);
item->setData(QVariant(QString("%1").arg(fasta_file.get()->getFilename())),Qt::UserRole);
}
for (auto && p_window :_peptide_list_window_collection) {
delete p_window;
}
......@@ -425,7 +431,7 @@ void ProjectWindow::setProjectSp(ProjectSp project_sp) {
ui->decoy_protein_regexp_line_edit->setText(_project_sp.get()->getProteinStore().getRegexpDecoy().pattern());
ui->contaminant_protein_regexp_line_edit->setText(_project_sp.get()->getProteinStore().getRegexpContaminant().pattern());
refresh();
this->setEnabled(true);
}
......@@ -446,3 +452,24 @@ void ProjectWindow::editLabelingMethods() {
_p_edit_label_methods->activateWindow();
}
void ProjectWindow::hideWaitingMessage() {
_p_waiting_message_dialog->hide();
}
void ProjectWindow::showWaitingMessage(const QString title) {
_p_waiting_message_dialog->setWindowTitle(title);
_p_waiting_message_dialog->show();
_p_waiting_message_dialog->raise();
_p_waiting_message_dialog->activateWindow();
}
void ProjectWindow::doIdentificationGroupEdited(IdentificationGroup* p_identification_group) {
}
void ProjectWindow::viewError(QString error) {
QMessageBox::warning(this,
tr("Oops! an error occurred in XTPCPP. Dont Panic :"), error);
}
......@@ -25,6 +25,7 @@
#define PROJECTWINDOW_H
#include <QMainWindow>
#include <QThread>
#include <set>
#include "../../core/project.h"
#include "../edit_label_methods/editlabelmethods.h"
......@@ -34,6 +35,7 @@
#include "../protein_view/proteinwindow.h"
#include "../peptide_detail_view/peptidewindow.h"
#include "gui/project_view/automatic_filter_widget/automaticfilterwidget.h"
#include "../waiting_message_dialog/waitingmessagedialog.h"
class MainWindow;
......@@ -44,6 +46,7 @@ class ProjectView;
class ProjectWindow: public QMainWindow {
Q_OBJECT
QThread worker_thread;
friend class ProteinListWindow;
friend class PeptideListWindow;
......@@ -62,18 +65,23 @@ public slots:
void doAutomaticFilterParametersChanged(AutomaticFilterParameters parameters);
void doFdrChanged();
void doMassPrecisionUnitChanged(QString combo_value);
void doOperationFailed(QString);
void doOperationFinished();
void doGroupingFinished();
void doDisplayLoadingMessage(QString message);
// void setColor(const QColor &color);
// void setShape(Shape shape);
signals:
void identificationGroupGrouped(IdentificationGroup * p_identification_group);
void peptideMatchSelected(PeptideMatch * peptide_match);
void operateGrouping(ProjectSp project_sp);
//void peptideChanged(pappso::PeptideSp peptide);
protected :
void doViewPeptideList(IdentificationGroup * p_ident_group, ProteinMatch * protein_match);
void doViewPeptideDetail(PeptideMatch * peptide_match);
void doViewProteinDetail(ProteinMatch * protein_match);
void doIdentificationGroupEdited(IdentificationGroup * p_identification_group);
void doIdentificationGroupEdited(IdentificationGroup* p_identification_group);
void computeFdr();
void computeMassPrecision();
......@@ -84,6 +92,10 @@ private :
void connectNewPeptideDetailWindow();
void refreshGroup(IdentificationGroup * p_ident_group);
void refresh();
void showWaitingMessage(const QString title);
void hideWaitingMessage();
void viewError(QString error);
private:
Ui::ProjectView *ui;
......@@ -106,6 +118,7 @@ private:
QStandardItemModel * _p_fasta_str_li;
std::vector<FastaFileSp> _fastafile_list;
WaitingMessageDialog * _p_waiting_message_dialog;
};
......
......@@ -30,10 +30,73 @@
#include "workerthread.h"
#include <odsstream/odsdocwriter.h>
#include <pappsomspp/pappsoexception.h>
#include <QDebug>
#include "../output/masschroqml.h"
#include "../output/ods/odsexport.h"
#include "files/xpipfile.h"
WorkerThread::WorkerThread(MainWindow * p_main_window)
{
qDebug() << "WorkerThread::WorkerThread begin MainWindow";
#if QT_VERSION >= 0x050000
// Qt5 code
/*
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
connect(this, &PtSpectrumViewer::operateMsDataFile, worker, &PwizLoaderThread::doMsDataFileLoad);
connect(worker, &PwizLoaderThread::msDataReady, this, &PtSpectrumViewer::handleMsDataFile);
*/
#else
// Qt4 code
connect(p_main_window, SIGNAL(operateXpipFile(QString)), this,SLOT(doXpipFileLoad(QString)));
connect(this, SIGNAL(projectReady(ProjectSp)), p_main_window,SLOT(doProjectReady(ProjectSp)));
connect(p_main_window, SIGNAL(operateLoadingResults(bool,AutomaticFilterParameters,QStringList)), this,SLOT(doLoadingResults(bool,AutomaticFilterParameters,QStringList)));
connect(this, SIGNAL(loadingMessage(QString)), p_main_window,SLOT(doDisplayLoadingMessage(QString)));
connect(this, SIGNAL(projectNotReady(QString)), p_main_window,SLOT(doProjectNotReady(QString)));
//grouping
connect(p_main_window, SIGNAL(operateGrouping(ProjectSp)), this,SLOT(doGrouping(ProjectSp)));
connect(this, SIGNAL(groupingFinished()), p_main_window,SLOT(doGroupingFinished()));
//masschroq write
connect(p_main_window, SIGNAL(operateWritingMassChroqFile(QString, ProjectSp)), this,SLOT(doWritingMassChroqFile(QString, ProjectSp)));
//writing ODS file :
connect(p_main_window, SIGNAL(operateWritingOdsFile(QString, ProjectSp)), this,SLOT(doWritingOdsFile(QString, ProjectSp)));
connect(this, SIGNAL(operationFailed(QString)), p_main_window,SLOT(doOperationFailed(QString)));
connect(this, SIGNAL(operationFinished()), p_main_window,SLOT(doOperationFinished()));
/*
connect(&workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(this, SIGNAL(operateMsDataFile(QString)), worker,SLOT(doMsDataFileLoad(QString)));
connect(worker, SIGNAL(msDataReady(pwiz::msdata::MSDataFile *)), this, SLOT(handleMsDataFile(pwiz::msdata::MSDataFile *)));
*/
#endif
qDebug() << "WorkerThread::WorkerThread end MainWindow";
}
WorkerThread::WorkerThread(ProjectWindow * p_project_window)
{
qDebug() << "WorkerThread::WorkerThread begin ProjectWindow";
#if QT_VERSION >= 0x050000
// Qt5 code
#else
// Qt4 code
qDebug() << "WorkerThread::WorkerThread Qt4 code";
connect(this, SIGNAL(loadingMessage(QString)), p_project_window,SLOT(doDisplayLoadingMessage(QString)));
//grouping
connect(p_project_window, SIGNAL(operateGrouping(ProjectSp)), this,SLOT(doGrouping(ProjectSp)));
connect(this, SIGNAL(groupingFinished()), p_project_window,SLOT(doGroupingFinished()));
connect(this, SIGNAL(operationFailed(QString)), p_project_window,SLOT(doOperationFailed(QString)));
connect(this, SIGNAL(operationFinished()), p_project_window,SLOT(doOperationFinished()));
#endif
qDebug() << "WorkerThread::WorkerThread end ProjectWindow";
}
WorkerThread::~WorkerThread()
{
qDebug() << "WorkerThread::WorkerThread destructor";
}
void WorkerThread::doXpipFileLoad(QString filename) {
qDebug() << "WorkerThread::doXpipFileLoad begin "<< filename;
try {
......@@ -58,7 +121,16 @@ void WorkerThread::doXpipFileLoad(QString filename) {
void WorkerThread::doGrouping(ProjectSp project_sp) {
try {
emit loadingMessage(tr("grouping proteins"));
project_sp.get()->startGrouping();
try {
project_sp.get()->startGrouping();
}
catch (pappso::PappsoException exception_pappso) {
emit operationFailed(tr("Error grouping project : %1").arg(exception_pappso.qwhat()));
}
catch (std::exception exception_std) {
emit operationFailed(tr("Error grouping project : %1").arg(exception_std.what()));
}
emit loadingMessage(tr("grouping proteins finished"));
emit groupingFinished();
}
......@@ -95,7 +167,7 @@ void WorkerThread::doWritingMassChroqFile(QString filename, ProjectSp project_sp
emit operationFailed(tr("Error while writing MassChroqML file :\n%1").arg(error.qwhat()));
}
}
void WorkerThread::doLoadingResults(bool is_individual, AutomaticFilterParameters param, QStringList file_list) {
qDebug() << "WorkerThread::doLoadingResults begin ";
......
......@@ -34,12 +34,18 @@
#include <QCloseEvent>
#include "../core/automaticfilterparameters.h"
#include "../core/project.h"
#include "mainwindow.h"
class WorkerThread : public QObject
{
Q_OBJECT
public:
WorkerThread(MainWindow * parent);
WorkerThread(ProjectWindow * parent);
~WorkerThread();
protected:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment