Skip to content

Commit e971a25

Browse files
--no-display flag in trikRun command line arguments, which makes it run without QWS
1 parent d5f12e7 commit e971a25

File tree

9 files changed

+78
-28
lines changed

9 files changed

+78
-28
lines changed

translations/fr/trikRun_fr.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,35 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!DOCTYPE TS>
3-
<TS version="2.1" language="fr_FR">
3+
<TS version="2.0" language="fr_FR">
44
<context>
55
<name>QObject</name>
66
<message>
7-
<location filename="../../trikRun/trikRunMain.cpp" line="44"/>
7+
<location filename="../../trikRun/trikRunMain.cpp" line="65"/>
88
<source>File with script to execute</source>
99
<translation type="unfinished"></translation>
1010
</message>
1111
<message>
12-
<location filename="../../trikRun/trikRunMain.cpp" line="45"/>
12+
<location filename="../../trikRun/trikRunMain.cpp" line="66"/>
1313
<source>(optional of -s option is specified)</source>
1414
<translation type="unfinished"></translation>
1515
</message>
1616
<message>
17-
<location filename="../../trikRun/trikRunMain.cpp" line="48"/>
17+
<location filename="../../trikRun/trikRunMain.cpp" line="69"/>
1818
<source>Script to be executed directly from command line.</source>
1919
<translation type="unfinished"></translation>
2020
</message>
2121
<message>
22-
<location filename="../../trikRun/trikRunMain.cpp" line="49"/>
22+
<location filename="../../trikRun/trikRunMain.cpp" line="70"/>
2323
<source> Example: ./trikRun -qws -s &quot;brick.smile(); script.wait(2000);&quot;</source>
2424
<translation type="unfinished"></translation>
2525
</message>
2626
<message>
27-
<location filename="../../trikRun/trikRunMain.cpp" line="51"/>
27+
<location filename="../../trikRun/trikRunMain.cpp" line="73"/>
28+
<source>Disable display support. When this flag is active, trikRun can work without QWS or even physical display</source>
29+
<translation type="unfinished"></translation>
30+
</message>
31+
<message>
32+
<location filename="../../trikRun/trikRunMain.cpp" line="76"/>
2833
<source>Runner of JavaScript files.</source>
2934
<translation type="unfinished"></translation>
3035
</message>

translations/ru/trikRun_ru.qm

360 Bytes
Binary file not shown.

translations/ru/trikRun_ru.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,35 @@
66
<message>
77
<source>Script to be executed directly from command line.
88
</source>
9-
<translation type="vanished">Скрипт, который надо исполнить прямо из командной строки.</translation>
9+
<translation type="obsolete">Скрипт, который надо исполнить прямо из командной строки.</translation>
1010
</message>
1111
<message>
12-
<location filename="../../trikRun/trikRunMain.cpp" line="44"/>
12+
<location filename="../../trikRun/trikRunMain.cpp" line="65"/>
1313
<source>File with script to execute</source>
1414
<translation>Файл со скриптом, который надо исполнить</translation>
1515
</message>
1616
<message>
17-
<location filename="../../trikRun/trikRunMain.cpp" line="45"/>
17+
<location filename="../../trikRun/trikRunMain.cpp" line="66"/>
1818
<source>(optional of -s option is specified)</source>
1919
<translation>(этот параметр не надо указывать, если указан параметр -s)</translation>
2020
</message>
2121
<message>
22-
<location filename="../../trikRun/trikRunMain.cpp" line="48"/>
22+
<location filename="../../trikRun/trikRunMain.cpp" line="69"/>
2323
<source>Script to be executed directly from command line.</source>
2424
<translation>Скрипт, который надо исполнить прямо из командной строки.</translation>
2525
</message>
2626
<message>
27-
<location filename="../../trikRun/trikRunMain.cpp" line="49"/>
27+
<location filename="../../trikRun/trikRunMain.cpp" line="70"/>
2828
<source> Example: ./trikRun -qws -s &quot;brick.smile(); script.wait(2000);&quot;</source>
2929
<translation> Пример: ./trikRun -qws -s &quot;brick.smile(); script.wait(2000);&quot;</translation>
3030
</message>
3131
<message>
32-
<location filename="../../trikRun/trikRunMain.cpp" line="51"/>
32+
<location filename="../../trikRun/trikRunMain.cpp" line="73"/>
33+
<source>Disable display support. When this flag is active, trikRun can work without QWS or even physical display</source>
34+
<translation type="unfinished">Отключает поддержку дисплея. С этим флагом rikRun может работать без ключа -qws и даже без физического дисплея</translation>
35+
</message>
36+
<message>
37+
<location filename="../../trikRun/trikRunMain.cpp" line="76"/>
3338
<source>Runner of JavaScript files.</source>
3439
<translation>Интерпретатор скриптов на JavaScript для ТРИК.</translation>
3540
</message>

