| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487 | /*= 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 "preferencesdialog.h"#include "ui_preferencesdialog.h"#include "mainwindow.h"#include "configurationmanager.h"#include "sessionsetupmanager.h"#include <QCloseEvent>#include <QMessageBox>#include <QDir>const QString DEFAULT_SESSION_SETUP_NAME = "<default>";PreferencesDialog::PreferencesDialog(MainWindow *mainWindow,                                     ConfigurationManager *configurationManager,                                     SessionSetupManager *sessionSetupManger,                                     int activeTab) :QDialog(mainWindow), ui(new Ui::PreferencesDialog){    ui->setupUi(this);    _mainWindow = mainWindow;    _configurationManager = configurationManager;    _sessionSetupManager = sessionSetupManger;    _dataWidgetNames = _mainWindow->dataWidgetNames();    _dataWidgetPossibilities = _mainWindow->dataWidgetPossibilities();    _interactiveWidgetNames = _mainWindow->interactiveWidgetNames();    _interactiveWidgetPossibilities            = _mainWindow->interactiveWidgetPossibilities();    ui->ipEdit->setText(_configurationManager->serverHost());    ui->portEdit->setValue(_configurationManager->serverPort());    ui->commandEdit->setText(_configurationManager->commandLine());    ui->connectionSSHGroupBox->setChecked(_configurationManager);    ui->antialiasingCheckBox->setChecked(_configurationManager->antialiasing());    ui->displayModeComboBox->addItem(tr("Flying windows"),                                     DISPLAY_FLYING_WINDOWS);    ui->displayModeComboBox->addItem(tr("MDI, normal"), DISPLAY_MDI_NORMAL);    ui->preferencesTab->setCurrentIndex(activeTab);    // Synchronize display mode indexes with the main window's toolbar    QObject::connect(_mainWindow, SIGNAL(preferencesDialogCreated(int)),                     this, SLOT(updateDisplayModeIndex(int)));    QObject::connect(ui->displayModeComboBox, SIGNAL(currentIndexChanged(int)),                     _mainWindow, SLOT(updateDisplayModeIndex(int)));    // Synchronize descriptions setup when session setup is loaded    QObject::connect(            _mainWindow->sessionSetupManager(),            SIGNAL(                    descriptionsSetupLoaded(QList<DataDescriptionSetup> ,                                            QList<ParamDescriptionSetup> )),            this,            SLOT(                    sessionDescriptionsSetupLoaded(                            QList<DataDescriptionSetup> ,                            QList<ParamDescriptionSetup> )));    // Synchronize main window setup when session setup is loaded    QObject::connect(_mainWindow->sessionSetupManager(),                     SIGNAL(mainWindowSetupLoaded(MainWindowSetup)), this,                     SLOT(sessionMainWindowSetupLoaded(MainWindowSetup)));    if (_mainWindow->isConnected())    {        ui->connectionServerGroupBox->setEnabled(false);    }    if (_mainWindow->isReady() == false)    {        ui->displayWidgetsGroupBox->setEnabled(false);    }    displayWidgetPreferences();    displaySessionSetupsList();}PreferencesDialog::~PreferencesDialog(){    delete ui;}void PreferencesDialog::changeEvent(QEvent *e){    QDialog::changeEvent(e);    switch (e->type())    {    case QEvent::LanguageChange:        ui->retranslateUi(this);        break;    default:        break;    }}void PreferencesDialog::closeEvent(QCloseEvent *ce){    _configurationManager->setServerHost(ui->ipEdit->text());    _configurationManager->setServerPort(ui->portEdit->value());    _configurationManager->setCommandLine(ui->commandEdit->text());    _configurationManager->setAntialiasing(            ui->antialiasingCheckBox->isChecked());    _configurationManager->setSSH(ui->connectionSSHGroupBox->isChecked());    ce->accept();}void PreferencesDialog::displayWidgetPreferences(){    // Read data descriptions    for (int i = 0; i < _mainWindow->dataDescriptions()->count(); i++)    {        DataDescription *dataDescription = _mainWindow->dataDescriptions()->at(                i);        // Init UI        QGridLayout *layout = (QGridLayout*) ui->dataWidgetsGroupBox->layout();        layout->addWidget(new QLabel(dataDescription->descriptionString), i, 0,                          Qt::AlignHCenter);        QComboBox *dataWidgetList = new QComboBox();        dataWidgetList->setMinimumWidth(100);        // Init list        int dataId = dataDescription->id;        DataType dataType = dataDescription->type;        DataWidgetListItemData dataStruct;        dataStruct.id = dataId;        QVariant data;        QList < DataWidgetType > dataWidgetPossibilities                = _dataWidgetPossibilities->value(dataType).values();        int currentDataWidgetIndex=-1;        for (int j = 0; j < dataWidgetPossibilities.count(); j++)        {            DataWidgetType widget = dataWidgetPossibilities.at(j);            if (widget == dataDescription->widget)            {                currentDataWidgetIndex = j;            }            dataStruct.widget = widget;            data.setValue(dataStruct);            dataWidgetList->addItem(_dataWidgetNames->value(widget), data);        }        // Last item : MUST be DATA_WIDGET_NONE        dataStruct.widget = DATA_WIDGET_NONE;        data.setValue(dataStruct);        dataWidgetList->addItem(                _dataWidgetNames->value(DATA_WIDGET_NONE), data);        // Init index        if (dataDescription->widget == DATA_WIDGET_NONE)        { // NONE is the last item            dataWidgetList->setCurrentIndex(dataWidgetList->count() - 1);        }        else        {            dataWidgetList->setCurrentIndex(currentDataWidgetIndex);        }        QObject::connect(dataWidgetList, SIGNAL(currentIndexChanged(int)),                         this, SLOT(updateDataWidgetType(int)));        _dataWidgetListComboBoxes.append(dataWidgetList);        layout->addWidget(dataWidgetList, i, 1, Qt::AlignHCenter);    }    // Param descriptions    for (int i = 0; i < _mainWindow->paramDescriptions()->count(); i++)    {        ParamDescription *paramDescription =                _mainWindow->paramDescriptions()->at(i);        QGridLayout *layout =                (QGridLayout*) ui->interactiveWidgetsGroupBox->layout();        layout->addWidget(new QLabel(paramDescription->descriptionString), i,                          0, Qt::AlignHCenter);        QComboBox *interactiveWidgetList = new QComboBox();        interactiveWidgetList->setMinimumWidth(100);        // Init list        int paramId = paramDescription->id;        ParamType paramType = paramDescription->type;        InteractiveWidgetListItemData dataStruct;        dataStruct.id = paramId;        QVariant data;        QList < InteractiveWidgetType > interactiveWidgetPossibilities                = _interactiveWidgetPossibilities->value(paramType).values();        int currentInteractiveWidgetIndex=-1;	for (int j = 0; j < interactiveWidgetPossibilities.count(); j++)        {            InteractiveWidgetType widget = interactiveWidgetPossibilities.at(j);            if (widget == paramDescription->widget)            {                currentInteractiveWidgetIndex = j;            }            dataStruct.widget = widget;            data.setValue(dataStruct);            interactiveWidgetList->addItem(                    _interactiveWidgetNames->value(widget), data);        }        // Init index        interactiveWidgetList->setCurrentIndex(currentInteractiveWidgetIndex);        QObject::connect(interactiveWidgetList,                         SIGNAL(currentIndexChanged(int)),                         this, SLOT(updateInteractiveWidgetType(int)));        _interactiveWidgetListComboBoxes.append(interactiveWidgetList);        layout->addWidget(interactiveWidgetList, i, 1, Qt::AlignHCenter);    }}void PreferencesDialog::displaySessionSetupsList(){    // Default session setup must be the first index    ui->loadSessionSetupComboBox->addItem(DEFAULT_SESSION_SETUP_NAME);    QDir sessionSetupsDir = QDir(SESSION_SETUPS_DIR);    QStringList filter;    filter << "*" + SESSION_SETUPS_FILEEXT;    sessionSetupsDir.setNameFilters(filter);    sessionSetupsDir.setSorting(QDir::Time);    QStringList sessionSetupFiles = sessionSetupsDir.entryList();    QStringList sessionSetupNames;    for (int i = 0; i < sessionSetupFiles.count(); i++)    {        QString sessionSetupFile = sessionSetupFiles.at(i);        QString sessionSetupName = sessionSetupFile;        sessionSetupName.chop(SESSION_SETUPS_FILEEXT.size());        sessionSetupNames.append(sessionSetupName);    }    ui->loadSessionSetupComboBox->addItems(sessionSetupNames);    ui->loadSessionSetupComboBox->setCurrentIndex(0);    QObject::connect(ui->loadSessionSetupComboBox,                     SIGNAL(currentIndexChanged(QString)), this,                     SLOT(loadSessionSetup(QString)));}void PreferencesDialog::updateDisplayModeIndex(int index){    ui->displayModeComboBox->setCurrentIndex(index);}void PreferencesDialog::updateDataWidgetType(int index){    QComboBox *dataWidgetList = (QComboBox*) QObject::sender();    QVariant data = dataWidgetList->itemData(index, Qt::UserRole);    DataWidgetListItemData dataStruct;    Q_ASSERT_X(data.canConvert<DataWidgetListItemData> () == true,               "PreferencesDialog::updateDataWidgetType()",               "Data extraction from QVariant failed !");    dataStruct = data.value<DataWidgetListItemData> ();    int dataId = dataStruct.id;    DataWidgetType newWidget = dataStruct.widget;    _mainWindow->updateDataWidgetType(dataId, newWidget);}void PreferencesDialog::updateInteractiveWidgetType(int index){    QComboBox *interactiveWidgetList = (QComboBox*) QObject::sender();    QVariant data = interactiveWidgetList->itemData(index, Qt::UserRole);    InteractiveWidgetListItemData dataStruct;    Q_ASSERT_X(data.canConvert<InteractiveWidgetListItemData> () == true,               "PreferencesDialog::updateInteractiveWidgetType()",               "Data extraction from QVariant failed !");    dataStruct = data.value<InteractiveWidgetListItemData> ();    int paramId = dataStruct.id;    InteractiveWidgetType newWidget = dataStruct.widget;    _mainWindow->updateInteractiveWidgetType(paramId, newWidget);}void PreferencesDialog::loadSessionSetup(QString sessionSetupName){    if (sessionSetupName.compare(DEFAULT_SESSION_SETUP_NAME) == 0)    {        qDebug() << "PreferencesDialog : loading default session setup";        // Load default data widgets        loadDefaultDataWidgets();        // Load default interactive widgets        loadDefaultInteractiveWidgets();    }    else    {        qDebug() << "PreferencesDialog : loading session setup"                << sessionSetupName;        if (_sessionSetupManager->loadSessionSetup(sessionSetupName) == true)        {            qDebug() << "PreferencesDialog : loaded session setup successfully";        }        else        {            QMessageBox::warning(this, tr("StarPU-Top"),                                 tr("Couldn't load the session setup !"),                                 QMessageBox::Ok);            QComboBox *comboBox = (QComboBox*) QObject::sender();            int indexToRemove = comboBox->currentIndex();            comboBox->setCurrentIndex(0);            comboBox->removeItem(indexToRemove);        }    }}void PreferencesDialog::loadDefaultDataWidgets(){    for (int i = 0; i < _dataWidgetListComboBoxes.count(); i++)    {        for (int j = 0; _dataWidgetListComboBoxes.at(i)->count(); j++)        {            Q_ASSERT_X(                    _dataWidgetListComboBoxes.at(i)->itemData(j). canConvert<                    DataWidgetListItemData> () == true,                    "PreferencesDialog::loadSessionSetup()",                    "Data extraction from QVariant failed !");            DataWidgetListItemData dataStruct =                    _dataWidgetListComboBoxes.at(i)->itemData(j).value<                    DataWidgetListItemData> ();            if (dataStruct.widget == DEFAULT_DATA_WIDGET_BOOL                || dataStruct.widget == DEFAULT_DATA_WIDGET_INT                || dataStruct.widget == DEFAULT_DATA_WIDGET_FLOAT)            {                _dataWidgetListComboBoxes.at(i)->setCurrentIndex(j);                break;            }        }    }}void PreferencesDialog::loadDefaultInteractiveWidgets(){    for (int i = 0; i < _interactiveWidgetListComboBoxes.count(); i++)    {        for (int j = 0; _interactiveWidgetListComboBoxes.at(i)->count(); j++)        {            Q_ASSERT_X(                    _interactiveWidgetListComboBoxes.                    at(i)->itemData(j). canConvert<                    InteractiveWidgetListItemData> () == true,                    "PreferencesDialog::loadSessionSetup()",                    "Data extraction from QVariant failed !");            InteractiveWidgetListItemData dataStruct =                    _interactiveWidgetListComboBoxes.at(i) ->itemData(j).value<                    InteractiveWidgetListItemData> ();            if (dataStruct.widget == DEFAULT_INTERACTIVE_WIDGET_BOOL                || dataStruct.widget == DEFAULT_INTERACTIVE_WIDGET_INT                || dataStruct.widget == DEFAULT_INTERACTIVE_WIDGET_FLOAT                || dataStruct.widget == DEFAULT_INTERACTIVE_WIDGET_ENUM)            {                _interactiveWidgetListComboBoxes.at(i)->setCurrentIndex(j);                break;            }        }    }}void PreferencesDialog::sessionDescriptionsSetupLoaded(        QList<DataDescriptionSetup> dataDescriptionsSetup,        QList<ParamDescriptionSetup> paramDescriptionsSetup){    qDebug()            << "PreferencesDialog : "            "restoring descriptions setup from another session";    // Load data descriptions setup    for (int i = 0; i < dataDescriptionsSetup.count(); i++)    {        // The comboboxes are created following the order of the descriptions        int newIndex = indexOfDataWidget(_dataWidgetListComboBoxes.at(i),                                         dataDescriptionsSetup.at(i).widget);        Q_ASSERT_X(newIndex != -1, "PreferencesDialog::sessionSetupLoaded()",                   "Couldn't find loaded data widget index in the list !");        _dataWidgetListComboBoxes.at(i)->setCurrentIndex(newIndex);    }    // Load param descriptions setup    for (int i = 0; i < paramDescriptionsSetup.count(); i++)    {        // The comboboxes are created following the order of the descriptions        int newIndex = indexOfInteractiveWidget(                _interactiveWidgetListComboBoxes.at(i),                paramDescriptionsSetup.at(i).widget);        Q_ASSERT_X(newIndex != -1, "PreferencesDialog::sessionSetupLoaded()",                   "Couldn't find loaded interactive widget index in the list !");        _interactiveWidgetListComboBoxes.at(i)->setCurrentIndex(newIndex);    }}void PreferencesDialog::sessionMainWindowSetupLoaded(        MainWindowSetup mainWindowSetup){    if (_mainWindow->displayMode() != mainWindowSetup.displayMode)    {        for (int i = 0; i < ui->displayModeComboBox->count(); i++)        {            DisplayMode displayMode =                    (DisplayMode) ui->displayModeComboBox ->itemData(i).toInt();            if (displayMode == mainWindowSetup.displayMode)            {                ui->displayModeComboBox->setCurrentIndex(i);                return;            }        }    }}// Util methodsint PreferencesDialog::indexOfDataWidget(QComboBox* dataWidgetList,                                         DataWidgetType widget){    for (int i = 0; dataWidgetList->count(); i++)    {        Q_ASSERT_X(                dataWidgetList->itemData(i)                . canConvert<DataWidgetListItemData> ()                == true, "PreferencesDialog::indexOfDataWidget()",                "Data extraction from QVariant failed !");        DataWidgetListItemData dataStruct = dataWidgetList->itemData(i).value<                                            DataWidgetListItemData> ();        if (dataStruct.widget == widget)        {            return i;        }    }    return -1;}int PreferencesDialog::indexOfInteractiveWidget(        QComboBox* interactiveWidgetList, InteractiveWidgetType widget){    for (int i = 0; interactiveWidgetList->count(); i++)    {        Q_ASSERT_X(                interactiveWidgetList->itemData(i). canConvert<                InteractiveWidgetListItemData> () == true,                "PreferencesDialog::indexOfInteractiveWidget()",                "Data extraction from QVariant failed !");        InteractiveWidgetListItemData dataStruct =                interactiveWidgetList->itemData(i).value<                InteractiveWidgetListItemData> ();        if (dataStruct.widget == widget)        {            return i;        }    }    return -1;}
 |