diff src/uncommitteditem.cpp @ 370:b9c153e00e84

Move source files to src/
author Chris Cannam
date Thu, 24 Mar 2011 10:27:51 +0000
parents uncommitteditem.cpp@4811eb34e819
children 7ef46fb73b48
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/uncommitteditem.cpp	Thu Mar 24 10:27:51 2011 +0000
@@ -0,0 +1,170 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    EasyMercurial
+
+    Based on HgExplorer by Jari Korhonen
+    Copyright (c) 2010 Jari Korhonen
+    Copyright (c) 2011 Chris Cannam
+    Copyright (c) 2011 Queen Mary, University of London
+    
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License as
+    published by the Free Software Foundation; either version 2 of the
+    License, or (at your option) any later version.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#include "uncommitteditem.h"
+#include "colourset.h"
+#include "debug.h"
+#include "textabbrev.h"
+
+#include <QPainter>
+#include <QGraphicsScene>
+#include <QGraphicsSceneMouseEvent>
+#include <QMenu>
+#include <QAction>
+#include <QLabel>
+#include <QWidgetAction>
+
+UncommittedItem::UncommittedItem() :
+    m_showBranch(false), m_isNewBranch(false),
+    m_column(0), m_row(0), m_wide(false)
+{
+    m_font = QFont();
+    m_font.setPixelSize(11);
+    m_font.setBold(false);
+    m_font.setItalic(false);
+    setCursor(Qt::ArrowCursor);
+}
+
+QRectF
+UncommittedItem::boundingRect() const
+{
+    //!!! this stuff is gross, refactor with changesetitem and connectionitem
+    int w = 100;
+    if (m_wide) w = 180;
+    return QRectF(-((w-50)/2 - 1), -30, w - 3, 79 + 40);
+}
+
+void
+UncommittedItem::mousePressEvent(QGraphicsSceneMouseEvent *e)
+{
+    DEBUG << "UncommittedItem::mousePressEvent" << endl;
+    if (e->button() == Qt::RightButton) {
+        activateMenu();
+    }
+}
+
+void
+UncommittedItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *e)
+{
+    DEBUG << "UncommittedItem::mouseDoubleClickEvent" << endl;
+    if (e->button() == Qt::LeftButton) {
+        emit showWork();
+    }
+}
+
+void
+UncommittedItem::activateMenu()
+{
+    QMenu *menu = new QMenu;
+    QLabel *label = new QLabel(tr("<qt><b>&nbsp;Uncommitted changes</b></qt>"));
+    QWidgetAction *wa = new QWidgetAction(menu);
+    wa->setDefaultWidget(label);
+    menu->addAction(wa);
+    menu->addSeparator();
+
+    QAction *dif = menu->addAction(tr("Diff"));
+    connect(dif, SIGNAL(triggered()), this, SIGNAL(diff()));
+    QAction *stat = menu->addAction(tr("Summarise changes"));
+    connect(stat, SIGNAL(triggered()), this, SIGNAL(showSummary()));
+    
+    menu->addSeparator();
+
+    QAction *commit = menu->addAction(tr("Commit..."));
+    connect(commit, SIGNAL(triggered()), this, SIGNAL(commit()));
+    QAction *revert = menu->addAction(tr("Revert..."));
+    connect(revert, SIGNAL(triggered()), this, SIGNAL(revert()));
+
+    menu->addSeparator();
+
+    QAction *branch = menu->addAction(tr("Start new branch..."));
+    connect(branch, SIGNAL(triggered()), this, SIGNAL(newBranch()));
+    QAction *nobranch = menu->addAction(tr("Cancel new branch"));
+    nobranch->setEnabled(m_isNewBranch);
+    connect(nobranch, SIGNAL(triggered()), this, SIGNAL(noBranch()));
+
+    menu->exec(QCursor::pos());
+
+    ungrabMouse();
+}
+
+void
+UncommittedItem::paint(QPainter *paint, const QStyleOptionGraphicsItem *option,
+		       QWidget *w)
+{
+    paint->save();
+    
+    ColourSet *colourSet = ColourSet::instance();
+    QColor branchColour = colourSet->getColourFor(m_branch);
+
+    QFont f(m_font);
+
+    QTransform t = paint->worldTransform();
+    float scale = std::min(t.m11(), t.m22());
+    if (scale > 1.0) {
+	int ps = int((f.pixelSize() / scale) + 0.5);
+	if (ps < 8) ps = 8;
+	f.setPixelSize(ps);
+    }
+
+    if (scale < 0.1) {
+	paint->setPen(QPen(branchColour, 0, Qt::DashLine));
+    } else {
+	paint->setPen(QPen(branchColour, 2, Qt::DashLine));
+    }
+	
+    paint->setFont(f);
+    QFontMetrics fm(f);
+    int fh = fm.height();
+
+    int width = 100;
+    if (m_wide) width = 180;
+    int x0 = -((width - 50) / 2 - 1);
+
+    int height = 49;
+    QRectF r(x0, 0, width - 3, height);
+    paint->setBrush(Qt::white);
+    paint->drawRect(r);
+
+    if (m_wide) {
+        QString label = tr("Uncommitted changes");
+        paint->drawText(-(fm.width(label) - 50)/2,
+                        25 - fm.height()/2 + fm.ascent(),
+                        label);
+    } else {
+        QString label = tr("Uncommitted");
+        paint->drawText(-(fm.width(label) - 50)/2,
+                        25 - fm.height() + fm.ascent(),
+                        label);
+        label = tr("changes");
+        paint->drawText(-(fm.width(label) - 50)/2,
+                        25 + fm.ascent(),
+                        label);
+    }        
+
+    if (m_showBranch && m_branch != "") {
+        // write branch name
+        f.setBold(true);
+        paint->setFont(f);
+        int wid = width - 3;
+        QString b = TextAbbrev::abbreviate(m_branch, QFontMetrics(f), wid);
+        paint->drawText(x0, -fh + fm.ascent() - 4, b);
+        f.setBold(false);
+    }
+
+    paint->restore();
+    return;
+}