Skip to content

Commit d57c5a2

Browse files
IKhonakhbeevaiakov
authored andcommitted
Add after upload for trik (python)
1 parent 915bf55 commit d57c5a2

File tree

7 files changed

+77
-2
lines changed

7 files changed

+77
-2
lines changed

plugins/robots/generators/trik/trikGeneratorBase/include/trikGeneratorBase/trikGeneratorPluginBase.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ class ROBOTS_TRIK_GENERATOR_BASE_EXPORT TrikGeneratorPluginBase : public generat
3232
Q_OBJECT
3333

3434
public:
35+
enum class RunPolicy {
36+
Ask
37+
, AlwaysRun
38+
, NeverRun
39+
};
40+
3541
TrikGeneratorPluginBase(kitBase::robotModel::RobotModelInterface * const robotModel
3642
, const QSharedPointer<kitBase::blocksBase::BlocksFactoryInterface> &blocksFactory
3743
);

plugins/robots/generators/trik/trikPythonGeneratorLibrary/include/trikPythonGeneratorLibrary/trikPythonGeneratorPluginBase.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ private slots:
8484
/// Reenables buttons when program uploading or robot stopping is complete (sucessfully or with error).
8585
void onProtocolFinished();
8686

87+
/// Runs after upload if needed
88+
void onUploadSuccess();
89+
8790
private:
8891
/// Disables "run", "upload" and "stop" buttons when there is pending command to a robot.
8992
void disableButtons();
@@ -116,6 +119,8 @@ private slots:
116119

117120
/// Protocol that is used to stop robot.
118121
QScopedPointer<utils::robotCommunication::StopRobotProtocol> mStopRobotProtocol;
122+
123+
QFileInfo mMainFile;
119124
};
120125

121126
}

plugins/robots/generators/trik/trikPythonGeneratorLibrary/src/trikPythonGeneratorPluginBase.cpp

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
#include <utils/robotCommunication/uploadProgramProtocol.h>
3131
#include <utils/robotCommunication/networkCommunicationErrorReporter.h>
3232
#include <qrgui/textEditor/qscintillaTextEdit.h>
33-
#include <qrgui/textEditor/textManagerInterface.h>
33+
#include <qrkernel/settingsManager.h>
34+
#include <qrutils/widgets/qRealMessageBox.h>
3435

3536
#include "trikPythonMasterGenerator.h"
3637
#include "emptyShell.h"
@@ -86,7 +87,7 @@ void TrikPythonGeneratorPluginBase::init(const kitBase::KitPluginConfigurator &c
8687
, this, &TrikPythonGeneratorPluginBase::onProtocolFinished);
8788

