annotate src/changesetscene.cpp @ 571:012ba1b83328

Show cancel button with progress bar only when running an operation that it makes sense to cancel (we don't really want people cancelling e.g. initial folder scan because it would leave things in an inconsistent state)
author Chris Cannam
date Thu, 01 Mar 2012 22:53:54 +0000
parents 533519ebc0cb
children ae67ea0af696
rev   line source
Chris@119 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@119 2
Chris@119 3 /*
Chris@119 4 EasyMercurial
Chris@119 5
Chris@119 6 Based on HgExplorer by Jari Korhonen
Chris@119 7 Copyright (c) 2010 Jari Korhonen
Chris@560 8 Copyright (c) 2012 Chris Cannam
Chris@560 9 Copyright (c) 2012 Queen Mary, University of London
Chris@119 10
Chris@119 11 This program is free software; you can redistribute it and/or
Chris@119 12 modify it under the terms of the GNU General Public License as
Chris@119 13 published by the Free Software Foundation; either version 2 of the
Chris@119 14 License, or (at your option) any later version. See the file
Chris@119 15 COPYING included with this distribution for more information.
Chris@119 16 */
Chris@119 17
Chris@119 18 #include "changesetscene.h"
Chris@119 19 #include "changesetitem.h"
Chris@141 20 #include "uncommitteditem.h"
Chris@397 21 #include "debug.h"
Chris@397 22
Chris@397 23 #include <QPainter>
Chris@397 24
Chris@119 25
Chris@119 26 ChangesetScene::ChangesetScene()
Chris@397 27 // Supply a non-NULL but trivial scene rect to inhibit automatic
Chris@397 28 // updates from QGraphicsScene, because we will set the rect
Chris@397 29 // explicitly in itemAddCompleted
Chris@397 30 : QGraphicsScene(QRectF(0, 0, 1, 1)), m_detailShown(0)
Chris@119 31 {
Chris@119 32 }
Chris@119 33
Chris@119 34 void
Chris@141 35 ChangesetScene::addChangesetItem(ChangesetItem *item)
Chris@141 36 {
Chris@141 37 addItem(item);
Chris@141 38
Chris@141 39 connect(item, SIGNAL(detailShown()),
Chris@141 40 this, SLOT(changesetDetailShown()));
Chris@141 41
Chris@168 42 connect(item, SIGNAL(detailHidden()),
Chris@168 43 this, SLOT(changesetDetailHidden()));
Chris@168 44
Chris@141 45 connect(item, SIGNAL(updateTo(QString)),
Chris@141 46 this, SIGNAL(updateTo(QString)));
Chris@141 47
Chris@141 48 connect(item, SIGNAL(diffToCurrent(QString)),
Chris@141 49 this, SIGNAL(diffToCurrent(QString)));
Chris@141 50
Chris@148 51 connect(item, SIGNAL(diffToParent(QString, QString)),
Chris@148 52 this, SIGNAL(diffToParent(QString, QString)));
Chris@141 53
Chris@289 54 connect(item, SIGNAL(showSummary(Changeset *)),
Chris@289 55 this, SIGNAL(showSummary(Changeset *)));
Chris@288 56
Chris@141 57 connect(item, SIGNAL(mergeFrom(QString)),
Chris@141 58 this, SIGNAL(mergeFrom(QString)));
Chris@141 59
Chris@278 60 connect(item, SIGNAL(newBranch(QString)),
Chris@278 61 this, SIGNAL(newBranch(QString)));
Chris@278 62
Chris@514 63 connect(item, SIGNAL(closeBranch(QString)),
Chris@514 64 this, SIGNAL(closeBranch(QString)));
Chris@514 65
Chris@141 66 connect(item, SIGNAL(tag(QString)),
Chris@141 67 this, SIGNAL(tag(QString)));
Chris@141 68 }
Chris@141 69
Chris@141 70 void
Chris@141 71 ChangesetScene::addUncommittedItem(UncommittedItem *item)
Chris@141 72 {
Chris@141 73 addItem(item);
Chris@141 74
Chris@141 75 connect(item, SIGNAL(commit()),
Chris@141 76 this, SIGNAL(commit()));
Chris@141 77
Chris@141 78 connect(item, SIGNAL(revert()),
Chris@141 79 this, SIGNAL(revert()));
Chris@141 80
Chris@141 81 connect(item, SIGNAL(diff()),
Chris@141 82 this, SIGNAL(diffWorkingFolder()));
Chris@153 83
Chris@168 84 connect(item, SIGNAL(showSummary()),
Chris@168 85 this, SIGNAL(showSummary()));
Chris@168 86
Chris@153 87 connect(item, SIGNAL(showWork()),
Chris@153 88 this, SIGNAL(showWork()));
Chris@311 89
Chris@311 90 connect(item, SIGNAL(newBranch()),
Chris@311 91 this, SIGNAL(newBranch()));
Chris@311 92
Chris@311 93 connect(item, SIGNAL(noBranch()),
Chris@311 94 this, SIGNAL(noBranch()));
Chris@311 95
Chris@141 96 }
Chris@141 97
Chris@141 98 void
Chris@397 99 ChangesetScene::addDateRange(QString label, int minrow, int nrows, bool even)
Chris@168 100 {
Chris@397 101 DateRange dr;
Chris@397 102 dr.label = label;
Chris@397 103 dr.minrow = minrow;
Chris@397 104 dr.nrows = nrows;
Chris@397 105 dr.even = even;
Chris@397 106 m_dateRanges[minrow] = dr;
Chris@397 107 }
Chris@168 108
Chris@397 109 void
Chris@397 110 ChangesetScene::itemAddCompleted()
Chris@397 111 {
Chris@402 112 connect(this, SIGNAL(changed(const QList<QRectF> &)),
Chris@402 113 this, SLOT(recalculateSceneRect()));
Chris@402 114 recalculateSceneRect();
Chris@402 115 }
Chris@402 116
Chris@402 117 void
Chris@402 118 ChangesetScene::recalculateSceneRect()
Chris@402 119 {
Chris@402 120 QRectF existingSr = sceneRect();
Chris@402 121
Chris@397 122 QRectF r = itemsBoundingRect();
Chris@397 123 float minwidth = 300; //!!!
Chris@402 124 DEBUG << "ChangesetScene::recalculateSceneRect: minwidth = " << minwidth
Chris@397 125 << ", r = " << r << endl;
Chris@397 126 if (r.width() < minwidth) {
Chris@397 127 float edgediff = (minwidth - r.width()) / 2;
Chris@397 128 r.setLeft(r.left() - edgediff);
Chris@397 129 r.setRight(r.right() + edgediff);
Chris@397 130 }
Chris@402 131 DEBUG << "ChangesetScene::recalculateSceneRect: r now is " << r << endl;
Chris@402 132
Chris@402 133 setSceneRect(r.united(existingSr));
Chris@168 134 }
Chris@168 135
Chris@168 136 void
Chris@119 137 ChangesetScene::changesetDetailShown()
Chris@119 138 {
Chris@119 139 ChangesetItem *csi = qobject_cast<ChangesetItem *>(sender());
Chris@119 140 if (!csi) return;
Chris@119 141
Chris@124 142 if (m_detailShown && m_detailShown != csi) {
Chris@119 143 m_detailShown->hideDetail();
Chris@119 144 }
Chris@119 145 m_detailShown = csi;
Chris@119 146 }
Chris@119 147
Chris@168 148 void
Chris@168 149 ChangesetScene::changesetDetailHidden()
Chris@168 150 {
Chris@168 151 m_detailShown = 0;
Chris@401 152 itemAddCompleted();
Chris@168 153 }
Chris@168 154
Chris@168 155 void
Chris@397 156 ChangesetScene::drawBackground(QPainter *paint, const QRectF &rect)
Chris@168 157 {
Chris@397 158 QGraphicsScene::drawBackground(paint, rect);
Chris@168 159 }
Chris@397 160
Chris@168 161
Chris@281 162 ChangesetItem *
Chris@281 163 ChangesetScene::getItemById(QString id)
Chris@281 164 {
Chris@281 165 foreach (QGraphicsItem *it, items()) {
Chris@281 166 ChangesetItem *csit = dynamic_cast<ChangesetItem *>(it);
Chris@281 167 if (csit && csit->getId() == id) return csit;
Chris@281 168 }
Chris@288 169 return 0;
Chris@281 170 }
Chris@281 171
Chris@281 172