GSI Object Oriented Online Offline (Go4)  GO4-5.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
TGo4StartClient.cpp
Go to the documentation of this file.
1 // $Id: TGo4StartClient.cpp 1651 2015-06-26 16:02:27Z adamczew $
2 //-----------------------------------------------------------------------
3 // The GSI Online Offline Object Oriented (Go4) Project
4 // Experiment Data Processing at EE department, GSI
5 //-----------------------------------------------------------------------
6 // Copyright (C) 2000- GSI Helmholtzzentrum für Schwerionenforschung GmbH
7 // Planckstr. 1, 64291 Darmstadt, Germany
8 // Contact: http://go4.gsi.de
9 //-----------------------------------------------------------------------
10 // This software can be used under the license agreements as stated
11 // in Go4License.txt file which is part of the distribution.
12 //-----------------------------------------------------------------------
13 
14 #include "TGo4StartClient.h"
15 
16 #include <QDir>
17 #include <QFileInfo>
18 #include <QFileDialog>
19 #include "TGo4QSettings.h"
20 
22  : QDialog( parent )
23 {
24  setupUi(this);
25 
26  setObjectName("Go4StartClient");
27 
28 #ifdef WIN32
29  // enable only exec and qtwindow in WIN32 mode
31  rsh_selected->setEnabled(false);
32  ssh_selected->setEnabled(false);
33 
35  xterm_selected->setEnabled(false);
36  konsole_selected->setEnabled(false);
37  go4sett->setClientNode("localhost");
38  LineEditClientNode->setEnabled(false);
39 #endif
40 
41  fSelectedFilter = -1;
42 
43  ClientShellGroup = new QButtonGroup(this);
44  ClientShellGroup->addButton(exec_selected, 0);
45  ClientShellGroup->addButton(rsh_selected, 1);
46  ClientShellGroup->addButton(ssh_selected, 2);
47  ClientShellGroup->button(go4sett->getClientShellMode())->setChecked(true);
48 
49  ClientTermGroup = new QButtonGroup(this);
50  ClientTermGroup->addButton(qt_selected, 1);
51  ClientTermGroup->addButton(xterm_selected, 2);
52  ClientTermGroup->addButton(konsole_selected, 3);
53  ClientTermGroup->button(go4sett->getClientTermMode())->setChecked(true);
54 
55  LineEditClientName->setText(go4sett->getClientName());
56  LineEditClientNode->setText(go4sett->getClientNode());
57  PortNumber->setValue(go4sett->getClientPort());
58  LineEditClientDir->setText(go4sett->getClientDir());
59  LineEditClientExec->setText(go4sett->getClientExec());
60  LineEditArgs->setText(go4sett->getClientArgs());
61 
62  if (LineEditClientDir->text().isEmpty())
63  LineEditClientDir->setText(QDir::currentPath());
64 
65  int mode = go4sett->getClientIsServer(); // 0 - client, 1 - server, 2 - http
66 
67 #ifdef WIN32
68  if (mode == 1) mode = 2;
69 
70  QModelIndex index = ServerModeCombo->model()->index(1, 0);
71  // This is the effective 'disable' flag
72  QVariant v(0);
73  // the magic
74  ServerModeCombo->model()->setData(index, v, Qt::UserRole - 1);
75 #else
76  qt_selected->setEnabled(mode!=1);
77 
78  if ((mode==1) && ClientTermGroup->checkedId()==1)
79  ClientTermGroup->button(2)->setChecked(true);
80 #endif
81 
82  ServerModeCombo->setCurrentIndex(mode);
83  PortNumber->setEnabled(mode == 2);
84 
85  ExeModeCombo->setCurrentIndex(mode==2 ? 1 : go4sett->getClientExeMode());
86 
87 
88 }
89 
91 {
92  LineEditClientExec->setText(go4sett->getClientExec(id));
93 }
94 
96 {
97  go4sett->setClientName(LineEditClientName->text());
98  go4sett->setClientNode(LineEditClientNode->text());
99  go4sett->setClientDir(LineEditClientDir->text());
100  go4sett->setClientExeMode(ExeModeCombo->currentIndex());
101  go4sett->setClientExec(LineEditClientExec->text());
102  go4sett->setClientArgs(LineEditArgs->text());
105  go4sett->setClientIsServer(ServerModeCombo->currentIndex());
106  go4sett->setClientConnectMode(ServerModeCombo->currentIndex()>0 ? ServerModeCombo->currentIndex() - 1 : 0);
107  go4sett->setClientPort(PortNumber->value());
108 }
109 
111 {
112  QFileDialog fd(this, "Select your working directory");
113  fd.setFileMode(QFileDialog::DirectoryOnly);
114 #if QT_VERSION >= QT_VERSION_CHECK(4,6,0)
115  fd.setOption(QFileDialog::DontUseNativeDialog);
116 #endif
117  //< JAM also do not use native dialog here to be consistent with lib dialog, see below
118  QString dir = LineEditClientDir->text();
119  if (dir.isEmpty() || !QDir(dir).exists())
120  dir = QDir::currentPath();
121  fd.setDirectory(dir);
122 
123  if (fd.exec() != QDialog::Accepted ) return;
124 
125  QStringList flst = fd.selectedFiles();
126  if (flst.isEmpty()) return;
127 
128  LineEditClientDir->setText(flst[0]);
129 
130  QString fileName = LineEditClientExec->text();
131  if (fileName.length()==0) return;
132 
133  QString exeDirPath = QFileInfo(fileName).path();
134  if (exeDirPath.isEmpty() || ((exeDirPath == QString(".")) && (fileName[0]!='.'))) {
135  fileName = QFileInfo(QDir(flst[0]), fileName).filePath();
136  LineEditClientExec->setText(fileName);
137  }
138 }
139 
140 
142 {
143  const char* caption = 0;
144 
145 #ifdef WIN32
146  QString exe1_filter("User analysis (MainUserAnalysis.exe)");
147  QString exe2_filter("Any executable (*.exe)");
148  QString dll1_filter("User library (libGo4UserAnalysis.dll)");
149  QString dll2_filter("Any shared library (*.dll)");
150  QString any_filter("Any files (*.*)");
151 #else
152  QString exe1_filter("User analysis (MainUserAnalysis)");
153  QString exe2_filter("Any executable (*)");
154  QString dll1_filter("User library (libGo4UserAnalysis.so)");
155  QString dll2_filter("Any shared library (*.so)");
156  QString any_filter("Any files (*)");
157 #endif
158 
159  QStringList filters;
160  filters << exe1_filter << exe2_filter << dll1_filter << dll2_filter << any_filter;
161 
162  QFileDialog fd(this, caption);
163  fd.setFileMode(QFileDialog::ExistingFile);
164 #if QT_VERSION >= QT_VERSION_CHECK(4,6,0)
165  fd.setOption(QFileDialog::DontUseNativeDialog);
166 #endif
167  //< JAM: native dialog may suppress the chosen filer when displayed and use always first entry in list!
168  fd.setNameFilters(filters);
169  int select_filer = fSelectedFilter;
170  if (select_filer<0)
171  select_filer= (ExeModeCombo->currentIndex()==0) ? 0 : 2;
172  switch (select_filer) {
173  case 0: fd.selectNameFilter(exe1_filter); break;
174  case 1: fd.selectNameFilter(exe2_filter); break;
175  case 2: fd.selectNameFilter(dll1_filter); break;
176  case 3: fd.selectNameFilter(dll2_filter); break;
177  default: fd.selectNameFilter(any_filter); break;
178  }
179 
180  QString filename = LineEditClientExec->text();
181  if (filename.length() > 0)
182  fd.selectFile(filename);
183 
184  if (fd.exec() != QDialog::Accepted) return;
185 
186  QStringList flst = fd.selectedFiles();
187  if (flst.isEmpty()) return;
188 
189  select_filer = 4;
190  if (fd.selectedNameFilter()==exe1_filter) select_filer = 0; else
191  if (fd.selectedNameFilter()==exe2_filter) select_filer = 1; else
192  if (fd.selectedNameFilter()==dll1_filter) select_filer = 2; else
193  if (fd.selectedNameFilter()==dll2_filter) select_filer = 3;
194  fSelectedFilter = select_filer;
195 
196  if ((select_filer==0) || (select_filer==1)) ExeModeCombo->setCurrentIndex(0); else
197  if ((select_filer==2) || (select_filer==3)) ExeModeCombo->setCurrentIndex(1);
198 
199  LineEditClientExec->setText(flst[0]);
200 }
201 
202 
204 {
205  bool windows = false;
206 
207 #ifdef WIN32
208  if (id==1) {
209  ServerModeCombo->setCurrentIndex(2);
210  id = 2;
211  }
212  windows = true;
213 #endif
214 
215  ExeModeCombo->setEnabled(id<2);
216  if (id==2) ExeModeCombo->setCurrentIndex(1);
217  bool isserver = (id>0);
218  qt_selected->setEnabled(id!=1);
219  PortNumber->setEnabled(id==2);
220  if (id==1) { // if Qt was selected, select Xterm
221  if (ClientTermGroup->checkedId()==1)
222  ClientTermGroup->button(2)->setChecked(true);
223  }
224  else { // if Xterm was selected, select Qt
225  if (ClientTermGroup->checkedId()==2)
226  ClientTermGroup->button(1)->setChecked(true);
227  }
228 }
QString getClientDir()
virtual void SelectDir()
int getClientShellMode()
void setClientExeMode(int mode)
void setClientArgs(const QString &)
void setClientDir(const QString &)
QString getClientName()
virtual void ServerModeCombo_activated(int)
QString getClientExec(int mode=-1)
void setClientName(const QString &)
void setClientTermMode(int)
void setClientShellMode(int)
TGo4StartClient(QWidget *parent=0)
void setClientPort(int)
void setClientIsServer(int kind)
QString getClientArgs()
QButtonGroup * ClientTermGroup
TGo4QSettings * go4sett
virtual void ExeMode_changed(int)
void setClientExec(const QString &)
void setClientNode(const QString &)
QButtonGroup * ClientShellGroup
void setClientConnectMode(int)
virtual void SelectProg()
QString getClientNode()