Mercurial > hg > easyhg
diff changesetitem.cpp @ 153:70fe12873106
* Show both parents of uncommitted merge; fixes to right-button menus
author | Chris Cannam |
---|---|
date | Thu, 02 Dec 2010 17:55:21 +0000 |
parents | 2fef6b0dfbe8 |
children | 97faf861618b |
line wrap: on
line diff
--- a/changesetitem.cpp Thu Dec 02 11:51:15 2010 +0000 +++ b/changesetitem.cpp Thu Dec 02 17:55:21 2010 +0000 @@ -29,6 +29,8 @@ #include <QAction> #include <QLabel> #include <QWidgetAction> +#include <QApplication> +#include <QClipboard> ChangesetItem::ChangesetItem(Changeset *cs) : m_changeset(cs), m_detail(0), @@ -103,29 +105,53 @@ void ChangesetItem::activateMenu() { + m_parentDiffActions.clear(); + QMenu *menu = new QMenu; - QLabel *label = new QLabel(tr("<qt><b>Revision: </b>%1</qt>") + QLabel *label = new QLabel(tr("<qt> <b>Revision: </b>%1</qt>") .arg(m_changeset->id())); QWidgetAction *wa = new QWidgetAction(menu); wa->setDefaultWidget(label); menu->addAction(wa); menu->addSeparator(); - QAction *update = menu->addAction(tr("Update to this revision")); - connect(update, SIGNAL(triggered()), this, SLOT(updateActivated())); + QAction *copyId = menu->addAction(tr("Copy identifier to clipboard")); + connect(copyId, SIGNAL(triggered()), this, SLOT(copyIdActivated())); menu->addSeparator(); - QAction *diffParent = menu->addAction(tr("Diff against previous revision")); - connect(diffParent, SIGNAL(triggered()), this, SLOT(diffToPreviousActivated())); - QAction *diffCurrent = menu->addAction(tr("Diff against current revision")); + if (m_changeset->parents().size() > 1) { + + foreach (QString parentId, m_changeset->parents()) { + QAction *diffParent = + menu->addAction(tr("Diff to parent %1").arg(parentId)); + connect(diffParent, SIGNAL(triggered()), + this, SLOT(diffToParentActivated())); + m_parentDiffActions[diffParent] = parentId; + } + + } else { + + QAction *diffParent = + menu->addAction(tr("Diff to parent")); + connect(diffParent, SIGNAL(triggered()), + this, SLOT(diffToParentActivated())); + } + + QAction *diffCurrent = menu->addAction(tr("Diff to current working folder")); connect(diffCurrent, SIGNAL(triggered()), this, SLOT(diffToCurrentActivated())); menu->addSeparator(); + QAction *update = menu->addAction(tr("Update to this revision")); + connect(update, SIGNAL(triggered()), this, SLOT(updateActivated())); + QAction *merge = menu->addAction(tr("Merge from here to current")); connect(merge, SIGNAL(triggered()), this, SLOT(mergeActivated())); - QAction *tag = menu->addAction(tr("Tag this revision")); + + menu->addSeparator(); + + QAction *tag = menu->addAction(tr("Add tag...")); connect(tag, SIGNAL(triggered()), this, SLOT(tagActivated())); menu->exec(QCursor::pos()); @@ -133,8 +159,32 @@ ungrabMouse(); } +void +ChangesetItem::copyIdActivated() +{ + QClipboard *clipboard = QApplication::clipboard(); + clipboard->setText(Changeset::hashOf(m_changeset->id())); +} + +void ChangesetItem::diffToParentActivated() +{ + QAction *a = qobject_cast<QAction *>(sender()); + QString parentId; + if (m_parentDiffActions.contains(a)) { + parentId = m_parentDiffActions[a]; + DEBUG << "ChangesetItem::diffToParentActivated: specific parent " + << parentId << " selected" << endl; + } else { + parentId = m_changeset->parents()[0]; + DEBUG << "ChangesetItem::diffToParentActivated: " + << "no specific parent selected, using first parent " + << parentId << endl; + } + + emit diffToParent(getId(), parentId); +} + void ChangesetItem::updateActivated() { emit updateTo(getId()); } -void ChangesetItem::diffToPreviousActivated() { emit diffToParent(getId(), m_changeset->parents()[0]); } //!!! no, this is most likely to be useful when something has more than one parent! void ChangesetItem::diffToCurrentActivated() { emit diffToCurrent(getId()); } void ChangesetItem::mergeActivated() { emit mergeFrom(getId()); } void ChangesetItem::tagActivated() { emit tag(getId()); } @@ -228,17 +278,19 @@ if (m_showBranch) { // write branch name + paint->save(); f.setBold(true); paint->setFont(f); + paint->setPen(QPen(branchColour)); QString branch = m_changeset->branch(); if (branch == "") branch = "default"; int wid = width - 3; branch = TextAbbrev::abbreviate(branch, QFontMetrics(f), wid); paint->drawText(x0, -fh + fm.ascent() - 4, branch); f.setBold(false); + paint->restore(); } -// f.setItalic(true); fm = QFontMetrics(f); fh = fm.height(); paint->setFont(f);