1
/**************************************************************************
2
* Copyright (C) 2005-2015 by Oleksandr Shneyder *
3
* o.shneyder@phoca-gmbh.de *
5
* This program is free software; you can redistribute it and/or modify *
6
* it under the terms of the GNU General Public License as published by *
7
* the Free Software Foundation; either version 2 of the License, or *
8
* (at your option) any later version. *
9
* This program is distributed in the hope that it will be useful, *
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12
* GNU General Public License for more details. *
14
* You should have received a copy of the GNU General Public License *
15
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
16
***************************************************************************/
18
#include "sessionwidget.h"
19
#include "x2goutils.h"
22
#include <QPushButton>
28
#include <QFileDialog>
31
#include <QInputDialog>
33
#include "onmainwindow.h"
34
#include "x2gosettings.h"
35
#include <QMessageBox>
36
#include <QButtonGroup>
37
#include <QRadioButton>
38
#include "folderexplorer.h"
39
#include "sessionexplorer.h"
41
SessionWidget::SessionWidget ( bool newSession, QString id, ONMainWindow * mw,
42
QWidget * parent, Qt::WindowFlags f )
43
: ConfigWidget ( id,mw,parent,f )
45
QVBoxLayout* sessLay=new QVBoxLayout ( this );
47
sessLay->setMargin ( 2 );
50
this->newSession=newSession;
52
sessName=new QLineEdit ( this );
53
icon=new QPushButton ( QString::null,this );
56
icon->setIconSize ( QSize ( 100,100 ) );
57
icon->setFixedSize ( 100,100 );
61
icon->setIconSize ( QSize ( 48,48 ) );
62
icon->setFixedSize ( 48,48 );
64
icon->setFlat ( true );
66
QHBoxLayout* slay=new QHBoxLayout();
67
slay->addWidget ( new QLabel ( tr ( "Session name:" ),this ) );
68
slay->addWidget ( sessName );
70
QHBoxLayout* ilay=new QHBoxLayout();
71
ilay->addWidget ( icon );
72
ilay->addWidget ( new QLabel ( tr ( "<< change icon" ),this ) );
74
lPath=new QLabel(this);
75
lPath->setFrameStyle(QFrame::StyledPanel);
76
QPushButton* pathButton=new QPushButton("...",this);
77
QHBoxLayout* pathLay=new QHBoxLayout();
78
pathLay->addWidget(new QLabel(tr("Path:"), this),0);
79
pathLay->addWidget(lPath,1);
80
pathLay->addWidget(pathButton,0);
83
QGroupBox *sgb=new QGroupBox ( tr ( "&Server" ),this );
87
server=new QLineEdit ( sgb );
88
uname=new QLineEdit ( sgb );
89
sshPort=new QSpinBox ( sgb );
90
sshPort->setValue ( mainWindow->getDefaultSshPort().toInt() );
91
sshPort->setMinimum ( 1 );
92
sshPort->setMaximum ( 999999999 );
94
rdpPort=new QSpinBox ( sgb );
95
rdpPort->setValue ( mainWindow->getDefaultSshPort().toInt() );
96
rdpPort->setMinimum ( 1 );
97
rdpPort->setMaximum ( 999999999 );
99
key=new QLineEdit ( sgb );
102
openKey=new QPushButton (
103
QIcon ( mainWindow->iconsPath (
104
"/32x32/file-open.png" ) ),
106
QVBoxLayout *sgbLay = new QVBoxLayout ( sgb );
108
QPushButton* openKey=new QPushButton (
109
QIcon ( mainWindow->iconsPath ( "/16x16/file-open.png" ) ),
111
QVBoxLayout *sgbLay = new QVBoxLayout ();
113
QHBoxLayout *suLay =new QHBoxLayout();
114
QVBoxLayout *slLay =new QVBoxLayout();
115
QVBoxLayout *elLay =new QVBoxLayout();
116
slLay->addWidget ( new QLabel ( tr ( "Host:" ),sgb ) );
117
slLay->addWidget ( new QLabel ( tr ( "Login:" ),sgb ) );
118
lPort=new QLabel ( tr ( "SSH port:" ),sgb );
119
slLay->addWidget ( lPort );
120
elLay->addWidget ( server );
121
elLay->addWidget ( uname );
122
elLay->addWidget ( sshPort );
124
elLay->addWidget ( rdpPort );
126
suLay->addLayout ( slLay );
127
suLay->addLayout ( elLay );
129
sshPort->setFixedHeight ( int ( sshPort->sizeHint().height() *1.5 ) );
132
QHBoxLayout *keyLay =new QHBoxLayout();
133
lKey=new QLabel ( tr ( "Use RSA/DSA key for ssh connection:" ),sgb );
134
keyLay->addWidget (lKey );
135
keyLay->addWidget ( key );
136
keyLay->addWidget ( openKey );
138
sgbLay->addLayout ( suLay );
139
sgbLay->addLayout ( keyLay );
140
cbAutoLogin=new QCheckBox(tr("Try auto login (ssh-agent or default ssh key)"),sgb);
141
cbKrbLogin=new QCheckBox(tr("Kerberos 5 (GSSAPI) authentication"),sgb);
142
cbKrbDelegation=new QCheckBox(tr("Delegation of GSSAPI credentials to the server"),sgb);
143
sgbLay->addWidget(cbAutoLogin);
144
sgbLay->addWidget(cbKrbLogin);
145
sgbLay->addWidget(cbKrbDelegation);
146
cbProxy=new QCheckBox(tr("Use Proxy server for SSH connection"),sgb);
147
proxyBox=new QGroupBox(tr("Proxy server"),sgb);
148
sgbLay->addWidget(cbProxy);
149
sgbLay->addWidget(proxyBox);
150
QGridLayout* proxyLaout=new QGridLayout(proxyBox);
151
QButtonGroup* proxyType=new QButtonGroup(proxyBox);
152
proxyType->setExclusive(true);
153
rbSshProxy=new QRadioButton(tr("SSH"),proxyBox);
154
rbHttpProxy=new QRadioButton(tr("HTTP"),proxyBox);
155
proxyType->addButton(rbSshProxy);
156
proxyType->addButton(rbHttpProxy);
157
proxyHost=new QLineEdit(proxyBox);
158
proxyPort=new QSpinBox(proxyBox);
159
proxyPort->setMinimum ( 1 );
160
proxyPort->setMaximum ( 999999999 );
162
cbProxySameUser=new QCheckBox(tr("Same login as on X2Go Server"), proxyBox);
163
proxyLogin=new QLineEdit(proxyBox);
164
cbProxySamePass=new QCheckBox(tr("Same password as on X2Go Server"), proxyBox);
166
proxyKeyLabel=new QLabel( tr ( "RSA/DSA key:" ), proxyBox);
167
proxyKey=new QLineEdit(proxyBox);
168
pbOpenProxyKey=new QPushButton (
169
QIcon ( mainWindow->iconsPath ( "/16x16/file-open.png" ) ),
170
QString::null,proxyBox );
171
cbProxyAutologin=new QCheckBox(tr("ssh-agent or default ssh key"),proxyBox);
172
cbProxyKrbLogin=new QCheckBox(tr("Kerberos 5 (GSSAPI) authentication"),proxyBox);
175
proxyLaout->addWidget(new QLabel(tr("Type:"),proxyBox),0,0,1,2);
176
proxyLaout->addWidget(rbSshProxy,1,0,1,2);
177
proxyLaout->addWidget(rbHttpProxy,2,0,1,2);
178
proxyLaout->addWidget(new QLabel(tr("Host:"),proxyBox),3,0);
179
proxyLaout->addWidget(new QLabel(tr("Port:"),proxyBox),4,0);
180
proxyLaout->addWidget(proxyHost,3,1);
181
proxyLaout->addWidget(proxyPort,4,1);
183
proxyLaout->addWidget(cbProxySameUser,0,3,1,3);
184
proxyLaout->addWidget(lProxyLogin=new QLabel(tr("Login:"),proxyBox),1,3,1,1);
185
proxyLaout->addWidget(proxyLogin,1,4,1,2);
186
proxyLaout->addWidget(cbProxySamePass,2,3,1,3);
187
proxyLaout->addWidget(proxyKeyLabel,3,3,1,1);
188
proxyLaout->addWidget(proxyKey,3,4,1,1);
189
proxyLaout->addWidget(pbOpenProxyKey,3,5,1,1);
190
proxyLaout->addWidget(cbProxyAutologin,4,3,1,3);
191
proxyLaout->addWidget(cbProxyKrbLogin,5,3,1,3);
195
QGroupBox *deskSess=new QGroupBox ( tr ( "&Session type" ),this );
196
QGridLayout* cmdLay=new QGridLayout ( deskSess );
198
QFrame* deskSess=this;
199
QHBoxLayout* cmdLay=new QHBoxLayout ();
200
cmdLay->addWidget ( new QLabel ( tr ( "Session type:" ),this ) );
202
sessBox=new QComboBox ( deskSess );
203
cmd=new QLineEdit ( deskSess );
204
cmdCombo=new QComboBox ( deskSess );
205
cmdCombo->setEditable ( true );
206
sessBox->addItem ( "KDE" );
207
sessBox->addItem ( "GNOME" );
208
sessBox->addItem ( "LXDE" );
209
sessBox->addItem ( "XFCE" );
210
sessBox->addItem ( "MATE" );
211
sessBox->addItem ( "UNITY" );
212
sessBox->addItem ( "CINNAMON" );
213
sessBox->addItem ( "TRINITY" );
214
sessBox->addItem ( "OPENBOX" );
215
sessBox->addItem ( "ICEWM" );
216
sessBox->addItem ( tr ( "Connect to Windows terminal server" ) );
217
sessBox->addItem ( tr ( "XDMCP" ) );
218
sessBox->addItem ( tr ( "Connect to local desktop" ) );
219
sessBox->addItem ( tr ( "Custom desktop" ) );
220
sessBox->addItem ( tr ( "Single application" ) );
221
sessBox->addItem ( tr ( "Published applications" ) );
222
cmdLay->addWidget ( sessBox,0,1,Qt::AlignLeft );
223
leCmdIp=new QLabel ( tr ( "Command:" ),deskSess );
224
pbAdvanced=new QPushButton ( tr ( "Advanced options..." ),deskSess );
225
cmdLay->addWidget ( leCmdIp,0,2 );
226
cmdLay->setColumnStretch(6,1);
227
cmdLay->addWidget ( cmd ,0,3);
228
cmdLay->addWidget ( cmdCombo,0,4 );
229
cmdLay->addWidget ( pbAdvanced ,0,5);
230
cmdCombo->setSizePolicy ( QSizePolicy::Expanding,
231
QSizePolicy::Preferred );
234
cmdCombo->addItem ( "" );
235
cmdCombo->addItems ( mainWindow->transApplicationsNames() );
236
cmdCombo->lineEdit()->setText ( tr ( "Path to executable" ) );
237
cmdCombo->lineEdit()->selectAll();
239
sessLay->addLayout ( slay );
240
sessLay->addLayout ( ilay );
241
sessLay->addLayout ( pathLay );
243
sessLay->addSpacing ( 15 );
244
sessLay->addWidget ( sgb );
245
sessLay->addWidget ( deskSess );
247
cbDirectRDP=new QCheckBox(tr("Direct RDP Connection"), deskSess);
248
cmdLay->addWidget(cbDirectRDP,1,0,1,6);
250
connect(cbDirectRDP,SIGNAL(clicked()), this, SLOT(slot_rdpDirectClicked()));
254
QVBoxLayout* sHildILay = new QVBoxLayout();
255
sHildILay->addLayout ( slay );
256
sHildILay->addLayout ( ilay );
257
sHildILay->addStretch();
258
QHBoxLayout* sHildLay = new QHBoxLayout();
259
sHildLay->addLayout ( sHildILay );
261
QFrame* vl=new QFrame;
262
vl->setLineWidth ( 0 );
263
vl->setFrameStyle ( QFrame::VLine|QFrame::Plain );
264
sHildLay->addWidget ( vl );
265
sHildLay->setSpacing ( 6 );
266
sHildLay->addLayout ( sgbLay );
267
sessLay->addLayout ( sHildLay );
268
sessLay->addStretch();
269
sessLay->addLayout ( cmdLay );
271
sessLay->addStretch();
273
connect ( icon,SIGNAL ( clicked() ),this,SLOT ( slot_getIcon() ) );
274
connect ( openKey,SIGNAL ( clicked() ),this,SLOT ( slot_getKey() ) );
275
connect ( pbAdvanced,SIGNAL ( clicked() ),this,
276
SLOT ( slot_rdpOptions() ) );
277
connect ( sessBox,SIGNAL ( activated ( int ) ),this,
278
SLOT ( slot_changeCmd ( int ) ) );
279
connect ( sessName,SIGNAL ( textChanged ( const QString & ) ),this,
280
SIGNAL ( nameChanged ( const QString & ) ) );
281
connect (server, SIGNAL(textChanged(const QString&)),this, SLOT(slot_emitSettings()));
282
connect (uname, SIGNAL(textChanged(const QString&)),this, SLOT(slot_emitSettings()));
283
connect (cbKrbLogin, SIGNAL(clicked(bool)), this, SLOT(slot_krbChecked()));
285
connect (rdpPort, SIGNAL(valueChanged(int)),this, SLOT(slot_emitSettings()));
288
connect ( pbOpenProxyKey,SIGNAL ( clicked() ),this,SLOT ( slot_proxyGetKey()) );
289
connect ( proxyType, SIGNAL ( buttonClicked(int)) ,this,SLOT ( slot_proxyType()));
290
connect (cbProxy, SIGNAL(clicked(bool)), this, SLOT(slot_proxyOptions()));
291
connect (cbProxySameUser, SIGNAL(clicked(bool)), this, SLOT(slot_proxySameLogin()));
292
connect ( pathButton, SIGNAL(clicked(bool)), this, SLOT(slot_openFolder()));
298
SessionWidget::~SessionWidget()
302
void SessionWidget::slot_proxyGetKey()
305
QString startDir=ONMainWindow::getHomeDirectory();
307
if ( ONMainWindow::getPortable() &&
308
ONMainWindow::U3DevicePath().length() >0 )
310
startDir=ONMainWindow::U3DevicePath() +"/";
313
path = QFileDialog::getOpenFileName (
315
tr ( "Open key file" ),
317
tr ( "All files" ) +" (*)" );
318
if ( path!=QString::null )
321
if ( ONMainWindow::getPortable() &&
322
ONMainWindow::U3DevicePath().length() >0 )
324
if ( path.indexOf ( ONMainWindow::U3DevicePath() ) !=0 )
326
QMessageBox::critical (
328
tr ( "x2goclient is running in "
329
"portable mode. You should "
330
"use a path on your usb device "
331
"to be able to access your data "
332
"whereever you are" ),
333
QMessageBox::Ok,QMessageBox::NoButton );
337
path.replace ( ONMainWindow::U3DevicePath(),
341
proxyKey->setText ( path );
346
void SessionWidget::slot_proxyOptions()
348
proxyBox->setVisible(cbProxy->isChecked() && cbProxy->isVisible());
351
void SessionWidget::slot_proxySameLogin()
353
lProxyLogin->setDisabled(cbProxySameUser->isChecked());
354
proxyLogin->setDisabled(cbProxySameUser->isChecked());
357
void SessionWidget::slot_proxyType()
359
bool isSsh=rbSshProxy->isChecked();
360
cbProxyAutologin->setVisible(isSsh);
361
cbProxyKrbLogin->setVisible(isSsh);
362
proxyKey->setVisible(isSsh);
363
proxyKeyLabel->setVisible(isSsh);
364
pbOpenProxyKey->setVisible(isSsh);
369
void SessionWidget::slot_rdpDirectClicked()
371
bool isDirectRDP=cbDirectRDP->isChecked();
372
if (cbDirectRDP->isHidden())
374
pbAdvanced->setVisible((!isDirectRDP) && (sessBox->currentIndex()==RDP));
375
leCmdIp->setVisible(!isDirectRDP);
376
cmd->setVisible(!isDirectRDP);
377
key->setVisible(!isDirectRDP);
378
cbAutoLogin->setVisible(!isDirectRDP);
379
lKey->setVisible(!isDirectRDP);
380
openKey->setVisible(!isDirectRDP);
381
sshPort->setVisible(!isDirectRDP);
382
rdpPort->setVisible(isDirectRDP);
383
cbKrbDelegation->setVisible(!isDirectRDP);
384
cbKrbLogin->setVisible(!isDirectRDP);
386
cbProxy->setVisible(!isDirectRDP);
387
proxyBox->setVisible(!isDirectRDP && cbProxy->isChecked());
391
lPort->setText(tr("RDP port:"));
395
lPort->setText(tr("SSH port:"));
398
emit directRDP(isDirectRDP);
403
void SessionWidget::slot_getIcon()
405
QString path= QFileDialog::getOpenFileName (
407
tr ( "Open picture" ),
409
tr ( "Pictures" ) +" (*.png *.xpm *.jpg)" );
410
if ( path!=QString::null )
413
icon->setIcon ( QIcon ( sessIcon ) );
417
void SessionWidget::slot_getKey()
420
QString startDir=ONMainWindow::getHomeDirectory();
422
if ( ONMainWindow::getPortable() &&
423
ONMainWindow::U3DevicePath().length() >0 )
425
startDir=ONMainWindow::U3DevicePath() +"/";
428
path = QFileDialog::getOpenFileName (
430
tr ( "Open key file" ),
432
tr ( "All files" ) +" (*)" );
433
if ( path!=QString::null )
436
if ( ONMainWindow::getPortable() &&
437
ONMainWindow::U3DevicePath().length() >0 )
439
if ( path.indexOf ( ONMainWindow::U3DevicePath() ) !=0 )
441
QMessageBox::critical (
443
tr ( "x2goclient is running in "
444
"portable mode. You should "
445
"use a path on your usb device "
446
"to be able to access your data "
447
"whereever you are" ),
448
QMessageBox::Ok,QMessageBox::NoButton );
452
path.replace ( ONMainWindow::U3DevicePath(),
456
key->setText ( path );
461
void SessionWidget::slot_changeCmd ( int var )
463
leCmdIp->setText ( tr ( "Command:" ) );
470
if ( var==APPLICATION )
473
cmdCombo->setVisible ( true );
474
cmdCombo->setEnabled(true);
475
cmdCombo->lineEdit()->selectAll();
476
cmdCombo->lineEdit()->setFocus();
481
cmd->setVisible ( true );
482
if ( var==OTHER || var == RDP || var == XDMCP )
485
cmd->setEnabled ( true );
490
leCmdIp->setText ( tr ( "Server:" ) );
492
cmd->setText ( rdpServer );
499
leCmdIp->setText ( tr ( "XDMCP server:" ) );
500
cmd->setText ( xdmcpServer );
505
cmd->setEnabled ( false );
510
slot_rdpDirectClicked();
514
void SessionWidget::slot_rdpOptions()
517
QString text = QInputDialog::getText (
519
tr ( "Connect to Windows terminal server" ),
520
tr ( "rdesktop command line options:" ),
526
void SessionWidget::readConfig()
529
X2goSettings st ( "sessions" );
530
QString name=st.setting()->value (
532
( QVariant ) tr ( "New session" ) ).toString().trimmed();
534
QStringList tails=name.split("/",QString::SkipEmptyParts);
540
path=tails.join("/")+"/";
542
lPath->setText(path);
544
lPath->setText(parent->getSessionExplorer()->getCurrentPath()+"/");
546
sessName->setText (name);
548
sessIcon=st.setting()->value (
550
( QVariant ) ":icons/128x128/x2gosession.png" ).toString().trimmed();
551
sessIcon=expandHome(sessIcon);
552
icon->setIcon ( QIcon ( sessIcon ) );
554
server->setText ( st.setting()->value (
556
( QVariant ) QString::null ).toString().trimmed() );
557
uname->setText ( st.setting()->value (
559
( QVariant ) QString::null ).toString().trimmed() );
560
key->setText ( st.setting()->value (
562
( QVariant ) QString::null ).toString().trimmed() );
563
cbAutoLogin->setChecked(st.setting()->value (
564
sessionId+"/autologin",
565
( QVariant ) false ).toBool());
566
cbKrbLogin->setChecked(st.setting()->value (
567
sessionId+"/krblogin",
568
( QVariant ) false ).toBool());
569
cbKrbDelegation->setChecked(st.setting()->value (
570
sessionId+"/krbdelegation",
571
( QVariant ) false ).toBool());
573
st.setting()->value (
574
sessionId+"/sshport",
575
( QVariant ) mainWindow->getDefaultSshPort().toInt()
579
st.setting()->value (
580
sessionId+"/rdpport",3389
585
cbProxy->setChecked(st.setting()->value (
586
sessionId+"/usesshproxy",
590
QString prtype= st.setting()->value (
591
sessionId+"/sshproxytype",
593
).toString().trimmed() ;
597
rbHttpProxy->setChecked(true);
601
rbSshProxy->setChecked(true);
604
proxyLogin->setText(st.setting()->value (
605
sessionId+"/sshproxyuser",
607
).toString().trimmed() );
609
proxyKey->setText(st.setting()->value (
610
sessionId+"/sshproxykeyfile",
612
).toString().trimmed() );
614
proxyHost->setText(st.setting()->value (
615
sessionId+"/sshproxyhost",
617
).toString().trimmed() );
619
proxyPort->setValue(st.setting()->value (
620
sessionId+"/sshproxyport",
624
cbProxySamePass->setChecked(st.setting()->value (
625
sessionId+"/sshproxysamepass",
628
cbProxySameUser->setChecked(st.setting()->value (
629
sessionId+"/sshproxysameuser",
632
cbProxyAutologin->setChecked(st.setting()->value (
633
sessionId+"/sshproxyautologin",
636
cbProxyKrbLogin->setChecked(st.setting()->value (
637
sessionId+"/sshproxykrblogin",
641
if(proxyHost->text().indexOf(":")!=-1)
643
QStringList parts=proxyHost->text().split(":");
644
proxyHost->setText(parts[0]);
645
proxyPort->setValue(parts[1].toInt());
649
QTimer::singleShot(1, this,SLOT(slot_proxySameLogin()));
650
QTimer::singleShot(2, this,SLOT(slot_proxyType()));
651
QTimer::singleShot(3, this,SLOT(slot_proxyOptions()));
654
QStringList appNames=st.setting()->value (
655
sessionId+"/applications" ).toStringList();
656
bool rootless=st.setting()->value (
657
sessionId+"/rootless",false ).toBool();
658
bool published=st.setting()->value (
659
sessionId+"/published",false ).toBool();
662
command=st.setting()->value (
663
sessionId+"/command",
664
( QVariant ) mainWindow->getDefaultCmd() ).toString().trimmed();
666
rdpOptions=st.setting()->value ( sessionId+"/rdpoptions",
667
( QVariant ) "" ).toString().trimmed();
668
rdpServer=st.setting()->value ( sessionId+"/rdpserver",
669
( QVariant ) "" ).toString().trimmed();
670
xdmcpServer=st.setting()->value ( sessionId+"/xdmcpserver",
671
( QVariant ) "localhost" ).toString().trimmed();
673
cbDirectRDP->setChecked(st.setting()->value (
674
sessionId+"/directrdp",false ).toBool());
677
for ( int i=0; i<appNames.count(); ++i )
679
QString app=mainWindow->transAppName ( appNames[i] );
680
if ( cmdCombo->findText ( app ) ==-1 )
681
cmdCombo->addItem ( app );
685
sessBox->setCurrentIndex( PUBLISHED );
686
cmdCombo->setDisabled(true);
687
slot_changeCmd(PUBLISHED);
691
sessBox->setCurrentIndex ( APPLICATION );
692
QString app=mainWindow->transAppName ( command );
693
cmdCombo->lineEdit()->setText ( app );
694
slot_changeCmd ( APPLICATION );
698
if ( command=="KDE" )
700
sessBox->setCurrentIndex ( KDE );
701
cmd->setEnabled ( false );
703
else if ( command=="GNOME" )
705
sessBox->setCurrentIndex ( GNOME );
706
cmd->setEnabled ( false );
708
else if ( command=="LXDE" )
710
sessBox->setCurrentIndex ( LXDE );
711
cmd->setEnabled ( false );
713
else if ( command=="UNITY" )
715
sessBox->setCurrentIndex ( UNITY );
716
cmd->setEnabled ( false );
718
else if ( command=="XFCE" )
720
sessBox->setCurrentIndex ( XFCE );
721
cmd->setEnabled ( false );
723
else if ( command=="SHADOW" )
725
sessBox->setCurrentIndex ( SHADOW );
726
cmd->setEnabled ( false );
728
else if ( command=="RDP" )
730
leCmdIp->setText ( tr ( "Server:" ) );
731
sessBox->setCurrentIndex ( RDP );
732
cmd->setEnabled ( true );
733
cmd->setText ( rdpServer );
737
slot_rdpDirectClicked();
740
else if ( command=="XDMCP" )
742
leCmdIp->setText ( tr ( "XDMCP server:" ) );
743
sessBox->setCurrentIndex ( XDMCP );
744
cmd->setEnabled ( true );
745
cmd->setText ( xdmcpServer );
749
cmd->setText ( command );
750
sessBox->setCurrentIndex ( OTHER );
751
cmd->setEnabled ( true );
754
if ( sessName->text() ==tr ( "New session" ) )
756
sessName->selectAll();
757
sessName->setFocus();
760
slot_rdpDirectClicked();
765
void SessionWidget::setDefaults()
768
sessBox->setCurrentIndex ( KDE );
770
cmdCombo->addItem ( "" );
771
cmdCombo->addItems ( mainWindow->transApplicationsNames() );
772
cbAutoLogin->setChecked(false);
773
cbKrbLogin->setChecked(false);
774
cmdCombo->lineEdit()->setText (
776
tr ( "Path to executable" ) );
777
cmdCombo->lineEdit()->selectAll();
778
slot_changeCmd ( 0 );
779
cmd->setEnabled ( false );
780
sessIcon=":icons/128x128/x2gosession.png";
781
icon->setIcon ( QIcon ( sessIcon ) );
783
mainWindow->getDefaultSshPort().toInt() );
785
rdpPort->setValue (3389);
790
cbProxy->setChecked(false);
792
rbSshProxy->setChecked(true);
795
proxyKey->setText(QString::null);
798
proxyPort->setValue(22);
800
cbProxySamePass->setChecked(false);
801
cbProxySameUser->setChecked(false);
802
cbProxyAutologin->setChecked(false);
803
cbProxyKrbLogin->setChecked(false);
805
QTimer::singleShot(1, this,SLOT(slot_proxySameLogin()));
806
QTimer::singleShot(2, this,SLOT(slot_proxyType()));
807
QTimer::singleShot(3, this,SLOT(slot_proxyOptions()));
812
void SessionWidget::saveSettings()
815
X2goSettings st ( "sessions" );
817
QString normPath=(lPath->text()+"/"+sessName->text()).split("/",QString::SkipEmptyParts).join("/");
819
st.setting()->setValue ( sessionId+"/name",
820
( QVariant ) normPath.trimmed() );
821
st.setting()->setValue ( sessionId+"/icon",
822
( QVariant ) sessIcon );
823
st.setting()->setValue ( sessionId+"/host",
824
( QVariant ) server->text().trimmed() );
825
st.setting()->setValue ( sessionId+"/user",
826
( QVariant ) uname->text().trimmed() );
828
st.setting()->setValue ( sessionId+"/key",
829
( QVariant ) key->text().trimmed() );
831
st.setting()->setValue ( sessionId+"/rdpport",
832
( QVariant ) rdpPort->value() );
834
st.setting()->setValue ( sessionId+"/sshport",
835
( QVariant ) sshPort->value() );
836
st.setting()->setValue(sessionId+"/autologin",( QVariant ) cbAutoLogin->isChecked());
837
st.setting()->setValue(sessionId+"/krblogin",( QVariant ) cbKrbLogin->isChecked());
838
st.setting()->setValue(sessionId+"/krbdelegation",( QVariant ) cbKrbDelegation->isChecked());
840
st.setting()->setValue(sessionId+"/directrdp",( QVariant ) cbDirectRDP->isChecked());
844
bool published=false;
847
if ( sessBox->currentIndex() < OTHER )
848
command=sessBox->currentText();
850
command=cmd->text().trimmed();
851
if ( sessBox->currentIndex() == RDP )
854
rdpServer=cmd->text().trimmed();
856
if ( sessBox->currentIndex() == XDMCP )
859
xdmcpServer=cmd->text().trimmed();
861
if ( sessBox->currentIndex() == SHADOW )
867
for ( int i=-1; i<cmdCombo->count(); ++i )
871
app=mainWindow->internAppName (
872
cmdCombo->lineEdit()->text () );
874
app=mainWindow->internAppName ( cmdCombo->itemText ( i ) );
875
if ( appList.indexOf ( app ) ==-1 && app!="" &&
876
app!=tr ( "Path to executable" ) )
878
appList.append ( app );
881
if ( sessBox->currentIndex() ==APPLICATION )
884
command=mainWindow->internAppName ( cmdCombo->lineEdit()->text().trimmed() );
886
if ( sessBox->currentIndex() == PUBLISHED)
889
st.setting()->setValue ( sessionId+"/rootless", ( QVariant ) rootless );
890
st.setting()->setValue ( sessionId+"/published", ( QVariant ) published );
891
st.setting()->setValue ( sessionId+"/applications",
892
( QVariant ) appList );
893
st.setting()->setValue ( sessionId+"/command",
894
( QVariant ) command );
895
st.setting()->setValue ( sessionId+"/rdpoptions",
896
( QVariant ) rdpOptions );
897
st.setting()->setValue ( sessionId+"/rdpserver",
898
( QVariant ) rdpServer );
899
st.setting()->setValue ( sessionId+"/xdmcpserver",
900
( QVariant ) xdmcpServer );
903
st.setting()->setValue (
904
sessionId+"/usesshproxy",cbProxy->isChecked());
907
if(rbHttpProxy->isChecked())
909
st.setting()->setValue ( sessionId+"/sshproxytype","HTTP");
913
st.setting()->setValue ( sessionId+"/sshproxytype","SSH");
915
st.setting()->setValue (sessionId+"/sshproxyuser",proxyLogin->text().trimmed());
916
st.setting()->setValue (sessionId+"/sshproxykeyfile",proxyKey->text().trimmed());
917
st.setting()->setValue (sessionId+"/sshproxyhost",proxyHost->text().trimmed());
918
st.setting()->setValue (sessionId+"/sshproxyport",proxyPort->value());
919
st.setting()->setValue (sessionId+"/sshproxysamepass",cbProxySamePass->isChecked());
920
st.setting()->setValue (sessionId+"/sshproxysameuser",cbProxySameUser->isChecked());
921
st.setting()->setValue (sessionId+"/sshproxyautologin",cbProxyAutologin->isChecked());
922
st.setting()->setValue (sessionId+"/sshproxykrblogin",cbProxyKrbLogin->isChecked());
924
st.setting()->sync();
927
QString SessionWidget::sessionName()
929
return sessName->text();
933
void SessionWidget::slot_emitSettings()
935
emit settingsChanged(server->text(), QString::number( rdpPort->value()), uname->text());
939
void SessionWidget::slot_krbChecked()
941
cbKrbDelegation->setEnabled(cbKrbLogin->isChecked());
944
void SessionWidget::slot_openFolder()
946
FolderExplorer explorer(lPath->text(), parent->getSessionExplorer(), this);
947
if(explorer.exec()==QDialog::Accepted)
949
lPath->setText(explorer.getCurrentPath());