wiRedPanda
Logic Circuit Simulator
Loading...
Searching...
No Matches
TourEngine.cpp
Go to the documentation of this file.
1// Copyright 2015 - 2026, GIBIS-UNIFESP and the wiRedPanda contributors
2// SPDX-License-Identifier: GPL-3.0-or-later
3
5
7#include "App/Core/Settings.h"
8
9namespace {
10
11void fillTourStepFields(const QString &id, const QJsonObject &stepObj, TourStep &step)
12{
13 const QString stepKey = stepObj.value("key").toString();
14 const QString rawStepTitle = stepObj.value("title").toString();
15 const QString rawBody = stepObj.value("body").toString();
16
17 if (stepKey.isEmpty()) {
18 step.title = rawStepTitle;
19 step.body = rawBody;
20 } else {
21 const QString keyPrefix = id + QLatin1Char('.') + stepKey + QLatin1Char('.');
22 step.title = ExerciseTourResources::translate(keyPrefix + QStringLiteral("title"), rawStepTitle);
23 step.body = ExerciseTourResources::translate(keyPrefix + QStringLiteral("body"), rawBody);
24 }
25
26 step.target = stepObj.value("target").toString();
27 step.click = stepObj.value("click").toVariant().toStringList();
28}
29
30} // namespace
31
32TourEngine::TourEngine(QObject *parent)
33 : QObject(parent)
34 , m_core(&fillTourStepFields,
37{
38}
39
40bool TourEngine::loadFromResource(const QString &resourcePath)
41{
42 return m_core.loadFromResource(resourcePath);
43}
44
46{
47 return m_core.currentStepData();
48}
49
51{
52 if (m_core.start()) {
53 emitCurrentStep();
54 }
55}
56
58{
59 if (m_core.stop()) {
60 emit tourStopped();
61 }
62}
63
65{
66 if (m_core.goToPreviousStep()) {
67 emitCurrentStep();
68 }
69}
70
72{
73 const auto result = m_core.advance();
74 if (result.reachedEnd) {
75 markCompleted();
76 return;
77 }
78 if (result.advanced) {
79 emitCurrentStep();
80 }
81}
82
84{
85 if (m_core.retranslate()) {
86 emit retranslated();
87 }
88}
89
90void TourEngine::emitCurrentStep()
91{
92 emit stepChanged(m_core.currentStep(), m_core.totalSteps(), currentStepData());
93}
94
95void TourEngine::markCompleted()
96{
97 m_core.markCompleted();
98 emit tourCompleted();
99}
Discovery and translation lookup for Exercise/Tour step content.
Typed wrappers around QSettings for all application preferences.
static QString translate(const QString &key, const QString &fallbackEnglish)
static void setCompletedTours(const QStringList &ids)
Definition Settings.cpp:260
static int tourProgress(const QString &tourId)
Returns -1 if no record.
Definition Settings.cpp:265
static void setTourProgress(const QString &tourId, int step)
Definition Settings.cpp:271
static QStringList completedTours()
Definition Settings.cpp:255
int totalSteps() const
int currentStep() const
void tourStopped()
void retranslate()
const TourStep & currentStepData() const
Returns the data for the current step.
TourEngine(QObject *parent=nullptr)
void stop()
void retranslated()
void stepChanged(int step, int total, const TourStep &data)
void start()
bool loadFromResource(const QString &resourcePath)
void tourCompleted()
void advanceStep()
void goToPreviousStep()
QStringList click
Widget/action IDs to activate on step enter.
Definition TourStep.h:19
QString body
Definition TourStep.h:17
QString title
Definition TourStep.h:16
QString target
Definition TourStep.h:18