Skip to content

Commit d37e73d

Browse files
committed
Add looks monitor name functions
1 parent 1a79e99 commit d37e73d

File tree

3 files changed

+98
-0
lines changed

3 files changed

+98
-0
lines changed

src/blocks/looksblocks.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <scratchcpp/input.h>
88
#include <scratchcpp/field.h>
99
#include <scratchcpp/costume.h>
10+
#include <scratchcpp/block.h>
1011
#include <scratchcpp/scratchconfiguration.h>
1112

1213
#include "looksblocks.h"
@@ -42,6 +43,11 @@ void LooksBlocks::registerBlocks(IEngine *engine)
4243
engine->addCompileFunction(this, "looks_costumenumbername", &compileCostumeNumberName);
4344
engine->addCompileFunction(this, "looks_backdropnumbername", &compileBackdropNumberName);
4445

46+
// Monitor names
47+
engine->addMonitorNameFunction(this, "looks_costumenumbername", &costumeNumberNameMonitorName);
48+
engine->addMonitorNameFunction(this, "looks_backdropnumbername", &backdropNumberNameMonitorName);
49+
engine->addMonitorNameFunction(this, "looks_size", &sizeMonitorName);
50+
4551
// Inputs
4652
engine->addInput(this, "CHANGE", CHANGE);
4753
engine->addInput(this, "SIZE", SIZE);
@@ -459,6 +465,56 @@ void LooksBlocks::compileBackdropNumberName(Compiler *compiler)
459465
}
460466
}
461467

468+
const std::string &LooksBlocks::costumeNumberNameMonitorName(Block *block)
469+
{
470+
int option = block->findFieldById(NUMBER_NAME)->specialValueId();
471+
472+
switch (option) {
473+
case Number: {
474+
static const std::string name = "costume number";
475+
return name;
476+
}
477+
478+
case Name: {
479+
static const std::string name = "costume name";
480+
return name;
481+
}
482+
483+
default: {
484+
static const std::string name = "";
485+
return name;
486+
}
487+
}
488+
}
489+
490+
const std::string &LooksBlocks::backdropNumberNameMonitorName(Block *block)
491+
{
492+
int option = block->findFieldById(NUMBER_NAME)->specialValueId();
493+
494+
switch (option) {
495+
case Number: {
496+
static const std::string name = "backdrop number";
497+
return name;
498+
}
499+
500+
case Name: {
501+
static const std::string name = "backdrop name";
502+
return name;
503+
}
504+
505+
default: {
506+
static const std::string name = "";
507+
return name;
508+
}
509+
}
510+
}
511+
512+
const std::string &LooksBlocks::sizeMonitorName(Block *block)
513+
{
514+
static const std::string name = "size";
515+
return name;
516+
}
517+
462518
unsigned int LooksBlocks::show(VirtualMachine *vm)
463519
{
464520
Sprite *sprite = dynamic_cast<Sprite *>(vm->target());

src/blocks/looksblocks.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ class LooksBlocks : public IBlockSection
7575
static void compileCostumeNumberName(Compiler *compiler);
7676
static void compileBackdropNumberName(Compiler *compiler);
7777

78+
static const std::string &costumeNumberNameMonitorName(Block *block);
79+
static const std::string &backdropNumberNameMonitorName(Block *block);
80+
static const std::string &sizeMonitorName(Block *block);
81+
7882
static unsigned int show(VirtualMachine *vm);
7983
static unsigned int hide(VirtualMachine *vm);
8084

test/blocks/looks_blocks_test.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@ TEST_F(LooksBlocksTest, RegisterBlocks)
122122
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "looks_costumenumbername", &LooksBlocks::compileCostumeNumberName));
123123
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "looks_backdropnumbername", &LooksBlocks::compileBackdropNumberName));
124124

125+
// Monitor names
126+
EXPECT_CALL(m_engineMock, addMonitorNameFunction(m_section.get(), "looks_costumenumbername", &LooksBlocks::costumeNumberNameMonitorName));
127+
EXPECT_CALL(m_engineMock, addMonitorNameFunction(m_section.get(), "looks_backdropnumbername", &LooksBlocks::backdropNumberNameMonitorName));
128+
EXPECT_CALL(m_engineMock, addMonitorNameFunction(m_section.get(), "looks_size", &LooksBlocks::sizeMonitorName));
129+
125130
// Inputs
126131
EXPECT_CALL(m_engineMock, addInput(m_section.get(), "CHANGE", LooksBlocks::CHANGE));
127132
EXPECT_CALL(m_engineMock, addInput(m_section.get(), "SIZE", LooksBlocks::SIZE));
@@ -926,6 +931,11 @@ TEST_F(LooksBlocksTest, Size)
926931
ASSERT_TRUE(compiler.constValues().empty());
927932
}
928933

934+
TEST_F(LooksBlocksTest, SizeMonitorName)
935+
{
936+
ASSERT_EQ(LooksBlocks::sizeMonitorName(nullptr), "size");
937+
}
938+
929939
TEST_F(LooksBlocksTest, SizeImpl)
930940
{
931941
static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT };
@@ -2767,6 +2777,20 @@ TEST_F(LooksBlocksTest, CostumeNumberName)
27672777
ASSERT_TRUE(compiler.constValues().empty());
27682778
}
27692779

2780+
TEST_F(LooksBlocksTest, CostumeNumberNameMonitorName)
2781+
{
2782+
// costume [number]
2783+
auto block1 = std::make_shared<Block>("a", "looks_costumenumbername");
2784+
addDropdownField(block1, "NUMBER_NAME", LooksBlocks::NUMBER_NAME, "number", LooksBlocks::Number);
2785+
2786+
// costume [name]
2787+
auto block2 = std::make_shared<Block>("b", "looks_costumenumbername");
2788+
addDropdownField(block2, "NUMBER_NAME", LooksBlocks::NUMBER_NAME, "name", LooksBlocks::Name);
2789+
2790+
ASSERT_EQ(LooksBlocks::costumeNumberNameMonitorName(block1.get()), "costume number");
2791+
ASSERT_EQ(LooksBlocks::costumeNumberNameMonitorName(block2.get()), "costume name");
2792+
}
2793+
27702794
TEST_F(LooksBlocksTest, CostumeNumberNameImpl)
27712795
{
27722796
static unsigned int bytecode1[] = { vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT };
@@ -2845,6 +2869,20 @@ TEST_F(LooksBlocksTest, BackdropNumberName)
28452869
ASSERT_TRUE(compiler.constValues().empty());
28462870
}
28472871

2872+
TEST_F(LooksBlocksTest, BackdropNumberNameMonitorName)
2873+
{
2874+
// backdrop [number]
2875+
auto block1 = std::make_shared<Block>("a", "looks_backdropnumbername");
2876+
addDropdownField(block1, "NUMBER_NAME", LooksBlocks::NUMBER_NAME, "number", LooksBlocks::Number);
2877+
2878+
// backdrop [name]
2879+
auto block2 = std::make_shared<Block>("b", "looks_backdropnumbername");
2880+
addDropdownField(block2, "NUMBER_NAME", LooksBlocks::NUMBER_NAME, "name", LooksBlocks::Name);
2881+
2882+
ASSERT_EQ(LooksBlocks::backdropNumberNameMonitorName(block1.get()), "backdrop number");
2883+
ASSERT_EQ(LooksBlocks::backdropNumberNameMonitorName(block2.get()), "backdrop name");
2884+
}
2885+
28482886
TEST_F(LooksBlocksTest, BackdropNumberNameImpl)
28492887
{
28502888
static unsigned int bytecode1[] = { vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT };

0 commit comments

Comments
 (0)