Thank you!
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts Menu
int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "TGUI window");
window.setFramerateLimit(60);
tgui::Gui gui(window);
try
{
tgui::Theme theme{ "../themes/Black.txt" };
gui.add(tgui::Picture::create("../RedBackground.jpg"));
auto label = tgui::Label::create();
label->setRenderer(theme.getRenderer("Label"));
label->setText("Hold down the mouse button on list box and move the mouse over items");
label->setPosition(70, 30);
label->setTextSize(18);
gui.add(label);
label = tgui::Label::create();
label->setRenderer(theme.getRenderer("Label"));
label->setText("ComboBox");
label->setPosition(150, 80);
label->setTextSize(18);
gui.add(label);
auto comboBox = tgui::ComboBox::create();
comboBox->setRenderer(theme.getRenderer("ComboBox"));
comboBox->setSize(200, 21);
comboBox->setPosition(150, 100);
comboBox->connect("ItemSelected", []() { cout << "Item selected" << endl; });
comboBox->addItem("Item 1");
comboBox->addItem("Item 2");
comboBox->addItem("Item 3");
comboBox->addItem("Item 4");
comboBox->addItem("Item 5");
comboBox->addItem("Item 6");
comboBox->setSelectedItem("Item 2");
gui.add(comboBox);
label = tgui::Label::create();
label->setRenderer(theme.getRenderer("Label"));
label->setText("ComboBox with heavy functions");
label->setPosition(450, 80);
label->setTextSize(18);
gui.add(label);
comboBox = tgui::ComboBox::create();
comboBox->setRenderer(theme.getRenderer("ComboBox"));
comboBox->setSize(200, 21);
comboBox->setPosition(450, 100);
comboBox->connect("ItemSelected", []() {this_thread::sleep_for(500ms); cout << "hard work done" << endl; });
comboBox->addItem("Item 1");
comboBox->addItem("Item 2");
comboBox->addItem("Item 3");
comboBox->addItem("Item 4");
comboBox->addItem("Item 5");
comboBox->addItem("Item 6");
comboBox->setSelectedItem("Item 2");
gui.add(comboBox);
auto button = tgui::Button::create();
button->setRenderer(theme.getRenderer("Button"));
button->setPosition(window.getSize().x - 115.f, window.getSize().y - 50.f);
button->setText("Exit");
button->setSize(100, 40);
button->connect("pressed", [&]() { window.close(); });
gui.add(button);
}
catch (const tgui::Exception& e)
{
std::cerr << "TGUI Exception: " << e.what() << std::endl;
return EXIT_FAILURE;
}
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
gui.handleEvent(event);
}
window.clear();
gui.draw();
window.display();
}
return EXIT_SUCCESS;
}
class BaseWindow;
class myRWindow : public sf::RenderWindow
{
BaseWindow * state;
public:
void changeState(BaseWindow *st) { state = st; }
void handleEvent(Event *event) { state->handleEvent(event); }
void drawCurrentState() { state->draw(); };
};
class BaseWindow
{
public:
virtual void draw() = 0;
virtual void handleEvent(sf::Event *) = 0;
protected:
myRWindow *contex;
};
class WindowStateA : public BaseWindow
{
private:
tgui::Gui gui;
void onComboBoxItemSelected(tgui::Widget::Ptr, const sf::String&)
{
/* --- */
WindowStateB *windB = WindowStateB::getInstance();
contex->changeState(windB);
windB->doSomethingAndReturn(this);
};
public:
virtual void draw();
virtual void handleEvent(sf::Event & ev) { gui.handleEvent(ev); };
};
class WindowStateB : public BaseWindow
{
public:
void doSomethingAndReturn(BaseWindow * wst) // and return to window
{
auto contWind = contex;
auto changeState = [contWind, wst]() {contWind->changeState(wst); };
/* --- */
// working in another thread while showong animation. After finishing work changeState will be called
/* --- */
}
virtual void draw();
virtual void handleEvent(sf::Event & ev);
};
Quote from: texus on 10 March 2019, 11:54:38Yes
What should the function do exactly? Place some text in the ComboBox when none of its items are selected yet?