Skip to content

Commit 9515f28

Browse files
committed
Several changes:
- WTableView: - silence -Wimplicit-fallthrough warning - fix row deletion - AuthWidget: - letUpdatePassword: reinstate the dialog self-deletion for the default implementation (with dialog) - WWebWidget: - Do not emit childrenChanged when being deleted - Dbo tutorial: fixed code example error - WLocale: We don't plan to do that anymore
1 parent 5919cd9 commit 9515f28

File tree

6 files changed

+63
-27
lines changed

6 files changed

+63
-27
lines changed

doc/tutorial/dbo.doc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ void run()
133133
/*
134134
* Setup a session, would typically be done once at application startup.
135135
*/
136-
std::unique_ptr<dbo::backend::Sqlite3> sqlite3{"blog.db"};
136+
std::unique_ptr<dbo::backend::Sqlite3> sqlite3{new dbo::backend::Sqlite3("blog.db")};
137137
dbo::Session session;
138138
session.setConnection(std::move(sqlite3));
139139

src/Wt/Auth/AuthWidget.C

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,17 @@ std::unique_ptr<WWidget> AuthWidget::createLostPasswordView()
213213

214214
void AuthWidget::letUpdatePassword(const User& user, bool promptPassword)
215215
{
216-
showDialog(tr("Wt.Auth.updatepassword"),
217-
createUpdatePasswordView(user, promptPassword));
216+
std::unique_ptr<WWidget> updatePasswordView = createUpdatePasswordView(user, promptPassword);
217+
218+
UpdatePasswordWidget *defaultUpdatePasswordWidget =
219+
dynamic_cast<UpdatePasswordWidget*>(updatePasswordView.get());
220+
221+
showDialog(tr("Wt.Auth.updatepassword"), std::move(updatePasswordView));
222+
223+
if (defaultUpdatePasswordWidget) {
224+
defaultUpdatePasswordWidget->updated().connect(this, &AuthWidget::closeDialog);
225+
defaultUpdatePasswordWidget->canceled().connect(this, &AuthWidget::closeDialog);
226+
}
218227
}
219228

220229
std::unique_ptr<WWidget> AuthWidget

src/Wt/WLocale.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@ namespace Wt {
2828
* from the browser, if possible, and message resources are deduced
2929
* based on that. All other parameters have to be configured.
3030
*
31-
* We plan to leverage the C++ std::locale to deduce these parameters,
32-
* but this is currently not implemented.
33-
*
3431
* \sa WApplication::locale()
3532
*/
3633
class WT_API WLocale

src/Wt/WTableView.C

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -923,6 +923,7 @@ void WTableView::render(WFlags<RenderFlag> flags)
923923
break;
924924
case RenderState::NeedUpdateModelIndexes:
925925
updateModelIndexes();
926+
/* fallthrough */
926927
case RenderState::NeedAdjustViewPort:
927928
adjustToViewport();
928929
break;
@@ -1495,6 +1496,18 @@ void WTableView::modelRowsInserted(const WModelIndex& parent,
14951496
adjustSize();
14961497
}
14971498

1499+
namespace {
1500+
1501+
int calcOverlap(int start1, int end1,
1502+
int start2, int end2)
1503+
{
1504+
int s = std::max(start1, start2);
1505+
int e = std::min(end1, end2);
1506+
return std::max(0, e - s);
1507+
}
1508+
1509+
}
1510+
14981511
void WTableView::modelRowsAboutToBeRemoved(const WModelIndex& parent,
14991512
int start, int end)
15001513
{
@@ -1508,9 +1521,32 @@ void WTableView::modelRowsAboutToBeRemoved(const WModelIndex& parent,
15081521
}
15091522

15101523
shiftModelIndexRows(start, -(end - start + 1));
1524+
1525+
int overlapTop = calcOverlap(0, spannerCount(Side::Top),
1526+
start, end + 1);
1527+
int overlapMiddle = calcOverlap(firstRow(), lastRow() + 1,
1528+
start, end + 1);
1529+
1530+
if (overlapMiddle > 0) {
1531+
int first = std::min(start, firstRow());
1532+
1533+
for (int i = 0; i < renderedColumnsCount(); ++i) {
1534+
ColumnWidget *column = columnContainer(i);
1535+
for (int j = 0; j < overlapMiddle; ++j)
1536+
column->widget(first)->removeFromParent();
1537+
}
1538+
1539+
setSpannerCount(Side::Bottom, spannerCount(Side::Bottom) + overlapMiddle);
1540+
}
1541+
1542+
if (overlapTop > 0) {
1543+
setSpannerCount(Side::Top, spannerCount(Side::Top) - overlapTop);
1544+
setSpannerCount(Side::Bottom, spannerCount(Side::Bottom) + overlapTop);
1545+
}
15111546
}
15121547

1513-
void WTableView::modelRowsRemoved(const WModelIndex& parent, int start, int end)
1548+
void WTableView::modelRowsRemoved(const WModelIndex& parent,
1549+
int start, int end)
15141550
{
15151551
if (parent != rootIndex())
15161552
return;
@@ -1519,29 +1555,14 @@ void WTableView::modelRowsRemoved(const WModelIndex& parent, int start, int end)
15191555
canvas_->setHeight(canvasHeight());
15201556
headerColumnsCanvas_->setHeight(canvasHeight());
15211557
scheduleRerender(RenderState::NeedAdjustViewPort);
1522-
1523-
if (start >= firstRow() && start <= lastRow()) {
1524-
int toRemove = std::min(lastRow(), end) - start + 1;
1525-
int first = start - firstRow();
1526-
1527-
for (int i = 0; i < renderedColumnsCount(); ++i) {
1528-
ColumnWidget *column = columnContainer(i);
1529-
for (int j = 0; j < toRemove; ++j)
1530-
column->widget(first)->removeFromParent();
1531-
}
1532-
1533-
setSpannerCount(Side::Bottom, spannerCount(Side::Bottom) + toRemove);
1534-
}
15351558
}
15361559

1537-
if (start <= lastRow())
1538-
scheduleRerender(RenderState::NeedUpdateModelIndexes);
1560+
scheduleRerender(RenderState::NeedUpdateModelIndexes);
15391561

15401562
computeRenderedArea();
15411563
adjustSize();
15421564
}
15431565