trikControl/include/trikControl/brickInterface.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class TRIKCONTROL_EXPORT BrickInterface : public QObject
4848
virtual void reset() = 0;
4949

5050
/// Returns a widget on which display output is drawn.
51-
virtual DisplayWidgetInterface &graphicsWidget() = 0;
51+
virtual DisplayWidgetInterface *graphicsWidget() = 0;
5252

5353
/// Returns version of system configuration file.
5454
virtual QString configVersion() const = 0;

trikControl/src/brick.cpp

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@
1414

1515
#include "brick.h"
1616

17+
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
18+
#include <QtGui/QApplication>
19+
#else
20+
#include <QtWidgets/QApplication>
21+
#endif
22+
1723
#include <QtCore/QFileInfo>
1824

1925
#include <trikHal/hardwareAbstractionInterface.h>
@@ -65,13 +71,20 @@ Brick::Brick(const trikKernel::DifferentOwnerPointer<trikHal::HardwareAbstractio
6571
, const QString &modelConfig
6672
, const QString &mediaPath)
6773
: mHardwareAbstraction(hardwareAbstraction)
68-
, mDisplay(new Display(mediaPath))
6974
, mMediaPath(mediaPath)
7075
, mConfigurer(systemConfig, modelConfig)
7176
{
7277
qRegisterMetaType<QVector<int>>("QVector<int>");
7378
qRegisterMetaType<trikKernel::TimeVal>("trikKernel::TimeVal");
7479

80+
const bool hasGui = (qobject_cast<QApplication *>(QCoreApplication::instance()) != nullptr);
81+
82+
if (hasGui) {
83+
mDisplay.reset(new Display(mediaPath));
84+
} else {
85+
QLOG_INFO() << "Running in no GUI mode";
86+
}
87+
7588
for (const QString &initScript : mConfigurer.initScripts()) {
7689
if (mHardwareAbstraction->systemConsole().system(initScript) != 0) {
7790
QLOG_ERROR() << "Init script failed";
@@ -131,9 +144,13 @@ Brick::~Brick()
131144
mLed.reset();
132145
}
133146

134-
DisplayWidgetInterface &Brick::graphicsWidget()
147+
DisplayWidgetInterface *Brick::graphicsWidget()
135148
{
136-
return mDisplay->graphicsWidget();
149+
if (mDisplay) {
150+
return &mDisplay->graphicsWidget();
151+
} else {
152+
return nullptr;
153+
}
137154
}
138155

139156
QString Brick::configVersion() const
@@ -154,7 +171,9 @@ void Brick::reset()
154171
{
155172
stop();
156173
mKeys->reset();
157-
mDisplay->reset();
174+
if (mDisplay) {
175+
mDisplay->reset();
176+
}
158177

159178
/// @todo Temporary, we need more carefully init/deinit range sensors.
160179
for (RangeSensor * const rangeSensor : mRangeSensors.values()) {
@@ -203,7 +222,9 @@ void Brick::stop()
203222
powerMotor->powerOff();
204223
}
205224

206-
mDisplay->hide();
225+
if (mDisplay) {
226+
mDisplay->hide();
227+
}
207228

208229
/// @todo: Also be able to stop initializing sensor.
209230
for (LineSensor * const lineSensor : mLineSensors) {

trikControl/src/brick.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class Brick : public BrickInterface
7474

7575
void reset() override;
7676

77-
DisplayWidgetInterface &graphicsWidget() override;
77+
DisplayWidgetInterface *graphicsWidget() override;
7878

7979
QString configVersion() const override;
8080

trikGui/backgroundWidget.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ BackgroundWidget::BackgroundWidget(
5151
mStatusBarLayout.addWidget(&mCommunicatorIndicator);
5252
mStatusBarLayout.addWidget(&mWiFiIndicator);
5353
addMainWidget(mStartWidget);
54-
mBrickDisplayWidgetWrapper.reset(new LazyMainWidgetWrapper(&mController.brick().graphicsWidget()));
54+
mBrickDisplayWidgetWrapper.reset(new LazyMainWidgetWrapper(mController.brick().graphicsWidget()));
5555
addLazyWidget(*mBrickDisplayWidgetWrapper);
5656
mMainWidgetsLayout.addWidget(&mRunningWidget);
5757

trikKernel/src/applicationInitHelper.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,11 @@ ApplicationInitHelper::ApplicationInitHelper(QCoreApplication &app)
6464
);
6565

6666
#ifdef Q_WS_QWS
67-
QWSServer * const server = QWSServer::instance();
68-
if (server) {
69-
server->setCursorVisible(false);
67+
if (!app.arguments().contains("--no-display") && !!app.arguments().contains("-no-display")) {
68+
QWSServer * const server = QWSServer::instance();
69+
if (server) {
70+
server->setCursorVisible(false);
71+
}
7072
}
7173
#endif
7274
}

trikRun/trikRunMain.cpp

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#endif
2222

2323
#include <QtCore/QTimer>
24+
#include <QtCore/QCoreApplication>
2425
#include <QtCore/QEventLoop>
2526

2627
#include <trikKernel/configurer.h>
@@ -40,14 +41,26 @@
4041

4142
int main(int argc, char *argv[])
4243
{
43-
QApplication app(argc, argv);
44-
app.setApplicationName("TrikRun");
44+
QStringList params;
45+
for (int i = 1; i < argc; ++i) {
46+
params << QString(argv[i]);
47+
}
48+
49+
QScopedPointer<QCoreApplication> app;
50+
51+
if (params.contains("--no-display") || params.contains("-no-display")) {
52+
app.reset(new QCoreApplication(argc, argv));
53+
} else {
54+
app.reset(new QApplication(argc, argv));
55+
}
56+
57+
app->setApplicationName("TrikRun");
4558

4659
// RAII-style code to ensure that after brick gets destroyed there will be an event loop that cleans it up.
4760
trikKernel::DeinitializationHelper helper;
4861
Q_UNUSED(helper);
4962

50-
trikKernel::ApplicationInitHelper initHelper(app);
63+
trikKernel::ApplicationInitHelper initHelper(*app);
5164

5265
initHelper.commandLineParser().addPositionalArgument("file", QObject::tr("File with script to execute")
5366
+ " " + QObject::tr("(optional of -s option is specified)"));
@@ -56,6 +69,10 @@ int main(int argc, char *argv[])
5669
, QObject::tr("Script to be executed directly from command line.") + "\n"
5770
+ QObject::tr("\tExample: ./trikRun -qws -s \"brick.smile(); script.wait(2000);\""));
5871

72+
initHelper.commandLineParser().addFlag("no-display", "no-display"
73+
, QObject::tr("Disable display support. When this flag is active, trikRun can work without QWS or even "
74+
"physical display"));
75+
5976
initHelper.commandLineParser().addApplicationDescription(QObject::tr("Runner of JavaScript files."));
6077

6178
if (!initHelper.parseCommandLine()) {
@@ -78,9 +95,9 @@ int main(int argc, char *argv[])
7895
QScopedPointer<trikNetwork::MailboxInterface> mailbox(trikNetwork::MailboxFactory::create(configurer));
7996
trikScriptRunner::TrikScriptRunner result(*brick, mailbox.data(), gamepad.data());
8097

81-
QObject::connect(&result, SIGNAL(completed(QString, int)), &app, SLOT(quit()));
98+
QObject::connect(&result, SIGNAL(completed(QString, int)), app.data(), SLOT(quit()));
8299
result.run(script);
83-
return app.exec();
100+
return app->exec();
84101
};
85102

86103
if (initHelper.commandLineParser().isSet("s")) {

0 commit comments

Comments
 (0)