annotate uncommitteditem.cpp @ 344:ccc55539e066

If the user cancels the first startup dialog (it has no cancel button, but they could use the WM close button), go no further
author Chris Cannam
date Wed, 16 Mar 2011 10:25:06 +0000
parents 4811eb34e819
children
rev   line source
Chris@129 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@129 2
Chris@129 3 /*
Chris@129 4 EasyMercurial
Chris@129 5
Chris@129 6 Based on HgExplorer by Jari Korhonen
Chris@129 7 Copyright (c) 2010 Jari Korhonen
Chris@244 8 Copyright (c) 2011 Chris Cannam
Chris@244 9 Copyright (c) 2011 Queen Mary, University of London
Chris@129 10
Chris@129 11 This program is free software; you can redistribute it and/or
Chris@129 12 modify it under the terms of the GNU General Public License as
Chris@129 13 published by the Free Software Foundation; either version 2 of the
Chris@129 14 License, or (at your option) any later version. See the file
Chris@129 15 COPYING included with this distribution for more information.
Chris@129 16 */
Chris@129 17
Chris@129 18 #include "uncommitteditem.h"
Chris@129 19 #include "colourset.h"
Chris@129 20 #include "debug.h"
Chris@153 21 #include "textabbrev.h"
Chris@129 22
Chris@129 23 #include <QPainter>
Chris@129 24 #include <QGraphicsScene>
Chris@141 25 #include <QGraphicsSceneMouseEvent>
Chris@141 26 #include <QMenu>
Chris@141 27 #include <QAction>
Chris@141 28 #include <QLabel>
Chris@141 29 #include <QWidgetAction>
Chris@129 30
Chris@129 31 UncommittedItem::UncommittedItem() :
Chris@311 32 m_showBranch(false), m_isNewBranch(false),
Chris@311 33 m_column(0), m_row(0), m_wide(false)
Chris@129 34 {
Chris@129 35 m_font = QFont();
Chris@129 36 m_font.setPixelSize(11);
Chris@129 37 m_font.setBold(false);
Chris@129 38 m_font.setItalic(false);
Chris@168 39 setCursor(Qt::ArrowCursor);
Chris@129 40 }
Chris@129 41
Chris@129 42 QRectF
Chris@129 43 UncommittedItem::boundingRect() const
Chris@129 44 {
Chris@131 45 //!!! this stuff is gross, refactor with changesetitem and connectionitem
Chris@129 46 int w = 100;
Chris@129 47 if (m_wide) w = 180;
Chris@131 48 return QRectF(-((w-50)/2 - 1), -30, w - 3, 79 + 40);
Chris@129 49 }
Chris@129 50
Chris@129 51 void
Chris@141 52 UncommittedItem::mousePressEvent(QGraphicsSceneMouseEvent *e)
Chris@141 53 {
Chris@141 54 DEBUG << "UncommittedItem::mousePressEvent" << endl;
Chris@141 55 if (e->button() == Qt::RightButton) {
Chris@141 56 activateMenu();
Chris@141 57 }
Chris@141 58 }
Chris@141 59
Chris@141 60 void
Chris@153 61 UncommittedItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *e)
Chris@153 62 {
Chris@153 63 DEBUG << "UncommittedItem::mouseDoubleClickEvent" << endl;
Chris@153 64 if (e->button() == Qt::LeftButton) {
Chris@153 65 emit showWork();
Chris@153 66 }
Chris@153 67 }
Chris@153 68
Chris@153 69 void
Chris@141 70 UncommittedItem::activateMenu()
Chris@141 71 {
Chris@141 72 QMenu *menu = new QMenu;
Chris@165 73 QLabel *label = new QLabel(tr("<qt><b>&nbsp;Uncommitted changes</b></qt>"));
Chris@141 74 QWidgetAction *wa = new QWidgetAction(menu);
Chris@141 75 wa->setDefaultWidget(label);
Chris@141 76 menu->addAction(wa);
Chris@141 77 menu->addSeparator();
Chris@141 78
Chris@153 79 QAction *dif = menu->addAction(tr("Diff"));
Chris@153 80 connect(dif, SIGNAL(triggered()), this, SIGNAL(diff()));
Chris@169 81 QAction *stat = menu->addAction(tr("Summarise changes"));
Chris@168 82 connect(stat, SIGNAL(triggered()), this, SIGNAL(showSummary()));
Chris@153 83
Chris@153 84 menu->addSeparator();
Chris@153 85
Chris@141 86 QAction *commit = menu->addAction(tr("Commit..."));
Chris@141 87 connect(commit, SIGNAL(triggered()), this, SIGNAL(commit()));
Chris@141 88 QAction *revert = menu->addAction(tr("Revert..."));
Chris@141 89 connect(revert, SIGNAL(triggered()), this, SIGNAL(revert()));
Chris@141 90
Chris@311 91 menu->addSeparator();
Chris@311 92
Chris@311 93 QAction *branch = menu->addAction(tr("Start new branch..."));
Chris@311 94 connect(branch, SIGNAL(triggered()), this, SIGNAL(newBranch()));
Chris@311 95 QAction *nobranch = menu->addAction(tr("Cancel new branch"));
Chris@311 96 nobranch->setEnabled(m_isNewBranch);
Chris@311 97 connect(nobranch, SIGNAL(triggered()), this, SIGNAL(noBranch()));
Chris@311 98
Chris@141 99 menu->exec(QCursor::pos());
Chris@141 100
Chris@141 101 ungrabMouse();
Chris@141 102 }
Chris@141 103
Chris@141 104 void
Chris@129 105 UncommittedItem::paint(QPainter *paint, const QStyleOptionGraphicsItem *option,
Chris@129 106 QWidget *w)
Chris@129 107 {
Chris@129 108 paint->save();
Chris@129 109
Chris@129 110 ColourSet *colourSet = ColourSet::instance();
Chris@129 111 QColor branchColour = colourSet->getColourFor(m_branch);
Chris@129 112
Chris@129 113 QFont f(m_font);
Chris@129 114
Chris@129 115 QTransform t = paint->worldTransform();
Chris@129 116 float scale = std::min(t.m11(), t.m22());
Chris@129 117 if (scale > 1.0) {
Chris@129 118 int ps = int((f.pixelSize() / scale) + 0.5);
Chris@129 119 if (ps < 8) ps = 8;
Chris@129 120 f.setPixelSize(ps);
Chris@129 121 }
Chris@129 122
Chris@129 123 if (scale < 0.1) {
Chris@129 124 paint->setPen(QPen(branchColour, 0, Qt::DashLine));
Chris@129 125 } else {
Chris@129 126 paint->setPen(QPen(branchColour, 2, Qt::DashLine));
Chris@129 127 }
Chris@129 128
Chris@129 129 paint->setFont(f);
Chris@129 130 QFontMetrics fm(f);
Chris@129 131 int fh = fm.height();
Chris@129 132
Chris@129 133 int width = 100;
Chris@129 134 if (m_wide) width = 180;
Chris@129 135 int x0 = -((width - 50) / 2 - 1);
Chris@129 136
Chris@129 137 int height = 49;
Chris@129 138 QRectF r(x0, 0, width - 3, height);
Chris@250 139 paint->setBrush(Qt::white);
Chris@129 140 paint->drawRect(r);
Chris@129 141
Chris@145 142 if (m_wide) {
Chris@145 143 QString label = tr("Uncommitted changes");
Chris@145 144 paint->drawText(-(fm.width(label) - 50)/2,
Chris@145 145 25 - fm.height()/2 + fm.ascent(),
Chris@145 146 label);
Chris@145 147 } else {
Chris@145 148 QString label = tr("Uncommitted");
Chris@145 149 paint->drawText(-(fm.width(label) - 50)/2,
Chris@145 150 25 - fm.height() + fm.ascent(),
Chris@145 151 label);
Chris@145 152 label = tr("changes");
Chris@145 153 paint->drawText(-(fm.width(label) - 50)/2,
Chris@145 154 25 + fm.ascent(),
Chris@145 155 label);
Chris@145 156 }
Chris@129 157
Chris@153 158 if (m_showBranch && m_branch != "") {
Chris@153 159 // write branch name
Chris@153 160 f.setBold(true);
Chris@153 161 paint->setFont(f);
Chris@153 162 int wid = width - 3;
Chris@153 163 QString b = TextAbbrev::abbreviate(m_branch, QFontMetrics(f), wid);
Chris@153 164 paint->drawText(x0, -fh + fm.ascent() - 4, b);
Chris@153 165 f.setBold(false);
Chris@153 166 }
Chris@153 167
Chris@129 168 paint->restore();
Chris@129 169 return;
Chris@129 170 }