1544-
15451566
void WTableView::modelDataChanged(const WModelIndex& topLeft,
15461567
const WModelIndex& bottomRight)
15471568
{
@@ -1735,6 +1756,8 @@ void WTableView::adjustToViewport()
17351756
{
17361757
assert(ajaxMode());
17371758

1759+
computeRenderedArea();
1760+
17381761
if (renderedFirstRow_ != firstRow() ||
17391762
renderedLastRow_ != lastRow() ||
17401763
renderedFirstColumn_ != firstColumn()||

src/Wt/WWebWidget.C

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,7 @@ void WWebWidget::widgetRemoved(WWidget *child, bool renderRemove)
343343
WApplication::instance()
344344
->session()->renderer().updateFormObjects(child->webWidget(), true);
345345

346-
if (otherImpl_)
347-
otherImpl_->childrenChanged_.emit();
346+
emitChildrenChanged();
348347
}
349348

350349
Signal<>& WWebWidget::childrenChanged()
@@ -1197,8 +1196,7 @@ void WWebWidget::widgetAdded(WWidget *child)
11971196
transientImpl_.reset(new TransientImpl());
11981197
++transientImpl_->addedChildren_;
11991198

1200-
if (otherImpl_)
1201-
otherImpl_->childrenChanged_.emit();
1199+
emitChildrenChanged();
12021200
}
12031201

12041202
std::vector<WWidget *> WWebWidget::children() const
@@ -2789,4 +2787,11 @@ void WWebWidget::setBaseZIndex(int zIndex)
27892787
layoutImpl_->baseZIndex_ = zIndex;
27902788
}
27912789

2790+
void WWebWidget::emitChildrenChanged()
2791+
{
2792+
if (!flags_.test(BIT_BEING_DELETED) && otherImpl_) {
2793+
otherImpl_->childrenChanged_.emit();
2794+
}
2795+
}
2796+
27922797
}

src/Wt/WWebWidget.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,8 @@ class WT_API WWebWidget : public WWidget
548548

549549
void jsScrollVisibilityChanged(bool visible);
550550

551+
void emitChildrenChanged();
552+
551553
protected:
552554
virtual void setParentWidget(WWidget *parent) override;
553555
void setRendered(bool rendered);

0 commit comments

Comments
 (0)