Peoplemon  0.1.0
Peoplemon 3 game source documentation
ScriptSelector.cpp
Go to the documentation of this file.
2 
3 #include <BLIB/Scripts.hpp>
4 #include <Core/Properties.hpp>
5 
6 namespace editor
7 {
8 namespace component
9 {
10 using namespace bl::gui;
11 
13 : onSelect(os)
14 , onCancel(oc)
15 , picker(core::Properties::ScriptPath(), {"psc", "bs"},
16  std::bind(&ScriptSelector::onPick, this, std::placeholders::_1), [this]() {
17  picker.close();
18  window->setForceFocus(true);
19  }) {
20  window = Window::create(LinePacker::create(LinePacker::Vertical, 4), "Select Script");
21  window->getSignal(Event::Closed).willAlwaysCall([this](const Event&, Element*) {
22  window->remove();
23  onCancel();
24  });
25 
26  Button::Ptr pickBut = Button::create("Pick File");
27  pickBut->getSignal(Event::LeftClicked).willAlwaysCall([this](const Event&, Element*) {
28  window->setForceFocus(false);
29  picker.open(FilePicker::PickExisting, "Pick Script", parent, false);
30  });
31  window->pack(pickBut);
32 
33  scriptInput = TextEntry::create();
34  scriptInput->setRequisition({250, 1});
35  scriptInput->getSignal(Event::TextEntered).willAlwaysCall([this](const Event&, Element*) {
36  checkSyntax();
37  });
38  window->pack(scriptInput, true, false);
39 
40  errorLabel = Label::create("");
41  window->pack(errorLabel, true, false);
42 
43  Box::Ptr row = Box::create(LinePacker::create(LinePacker::Horizontal, 10));
44  Button::Ptr choose = Button::create("Select");
45  choose->getSignal(Event::LeftClicked).willAlwaysCall([this](const Event&, Element*) {
46  window->remove();
47  onSelect(scriptInput->getInput());
48  });
49  row->pack(choose, false, true);
50  Button::Ptr cancel = Button::create("Cancel");
51  cancel->getSignal(Event::LeftClicked).willAlwaysCall([this](const Event&, Element*) {
52  window->remove();
53  onCancel();
54  });
55  row->pack(cancel, false, true);
56  window->pack(row, true, false);
57 }
58 
59 void ScriptSelector::open(GUI* p, const std::string& s) {
60  parent = p;
61  scriptInput->setInput(s);
62  parent->pack(window);
63  window->setForceFocus(true);
64  checkSyntax();
65 }
66 
67 void ScriptSelector::onPick(const std::string& s) {
68  scriptInput->setInput(s);
69  picker.close();
70  window->setForceFocus(true);
71  checkSyntax();
72 }
73 
74 void ScriptSelector::checkSyntax() {
75  bl::script::Script script(scriptInput->getInput());
76  if (script.valid()) {
77  errorLabel->setText("No error");
78  errorLabel->setColor(sf::Color::Green, sf::Color::Transparent);
79  }
80  else {
81  errorLabel->setText(script.errorMessage());
82  errorLabel->setColor(sf::Color::Red, sf::Color::Transparent);
83  }
84 }
85 
86 } // namespace component
87 } // namespace editor
Core classes and functionality for both the editor and game.
All classes and functionality used for implementing the game editor.
Definition: Tile.hpp:11
std::function< void()> OnCancel
Called when the window is closed without a selection.
void open(bl::gui::GUI *parent, const std::string &value={})
Opens the dialog to select a script.
std::function< void(const std::string &)> OnSelect
Callback type for when a script is chosen.
ScriptSelector(const OnSelect &onSelect, const OnCancel &onCancel)
Construct a new Script Selector dialog.