WImage *WItemDelegate::iconWidget(WidgetRef& w, bool autoCreate) { WImage *image = dynamic_cast<WImage *>(w.w->find("i")); if (image || !autoCreate) return image; WContainerWidget *wc = dynamic_cast<WContainerWidget *>(w.w->find("a")); if (!wc) wc = dynamic_cast<WContainerWidget *>(w.w->find("o")); if (!wc) { wc = new WContainerWidget(); wc->setObjectName("o"); wc->addWidget(w.w); w.w = wc; } image = new WImage(); image->setObjectName("i"); image->setStyleClass("icon"); wc->insertWidget(wc->count() - 1, image); // IE does not want to center vertically without this: if (wApp->environment().agentIsIE()) { WImage *inv = new WImage(wApp->onePixelGifUrl()); inv->setStyleClass("rh w0 icon"); inv->resize(0, WLength::Auto); wc->insertWidget(wc->count() -1, inv); } return image; }
void CommentView::reply() { dbo::Transaction t(session_); WContainerWidget *c = resolve<WContainerWidget *>("children"); c->insertWidget(0, new CommentView(session_, comment_.id())); t.commit(); }
IndexCheckBox *WItemDelegate::checkBox(WidgetRef& w, const WModelIndex& index, bool autoCreate, bool triState) { IndexCheckBox *checkBox = dynamic_cast<IndexCheckBox *>(w.w->find("c")); if (!checkBox) { if (autoCreate) { IndexCheckBox * const result = checkBox = new IndexCheckBox(index); checkBox->setObjectName("c"); checkBox->clicked().preventPropagation(); WContainerWidget *wc = dynamic_cast<WContainerWidget *>(w.w->find("o")); if (!wc) { wc = new WContainerWidget(); wc->setObjectName("o"); w.w->setInline(true); w.w->setStyleClass(WString::Empty); /* We first remove to avoid reparenting warnings */ WContainerWidget *p = dynamic_cast<WContainerWidget *>(w.w->parent()); if (p) p->removeWidget(w.w); wc->addWidget(w.w); w.w = wc; } wc->insertWidget(0, checkBox); checkBox->changed().connect (boost::bind(&WItemDelegate::onCheckedChange, this, result)); } else return 0; } checkBox->setTristate(triState); return checkBox; }
WAnchor *WItemDelegate::anchorWidget(WidgetRef& w) { WAnchor *anchor = dynamic_cast<WAnchor *>(w.w->find("a")); if (anchor) return anchor; anchor = new WAnchor(); anchor->setObjectName("a"); WContainerWidget *wc = dynamic_cast<WContainerWidget *>(w.w->find("o")); if (wc) { /* * Convert (2) -> (4) */ int firstToMove = 0; WCheckBox *cb = dynamic_cast<WCheckBox *>(wc->widget(0)); if (cb) firstToMove = 1; wc->insertWidget(firstToMove, anchor); while (wc->count() > firstToMove + 1) { WWidget *c = wc->widget(firstToMove + 1); wc->removeWidget(c); anchor->addWidget(c); } } else { /* * Convert (1) -> (3) */ anchor->addWidget(w.w); w.w = anchor; } return anchor; }