| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433 | /*= StarPU-Top for StarPU =Copyright (C) 2011 William BraikYann CourtoisJean-Marie CouteyenAnthony RoyThis library is free software; you can redistribute it and/ormodify it under the terms of the GNU Lesser General PublicLicense as published by the Free Software Foundation; eitherversion 2.1 of the License, or (at your option) any later version.This library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNULesser General Public License for more details.You should have received a copy of the GNU Lesser General PublicLicense along with this library; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA*/#include "sessionsetupmanager.h"#include "mainwindow.h"#include "widgetwindowsmanager.h"#include "abstractwidgetwindow.h"#include "datawidget.h"#include "dataaggregatorwidget.h"#include <QDebug>#include <QString>#include <QFile>#include <QDockWidget>SessionSetupManager::SessionSetupManager(MainWindow *mainWindow){    static bool instanciated = false;    Q_ASSERT_X(instanciated == false, "SessionSetupManager's' constructor",               "Singleton pattern violated - "               "SessionSetupManager instanciated more than once");    qDebug() << "SessionSetupManager : initializing";    _mainWindow = mainWindow;    _sessionStateSettings = 0;    instanciated = true;}SessionSetupManager::~SessionSetupManager(){    delete _sessionStateSettings;}bool SessionSetupManager::saveSessionSetup(QString sessionSetupName){    QString fileName = SESSION_SETUPS_DIR + "/" + sessionSetupName                       + SESSION_SETUPS_FILEEXT;    if (QFile(fileName).exists() == true)    {        if (QFile(fileName).remove() == false)        {            qDebug()                    << "SessionSetupManager : "                    "coudln't reinitialize session setup file before saving !";            return false;        }    }    // Init settings    delete _sessionStateSettings;    _sessionStateSettings = new QSettings(fileName, QSettings::IniFormat);    qDebug() << "SessionSetupManager : saving session setup to"            << _sessionStateSettings->fileName();    // Save data setup    _sessionStateSettings->beginWriteArray("datadescriptions",                                           _mainWindow->dataDescriptions()->count());    for (int i = 0; i < _mainWindow->dataDescriptions()->count(); i++)    {        _sessionStateSettings->setArrayIndex(i);        int dataId = _mainWindow->dataDescriptions()->at(i)->id;        DataType type = _mainWindow->dataDescriptions()->at(i)->type;        DataWidgetType widget = _mainWindow->dataDescriptions()->at(i)->widget;        _sessionStateSettings->setValue("id", dataId);        _sessionStateSettings->setValue("type", (int) type);        _sessionStateSettings->setValue("widget", (int) widget);    }    _sessionStateSettings->endArray();    // Save parameters setup    _sessionStateSettings->beginWriteArray("paramdescriptions",                                           _mainWindow->paramDescriptions()->count());    for (int i = 0; i < _mainWindow->paramDescriptions()->count(); i++)    {        _sessionStateSettings->setArrayIndex(i);        int paramId = _mainWindow->paramDescriptions()->at(i)->id;        ParamType type = _mainWindow->paramDescriptions()->at(i)->type;        InteractiveWidgetType widget =                _mainWindow->paramDescriptions()->at(i)->widget;        _sessionStateSettings->setValue("id", paramId);        _sessionStateSettings->setValue("type", (int) type);        _sessionStateSettings->setValue("widget", (int) widget);    }    _sessionStateSettings->endArray();    // Save main window setup    _sessionStateSettings->beginGroup("mainwindow");    _sessionStateSettings->setValue("displaymode",                                    (int) _mainWindow->displayMode());    _sessionStateSettings->setValue("geometry", _mainWindow->saveGeometry());    _sessionStateSettings->endGroup();    // Save parameters dock setup    _sessionStateSettings->beginGroup("parametersdock");    _sessionStateSettings->setValue("floating",                                    _mainWindow->parametersDock()->isFloating());    _sessionStateSettings->setValue("geometry",                                    _mainWindow->parametersDock()->saveGeometry());    _sessionStateSettings->endGroup();    // Save widget windows setup    _sessionStateSettings->beginWriteArray("widgetwindows",                                           _mainWindow->widgetWindowsManager()                                           ->widgetWindows().count());    for (int i = 0; i         < _mainWindow->widgetWindowsManager()->widgetWindows().count(); i++)    {        _sessionStateSettings->setArrayIndex(i);        // Retrive general information to save        bool                inside =                _mainWindow->widgetWindowsManager()->widgetWindows().at(                        i)->isInside();        QByteArray windowGeometry;        if (inside == false)        {            windowGeometry                    = _mainWindow->widgetWindowsManager()                      ->widgetWindows().at(i)->saveGeometry();        }        else        { // Save the geometry of the parent subwindow, not the widget itself            windowGeometry                    = _mainWindow->widgetWindowsManager()                      ->widgetWindows().at(i)->parentWidget()->saveGeometry();        }        DataWidget *dataWidget = qobject_cast<DataWidget*> (                _mainWindow->widgetWindowsManager()->widgetWindows().at(i));        if (dataWidget != 0)        { // Data widgets            // Retrieve specific information to save            int dataId = dataWidget->description()->id;            // Save information            _sessionStateSettings->beginGroup("datawidget");            _sessionStateSettings->setValue("inside", inside);            _sessionStateSettings->setValue("geometry", windowGeometry);            _sessionStateSettings->setValue("dataid", dataId);            _sessionStateSettings->endGroup();        }        else        { // Data aggregator widgets            DataAggregatorWidget *dataAggregatorWidget = qobject_cast<                                                         DataAggregatorWidget*> (                                                                 _mainWindow->widgetWindowsManager()->widgetWindows().at(i));            // Retrieve specific information to save            QList<int> aggregatedData = dataAggregatorWidget->aggregatedData();            QString aggregatedDataString;            for (int i = 0; i < aggregatedData.count(); i++)            {                aggregatedDataString.append(                        QString::number(aggregatedData.at(i)) + ",");            }            // Save information            _sessionStateSettings->beginGroup("dataaggregatorwidget");            _sessionStateSettings->setValue("inside", inside);            _sessionStateSettings->setValue("geometry", windowGeometry);            _sessionStateSettings->setValue("dataids", aggregatedDataString);            _sessionStateSettings->endGroup();        }    }    _sessionStateSettings->endArray();    // Write the session setup    _sessionStateSettings->sync();    return true;}bool SessionSetupManager::loadSessionSetup(QString sessionName){    QString fileName = SESSION_SETUPS_DIR + "/" + sessionName                       + SESSION_SETUPS_FILEEXT;    if (QFile(fileName).exists() == false)    {        qDebug() << "SessionSetupManager : session setup file doesn't exist !";        return false;    }    delete _sessionStateSettings;    _sessionStateSettings = new QSettings(fileName, QSettings::IniFormat);    qDebug() << "SessionSetupManager : loading session setup from"            << _sessionStateSettings->fileName();    // Load data descriptions setup    QList < DataDescriptionSetup > dataDescriptionsSetup;    int size = _sessionStateSettings->beginReadArray("datadescriptions");    for (int i = 0; i < size; i++)    {        _sessionStateSettings->setArrayIndex(i);        DataDescriptionSetup dataDescriptionSetup;        bool ok = false;        dataDescriptionSetup.id = _sessionStateSettings->value("id").toInt(&ok);        if (ok == false)        {            qDebug()                    << "SessionSetupManager : "                    "attempted to load incorrect data widget !";            return false;        }        dataDescriptionSetup.type = (DataType) _sessionStateSettings->value(                "type").toInt(&ok);        if (ok == false)        {            qDebug()                    << "SessionSetupManager : "                    "attempted to load incorrect data widget !";            return false;        }        if (dataDescriptionSetup.type != _mainWindow->dataDescriptionFromId(                dataDescriptionSetup.id)->type)        {            qDebug()                    << "SessionSetupManager : "                    "incompatible data types between the sessions !";            return false;        }        dataDescriptionSetup.widget                = (DataWidgetType) _sessionStateSettings->value("widget").toInt(                        &ok);        if (ok == false)        {            qDebug()                    << "SessionSetupManager : "                    "attempted to load incorrect data widget !";            return false;        }        dataDescriptionsSetup.append(dataDescriptionSetup);    }    _sessionStateSettings->endArray();    // Load param descriptions setup    QList < ParamDescriptionSetup > paramDescriptionsSetup;    size = _sessionStateSettings->beginReadArray("paramdescriptions");    for (int i = 0; i < size; i++)    {        _sessionStateSettings->setArrayIndex(i);        ParamDescriptionSetup paramDescriptionSetup;        bool ok = false;        paramDescriptionSetup.id                = _sessionStateSettings->value("id").toInt(&ok);        if (ok == false)        {            qDebug()                    << "SessionSetupManager : "                    "attempted to load incorrect param id !";            return false;        }        paramDescriptionSetup.type = (ParamType) _sessionStateSettings->value(                "type").toInt(&ok);        if (ok == false)        {            qDebug()                    << "SessionSetupManager : "                    "attempted to load incorrect param type !";            return false;        }        if (paramDescriptionSetup.type != _mainWindow->paramDescriptionFromId(                paramDescriptionSetup.id)->type)        {            qDebug()                    << "SessionSetupManager : "                    "incompatible data types between the sessions !";            return false;        }        paramDescriptionSetup.widget                = (InteractiveWidgetType) _sessionStateSettings                  ->value("widget").toInt(&ok);        if (ok == false)        {            qDebug()                    << "SessionSetupManager : "                    "attempted to load incorrect param widget !";            return false;        }        paramDescriptionsSetup.append(paramDescriptionSetup);    }    _sessionStateSettings->endArray();    emit descriptionsSetupLoaded(dataDescriptionsSetup, paramDescriptionsSetup);    // Load main window setup    MainWindowSetup mainWindowSetup;    _sessionStateSettings->beginGroup("mainwindow");    mainWindowSetup.geometry            = _sessionStateSettings->value("geometry").toByteArray();    bool ok = false;    mainWindowSetup.displayMode = (DisplayMode) _sessionStateSettings->value(            "displaymode").toInt(&ok);    if (ok == false)    {        qDebug()                << "SessionSetupManager : "                "attempted to load incorrect main window display mode !";        return false;    }    _sessionStateSettings->endGroup();    emit mainWindowSetupLoaded(mainWindowSetup);    // Load main window setup    ParametersDockSetup parametersDockSetup;    _sessionStateSettings->beginGroup("mainwindow");    parametersDockSetup.floating            = _sessionStateSettings->value("floating").toBool();    parametersDockSetup.geometry            = _sessionStateSettings->value("geometry").toByteArray();    _sessionStateSettings->endGroup();    emit parametersDockSetupLoaded(parametersDockSetup);    // Load widget windows setup    QList < DataWidgetSetup > dataWidgetsSetup;    QList < DataAggregatorWidgetSetup > dataAggregatorWidgetsSetup;    size = _sessionStateSettings->beginReadArray("widgetwindows");    for (int i = 0; i < size; i++)    {        _sessionStateSettings->setArrayIndex(i);        QString currentGroup = _sessionStateSettings->childGroups().at(0);        if (currentGroup.compare("datawidget") == 0)        {            _sessionStateSettings->beginGroup("datawidget");            DataWidgetSetup dataWidgetSetup;            dataWidgetSetup.inside                    = _sessionStateSettings->value("inside").toBool();            dataWidgetSetup.geometry                    = _sessionStateSettings->value("geometry").toByteArray();            bool ok = false;            dataWidgetSetup.dataId                    = _sessionStateSettings->value("dataid").toInt(&ok);            if (ok == false)            {                qDebug()                        << "SessionSetupManager : "                        "attempted to load incorrect data id for the data widget !";                return false;            }            dataWidgetsSetup.append(dataWidgetSetup);            _sessionStateSettings->endGroup();        }        else if (currentGroup.compare("dataaggregatorwidget") == 0)        {            _sessionStateSettings->beginGroup("dataaggregatorwidget");            DataAggregatorWidgetSetup dataAggregatorWidgetSetup;            dataAggregatorWidgetSetup.inside = _sessionStateSettings->value(                    "inside").toBool();            dataAggregatorWidgetSetup.geometry = _sessionStateSettings->value(                    "geometry").toByteArray();            QString dataIdsString =                    _sessionStateSettings->value("dataids").toString();            QStringList dataIdsStringParts = dataIdsString.split(",",                                                                 QString::SkipEmptyParts);            QList<int> dataIds;            for (int i = 0; i < dataIdsStringParts.count(); i++)            {                QString dataIdsStringPart = dataIdsStringParts.at(i);                bool ok = false;                dataIds.append(dataIdsStringPart.toInt(&ok));                if (ok == false)                {                    qDebug()                            << "SessionSetupManager : "                            "attempted to load incorrect data id for data aggregator widget !";                    return false;                }            }            dataAggregatorWidgetSetup.dataIds = dataIds;            dataAggregatorWidgetsSetup.append(dataAggregatorWidgetSetup);            _sessionStateSettings->endGroup();        }        else        {            qDebug()                    << "SessionSetupManager : "                    "attempted to load unknow window widget type !";            return false;        }    }    _sessionStateSettings->endArray();    emit widgetWindowsSetupLoaded(dataWidgetsSetup, dataAggregatorWidgetsSetup);    return true;}
 |