Project

General

Profile

Unknown behavior of WPopupMenu ยป main.cpp

Ali Ali, 11/01/2025 11:56 PM

 
#include <Wt/WApplication.h>
#include <Wt/WPushButton.h>
#include <Wt/WContainerWidget.h>
#include <Wt/WPopupMenu.h>


class Raha : public Wt::WApplication
{
public:
Wt::Signal<int, int> sizeChanged_;
Wt::JSignal<int, int> jSizeChanged_;

Raha(const Wt::WEnvironment &env);
~Raha()
{
}
};

class Bar : public Wt::WContainerWidget
{


public:
Bar(){

auto app = dynamic_cast<Raha*>(Wt::WApplication::instance());
app->sizeChanged_.connect ([=](int w, int h){
createBar (w);
});
}

void createBar (int w)
{

clear();
auto menu = std::make_unique<Wt::WPopupMenu>();
menu->addItem ("item1");
menu->addItem ("item2");
auto subMenu = std::make_unique<Wt::WPopupMenu>();
subMenu->addItem ("subItem1");
subMenu->addItem ("subItem2");
menu->addMenu ("subMenu", std::move (subMenu));
menu->addItem ("item3");
auto btn = addWidget (std::make_unique<Wt::WPushButton>("Menu"));
btn->clicked().connect (menu.get(), &Wt::WPopupMenu::popup);
addWidget (std::move (menu));
}
};

Raha::Raha(const Wt::WEnvironment &env) :
Wt::WApplication(env),
jSizeChanged_(this, "jSizeChanged_")
{


jSizeChanged_.connect ([=](int w, int h){
sizeChanged_.emit(w, h);
});
doJavaScript("window.addEventListener('resize',function() {" +
jSizeChanged_.createCall({"Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0)", "Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)"}) + "});" +
jSizeChanged_.createCall({"Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0)", "Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)"}));
root()->addWidget(std::make_unique<Bar>());
}

int main(int argc, char **argv)
{

/* code */
return Wt::WRun(argc, argv, [](const Wt::WEnvironment &env)
{ return (std::make_unique<Raha>(env)); });
}
    (1-1/1)