The branch, master has been updated via a992a08cf9c3f1a00b213f9bce08071154faffba (commit) from ed0a622e995d6e2cdd7cd99b073ea3c631055e47 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit a992a08cf9c3f1a00b213f9bce08071154faffba Author: Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> Date: Wed Oct 31 12:02:48 2012 +0100 implement loading profiles from config file ----------------------------------------------------------------------- Summary of changes: configuratorprofile.cpp | 2 +- configuratorprofile.ui | 12 +-- profile.cpp | 175 ++++++++++++++++++++++++++++++++++++++++- profile.h | 5 +- profiledetailconfigurator.cpp | 1 + x2goapplication.cpp | 40 ++++++---- x2goapplication.h | 14 +++- x2goclientconfig.cpp | 2 +- x2gosettings.cpp | 6 +- x2gosettings.h | 8 +- 10 files changed, 231 insertions(+), 34 deletions(-) The diff of changes is: diff --git a/configuratorprofile.cpp b/configuratorprofile.cpp index ff9bd3c..b1cdb0e 100644 --- a/configuratorprofile.cpp +++ b/configuratorprofile.cpp @@ -45,7 +45,7 @@ void ConfiguratorProfile::init() void ConfiguratorProfile::apply() { - profile->set_picture(pbIcon->icon().pixmap(80,80)); + profile->set_picture(pbIcon->icon().pixmap(60,60)); profile->set_profileName(leName->text()); ProfileDetailConfigurator::apply(); } diff --git a/configuratorprofile.ui b/configuratorprofile.ui index 2476fd2..91ef88f 100644 --- a/configuratorprofile.ui +++ b/configuratorprofile.ui @@ -40,14 +40,14 @@ <widget class="QPushButton" name="pbIcon"> <property name="minimumSize"> <size> - <width>80</width> - <height>80</height> + <width>60</width> + <height>60</height> </size> </property> <property name="maximumSize"> <size> - <width>80</width> - <height>80</height> + <width>60</width> + <height>60</height> </size> </property> <property name="focusPolicy"> @@ -62,8 +62,8 @@ </property> <property name="iconSize"> <size> - <width>80</width> - <height>80</height> + <width>60</width> + <height>60</height> </size> </property> <property name="flat"> diff --git a/profile.cpp b/profile.cpp index 8352e71..57bb433 100644 --- a/profile.cpp +++ b/profile.cpp @@ -24,18 +24,23 @@ #include "profilesettingsform.h" #include "x2goclientconfig.h" #include "x2goclientconfigdetail.h" +#include "x2gosettings.h" #include <QDebug> #include <QPushButton> #include <QScrollBar> #include <QLabel> #include <QMouseEvent> +#include <QBuffer> #include <QPaintEngine> #include <QDesktopWidget> +#define LOAD_VALUE(TYPE, NAME, STRING) NAME=settings->value(STRING, NAME).to##TYPE() +#define SET_VALUE(NAME, STRING) settings->setValue(STRING, (QVariant)NAME) -Profile::Profile(QWidget* parent, Qt::WindowFlags f): QFrame(parent, f) +Profile::Profile(QString id, QWidget* parent, Qt::WindowFlags f): QFrame(parent, f) { + profileId=id; //property initialization setDefaultValues(); inited=false; @@ -233,7 +238,13 @@ void Profile::updateProfileDetails() display=QString::number(displayWidth)+"x"+QString::number(displayHeight); if(!sound) snd=tr("off"); - QString infoText=desktop+" ("+user+"@"+server+"), "+tr("display:")+" "+display+", "+tr("sound:")+" "+snd; + QString desktopName; + if(!rootless) + desktopName=X2GoApplication::instance()->getReadableDesktopName(desktop); + else + desktopName=X2GoApplication::instance()->getReadableAppName(desktop); + QString infoText=desktopName+ + " ("+user+"@"+server+"), "+tr("display:")+" "+display+", "+tr("sound:")+" "+snd; QString statusText="not running"; lProfileName->setText(profileName); lSessionInfo->setText(infoText); @@ -316,3 +327,163 @@ void Profile::slotSelectProfile() { emit signalSelected(this); } + +void Profile::loadProfile() +{ + QSettings* settings=X2GoApplication::instance()->get_sessionSettings()->get_setting(); + settings->beginGroup(profileId); + + QByteArray ba; + ba=settings->value("picture",QByteArray()).toByteArray(); + if(ba.size()>0) + picture.loadFromData(ba); + else + { + QString iconFile=settings->value("icon", QString()).toString(); + if(QFile::exists(iconFile)) + picture=QPixmap(iconFile).scaled(60,60,Qt::KeepAspectRatio,Qt::SmoothTransformation); + } + if(picture.isNull()) + picture=QPixmap(":icons/128x128/x2gosession.png").scaled(60,60,Qt::KeepAspectRatio,Qt::SmoothTransformation); + + QString confProxyType="SSH"; + + LOAD_VALUE(String, profileName, "name"); + LOAD_VALUE(String, server, "host"); + LOAD_VALUE(String, user, "user"); + LOAD_VALUE(Int, SSHPort, "sshport"); + LOAD_VALUE(String, key, "key"); + LOAD_VALUE(Bool, autoLogin, "autologin"); + LOAD_VALUE(Bool, proxy, "usesshproxy"); + LOAD_VALUE(String, confProxyType, "sshproxytype"); + LOAD_VALUE(String, proxyHost, "sshproxyhost"); + LOAD_VALUE(Int, proxyPort, "sshproxyport"); + LOAD_VALUE(String, proxyLogin, "sshproxyuser"); + LOAD_VALUE(Bool, proxySameLogin, "sshproxysameuser"); + LOAD_VALUE(Bool, proxySamePass, "sshproxysamepass"); + LOAD_VALUE(String, proxyKey, "sshproxykeyfile"); + LOAD_VALUE(Bool, proxyAutoLogin, "sshproxyautologin"); + + LOAD_VALUE(Bool, rootless, "rootless"); + LOAD_VALUE(Bool, published, "published"); + LOAD_VALUE(String, desktop, "command"); + LOAD_VALUE(String, XDMCPServer, "xdmcpserver"); + LOAD_VALUE(String, RDPServer, "rdpserver"); + LOAD_VALUE(String, RDPClient, "rdpclient"); + LOAD_VALUE(String, RDPOptions, "rdpoptions"); + LOAD_VALUE(Int, RDPPort, "rdpport"); + LOAD_VALUE(Bool, directRDP, "directrdp"); + + speed=(SpeedType)settings->value("speed", speed).toInt(); + LOAD_VALUE(String, method, "pack"); + LOAD_VALUE(Int, quality, "quality"); + + LOAD_VALUE(Bool, fullscreen, "fullscreen"); + LOAD_VALUE(Int, displayWidth, "width"); + LOAD_VALUE(Int, displayHeight, "height"); + LOAD_VALUE(Bool, multiDisplay, "multidisp"); + LOAD_VALUE(Int, displayNumber, "display"); + LOAD_VALUE(Bool, maxDimension, "maxdim"); + LOAD_VALUE(Bool, changeDPI, "setdpi"); + LOAD_VALUE(Int, dpi, "dpi"); + LOAD_VALUE(Bool, xinerama, "xinerama"); + + LOAD_VALUE(Bool, changeKeyboard, "usekbd"); + LOAD_VALUE(String, keyboardLayout, "layout"); + LOAD_VALUE(String, keyboardModel, "type"); + + LOAD_VALUE(Bool, sound, "sound"); + LOAD_VALUE(Bool, soundTunnel, "soundtunnel"); + LOAD_VALUE(Bool, useDefaultSoundPort, "defsndport"); + LOAD_VALUE(Int, soundPort, "sndport"); + + LOAD_VALUE(Bool, printing, "print"); + + LOAD_VALUE(String, exportFolders, "export"); + LOAD_VALUE(Bool, exportFSTunnel, "fstunnel"); + LOAD_VALUE(Bool, encodeFS, "useiconv"); + LOAD_VALUE(String, localFSEncoding, "iconvfrom"); + LOAD_VALUE(String, remoteFSEncoding, "iconvto"); + settings->endGroup(); + if(confProxyType=="SSH") + proxyType=SSH; + else + proxyType=HTTP; +} + +void Profile::saveProfile() +{ + QSettings* settings=X2GoApplication::instance()->get_sessionSettings()->get_setting(); + settings->beginGroup(profileId); + + QString confProxyType="SSH"; + if(proxyType==HTTP) + confProxyType="HTTP"; + + QByteArray ba; + QBuffer buffer(&ba); + buffer.open(QIODevice::WriteOnly); + picture.toImage().save(&buffer,"PNG"); + buffer.close(); + + SET_VALUE(ba,"picture"); + + SET_VALUE(profileName, "name"); + SET_VALUE(server, "host"); + SET_VALUE(user, "user"); + SET_VALUE(SSHPort, "sshport"); + SET_VALUE(key, "key"); + SET_VALUE(autoLogin, "autologin"); + SET_VALUE(proxy, "usesshproxy"); + SET_VALUE(confProxyType, "sshproxytype"); + SET_VALUE(proxyHost, "sshproxyhost"); + SET_VALUE(proxyPort, "sshproxyport"); + SET_VALUE(proxyLogin, "sshproxyuser"); + SET_VALUE(proxySameLogin, "sshproxysameuser"); + SET_VALUE(proxySamePass, "sshproxysamepass"); + SET_VALUE(proxyKey, "sshproxykeyfile"); + SET_VALUE(proxyAutoLogin, "sshproxyautologin"); + SET_VALUE(rootless, "rootless"); + SET_VALUE(published, "published"); + SET_VALUE(desktop, "command"); + SET_VALUE(XDMCPServer, "xdmcpserver"); + SET_VALUE(RDPServer, "rdpserver"); + SET_VALUE(RDPClient, "rdpclient"); + SET_VALUE(RDPOptions, "rdpoptions"); + SET_VALUE(RDPPort, "rdpport"); + SET_VALUE(directRDP, "directrdp"); + + settings->setValue("speed", (QVariant)(int)speed); + + SET_VALUE(method, "pack"); + SET_VALUE(quality, "quality"); + + SET_VALUE(fullscreen, "fullscreen"); + SET_VALUE(displayWidth, "width"); + SET_VALUE(displayHeight, "height"); + SET_VALUE(multiDisplay, "multidisp"); + SET_VALUE(displayNumber, "display"); + SET_VALUE(maxDimension, "maxdim"); + SET_VALUE(changeDPI, "setdpi"); + SET_VALUE(dpi, "dpi"); + SET_VALUE(xinerama, "xinerama"); + + SET_VALUE(changeKeyboard, "usekbd"); + SET_VALUE(keyboardLayout, "layout"); + SET_VALUE(keyboardModel, "type"); + + SET_VALUE(sound, "sound"); + SET_VALUE(soundTunnel, "soundtunnel"); + SET_VALUE(useDefaultSoundPort, "defsndport"); + SET_VALUE(soundPort, "sndport"); + + SET_VALUE(printing, "print"); + + SET_VALUE(exportFolders, "export"); + SET_VALUE(exportFSTunnel, "fstunnel"); + SET_VALUE(encodeFS, "useiconv"); + SET_VALUE(localFSEncoding, "iconvfrom"); + SET_VALUE(remoteFSEncoding, "iconvto"); + settings->sync(); + settings->endGroup(); +} diff --git a/profile.h b/profile.h index e460070..3d9b610 100644 --- a/profile.h +++ b/profile.h @@ -35,6 +35,7 @@ public: enum SpeedType {MODEM, ISDN, ADSL, WAN, LAN}; X2GO_PROPERTY(QString, profileName) + X2GO_PROPERTY(QString, profileId) X2GO_PROPERTY(QPixmap, picture) X2GO_PROPERTY(QString, server) @@ -93,10 +94,12 @@ public: X2GO_PROPERTY(QString, localFSEncoding) X2GO_PROPERTY(QString, remoteFSEncoding) public: - Profile(QWidget* parent = 0, Qt::WindowFlags f = 0); + Profile(QString id, QWidget* parent = 0, Qt::WindowFlags f = 0); virtual ~Profile(); int getProfileIndex(); void updateProfileDetails(); + void loadProfile(); + void saveProfile(); public slots: void slotUpdateProfileWidget(); void slotProfileSelected(Profile* profile); diff --git a/profiledetailconfigurator.cpp b/profiledetailconfigurator.cpp index 9d6c518..1d3fe93 100644 --- a/profiledetailconfigurator.cpp +++ b/profiledetailconfigurator.cpp @@ -44,6 +44,7 @@ ProfileDetailConfigurator::~ProfileDetailConfigurator() void ProfileDetailConfigurator::apply() { profile->updateProfileDetails(); + profile->saveProfile(); X2GoApplication::instance()->get_profileSettingsForm()->updateProfile(); } diff --git a/x2goapplication.cpp b/x2goapplication.cpp index 117dee2..4112ff6 100644 --- a/x2goapplication.cpp +++ b/x2goapplication.cpp @@ -23,6 +23,7 @@ #include <QScrollBar> #include <QMessageBox> +#include "x2gosettings.h" #include "x2goapplication.h" #include "profile.h" #include "profileform.h" @@ -56,6 +57,7 @@ X2GoApplication::X2GoApplication(int& argc, char** argv, int flags): QApplicatio X2GoApplication::~X2GoApplication() { delete clientConfig; + delete sessionSettings; qDebug()<<"X2Go Application exited"; } @@ -80,7 +82,12 @@ void X2GoApplication::slotInitApplication() dialog.showPacks(); exit(-1); } - slotInitProfiles(); + + if(clientConfig->get_brokerUrl().get_value().toString()==QString::null) + { + sessionSettings=new X2GoSettings("sessions"); + initProfiles(); + } mainWindow->show(); } @@ -124,22 +131,25 @@ const nameTranslator* X2GoApplication::getTranslator(QList< nameTranslator >& li return 0; } - -void X2GoApplication::slotInitProfiles() +void X2GoApplication::initProfiles() { - int numProfiles=100; - QPixmap pic= QPixmap(":/icons/128x128/x2gosession.png").scaled(80,80,Qt::KeepAspectRatio,Qt::SmoothTransformation); - for(int i=0; i<numProfiles; ++i) + QList<PSort> sortList; + foreach(QString profileId, sessionSettings->get_setting()->childGroups()) + { + if(profileId=="embedded") + continue; + Profile* profile=new Profile(profileId, profileForm->getScrollArea()->widget()); + profile->loadProfile(); + PSort psort; + psort.ptr=(void*) profile; + psort.name=profile->get_profileName(); + sortList<<psort; + } + qSort(sortList); + profiles.clear(); + foreach(PSort psrt, sortList) { - Profile* profile=new Profile(profileForm->getScrollArea()->widget()); - profile->set_picture(pic); - profile->set_server("x2go.org"); - profile->set_user("user"); - profile->set_desktop("KDE"); - profile->set_SSHPort(22); - profile->set_profileName("Example X2Go Profile - "+QString::number(i+1)); - profile->set_sound(true); - profiles<<profile; + profiles<<(Profile*)psrt.ptr; } emit signalUpdateProfiles(); } diff --git a/x2goapplication.h b/x2goapplication.h index 7f8fd5b..69227cf 100644 --- a/x2goapplication.h +++ b/x2goapplication.h @@ -39,6 +39,7 @@ class ProfileSettingsForm; class MainWindow; class ProfileDetailConfiguratorForm; class X2GoClientConfig; +class X2GoSettings; struct nameTranslator { @@ -46,6 +47,16 @@ struct nameTranslator QString internName; }; +struct PSort +{ + void* ptr; + QString name; + bool operator<(const PSort& t2) const + { + return (name.compare(t2.name, Qt::CaseInsensitive)<0); + } +}; + class X2GoApplication: public QApplication { Q_OBJECT @@ -56,6 +67,7 @@ class X2GoApplication: public QApplication X2GO_PROPERTY(MainWindow*, mainWindow) X2GO_PROPERTY(ProfileDetailConfiguratorForm*, profileDetailConfiguratorForm) X2GO_RO_PROPERTY(X2GoClientConfig*, clientConfig) + X2GO_RO_PROPERTY(X2GoSettings*, sessionSettings) public: ~X2GoApplication(); X2GoApplication(int& argc, char** argv, int = ApplicationFlags); @@ -66,7 +78,6 @@ public: } void updateProfiles(); public slots: - void slotInitProfiles(); void slotInitApplication(); private: QList<Profile*> profiles; @@ -77,6 +88,7 @@ private: QString getInternName(QList<nameTranslator>& list, QString readableName); QString getReadableName(QList<nameTranslator>& list, QString internName); void addTranslator(QList<nameTranslator>& list, QString internName, QString readableName); + void initProfiles(); public: QString getInternAppName(QString readableName) { diff --git a/x2goclientconfig.cpp b/x2goclientconfig.cpp index ca399da..af18776 100644 --- a/x2goclientconfig.cpp +++ b/x2goclientconfig.cpp @@ -284,7 +284,7 @@ void X2GoClientConfig::loadConfigFiles() if(detail->configFileParameter==QString::null) continue; QStringList detailConfigPath=detail->configFileParameter.split("."); - X2goSettings configFile(detailConfigPath[0]); + X2GoSettings configFile(detailConfigPath[0]); detail->value=configFile.get_setting()->value(detailConfigPath[1]+"/"+detailConfigPath[2], detail->value); } } diff --git a/x2gosettings.cpp b/x2gosettings.cpp index 884002d..13c84ad 100644 --- a/x2gosettings.cpp +++ b/x2gosettings.cpp @@ -25,7 +25,7 @@ #include <QTextStream> #include <QDir> -X2goSettings::X2goSettings(QString fileContent, QSettings::Format format) +X2GoSettings::X2GoSettings(QString fileContent, QSettings::Format format) { cfgFile=new QTemporaryFile(); cfgFile->open(); @@ -35,7 +35,7 @@ X2goSettings::X2goSettings(QString fileContent, QSettings::Format format) setting=new QSettings ( cfgFile->fileName(), format ); } -X2goSettings::X2goSettings ( QString group ) +X2GoSettings::X2GoSettings ( QString group ) { cfgFile=0l; QString sessionCfgFile=X2GoApplication::instance()->get_clientConfig()->get_sessionConfigFile().get_value().toString(); @@ -64,7 +64,7 @@ X2goSettings::X2goSettings ( QString group ) #endif } -X2goSettings::~X2goSettings() +X2GoSettings::~X2GoSettings() { delete setting; if (cfgFile) diff --git a/x2gosettings.h b/x2gosettings.h index 8e4e19f..1e4f9c3 100644 --- a/x2gosettings.h +++ b/x2gosettings.h @@ -26,13 +26,13 @@ #include "x2goapplication.h" class QTemporaryFile; -class X2goSettings +class X2GoSettings { X2GO_RO_PROPERTY(QSettings*, setting) public: - X2goSettings ( QString group ); - X2goSettings ( QString fileContent, QSettings::Format format); - ~X2goSettings(); + X2GoSettings ( QString group ); + X2GoSettings ( QString fileContent, QSettings::Format format); + ~X2GoSettings(); private: QTemporaryFile* cfgFile; }; hooks/post-receive -- x2goclient2.git (X2Go Client 2 (rewrite of x2goclient.git)) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "x2goclient2.git" (X2Go Client 2 (rewrite of x2goclient.git)).