GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TGo4StartClient.cpp
Go to the documentation of this file.
1// $Id$
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 fuer 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 <QButtonGroup>
20
21#include "TGo4QSettings.h"
22
24 : QDialog( parent )
25{
26 setupUi(this);
27
28 QObject::connect(ChooseDir, &QPushButton::clicked, this, &TGo4StartClient::SelectDir);
29 QObject::connect(ChooseExc, &QPushButton::clicked, this, &TGo4StartClient::SelectProg);
30 QObject::connect(ServerModeCombo, QOverload<int>::of(&QComboBox::activated), this, &TGo4StartClient::ServerModeCombo_activated);
31 QObject::connect(ExeModeCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &TGo4StartClient::ExeMode_changed);
32
33 setObjectName("Go4StartClient");
34
35#ifdef _MSC_VER
36 // enable only exec and qtwindow in Windows
37 go4sett->setClientShellMode(0);
38 rsh_selected->setEnabled(false);
39 ssh_selected->setEnabled(false);
40
41 go4sett->setClientTermMode(1);
42 xterm_selected->setEnabled(false);
43 konsole_selected->setEnabled(false);
44 go4sett->setClientNode("localhost");
45 LineEditClientNode->setEnabled(false);
46#endif
47
48 fSelectedFilter = -1;
49
50 ClientShellGroup = new QButtonGroup(this);
51 ClientShellGroup->addButton(exec_selected, 0);
52 ClientShellGroup->addButton(rsh_selected, 1);
53 ClientShellGroup->addButton(ssh_selected, 2);
54 ClientShellGroup->button(go4sett->getClientShellMode())->setChecked(true);
55
56 ClientTermGroup = new QButtonGroup(this);
57 ClientTermGroup->addButton(qt_selected, 1);
58 ClientTermGroup->addButton(xterm_selected, 2);
59 ClientTermGroup->addButton(konsole_selected, 3);
60 ClientTermGroup->button(go4sett->getClientTermMode())->setChecked(true);
61
62 LineEditClientName->setText(go4sett->getClientName());
63 LineEditClientNode->setText(go4sett->getClientNode());
64 PortNumber->setValue(go4sett->getClientPort());
65 LineEditClientDir->setText(go4sett->getClientDir());
66 LineEditClientExec->setText(go4sett->getClientExec());
67 LineEditArgs->setText(go4sett->getClientArgs());
68
69 if (LineEditClientDir->text().isEmpty())
70 LineEditClientDir->setText(QDir::currentPath());
71
72 int mode = go4sett->getClientIsServer(); // 0 - client, 1 - server, 2 - http
73
74#ifdef _MSC_VER
75 if (mode == 1) mode = 2;
76
77 QModelIndex index = ServerModeCombo->model()->index(1, 0);
78 // This is the effective 'disable' flag
79 QVariant v(0);
80 // the magic
81 ServerModeCombo->model()->setData(index, v, Qt::UserRole - 1);
82#else
83 qt_selected->setEnabled(mode!=1);
84
85 if ((mode==1) && ClientTermGroup->checkedId()==1)
86 ClientTermGroup->button(2)->setChecked(true);
87#endif
88
89 ServerModeCombo->setCurrentIndex(mode);
90 PortNumber->setEnabled(mode == 2);
91
92 ExeModeCombo->setCurrentIndex(mode==2 ? 1 : go4sett->getClientExeMode());
93}
94
96{
97 LineEditClientExec->setText(go4sett->getClientExec(id));
98}
99
101{
102 go4sett->setClientName(LineEditClientName->text());
103 go4sett->setClientNode(LineEditClientNode->text());
104 go4sett->setClientDir(LineEditClientDir->text());
105 go4sett->setClientExeMode(ExeModeCombo->currentIndex());
106 go4sett->setClientExec(LineEditClientExec->text());
107 go4sett->setClientArgs(LineEditArgs->text());
108 go4sett->setClientShellMode(ClientShellGroup->checkedId());
109 go4sett->setClientTermMode(ClientTermGroup->checkedId());
110 go4sett->setClientIsServer(ServerModeCombo->currentIndex());
111 go4sett->setClientConnectMode(ServerModeCombo->currentIndex()>0 ? ServerModeCombo->currentIndex() - 1 : 0);
112 go4sett->setClientPort(PortNumber->value());
113}
114
116{
117 QFileDialog fd(this, "Select your working directory");
118 fd.setOption(QFileDialog::ShowDirsOnly, true);
119 fd.setFileMode(QFileDialog::Directory);
120 fd.setOption(QFileDialog::DontUseNativeDialog);
121
122 //< JAM also do not use native dialog here to be consistent with lib dialog, see below
123 QString dir = LineEditClientDir->text();
124 if (dir.isEmpty() || !QDir(dir).exists())
125 dir = QDir::currentPath();
126 fd.setDirectory(dir);
127
128 if (fd.exec() != QDialog::Accepted) return;
129
130 QStringList flst = fd.selectedFiles();
131 if (flst.isEmpty()) return;
132
133 LineEditClientDir->setText(flst[0]);
134
135 QString fileName = LineEditClientExec->text();
136 if (fileName.isEmpty()) return;
137
138 QString exeDirPath = QFileInfo(fileName).path();
139 if (exeDirPath.isEmpty() || ((exeDirPath == QString(".")) && (fileName[0]!='.'))) {
140 fileName = QFileInfo(QDir(flst[0]), fileName).filePath();
141 LineEditClientExec->setText(fileName);
142 }
143}
144
145
147{
148 const char *caption = nullptr;
149
150#ifdef _MSC_VER
151 QString exe1_filter("User analysis (MainUserAnalysis.exe)");
152 QString exe2_filter("Any executable (*.exe)");
153 QString dll1_filter("User library (libGo4UserAnalysis.dll)");
154 QString dll2_filter("Any shared library (*.dll)");
155 QString any_filter("Any files (*.*)");
156#else
157 QString exe1_filter("User analysis (MainUserAnalysis)");
158 QString exe2_filter("Any executable (*)");
159 QString dll1_filter("User library (libGo4UserAnalysis.so)");
160 QString dll2_filter("Any shared library (*.so)");
161 QString any_filter("Any files (*)");
162#endif
163
164 QStringList filters;
165 filters << exe1_filter << exe2_filter << dll1_filter << dll2_filter << any_filter;
166
167 QFileDialog fd(this, caption);
168 fd.setFileMode(QFileDialog::ExistingFile);
169 fd.setOption(QFileDialog::DontUseNativeDialog);
170
171 //< JAM: native dialog may suppress the chosen filer when displayed and use always first entry in list!
172 fd.setNameFilters(filters);
173 int select_filer = fSelectedFilter;
174 if (select_filer < 0)
175 select_filer = (ExeModeCombo->currentIndex() == 0) ? 0 : 2;
176 switch (select_filer) {
177 case 0: fd.selectNameFilter(exe1_filter); break;
178 case 1: fd.selectNameFilter(exe2_filter); break;
179 case 2: fd.selectNameFilter(dll1_filter); break;
180 case 3: fd.selectNameFilter(dll2_filter); break;
181 default: fd.selectNameFilter(any_filter); break;
182 }
183
184 QString filename = LineEditClientExec->text();
185 if (!filename.isEmpty())
186 fd.selectFile(filename);
187
188 if (fd.exec() != QDialog::Accepted) return;
189
190 QStringList flst = fd.selectedFiles();
191 if (flst.isEmpty()) return;
192
193 select_filer = 4;
194 if (fd.selectedNameFilter()==exe1_filter) select_filer = 0; else
195 if (fd.selectedNameFilter()==exe2_filter) select_filer = 1; else
196 if (fd.selectedNameFilter()==dll1_filter) select_filer = 2; else
197 if (fd.selectedNameFilter()==dll2_filter) select_filer = 3;
198 fSelectedFilter = select_filer;
199
200 if ((select_filer == 0) || (select_filer == 1)) ExeModeCombo->setCurrentIndex(0); else
201 if ((select_filer == 2) || (select_filer == 3)) ExeModeCombo->setCurrentIndex(1);
202
203 LineEditClientExec->setText(flst[0]);
204}
205
206
208{
209#ifdef _MSC_VER
210 if (id==1) {
211 ServerModeCombo->setCurrentIndex(2);
212 id = 2;
213 }
214#endif
215
216 ExeModeCombo->setEnabled(id < 2);
217 if (id == 2)
218 ExeModeCombo->setCurrentIndex(1);
219 // bool isserver = (id > 0);
220 qt_selected->setEnabled(id != 1);
221 PortNumber->setEnabled(id == 2);
222 if (id==1) { // if Qt was selected, select Xterm
223 if (ClientTermGroup->checkedId()==1)
224 ClientTermGroup->button(2)->setChecked(true);
225 } else { // if Xterm was selected, select Qt
226 if (ClientTermGroup->checkedId()==2)
227 ClientTermGroup->button(1)->setChecked(true);
228 }
229}
TGo4QSettings * go4sett
virtual void SelectProg()
TGo4StartClient(QWidget *parent=nullptr)
virtual void SelectDir()
QButtonGroup * ClientTermGroup
virtual void ServerModeCombo_activated(int)
QButtonGroup * ClientShellGroup
virtual void ExeMode_changed(int)