PopupChatWidget::PopupChatWidget(SimpleChatServer& server, const std::string& id) : SimpleChatWidget(server), missedMessages_(0) { setId(id); if (Wt::WApplication::instance()->environment().agentIsIE()) { if (Wt::WApplication::instance()->environment().agent() == Wt::WEnvironment::IE6) setPositionScheme(Wt::Absolute); else setPositionScheme(Wt::Fixed); } implementJavaScript (&PopupChatWidget::toggleSize, "{" """var s = $('#" + id + "');" """s.toggleClass('chat-maximized chat-minimized');" "}"); online_ = false; minimized_ = true; setStyleClass("chat-widget chat-minimized"); clear(); addWidget(createBar()); updateUsers(); connect(); }
WPopupWidget::WPopupWidget(WWidget *impl, WObject *parent) : WCompositeWidget(), fakeParent_(0), anchorWidget_(0), orientation_(Vertical), transient_(false), autoHideDelay_(0), deleteWhenHidden_(false), hidden_(this), shown_(this), jsHidden_(impl, "hidden"), jsShown_(impl, "shown") { setImplementation(impl); if (parent) parent->addChild(this); WApplication::instance()->addGlobalWidget(this); hide(); setPopup(true); setPositionScheme(Absolute); jsHidden_.connect(this, &WWidget::hide); jsShown_.connect(this, &WWidget::show); }
void WPaintedWidget::createAreaImage() { if (!areaImage_) { areaImage_ = new WImage(wApp->onePixelGifUrl()); areaImage_->setParentWidget(this); if (positionScheme() == Static) setPositionScheme(Relative); areaImage_->setPositionScheme(Absolute); areaImage_->setOffsets(0, Left | Top); areaImage_->setMargin(0, Top); areaImage_->resize(renderWidth_, renderHeight_); areaImageAdded_ = true; } }
void WScrollArea::setWidget(WWidget *widget) { delete widget_; widget_ = widget; widgetChanged_ = true; repaint(RepaintInnerHtml); if (widget) { widget->setParentWidget(this); if (WApplication::instance()->environment().agentIsIElt(9)) { setPositionScheme(Relative); widget->setPositionScheme(Relative); } } }
void WSuggestionPopup::init() { setImplementation(impl_); impl_->setLoadLaterWhenInvisible(false); impl_->setStyleClass("Wt-suggest Wt-outset"); impl_->bindString("shadow-x1-x2", WTemplate::DropShadow_x1_x2); impl_->bindWidget("contents", content_ = new WContainerWidget()); content_->setStyleClass("content"); /* * We use display: none because logically, the popup is visible and * propagates signals */ setAttributeValue("style", "z-index: 10000; display: none"); setPositionScheme(Absolute); setModel(new WStringListModel(this)); filter_.connect(this, &WSuggestionPopup::doFilter); jactivated_.connect(this, &WSuggestionPopup::doActivate); }
WPopupMenu::WPopupMenu() : WCompositeWidget(), parentItem_(0), result_(0), location_(0), aboutToHide_(this), triggered_(this), cancel_(this, "cancel"), recursiveEventLoop_(false), autoHideDelay_(-1) { const char *TEMPLATE = "${shadow-x1-x2}" "${contents}"; setImplementation(impl_ = new WTemplate(WString::fromUTF8(TEMPLATE))); impl_->setLoadLaterWhenInvisible(false); setPositionScheme(Absolute); setStyleClass("Wt-popupmenu Wt-outset"); impl_->bindString("shadow-x1-x2", WTemplate::DropShadow_x1_x2); WContainerWidget *content = new WContainerWidget(); content->setStyleClass("content"); impl_->bindWidget("contents", content); const char *CSS_RULES_NAME = "Wt::WPopupMenu"; WApplication *app = WApplication::instance(); if (!app->styleSheet().isDefined(CSS_RULES_NAME)) app->styleSheet().addRule (".Wt-notselected .Wt-popupmenu", "visibility: hidden;", CSS_RULES_NAME); app->domRoot()->addWidget(this); hide(); }
WTreeTable::WTreeTable() { setImplementation(std::unique_ptr<WContainerWidget>(impl_ = new WContainerWidget())); setStyleClass("Wt-treetable"); setPositionScheme(PositionScheme::Relative); headers_ = impl_->addWidget(cpp14::make_unique<WContainerWidget>()); headers_->setStyleClass("Wt-header header"); /* * spacer for when a scroll bar is visible */ WContainerWidget *spacer = headers_->addWidget(cpp14::make_unique<WContainerWidget>()); spacer->setStyleClass("Wt-sbspacer"); headerContainer_ = headers_->addWidget(cpp14::make_unique<WContainerWidget>()); headerContainer_->setFloatSide(Side::Right); headers_->addWidget(cpp14::make_unique<WText>()); columnWidths_.push_back(WLength::Auto); WContainerWidget *content = impl_->addWidget(cpp14::make_unique<WContainerWidget>()); content->setStyleClass("Wt-content"); if (!wApp->environment().agentIsIE()) content->setOverflow(Overflow::Auto); else content->setAttributeValue ("style", "overflow-y: auto; overflow-x: hidden; zoom: 1"); tree_ = content->addWidget(cpp14::make_unique<WTree>()); tree_->setMargin(3, Side::Top); tree_->resize(WLength(100, LengthUnit::Percentage), WLength::Auto); }
WTreeTable::WTreeTable(WContainerWidget *parent) : WCompositeWidget(parent) { setImplementation(impl_ = new WContainerWidget()); setStyleClass("Wt-treetable"); setPositionScheme(Relative); headers_ = new WContainerWidget(impl_); headers_->setStyleClass("Wt-header header"); /* * spacer for when a scroll bar is visible */ WContainerWidget *spacer = new WContainerWidget(headers_); spacer->setStyleClass("Wt-sbspacer"); headerContainer_ = new WContainerWidget(headers_); headerContainer_->setFloatSide(Right); headers_->addWidget(new WText()); columnWidths_.push_back(WLength::Auto); WContainerWidget *content = new WContainerWidget(impl_); content->setStyleClass("Wt-content"); if (!wApp->environment().agentIsIE()) content->setOverflow(WContainerWidget::OverflowAuto); else content->setAttributeValue ("style", "overflow-y: auto; overflow-x: hidden; zoom: 1"); content->addWidget(tree_ = new WTree()); tree_->setMargin(3, Top); tree_->resize(WLength(100, WLength::Percentage), WLength::Auto); }
void WDialog::positionAt(const WWidget *widget, Orientation orientation) { setPositionScheme(Absolute); setOffsets(0, Left | Top); WCompositeWidget::positionAt(widget, orientation); }
void WDialog::create() { closeIcon_ = 0; footer_ = 0; modal_ = true; resizable_ = false; recursiveEventLoop_ = false; impl_ = dynamic_cast<WTemplate *>(implementation()); const char *CSS_RULES_NAME = "Wt::WDialog"; WApplication *app = WApplication::instance(); if (!app->styleSheet().isDefined(CSS_RULES_NAME)) { /* Needed for the dialog cover */ if (app->environment().agentIsIElt(9)) app->styleSheet().addRule("body", "height: 100%;"); std::string position = app->environment().agent() == WEnvironment::IE6 ? "absolute" : "fixed"; // we use left: 50%, top: 50%, margin hack when JavaScript is not available // see below for an IE workaround app->styleSheet().addRule("div.Wt-dialog", std::string() + (app->environment().ajax() ? "visibility: hidden;" : "") //"position: " + position + ';' + (!app->environment().ajax() ? "left: 50%; top: 50%;" "margin-left: -100px; margin-top: -50px;" : "left: 0px; top: 0px;"), CSS_RULES_NAME); if (app->environment().agent() == WEnvironment::IE6) { app->styleSheet().addRule ("div.Wt-dialogcover", "position: absolute;" "left: expression(" "(ignoreMe2 = document.documentElement.scrollLeft) + 'px' );" "top: expression(" "(ignoreMe = document.documentElement.scrollTop) + 'px' );"); // simulate position: fixed left: 50%; top 50% if (!app->environment().ajax()) app->styleSheet().addRule ("div.Wt-dialog", "position: absolute;" "left: expression(" "(ignoreMe2 = document.documentElement.scrollLeft + " "document.documentElement.clientWidth/2) + 'px' );" "top: expression(" "(ignoreMe = document.documentElement.scrollTop + " "document.documentElement.clientHeight/2) + 'px' );"); } } LOAD_JAVASCRIPT(app, "js/WDialog.js", "WDialog", wtjs1); WContainerWidget *layoutContainer = new WContainerWidget(); layoutContainer->setStyleClass("dialog-layout"); WVBoxLayout *layout = new WVBoxLayout(layoutContainer); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); impl_->bindWidget("layout", layoutContainer); titleBar_ = new WContainerWidget(); app->theme()->apply(this, titleBar_, DialogTitleBarRole); caption_ = new WText(titleBar_); caption_->setInline(false); contents_ = new WContainerWidget(); app->theme()->apply(this, contents_, DialogBodyRole); layout->addWidget(titleBar_); layout->addWidget(contents_, 1); saveCoverState(app, app->dialogCover()); /* * Cannot be done using the CSS stylesheet in case there are * contained elements with setHideWithOffsets() set * * For IE, we cannot set it yet since it will confuse width measurements * to become minimum size instead of (unconstrained) preferred size */ if (app->environment().ajax()) { setAttributeValue("style", "visibility: hidden"); /* * This is needed for animations only, but setting absolute or * fixed positioning confuses layout measurement in IE browsers */ if (!app->environment().agentIsIElt(9)) setPositionScheme(Fixed); } else setPositionScheme(app->environment().agent() == WEnvironment::IE6 ? Absolute : Fixed); }