Skip to content

Commit 54fbd20

Browse files
committed
Implement text bubble methods in StageModel
1 parent 51728e7 commit 54fbd20

File tree

3 files changed

+83
-0
lines changed

3 files changed

+83
-0
lines changed

src/stagemodel.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,29 @@ void StageModel::onGraphicsEffectsCleared()
5252

5353
void StageModel::onBubbleTypeChanged(libscratchcpp::Target::BubbleType type)
5454
{
55+
if (type == libscratchcpp::Target::BubbleType::Say) {
56+
if (m_bubbleType == TextBubbleShape::Type::Say)
57+
return;
58+
59+
m_bubbleType = TextBubbleShape::Type::Say;
60+
} else {
61+
if (m_bubbleType == TextBubbleShape::Type::Think)
62+
return;
63+
64+
m_bubbleType = TextBubbleShape::Type::Think;
65+
}
66+
67+
emit bubbleTypeChanged();
5568
}
5669

5770
void StageModel::onBubbleTextChanged(const std::string &text)
5871
{
72+
QString newText = QString::fromStdString(text);
73+
74+
if (m_bubbleText != newText) {
75+
m_bubbleText = newText;
76+
emit bubbleTextChanged();
77+
}
5978
}
6079

6180
void StageModel::loadCostume()
@@ -86,3 +105,13 @@ void StageModel::setRenderedTarget(IRenderedTarget *newRenderedTarget)
86105

87106
emit renderedTargetChanged();
88107
}
108+
109+
const TextBubbleShape::Type &StageModel::bubbleType() const
110+
{
111+
return m_bubbleType;
112+
}
113+
114+
const QString &StageModel::bubbleText() const
115+
{
116+
return m_bubbleText;
117+
}

src/stagemodel.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#include <QObject>
66
#include <scratchcpp/istagehandler.h>
77

8+
#include "textbubbleshape.h"
9+
810
Q_MOC_INCLUDE("renderedtarget.h");
911

1012
namespace scratchcpprender
@@ -18,6 +20,8 @@ class StageModel
1820
{
1921
Q_OBJECT
2022
Q_PROPERTY(IRenderedTarget *renderedTarget READ renderedTarget WRITE setRenderedTarget NOTIFY renderedTargetChanged)
23+
Q_PROPERTY(TextBubbleShape::Type bubbleType READ bubbleType NOTIFY bubbleTypeChanged)
24+
Q_PROPERTY(QString bubbleText READ bubbleText NOTIFY bubbleTextChanged)
2125

2226
public:
2327
explicit StageModel(QObject *parent = nullptr);
@@ -43,12 +47,20 @@ class StageModel
4347
IRenderedTarget *renderedTarget() const;
4448
void setRenderedTarget(IRenderedTarget *newRenderedTarget);
4549

50+
const TextBubbleShape::Type &bubbleType() const;
51+
52+
const QString &bubbleText() const;
53+
4654
signals:
4755
void renderedTargetChanged();
56+
void bubbleTypeChanged();
57+
void bubbleTextChanged();
4858

4959
private:
5060
libscratchcpp::Stage *m_stage = nullptr;
5161
IRenderedTarget *m_renderedTarget = nullptr;
62+
TextBubbleShape::Type m_bubbleType = TextBubbleShape::Type::Say;
63+
QString m_bubbleText;
5264
};
5365

5466
} // namespace scratchcpprender

test/target_models/stagemodel_test.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,48 @@ TEST(StageModelTest, OnGraphicsEffectsCleared)
6464
model.onGraphicsEffectsCleared();
6565
}
6666

67+
TEST(StageModelTest, OnBubbleTypeChanged)
68+
{
69+
StageModel model;
70+
QSignalSpy spy(&model, &StageModel::bubbleTypeChanged);
71+
ASSERT_EQ(model.bubbleType(), TextBubbleShape::Type::Say);
72+
73+
model.onBubbleTypeChanged(Target::BubbleType::Think);
74+
ASSERT_EQ(model.bubbleType(), TextBubbleShape::Type::Think);
75+
ASSERT_EQ(spy.count(), 1);
76+
77+
model.onBubbleTypeChanged(Target::BubbleType::Think);
78+
ASSERT_EQ(model.bubbleType(), TextBubbleShape::Type::Think);
79+
ASSERT_EQ(spy.count(), 1);
80+
81+
model.onBubbleTypeChanged(Target::BubbleType::Say);
82+
ASSERT_EQ(model.bubbleType(), TextBubbleShape::Type::Say);
83+
ASSERT_EQ(spy.count(), 2);
84+
85+
model.onBubbleTypeChanged(Target::BubbleType::Say);
86+
ASSERT_EQ(model.bubbleType(), TextBubbleShape::Type::Say);
87+
ASSERT_EQ(spy.count(), 2);
88+
}
89+
90+
TEST(StageModelTest, OnBubbleTextChanged)
91+
{
92+
StageModel model;
93+
QSignalSpy spy(&model, &StageModel::bubbleTextChanged);
94+
ASSERT_TRUE(model.bubbleText().isEmpty());
95+
96+
model.onBubbleTextChanged("Hello!");
97+
ASSERT_EQ(model.bubbleText(), "Hello!");
98+
ASSERT_EQ(spy.count(), 1);
99+
100+
model.onBubbleTextChanged("Hello!");
101+
ASSERT_EQ(model.bubbleText(), "Hello!");
102+
ASSERT_EQ(spy.count(), 1);
103+
104+
model.onBubbleTextChanged("test");
105+
ASSERT_EQ(model.bubbleText(), "test");
106+
ASSERT_EQ(spy.count(), 2);
107+
}
108+
67109
TEST(StageModelTest, RenderedTarget)
68110
{
69111
StageModel model;

0 commit comments

Comments
 (0)