WWidget *StyleLayout::wGridLayout() { WContainerWidget *result = new WContainerWidget(); topic("WGridLayout", result); addText(tr("layout-WGridLayout"), result); WContainerWidget *container; container = new WContainerWidget(result); container->resize(WLength::Auto, 400); container->setStyleClass("yellow-box"); WGridLayout *grid = new WGridLayout(); container->setLayout(grid); for (int row = 0; row < 3; ++row) { for (int column = 0; column < 4; ++column) { WText *t = addText(tr("grid-item").arg(row).arg(column)); if (row == 1 || column == 1 || column == 2) t->setStyleClass("blue-box"); else t->setStyleClass("green-box"); grid->addWidget(t, row, column); } } grid->setRowStretch(1, 1); grid->setColumnStretch(1, 1); grid->setColumnStretch(2, 1); return result; }
/*! \brief Setup the user interface. */ void createUI() { WContainerWidget *w = root(); w->setStyleClass("maindiv"); /* * The main layout is a 3x2 grid layout. */ WGridLayout *layout = new WGridLayout(); layout->addWidget(createTitle("Folders"), 0, 0); layout->addWidget(createTitle("Files"), 0, 1); layout->addWidget(folderView(), 1, 0); layout->setColumnResizable(0); // select the first folder folderView_->select(folderModel_->index(0, 0, folderModel_->index(0, 0))); WVBoxLayout *vbox = new WVBoxLayout(); vbox->addWidget(fileView(), 1); vbox->addWidget(pieChart(), 1); vbox->setResizable(0); layout->addLayout(vbox, 1, 1); layout->addWidget(aboutDisplay(), 2, 0, 1, 2); /* * Let row 1 and column 1 take the excess space. */ layout->setRowStretch(1, 1); layout->setColumnStretch(1, 1); w->setLayout(layout); }
WWidget *EventsDemo::wMouseEvent() { WContainerWidget *result = new WContainerWidget(); topic("WMouseEvent", result); addText(tr("events-WMouseEvent"), result); WContainerWidget *c = new WContainerWidget(result); WHBoxLayout *hlayout = new WHBoxLayout; c->setLayout(hlayout); WContainerWidget *l = new WContainerWidget; WContainerWidget *r = new WContainerWidget; new WText("clicked<br/>doubleClicked<br/>mouseWentOut<br/>mouseWentOver", l); new WText("mouseWentDown<br/>mouseWentUp<br/>mouseMoved<br/>mouseWheel", r); hlayout->addWidget(l); hlayout->addWidget(r); c->resize(600, 300); l->decorationStyle().setBackgroundColor(Wt::gray); r->decorationStyle().setBackgroundColor(Wt::gray); // prevent that firefox interprets drag as drag&drop action l->setStyleClass("unselectable"); r->setStyleClass("unselectable"); l->clicked().connect(this, &EventsDemo::showClicked); l->doubleClicked().connect(this, &EventsDemo::showDoubleClicked); l->mouseWentOut().connect(this, &EventsDemo::showMouseWentOut); l->mouseWentOver().connect(this, &EventsDemo::showMouseWentOver); r->mouseMoved().connect(this, &EventsDemo::showMouseMoved); r->mouseWentUp().connect(this, &EventsDemo::showMouseWentUp); r->mouseWentDown().connect(this, &EventsDemo::showMouseWentDown); r->mouseWheel().connect(this, &EventsDemo::showMouseWheel); r->mouseWheel().preventDefaultAction(true); l->setAttributeValue ("oncontextmenu", "event.cancelBubble = true; event.returnValue = false; return false;"); r->setAttributeValue ("oncontextmenu", "event.cancelBubble = true; event.returnValue = false; return false;"); new WBreak(result); new WText("Last event: ", result); mouseEventType_ = new WText(result); new WBreak(result); mouseEventDescription_ = new WText(result); return result; }
WWidget *StyleLayout::wBorderLayout() { WContainerWidget *result = new WContainerWidget(); topic("WBorderLayout", result); addText(tr("layout-WBorderLayout"), result); WContainerWidget *container; container = new WContainerWidget(result); container->resize(WLength::Auto, 400); container->setStyleClass("yellow-box"); WBorderLayout *layout = new WBorderLayout(); container->setLayout(layout); WText *item; item = addText(tr("borderlayout-item").arg("North")); item->setStyleClass("green-box"); layout->addWidget(item, WBorderLayout::North); item = addText(tr("borderlayout-item").arg("West")); item->setStyleClass("green-box"); layout->addWidget(item, WBorderLayout::West); item = addText(tr("borderlayout-item").arg("East")); item->setStyleClass("green-box"); layout->addWidget(item, WBorderLayout::East); item = addText(tr("borderlayout-item").arg("South")); item->setStyleClass("green-box"); layout->addWidget(item, WBorderLayout::South); item = addText(tr("borderlayout-item").arg("Center")); item->setStyleClass("green-box"); layout->addWidget(item, WBorderLayout::Center); return result; }
WWidget *StyleLayout::wBoxLayout() { WContainerWidget *result = new WContainerWidget(); topic("WHBoxLayout", "WVBoxLayout", result); addText(tr("layout-WBoxLayout"), result); WContainerWidget *container; WText *item; WHBoxLayout *hbox; WVBoxLayout *vbox; /* * first hbox */ container = new WContainerWidget(result); container->setStyleClass("yellow-box"); hbox = new WHBoxLayout(); container->setLayout(hbox); item = addText(tr("layout-item1")); item->setStyleClass("green-box"); hbox->addWidget(item); item = addText(tr("layout-item2")); item->setStyleClass("blue-box"); hbox->addWidget(item); addText(tr("layout-WBoxLayout-stretch"), result); /* * second hbox */ container = new WContainerWidget(result); container->setStyleClass("yellow-box"); hbox = new WHBoxLayout(); container->setLayout(hbox); item = addText(tr("layout-item1")); item->setStyleClass("green-box"); hbox->addWidget(item, 1); item = addText(tr("layout-item2")); item->setStyleClass("blue-box"); hbox->addWidget(item); addText(tr("layout-WBoxLayout-vbox"), result); /* * first vbox */ container = new WContainerWidget(result); container->resize(150, 150); container->setStyleClass("yellow-box centered"); vbox = new WVBoxLayout(); container->setLayout(vbox); item = addText(tr("layout-item1")); item->setStyleClass("green-box"); vbox->addWidget(item); item = addText(tr("layout-item2")); item->setStyleClass("blue-box"); vbox->addWidget(item); /* * second vbox */ container = new WContainerWidget(result); container->resize(150, 150); container->setStyleClass("yellow-box centered"); vbox = new WVBoxLayout(); container->setLayout(vbox); item = addText(tr("layout-item1")); item->setStyleClass("green-box"); vbox->addWidget(item, 1); item = addText(tr("layout-item2")); item->setStyleClass("blue-box"); vbox->addWidget(item); addText(tr("layout-WBoxLayout-nested"), result); /* * nested boxes */ container = new WContainerWidget(result); container->resize(200, 200); container->setStyleClass("yellow-box centered"); vbox = new WVBoxLayout(); container->setLayout(vbox); item = addText(tr("layout-item1")); item->setStyleClass("green-box"); vbox->addWidget(item, 1); hbox = new WHBoxLayout(); vbox->addLayout(hbox); item = addText(tr("layout-item2")); item->setStyleClass("green-box"); hbox->addWidget(item); item = addText(tr("layout-item3")); item->setStyleClass("blue-box"); hbox->addWidget(item); return result; }
/// // Constructor // ResultsPage::ResultsPage(const MRIBrowser *mriBrowser, WContainerWidget *parent) : mMRIBrowser(mriBrowser), WContainerWidget(parent) { setStyleClass("tabdiv"); mResultsTable = new ResultsTable(); WContainerWidget *browserContainer = new WContainerWidget(); WContainerWidget *resultsContainer = new WContainerWidget; WText *showText = new WText("Show Results by User:"******"<user>"); mUserComboBox->addItem("All"); mSearchLineEdit = new WLineEdit(""); mSearchLineEdit->setMinimumSize(150, WLength::Auto); mSearchLineEdit->resize(150, WLength::Auto); mSearchPushButton = new WPushButton("GO"); WPushButton *clearButton = new WPushButton("Clear"); WPushButton *refreshButton = new WPushButton("Refresh"); userBox->addWidget(new WText("Search:"), 0, 2, AlignRight | AlignMiddle); userBox->addWidget(mSearchLineEdit, 0, 3, AlignLeft| AlignMiddle); userBox->addWidget(mSearchPushButton, 0, 4, AlignLeft | AlignMiddle); userBox->addWidget(clearButton, 0, 5, AlignLeft | AlignMiddle); userBox->addWidget(refreshButton, 0, 6, AlignRight | AlignMiddle); userBox->setColumnStretch(2, 1); userBox->setColumnStretch(6, 1); userBox->setColumnStretch(7, 3); mPipelineArgTable = new PipelineArgTable(); mPipelineArgTable->resize(WLength::Auto, 150); mPipelineArgTable->setMinimumSize(WLength::Auto, WLength(150, WLength::Pixel)); mPipelineArgTable->setMaximumSize(WLength::Auto, WLength(150, WLength::Pixel)); mJobStatus = new JobStatus(); WHBoxLayout *bottomLayout = new WHBoxLayout(); bottomLayout->addWidget(mPipelineArgTable); bottomLayout->addWidget(mJobStatus); WGridLayout *browserLayout = new WGridLayout(); browserLayout->addLayout(userBox, 0, 0); browserLayout->addWidget(mResultsTable, 1, 0); browserLayout->addLayout(bottomLayout, 2, 0); browserLayout->setRowStretch(0, -1); browserLayout->setRowStretch(1, 1); browserLayout->setRowStretch(2, -1); browserContainer->setLayout(browserLayout); mBackButton = new WPushButton("<- Back"); WTabWidget *tabWidget = new WTabWidget(); tabWidget->setStyleClass("toptabdiv"); mMonitorLogTab = new MonitorLogTab(mriBrowser); mMonitorResultsTab = new MonitorResultsTab(mriBrowser); tabWidget->addTab(mMonitorResultsTab, "Results"); tabWidget->addTab(mMonitorLogTab, "Logs"); WGridLayout *resultsLayout = new WGridLayout(); resultsLayout->addWidget(mBackButton, 0, 0, AlignLeft | AlignMiddle); resultsLayout->addWidget(tabWidget, 1, 0); resultsLayout->setRowStretch(0, -1); resultsLayout->setRowStretch(1, 1); resultsContainer->setLayout(resultsLayout); mStackedWidget = new WStackedWidget(); mStackedWidget->addWidget(browserContainer); mStackedWidget->addWidget(resultsContainer); WGridLayout *layout = new WGridLayout(); layout->addWidget(mStackedWidget, 0, 0); layout->setRowStretch(0, -1); setLayout(layout); mUserComboBox->activated().connect(SLOT(this, ResultsPage::userChanged)); mSearchPushButton->clicked().connect(SLOT(this, ResultsPage::searchPushed)); clearButton->clicked().connect(SLOT(this, ResultsPage::clearPushed)); mResultsTable->resultSelected().connect(SLOT(this, ResultsPage::resultSelected)); mResultsTable->resultClicked().connect(SLOT(this, ResultsPage::resultClicked)); mBackButton->clicked().connect(SLOT(this, ResultsPage::backPushed)); refreshButton->clicked().connect(SLOT(this, ResultsPage::refreshClicked)); // All items in the tabbed widget need to be resized to 100% to // fill the contents. This trick came from the Wt WTabWidget // documentation and took me a good half a day to figure out. mMonitorLogTab->resize(WLength(100, WLength::Percentage), WLength(100, WLength::Percentage)); mMonitorResultsTab->resize(WLength(100, WLength::Percentage), WLength(100, WLength::Percentage)); }
/*! \brief Constructor. */ GitViewApplication(const WEnvironment& env) : WApplication(env) { useStyleSheet("gitview.css"); setTitle("Git model example"); const char *gitRepo = getenv("GITVIEW_REPOSITORY_PATH"); WGridLayout *grid = new WGridLayout(); grid->addWidget(new WText("Git repository path:"), 0, 0); grid->addWidget(repositoryEdit_ = new WLineEdit(gitRepo ? gitRepo : "") , 0, 1, AlignLeft); grid->addWidget(repositoryError_ = new WText(), 0, 2); grid->addWidget(new WText("Revision:"), 1, 0); grid->addWidget(revisionEdit_ = new WLineEdit("master"), 1, 1, AlignLeft); grid->addWidget(revisionError_ = new WText(), 1, 2); repositoryEdit_->setTextSize(30); revisionEdit_->setTextSize(20); repositoryError_->setStyleClass("error-msg"); revisionError_->setStyleClass("error-msg"); repositoryEdit_->enterPressed() .connect(this, &GitViewApplication::loadGitModel); revisionEdit_->enterPressed() .connect(this, &GitViewApplication::loadGitModel); WPushButton *b = new WPushButton("Load"); b->clicked().connect(this, &GitViewApplication::loadGitModel); grid->addWidget(b, 2, 0, AlignLeft); gitView_ = new WTreeView(); gitView_->resize(300, WLength::Auto); gitView_->setSortingEnabled(false); gitView_->setModel(gitModel_ = new GitModel(this)); gitView_->setSelectionMode(SingleSelection); gitView_->selectionChanged().connect(this, &GitViewApplication::showFile); sourceView_ = new SourceView(DisplayRole, GitModel::ContentsRole, GitModel::FilePathRole); sourceView_->setStyleClass("source-view"); if (environment().javaScript()) { /* * We have JavaScript: We can use layout managers so everything will * always fit nicely in the window. */ WVBoxLayout *topLayout = new WVBoxLayout(); topLayout->addLayout(grid, 0, AlignTop | AlignLeft); WHBoxLayout *gitLayout = new WHBoxLayout(); gitLayout->setLayoutHint("table-layout", "fixed"); gitLayout->addWidget(gitView_, 0); gitLayout->addWidget(sourceView_, 1); topLayout->addLayout(gitLayout, 1); root()->setLayout(topLayout); root()->setStyleClass("maindiv"); } else { /* * No JavaScript: let's make the best of the situation using regular * CSS-based layout */ root()->setStyleClass("maindiv"); WContainerWidget *top = new WContainerWidget(); top->setLayout(grid, AlignTop | AlignLeft); root()->addWidget(top); root()->addWidget(gitView_); gitView_->setFloatSide(Left); gitView_->setMargin(6); root()->addWidget(sourceView_); sourceView_->setMargin(6); } }
/// // Create the user interface widgets // void PipelineApp::createUI() { WApplication::instance()->log("debug") << "createUI: START"; WContainerWidget *w = root(); w->setStyleClass("maindiv"); // Create the top tab WTabWidget *topTab = new WTabWidget(); topTab->setStyleClass("toptabdiv"); mSubjectPage = new SubjectPage(); //mResultsPage = new ResultsPage(mSubjectPage->getMRIBrowser()); //mMonitorPage = new MonitorPage(mSubjectPage->getMRIBrowser()); topTab->addTab(mSubjectPage, "Subjects"); //topTab->addTab(mResultsPage, "Results"); //topTab->addTab(mMonitorPage, "Monitor Cluster"); //topTab->addTab(new WText(w->tr("cluster-load-page"), XHTMLUnsafeText), "Cluster Load"); //topTab->currentChanged().connect(this, &PipelineApp::mainTabChanged); WGridLayout *layout = new WGridLayout(); layout->addWidget(topTab, 0, 0); layout->addWidget(new WLabel(w->tr("file-bug")), 2, 0, Wt::AlignCenter); layout->setRowStretch(0, 1); mMainSiteWidget = new WContainerWidget(); //mProjectPage = new ProjectPage(); // All items in the tabbed widget need to be resized to 100% to // fill the contents. This trick came from the Wt WTabWidget // documentation and took me a good half a day to figure out. mSubjectPage->resize(WLength(100.0, WLength::Percentage), WLength(100.0, WLength::Percentage)); //mResultsPage->resize(WLength(100.0, WLength::Percentage), // WLength(100.0, WLength::Percentage)); //mMonitorPage->resize(WLength(100.0, WLength::Percentage), // WLength(100.0, WLength::Percentage)); mMainSiteWidget->setLayout(layout); //mLoginPage = new LoginPage(); //mLoginPage->userLoggedIn().connect(this, &PipelineApp::userLoggedIn); //mProjectPage->projectChosen().connect(this, &PipelineApp::projectChosen); //mProjectPage->logoutUser().connect(this, &PipelineApp::logout); //changeProjectButton->clicked().connect(this, &PipelineApp::goHome); //logoutButton->clicked().connect(this, &PipelineApp::logout); //mStackedWidget = new WStackedWidget(); //mStackedWidget->addWidget(mLoginPage); //mStackedWidget->addWidget(mainSite); //mStackedWidget->setCurrentIndex(0); WVBoxLayout *primaryLayout = new WVBoxLayout(); primaryLayout->addWidget(mMainSiteWidget); w->setLayout(primaryLayout); requestTooLarge().connect(this, &PipelineApp::largeRequest); setTitle(w->tr("page-title")); WApplication::instance()->log("debug") << "createUI: FINISH"; // See if the user is already logged in via a cookie // if (mLoginPage->getLoggedIn()) // { // userLoggedIn(mLoginPage->getCurrentUserName(), mLoginPage->getCurrentEmail()); // } }
/// // Constructor // LoginPage::LoginPage(WContainerWidget *parent) : WContainerWidget(parent), mLoggedIn(false), mLogoutRequested(false) { setStyleClass("maindiv"); WLabel* loginText = new WLabel("Enter username and password:"******""); WText *userNameText = new WText("User Name:"); mPasswordLineEdit = new WLineEdit(""); mPasswordLineEdit->setEchoMode(WLineEdit::Password); WText *passwordText = new WText("Password:"******"Login"); WGridLayout *loginLayout = new WGridLayout(); loginLayout->addWidget(userNameText, 0, 0, AlignRight); loginLayout->addWidget(mUserNameLineEdit, 0, 1, AlignLeft); loginLayout->addWidget(passwordText, 1, 0, AlignRight); loginLayout->addWidget(mPasswordLineEdit, 1, 1, AlignLeft); WGridLayout *textLayout = new WGridLayout(); textLayout->addWidget(loginText, 0, 0, AlignCenter); WGridLayout *buttonLayout = new WGridLayout(); buttonLayout->addWidget(loginButton, 0, 0, AlignCenter | AlignMiddle); WImage *chbLogo = new WImage(tr("logo-image").toUTF8()); WGridLayout *chbLogoLayout = new WGridLayout(); chbLogoLayout->addWidget(chbLogo, 0, 0, AlignCenter); WLabel *titleLabel = new WLabel(tr("page-top-text")); titleLabel->setStyleClass("logintitlediv"); WGridLayout *titleLayout = new WGridLayout(); titleLayout->addWidget(titleLabel, 0, 0, AlignCenter); WContainerWidget *loginContainer = new WContainerWidget(); loginContainer->setStyleClass("logindiv"); mFailureLabel = new WLabel("Invalid username and/or password. Try again."); mFailureLabel->setStyleClass("redtext"); WVBoxLayout *layout = new WVBoxLayout(); layout->addLayout(chbLogoLayout, AlignCenter); layout->addLayout(titleLayout, AlignCenter); layout->addLayout(textLayout, AlignCenter); layout->addLayout(loginLayout); layout->addWidget(mFailureLabel); layout->addLayout(buttonLayout, AlignCenter | AlignMiddle); mFailureLabel->hide(); loginContainer->setLayout(layout, AlignTop); WVBoxLayout *pageLayout = new WVBoxLayout(); pageLayout->addWidget(loginContainer); pageLayout->addWidget(new WText(tr("login-page-text"))); setLayout(pageLayout, AlignMiddle | AlignCenter); loginButton->clicked().connect(SLOT(this, LoginPage::login)); mPasswordLineEdit->enterPressed().connect(SLOT(this, LoginPage::login)); resetAll(); }
DetailManipulation::DetailManipulation(bool enhance, WContainerWidget *parent) : WContainerWidget(parent), onlySmooth(!enhance) { resize(WLength::Auto, WLength::Auto); // Image bar prepareInputImages(); WContainerWidget *imageBar = new WContainerWidget; WVBoxLayout *imageBarLayout = new WVBoxLayout(); for (size_t i = 0; i < inputImages.size(); ++i) { WImage *img = inputImages[i]->getOriginalImage(); img->setStyleClass("image_button"); img->resize(160, 120); img->setAttributeValue("onMouseOver", "this.width=192; this.height=144;"); img->setAttributeValue("onMouseOut", "this.width=160; this.height=120;"); img->clicked().connect( boost::bind(&DetailManipulation::selectImage, this, i ) ); imageBarLayout->addWidget(img); } imageBar->resize(200, WLength::Auto); imageBar->setLayout(imageBarLayout); selectedImageId = 0; // Main component imageTab = new WTabWidget(); imageTab->addTab(inputImages[selectedImageId]->getOriginalImage(), "Original"); if (onlySmooth) { imageTab->addTab(new WImage(smoothedResult[selectedImageId].second), smoothedResult[selectedImageId].first); } else { imageTab->addTab(new WImage(enhancedResult[selectedImageId].second), enhancedResult[selectedImageId].first); } imageTab->resize(600, WLength::Auto); WGridLayout *controllerLayout = new WGridLayout(); WSlider *rSlider = new WSlider(Wt::Vertical); rSlider->setRange(SLIDER_MINIMUM, SLIDER_MAXIMUM); rSlider->setTickPosition(Wt::WSlider::TicksBothSides); WDoubleSpinBox *rSpinBox = new WDoubleSpinBox(); rSpinBox->setMinimum(R_MINIMUM); rSpinBox->setMaximum(R_MAXIMUM); rSlider->sliderMoved().connect( boost::bind(&DetailManipulation::changeDoubleSpinBoxValue, this, rSpinBox, true, _1) ); rSpinBox->valueChanged().connect( boost::bind(&DetailManipulation::changeSliderValue, this, rSlider, 1.f/(R_MAXIMUM-R_MINIMUM), _1) ); controllerLayout->addWidget(rSlider, 2, 0, 6, 1); controllerLayout->addWidget(rSpinBox, 9, 0); controllerLayout->addWidget(new WText("radius"), 10, 0); WSlider *epsSlider = new WSlider(Wt::Vertical); epsSlider->setMinimum(SLIDER_MINIMUM); epsSlider->setMaximum(SLIDER_MAXIMUM); epsSlider->setRange(SLIDER_MINIMUM, SLIDER_MAXIMUM); epsSlider->setTickPosition(WSlider::TicksBothSides); WDoubleSpinBox *epsSpinBox = new WDoubleSpinBox(); epsSpinBox->setMinimum(EPS_MINIMUM); epsSpinBox->setMaximum(EPS_MAXIMUM); epsSlider->sliderMoved().connect( boost::bind(&DetailManipulation::changeDoubleSpinBoxValue, this, epsSpinBox, false, _1) ); epsSpinBox->valueChanged().connect( boost::bind(&DetailManipulation::changeSliderValue, this, epsSlider, 1.f/(EPS_MAXIMUM-EPS_MINIMUM), _1) ); controllerLayout->addWidget(epsSlider, 2, 1, 6, 1); controllerLayout->addWidget(epsSpinBox, 9, 1); controllerLayout->addWidget(new WText("epsilon"), 10, 1); WPushButton *apply = new WPushButton("Apply"); apply->clicked().connect( boost::bind(&DetailManipulation::applyEnhancement, this, rSpinBox, epsSpinBox ) ); controllerLayout->addWidget(apply, 1, 0, 1, 2); WContainerWidget *controller = new WContainerWidget(); controller->resize(120, WLength::Auto); controller->setLayout(controllerLayout); WBorderLayout *mainLayout = new WBorderLayout(this); mainLayout->addWidget(imageBar, WBorderLayout::West); mainLayout->addWidget(imageTab, WBorderLayout::Center); mainLayout->addWidget(controller, WBorderLayout::East); //setLayout(mainLayout, Wt::AlignTop | Wt::AlignJustify); /* doJavaScript( "(function () { \ var imageTags = document.getElementsByClassName(\"image_button\"); \ for (var i=0; image=imageTags[i]; ++i) { \ if (image.width>200 && image.height>0) { \ image.width = 192; \ } \ }\ })();" );*/ }
Example::Example(WContainerWidget* p): WContainerWidget(p) { WContainerWidget* cw = new WContainerWidget(this); WHBoxLayout* hl = new WHBoxLayout(); mv_ = new MapViewer(); mv_->resize(400, 300); mv_->set_center(Coordinate(54.8, 20.25), 9); mv_->clicked().connect(this, &Example::get_pos); hl->addWidget(mv_, 0, AlignTop); // WPushButton* to_left = new Wt::WPushButton("<"); WPushButton* to_right = new Wt::WPushButton(">"); to_left->clicked().connect(this, &Example::left_shift); to_right->clicked().connect(this, &Example::right_shift); WPushButton* to_top = new Wt::WPushButton("^"); WPushButton* to_bottom = new Wt::WPushButton("v"); to_top->clicked().connect(this, &Example::top_shift); to_bottom->clicked().connect(this, &Example::bottom_shift); // WPushButton* zoom_in = new Wt::WPushButton("zoom In"); WPushButton* zoom_out = new Wt::WPushButton("zoom Out"); zoom_in->clicked().connect(mv_, &MapViewer::zoom_in); zoom_out->clicked().connect(mv_, &MapViewer::zoom_out); // WContainerWidget* cw_of_zoom_to = new Wt::WContainerWidget(); WLabel* label_of_zoom_to = new Wt::WLabel("set zoom:", cw_of_zoom_to); edit_of_zoom_to_ = new WLineEdit("9", cw_of_zoom_to); edit_of_zoom_to_->resize(30, WLength()); label_of_zoom_to->setBuddy(edit_of_zoom_to_); edit_of_zoom_to_->setValidator(new WIntValidator(1, 17)); label_of_zoom_to->setBuddy(edit_of_zoom_to_); WHBoxLayout* menu_hl_of_zoom_to = new WHBoxLayout(); menu_hl_of_zoom_to->addWidget(cw_of_zoom_to, 0, AlignJustify); WContainerWidget* zoom_to_b_cw = new WContainerWidget(); WPushButton* button_of_zoom_to = new Wt::WPushButton("OK", zoom_to_b_cw); button_of_zoom_to->clicked().connect(this, &Example::set_zoom_to); menu_hl_of_zoom_to->addWidget(zoom_to_b_cw, AlignJustify); // WContainerWidget* cw_of_pan_to_lng = new Wt::WContainerWidget(); WContainerWidget* cw_of_pan_to_lat = new Wt::WContainerWidget(); WLabel* label_of_pan_to_lng = new Wt::WLabel("set lng:", cw_of_pan_to_lng); WLabel* label_of_pan_to_lat = new Wt::WLabel("set lat:", cw_of_pan_to_lat); edit_of_pan_to_lng_ = new WLineEdit("20.4", cw_of_pan_to_lng); edit_of_pan_to_lng_->resize(50, WLength()); label_of_pan_to_lng->setBuddy(edit_of_pan_to_lng_); edit_of_pan_to_lng_->setValidator(new WDoubleValidator(-180.0, 180.0)); label_of_pan_to_lng->setBuddy(edit_of_pan_to_lng_); edit_of_pan_to_lat_ = new WLineEdit("54.7167", cw_of_pan_to_lat); edit_of_pan_to_lat_->resize(50, WLength()); label_of_pan_to_lat->setBuddy(edit_of_pan_to_lat_); edit_of_pan_to_lat_->setValidator(new WDoubleValidator(-90.0, 90.0)); label_of_pan_to_lat->setBuddy(edit_of_pan_to_lat_); WHBoxLayout* menu_hl_of_pan_to = new WHBoxLayout(); menu_hl_of_pan_to->addWidget(cw_of_pan_to_lng, 0, AlignTop); menu_hl_of_pan_to->addWidget(cw_of_pan_to_lat, 0, AlignTop); WContainerWidget* pan_to_b_cw = new WContainerWidget(); WPushButton* button_of_pan_to = new Wt::WPushButton("OK", pan_to_b_cw); button_of_pan_to->clicked().connect(this, &Example::set_pan_to); menu_hl_of_pan_to->addWidget(pan_to_b_cw, AlignTop); // click_pos_ = new WText(); click_search_ = new WText(); time_zone_ = new WText(); // WVBoxLayout* vl_menu = new WVBoxLayout(); WHBoxLayout* hl_menu_zooms = new WHBoxLayout(); hl_menu_zooms->addWidget(zoom_in, 0, AlignTop); hl_menu_zooms->addWidget(zoom_out, 0, AlignTop); WGridLayout* shift_hl_menu = new WGridLayout(); shift_hl_menu->addWidget(to_top, 0, 1, AlignTop); shift_hl_menu->addWidget(to_left, 1, 0, AlignTop); shift_hl_menu->addWidget(to_right, 1, 2, AlignTop); shift_hl_menu->addWidget(to_bottom, 2, 1, AlignTop); // WVBoxLayout* s_vl = new WVBoxLayout(); WHBoxLayout* s_hl = new WHBoxLayout(); WContainerWidget* s_cw = new WContainerWidget(); s_cw->resize(220, 300); s_cw->setHidden(true); wApp->styleSheet().addRule(".mvSearchNode", "background-color:#e1d0d0;"); wApp->styleSheet().addRule(".mvSearchText", "font-size:12px;"); WContainerWidget* s_e_cw = new WContainerWidget(); WLineEdit* s_edit = new WLineEdit("search", s_e_cw); s_edit->enterPressed().connect(boost::bind(&Example::search_pr, this, s_edit)); WContainerWidget* s_b_cw = new WContainerWidget(); s_b_cw->setContentAlignment(AlignLeft); WPushButton* s_button = new WPushButton("OK", s_b_cw); s_button->clicked().connect(boost::bind(&Example::search_pr, this, s_edit)); s_hl->addWidget(s_e_cw, 0, AlignRight); s_hl->addWidget(s_b_cw, 0, AlignLeft); s_vl->addLayout(s_hl, 0, AlignTop); s_vl->addWidget(s_cw, 0, AlignTop); // mv_->found().connect(boost::bind(&Example::search_presenting, this, s_cw, _1)); // vl_menu->addLayout(shift_hl_menu, 0, AlignTop); vl_menu->addLayout(hl_menu_zooms, 0, AlignTop); vl_menu->addLayout(menu_hl_of_zoom_to, 0, AlignJustify); vl_menu->addLayout(menu_hl_of_pan_to, 0, AlignTop); vl_menu->addWidget(click_pos_, 0, AlignTop); vl_menu->addWidget(click_search_, 0, AlignTop); vl_menu->addWidget(time_zone_, 0, AlignTop); hl->addLayout(vl_menu, 0, AlignTop); hl->addLayout(s_vl, 0, AlignTop); cw->setLayout(hl, AlignTop); mv_->set_search_panel(); mv_->chosen().connect(this, &Example::get_search); MapViewer::GeoNodes marker_nodes; marker_nodes.push_back(std::make_pair(Coordinate(55.0151, 20.6122), "")); marker_nodes.push_back(std::make_pair(Coordinate(54.8, 20.25), "")); mv_->add_markers(marker_nodes); }