[X2go-Commits] x2goclient2.git - master (branch) updated: a992a08cf9c3f1a00b213f9bce08071154faffba

X2Go dev team git-admin at x2go.org
Wed Oct 31 12:03:17 CET 2012


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 at 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)).




More information about the x2go-commits mailing list