Skip to content
Snippets Groups Projects
mainwindow.cpp 3.76 KiB
Newer Older
Olivier Langella's avatar
Olivier Langella committed

/*******************************************************************************
* Copyright (c) 2015 Olivier Langella <Olivier.Langella@moulon.inra.fr>.
*
* This file is part of XTPcpp.
*
*     XTPcpp is free software: you can redistribute it and/or modify
*     it under the terms of the GNU General Public License as published by
*     the Free Software Foundation, either version 3 of the License, or
*     (at your option) any later version.
*
*     XTPcpp is distributed in the hope that it will be useful,
*     but WITHOUT ANY WARRANTY; without even the implied warranty of
*     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*     GNU General Public License for more details.
*
*     You should have received a copy of the GNU General Public License
*     along with XTPcpp.  If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
*     Olivier Langella <Olivier.Langella@moulon.inra.fr> - initial API and implementation
******************************************************************************/

#include <QDockWidget>
#include <QSettings>
#include <QFileDialog>
Olivier Langella's avatar
Olivier Langella committed
#include "mainwindow.h"

#include "ui_main.h"
#include "files/xpipfile.h"
#include "gui/peptide_list_view/peptidelistwindow.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);
}
Olivier Langella's avatar
Olivier Langella committed
MainWindow::MainWindow(QWidget *parent):
    QMainWindow(parent),
    ui(new Ui::Main)
{
    ui->setupUi(this);

    PwizLoaderThread *worker = new PwizLoaderThread;
    worker->moveToThread(&workerThread);
    /*
    */
    workerThread.start();

    QDockWidget *dock = new QDockWidget(tr("Protein List"), this);
    _protein_list_window = new ProteinListWindow(this);
    //_protein_list_window->show();
    dock->setWidget(_protein_list_window);
    addDockWidget(Qt::RightDockWidgetArea, dock);


Olivier Langella's avatar
Olivier Langella committed
#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);
Olivier Langella's avatar
Olivier Langella committed
#else
// Qt4 code
    connect (_protein_list_window, SIGNAL(proteinMatchClicked(ProteinMatch *)), this ,SLOT(doProteinMatchClicked(ProteinMatch *)));
    /*
        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 *)));
        */
Olivier Langella's avatar
Olivier Langella committed
#endif
}

MainWindow::~MainWindow()
{
    workerThread.quit();
    workerThread.wait();
    //if (_p_ms_data_file != nullptr) delete _p_ms_data_file;
    delete ui;

void MainWindow::doProteinMatchClicked(ProteinMatch * protein_match) {
    PeptideListWindow * peptide_window = new PeptideListWindow(this);
    peptide_window->setProteinMatch(_project_sp.get(), protein_match);
    peptide_window->show();
}

void MainWindow::selectXpipFile() {

    QSettings settings;
    QString default_location = settings.value("path/xpipfile", "").toString();

    QString filename = QFileDialog::getOpenFileName(this,
                       tr("Open XPIP File"), default_location,
                       tr("xpip files (*.xpip);;all files (*)"));

    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());