# HG changeset patch # User Jeandet Alexis # Date 2015-06-09 17:05:55 # Node ID 0dab228f7441476b8003169deb4123408a5dd52a # Parent a9916b2ad4f6ee149485c7bd2f078dbfdb6fe3ce Working on session manager. diff --git a/src/SocExplorerEngine/engine/socexplorersettings.cpp b/src/SocExplorerEngine/engine/socexplorersettings.cpp --- a/src/SocExplorerEngine/engine/socexplorersettings.cpp +++ b/src/SocExplorerEngine/engine/socexplorersettings.cpp @@ -138,6 +138,25 @@ QList > SocExplorerSetti return defaultValue; } +void SocExplorerSettings::setArrays(const QString &prefix, QStringList keys, QList > values, SocExplorerSettings::SettingScope Sscope) +{ + INIT(); + switch (Sscope) + { + case SystemWide: + if(m_settings) + return setArrays(prefix,keys,values,m_settings); + break; + case Session: + if(m_sessionSettings) + return setArrays(prefix,keys,values,m_sessionSettings); + break; + default: + break; + } + +} + void SocExplorerSettings::sync() { INIT(); @@ -195,7 +214,7 @@ QList > SocExplorerSetti settings->setArrayIndex(i); for(int l=0;lvalue(keys.at(i))); + result[i].append(settings->value(keys.at(l))); } } settings->endArray(); @@ -203,3 +222,27 @@ QList > SocExplorerSetti return result; } +void SocExplorerSettings::setArrays(const QString &prefix, QStringList keys, QList > values, QSettings *settings) +{ + if(settings) + { + QString key; + foreach (key, keys) + { + + settings->remove(prefix+"/"+key); + } + settings->beginWriteArray(prefix); + for (int i = 0; i < values.size(); ++i) + { + settings->setArrayIndex(i); + for(int l=0;lsetValue(keys[l], values.at(i).at(l)); + } + } + settings->endArray(); + + } +} + diff --git a/src/SocExplorerEngine/engine/socexplorersettings.h b/src/SocExplorerEngine/engine/socexplorersettings.h --- a/src/SocExplorerEngine/engine/socexplorersettings.h +++ b/src/SocExplorerEngine/engine/socexplorersettings.h @@ -49,6 +49,7 @@ public: static void setValue(const QString scope,const QString & key, const QVariant & value,SettingScope Sscope= SystemWide); static QVariant value(const QString scope, const QString & key, const QVariant & defaultValue = QVariant(),SettingScope Sscope =SystemWide); static QList > arrays(const QString & prefix, QStringList keys,SettingScope Sscope =SystemWide); + static void setArrays(const QString & prefix, QStringList keys,QList > values,SettingScope Sscope =SystemWide); static void sync(); static bool registerConfigEntry(SocExplorerSettingsItem* configEntry,QIcon icon, QString text); //! Loads the given session, or sreate it if doesn't exists. @@ -61,6 +62,7 @@ public slots: void popConfigDialog(); private: static QList > arrays(const QString & prefix, QStringList keys,QSettings* settings); + static void setArrays(const QString & prefix, QStringList keys,QList > values,QSettings* settings); }; #endif // SOCEXPLORERSETTINGS_H diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -176,17 +176,7 @@ void SocExplorerMainWindow::makeMenu() void SocExplorerMainWindow::loadSessions() { -// QStringList sessions = SocExplorerSettings::value(); - QList > sessions = SocExplorerSettings::arrays(SOCEXPLORERGLOBAL_SETTINGS_SESSIONS_SCOPE,QStringList()<=1) - { - p_Sessions.append(sessions.at(i).at(0).toString()); - } - } - + p_Sessions=this->p_SessionManagerDialog->getSessionsList(); } diff --git a/src/sessionmanagerdialog.cpp b/src/sessionmanagerdialog.cpp --- a/src/sessionmanagerdialog.cpp +++ b/src/sessionmanagerdialog.cpp @@ -1,14 +1,143 @@ +/*------------------------------------------------------------------------------ +-- This file is a part of the SocExplorer Software +-- Copyright (C) 2015, Plasma Physics Laboratory - CNRS +-- +-- This program 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 2 of the License, or +-- (at your option) any later version. +-- +-- This program 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 this program; if not, write to the Free Software +-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +-------------------------------------------------------------------------------*/ +/*-- Author : Alexis Jeandet +-- Mail : alexis.jeandet@lpp.polytechnique.fr +----------------------------------------------------------------------------*/ #include "sessionmanagerdialog.h" #include "ui_sessionmanagerdialog.h" +#include +#include +#include +#include SessionManagerDialog::SessionManagerDialog(QWidget *parent) : QDialog(parent), ui(new Ui::SessionManagerDialog) { ui->setupUi(this); + connect(this->ui->NewQPB,SIGNAL(clicked(bool)),this,SLOT(newSession())); + connect(this->ui->DeleteQPB,SIGNAL(clicked(bool)),this,SLOT(deleteSession())); } SessionManagerDialog::~SessionManagerDialog() { delete ui; } + + +QStringList SessionManagerDialog::getSessionsList() +{ + QStringList result; + QList > sessions = SocExplorerSettings::arrays(SOCEXPLORERGLOBAL_SETTINGS_SESSIONS_SCOPE,QStringList()<=1) + { + result.append(sessions.at(i).at(0).toString()); + } + } + // May always return at least default session + if(result.count()==0) + { + result.append("default"); + } + return result; +} + +void SessionManagerDialog::show() +{ + QStringList sessions = getSessionsList(); + this->ui->listWidget->addItems(sessions); + QDialog::show(); +} + +void SessionManagerDialog::newSession() +{ + bool ok=true,exists=false; + QString text; + do + { + text = QInputDialog::getText(this, tr("QInputDialog::getText()"), + tr("Session name:"), QLineEdit::Normal, + "New Session", &ok); + exists = sessionExists(text); + if(exists && ok) + { + QMessageBox::warning(this, tr("SocExplorer Session Manager"), + tr("The session ")+text+tr(" already exists."), + QMessageBox::Ok); + } + }while(ok && !text.isEmpty() && exists); + + if (ok && !text.isEmpty()) + { + this->newSession(text); + } +} + +void SessionManagerDialog::newSession(QString session) +{ + if (!session.isEmpty()) + { + this->ui->listWidget->addItem(session); + updateSessionList(); + } +} + +void SessionManagerDialog::renameSession() +{ + +} + +void SessionManagerDialog::deleteSession() +{ + if(this->ui->listWidget->selectedItems().count()) + { + QListWidgetItem* item = this->ui->listWidget->currentItem(); + if(item && item->text().compare("default")) + { + this->ui->listWidget->removeItemWidget(item); + //TODO delete session FILE! + delete item; + updateSessionList(); + } + } +} + +bool SessionManagerDialog::sessionExists(QString session) +{ + bool diff=true; + for(int i=0;i< this->ui->listWidget->count();i++) + { + diff &= (this->ui->listWidget->item(i)->text().compare(session)!=0); + } + return !diff; +} + +void SessionManagerDialog::updateSessionList() +{ + QList > sessions; + for(int i=0;i< this->ui->listWidget->count();i++) + { + QList sess; + sess.append(this->ui->listWidget->item(i)->text()); + sessions.append(sess); + } + SocExplorerSettings::setArrays(SOCEXPLORERGLOBAL_SETTINGS_SESSIONS_SCOPE,QStringList()<