# HG changeset patch # User Chris Cannam # Date 1306335940 -3600 # Node ID 75003687f3647d6a353b23c9487a2f5065ece7e0 # Parent c3276f8998eee5a1217fc4a2d56b2dbaef3653f7 Better version of ensuring the scene size is properly updated and the detail item made visible diff -r c3276f8998ee -r 75003687f364 src/changesetdetailitem.cpp --- a/src/changesetdetailitem.cpp Wed May 25 15:38:48 2011 +0100 +++ b/src/changesetdetailitem.cpp Wed May 25 16:05:40 2011 +0100 @@ -49,6 +49,19 @@ return QRectF(-10, -10, w + 10, m_doc->size().height() + 10); } +QVariant +ChangesetDetailItem::itemChange(GraphicsItemChange c, const QVariant &v) +{ + if (c == ItemVisibleHasChanged) { + bool visible = v.toBool(); + DEBUG << "ChangesetDetailItem::itemChange: visible = " << visible << endl; + if (visible && scene()) { + ensureVisible(); + } + } + return v; +} + void ChangesetDetailItem::paint(QPainter *paint, const QStyleOptionGraphicsItem *option, diff -r c3276f8998ee -r 75003687f364 src/changesetdetailitem.h --- a/src/changesetdetailitem.h Wed May 25 15:38:48 2011 +0100 +++ b/src/changesetdetailitem.h Wed May 25 16:05:40 2011 +0100 @@ -39,6 +39,8 @@ Changeset *m_changeset; QTextDocument *m_doc; + QVariant itemChange(GraphicsItemChange, const QVariant &); + void makeDocument(); }; diff -r c3276f8998ee -r 75003687f364 src/changesetitem.cpp --- a/src/changesetitem.cpp Wed May 25 15:38:48 2011 +0100 +++ b/src/changesetitem.cpp Wed May 25 16:05:40 2011 +0100 @@ -78,7 +78,6 @@ // y() + 60); m_detail->moveBy(x() + (w + 50) / 2 + 10 + 0.5, y() - (m_detail->boundingRect().height() - h) / 2 + 0.5); - m_detail->ensureVisible(); emit detailShown(); } diff -r c3276f8998ee -r 75003687f364 src/changesetscene.cpp --- a/src/changesetscene.cpp Wed May 25 15:38:48 2011 +0100 +++ b/src/changesetscene.cpp Wed May 25 16:05:40 2011 +0100 @@ -106,17 +106,28 @@ void ChangesetScene::itemAddCompleted() { + connect(this, SIGNAL(changed(const QList &)), + this, SLOT(recalculateSceneRect())); + recalculateSceneRect(); +} + +void +ChangesetScene::recalculateSceneRect() +{ + QRectF existingSr = sceneRect(); + QRectF r = itemsBoundingRect(); float minwidth = 300; //!!! - DEBUG << "ChangesetScene::itemAddCompleted: minwidth = " << minwidth + DEBUG << "ChangesetScene::recalculateSceneRect: minwidth = " << minwidth << ", r = " << r << endl; if (r.width() < minwidth) { float edgediff = (minwidth - r.width()) / 2; r.setLeft(r.left() - edgediff); r.setRight(r.right() + edgediff); } - DEBUG << "ChangesetScene::itemAddCompleted: r now is " << r << endl; - setSceneRect(r); + DEBUG << "ChangesetScene::recalculateSceneRect: r now is " << r << endl; + + setSceneRect(r.united(existingSr)); } void @@ -129,8 +140,6 @@ m_detailShown->hideDetail(); } m_detailShown = csi; - itemAddCompleted(); - csi->ensureVisible(); } void diff -r c3276f8998ee -r 75003687f364 src/changesetscene.h --- a/src/changesetscene.h Wed May 25 15:38:48 2011 +0100 +++ b/src/changesetscene.h Wed May 25 16:05:40 2011 +0100 @@ -71,6 +71,7 @@ private slots: void changesetDetailShown(); void changesetDetailHidden(); + void recalculateSceneRect(); protected: void drawBackground(QPainter *, const QRectF &);