8889
connect(mUploadProgramProtocol.data(), &UploadProgramProtocol::success
89-
, this, &TrikPythonGeneratorPluginBase::onProtocolFinished);
90+
, this, &TrikPythonGeneratorPluginBase::onUploadSuccess);
9091
connect(mRunProgramProtocol.data(), &RunProgramProtocol::success
9192
, this, &TrikPythonGeneratorPluginBase::onProtocolFinished);
9293
connect(mStopRobotProtocol.data(), &StopRobotProtocol::success
@@ -200,6 +201,7 @@ void TrikPythonGeneratorPluginBase::uploadProgram()
200201
const QFileInfo fileInfo = generateCodeForProcessing();
201202
if (fileInfo != QFileInfo() && !fileInfo.absoluteFilePath().isEmpty()) {
202203
disableButtons();
204+
mMainFile = fileInfo;
203205
mUploadProgramProtocol->run({fileInfo});
204206
}
205207
} else {
@@ -215,6 +217,9 @@ void TrikPythonGeneratorPluginBase::uploadProgram()
215217
}
216218
if (!files.isEmpty()) {
217219
disableButtons();
220+
if (auto code = dynamic_cast<text::QScintillaTextEdit *>(mMainWindowInterface->currentTab())) {
221+
mMainFile = QFileInfo(mTextManager->path(code));
222+
}
218223
mUploadProgramProtocol->run(files);
219224
} else {
220225
mMainWindowInterface->errorReporter()->addError(
@@ -257,11 +262,45 @@ void TrikPythonGeneratorPluginBase::stopRobot()
257262

258263
void TrikPythonGeneratorPluginBase::onProtocolFinished()
259264
{
265+
mMainFile = QFileInfo();
260266
mUploadProgramAction->setEnabled(true);
261267
mRunProgramAction->setEnabled(true);
262268
mStopRobotAction->setEnabled(true);
263269
}
264270

271+
void TrikPythonGeneratorPluginBase::onUploadSuccess()
272+
{
273+
auto runPolicy = static_cast<RunPolicy>(SettingsManager::value("trikRunPolicy").toInt());
274+
QFileInfo fileInfo;
275+
switch (runPolicy) {
276+
case RunPolicy::Ask:
277+
if (utils::QRealMessageBox::question(mMainWindowInterface->windowWidget()
278+
, tr("The program has been uploaded")
279+
, tr("Do you want to run it?")
280+
) != QMessageBox::Yes) {
281+
break;
282+
}
283+
Q_FALLTHROUGH();
284+
case RunPolicy::AlwaysRun:
285+
if (mMainFile != QFileInfo()) {
286+
if (mRunProgramProtocol) {
287+
mRunProgramProtocol->runUploaded(mMainFile);
288+
return;
289+
} else {
290+
QLOG_ERROR() << "Run program protocol is not initialized";
291+
}
292+
} else {
293+
utils::QRealMessageBox::question(mMainWindowInterface->windowWidget()
294+
,tr("Error"), tr("Unknown file to run after upload, please run manually"),
295+
QMessageBox::Ok);
296+
}
297+
break;
298+
case RunPolicy::NeverRun:
299+
break;
300+
}
301+
onProtocolFinished();
302+
}
303+
265304
void TrikPythonGeneratorPluginBase::disableButtons()
266305
{
267306
mUploadProgramAction->setEnabled(false);

plugins/robots/interpreters/interpreterCore/src/ui/robotsSettingsPage.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ void RobotsSettingsPage::save()
126126
SettingsManager::setValue("nxtFlashToolRunPolicy", mUi->runningAfterUploadingComboBox->currentIndex());
127127
} else if (mRobotModelManager.model().kitId().contains("ev3", Qt::CaseInsensitive)) {
128128
SettingsManager::setValue("ev3RunPolicy", mUi->runningAfterUploadingComboBox->currentIndex());
129+
} else if (mRobotModelManager.model().kitId().contains("trik", Qt::CaseInsensitive)) {
130+
SettingsManager::setValue("trikRunPolicy", mUi->runningAfterUploadingComboBox->currentIndex());
129131
}
130132

131133
mUi->devicesConfigurer->save();
@@ -169,6 +171,8 @@ void RobotsSettingsPage::restoreSettings()
169171
mUi->runningAfterUploadingComboBox->setCurrentIndex(SettingsManager::value("nxtFlashToolRunPolicy").toInt());
170172
} else if (mRobotModelManager.model().kitId().contains("ev3", Qt::CaseInsensitive)) {
171173
mUi->runningAfterUploadingComboBox->setCurrentIndex(SettingsManager::value("ev3RunPolicy").toInt());
174+
} else if (mRobotModelManager.model().kitId().contains("trik", Qt::CaseInsensitive)) {
175+
mUi->runningAfterUploadingComboBox->setCurrentIndex(SettingsManager::value("trikRunPolicy").toInt());
172176
}
173177
mUi->devicesConfigurer->refresh();
174178

plugins/robots/interpreters/trikKitInterpreterCommon/trikDefaultSettings.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ FSharpPath=C:/Program Files (x86)/Microsoft SDKs/F#/3.1/Framework/v4.0/Fsc.exe
33
WinScpPath=./winscp/WinSCP.com
44
trikRobot2DImage=./images/trik-robot.png
55
trikCameraImitationImagesDir=@AppDataLocation@/cameraImitation
6+
trikRunPolicy=0

plugins/robots/utils/include/utils/robotCommunication/runProgramProtocol.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ class ROBOTS_UTILS_EXPORT RunProgramProtocol : public QObject
4444
/// Upload and run program from given file on a robot.
4545
void run(const QFileInfo &fileToRun);
4646

47+
/// Run uploaded program from given file on robot.
48+
void runUploaded(const QFileInfo &fileToRun);
49+
4750
signals:
4851
/// Emitted when protocol completed successfully.
4952
void success();

plugins/robots/utils/src/robotCommunication/runProgramProtocol.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,20 @@ void RunProgramProtocol::run(const QFileInfo &fileToRun)
7272

7373
mProtocol->run();
7474
}
75+
76+
void RunProgramProtocol::runUploaded(const QFileInfo &fileToRun)
77+
{
78+
mProtocol->setAction(mWaitingForCasingModel, [](TcpRobotCommunicatorInterface &communicator) {
79+
communicator.requestCasingVersion();
80+
});
81+
82+
mProtocol->setAction(mWaitingForUploadingComplete, [](TcpRobotCommunicatorInterface &communicator) {
83+
emit communicator.uploadProgramDone();
84+
});
85+
86+
mProtocol->setAction(mWaitingForRunComplete, [fileToRun](TcpRobotCommunicatorInterface &communicator) {
87+
communicator.runProgram(fileToRun.fileName());
88+
});
89+
90+
mProtocol->run();
91+
}

0 commit comments

Comments
 (0)