# HG changeset patch
# User Chris Cannam
# Date 1291312521 0
# Node ID 70fe1287310618c49120d4f0af4940f57a7c33bd
# Parent 2b997861174be0d94c0bf9d7e6b7568ea9af42da
* Show both parents of uncommitted merge; fixes to right-button menus
diff -r 2b997861174b -r 70fe12873106 changeset.cpp
--- a/changeset.cpp Thu Dec 02 11:51:15 2010 +0000
+++ b/changeset.cpp Thu Dec 02 17:55:21 2010 +0000
@@ -49,7 +49,7 @@
QString Changeset::formatHtml()
{
QString description;
- QString rowTemplate = "
%1 | %2 |
";
+ QString rowTemplate = "%1 | %2 |
";
description = "";
diff -r 2b997861174b -r 70fe12873106 changeset.h
--- a/changeset.h Thu Dec 02 11:51:15 2010 +0000
+++ b/changeset.h Thu Dec 02 17:55:21 2010 +0000
@@ -86,6 +86,10 @@
return false;
}
+ static QString hashOf(QString id) {
+ return id.split(':')[1];
+ }
+
static QStringList getIds(Changesets csets) {
QStringList ids;
foreach (Changeset *cs, csets) ids.push_back(cs->id());
diff -r 2b997861174b -r 70fe12873106 changesetitem.cpp
--- 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
#include
#include
+#include
+#include
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("Revision: %1")
+ QLabel *label = new QLabel(tr(" Revision: %1")
.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(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);
diff -r 2b997861174b -r 70fe12873106 changesetitem.h
--- a/changesetitem.h Thu Dec 02 11:51:15 2010 +0000
+++ b/changesetitem.h Thu Dec 02 17:55:21 2010 +0000
@@ -24,6 +24,8 @@
class Changeset;
class ChangesetDetailItem;
+class QAction;
+
class ChangesetItem : public QObject, public QGraphicsItem
{
Q_OBJECT
@@ -52,7 +54,7 @@
bool isNew() const { return m_new; }
void setNew(bool n) { m_new = n; }
- bool shouldShowBranch() const { return m_showBranch; }
+ bool showBranch() const { return m_showBranch; }
void setShowBranch(bool s) { m_showBranch = s; }
signals:
@@ -70,8 +72,9 @@
void hideDetail();
private slots:
+ void copyIdActivated();
void updateActivated();
- void diffToPreviousActivated();
+ void diffToParentActivated();
void diffToCurrentActivated();
void mergeActivated();
void tagActivated();
@@ -91,6 +94,8 @@
bool m_wide;
bool m_current;
bool m_new;
+
+ QMap m_parentDiffActions;
};
#endif // CHANGESETITEM_H
diff -r 2b997861174b -r 70fe12873106 changesetscene.cpp
--- a/changesetscene.cpp Thu Dec 02 11:51:15 2010 +0000
+++ b/changesetscene.cpp Thu Dec 02 17:55:21 2010 +0000
@@ -61,6 +61,9 @@
connect(item, SIGNAL(diff()),
this, SIGNAL(diffWorkingFolder()));
+
+ connect(item, SIGNAL(showWork()),
+ this, SIGNAL(showWork()));
}
void
diff -r 2b997861174b -r 70fe12873106 changesetscene.h
--- a/changesetscene.h Thu Dec 02 11:51:15 2010 +0000
+++ b/changesetscene.h Thu Dec 02 17:55:21 2010 +0000
@@ -37,6 +37,7 @@
void commit();
void revert();
void diffWorkingFolder();
+ void showWork();
void updateTo(QString id);
void diffToParent(QString id, QString parent);
diff -r 2b997861174b -r 70fe12873106 connectionitem.cpp
--- a/connectionitem.cpp Thu Dec 02 11:51:15 2010 +0000
+++ b/connectionitem.cpp Thu Dec 02 17:55:21 2010 +0000
@@ -76,7 +76,7 @@
float yscale = 90;
float size = 50;
- float ygap = yscale - size;
+ float ygap = yscale - size - 2;
int p_col = m_parent->column(), p_row = m_parent->row();
int c_col, c_row;
diff -r 2b997861174b -r 70fe12873106 filestatuswidget.cpp
--- a/filestatuswidget.cpp Thu Dec 02 11:51:15 2010 +0000
+++ b/filestatuswidget.cpp Thu Dec 02 17:55:21 2010 +0000
@@ -78,8 +78,8 @@
m_descriptions[FileStates::Removed] = tr("These files will be removed from version control next time you commit.
"
"They will not be deleted from the local folder.");
m_descriptions[FileStates::Missing] = tr("These files are recorded in the version control, but absent from your working folder.
"
- "If you deleted them by accident, select them here and use Revert to restore their previous contents.
"
- "If you deleted them intentionally, select them here and use Remove to tell the version control system about it.");
+ "If you intended to delete them, select them and use Remove to tell the version control system about it.
"
+ "If you deleted them by accident, select them and use Revert to restore their previous contents.");
m_descriptions[FileStates::Unknown] = tr("These files are in your working folder but are not under version control.
"
"Select a file and use Add to place it under version control or Ignore to remove it from this list.");
diff -r 2b997861174b -r 70fe12873106 grapher.cpp
--- a/grapher.cpp Thu Dec 02 11:51:15 2010 +0000
+++ b/grapher.cpp Thu Dec 02 17:55:21 2010 +0000
@@ -110,7 +110,7 @@
// If we're the parent of the uncommitted item, make a note of our
// row (we need it later, to avoid overwriting the connecting line)
- if (m_uncommittedParentId == id) {
+ if (!m_uncommittedParents.empty() && m_uncommittedParents[0] == id) {
m_uncommittedParentRow = row;
}
@@ -158,7 +158,7 @@
parentId = cs->parents()[0];
if (!m_changesets.contains(parentId) ||
- m_changesets[parentId]->branch() != branch) {
+ !m_changesets[parentId]->isOnBranch(branch)) {
// new branch
col = m_branchHomes[branch];
} else {
@@ -176,7 +176,7 @@
foreach (QString parentId, cs->parents()) {
if (!m_changesets.contains(parentId)) continue;
- if (m_changesets[parentId]->branch() == branch) {
+ if (m_changesets[parentId]->isOnBranch(branch)) {
ChangesetItem *parentItem = m_items[parentId];
col += parentItem->column();
parentsOnSameBranch++;
@@ -198,13 +198,24 @@
item->setColumn(col);
m_handled.insert(id);
- // If we're the parent of the uncommitted item, it should be given
- // the same column as us (ideally)
+ // If we're the first parent of the uncommitted item, it should be
+ // given the same column as us (we already noted that its
+ // connecting line would end at our row)
- if (m_uncommittedParentId == id) {
- int ucol = findAvailableColumn(row-1, col, true);
- m_uncommitted->setColumn(ucol);
- m_haveAllocatedUncommittedColumn = true;
+ if (m_uncommittedParents.contains(id)) {
+ if (m_uncommittedParents[0] == id) {
+ int ucol = findAvailableColumn(row-1, col, true);
+ m_uncommitted->setColumn(ucol);
+ m_haveAllocatedUncommittedColumn = true;
+ }
+ // also, if the uncommitted item has a different branch from
+ // any of its parents, tell it to show the branch
+ if (!cs->isOnBranch(m_uncommitted->branch())) {
+ DEBUG << "Uncommitted branch " << m_uncommitted->branch()
+ << " differs from my branch " << cs->branch()
+ << ", asking it to show branch" << endl;
+ m_uncommitted->setShowBranch(true);
+ }
}
// Normally the children will lay out themselves, but we can do
@@ -222,7 +233,7 @@
Changeset *child = m_changesets[childId];
int childRow = m_items[childId]->row();
if (child->parents().size() > 1 ||
- child->branch() == cs->branch()) {
+ child->isOnBranch(cs->branch())) {
for (int r = row-1; r > childRow; --r) {
m_alloc[r].insert(col);
}
@@ -237,7 +248,7 @@
foreach (QString childId, cs->children()) {
if (!m_changesets.contains(childId)) continue;
Changeset *child = m_changesets[childId];
- if (child->branch() == branch &&
+ if (child->isOnBranch(branch) &&
child->parents().size() == 1) {
special.push_back(childId);
}
@@ -287,6 +298,7 @@
}
m_branchHomes[""] = 0;
+ m_branchHomes["default"] = 0;
foreach (QString branch, m_branchRanges.keys()) {
if (branch == "") continue;
@@ -339,14 +351,16 @@
return m_items[cs->id()];
}
-void Grapher::layout(Changesets csets, QString uncommittedSproutsFrom)
+void Grapher::layout(Changesets csets,
+ QStringList uncommittedParents,
+ QString uncommittedBranch)
{
m_changesets.clear();
m_items.clear();
m_alloc.clear();
m_branchHomes.clear();
- m_uncommittedParentId = uncommittedSproutsFrom;
+ m_uncommittedParents = uncommittedParents;
m_haveAllocatedUncommittedColumn = false;
m_uncommittedParentRow = 0;
m_uncommitted = 0;
@@ -399,13 +413,17 @@
// Add uncommitted item and connecting line as necessary
- if (m_uncommittedParentId != "") {
+ if (!m_uncommittedParents.empty()) {
m_uncommitted = new UncommittedItem();
+ m_uncommitted->setBranch(uncommittedBranch);
m_scene->addUncommittedItem(m_uncommitted);
- ConnectionItem *conn = new ConnectionItem();
- conn->setParent(m_items[m_uncommittedParentId]);
- conn->setChild(m_uncommitted);
- m_scene->addItem(conn);
+ foreach (QString p, m_uncommittedParents) {
+ ConnectionItem *conn = new ConnectionItem();
+ conn->setConnectionType(ConnectionItem::Merge);
+ conn->setParent(m_items[p]);
+ conn->setChild(m_uncommitted);
+ m_scene->addItem(conn);
+ }
}
// Add the branch labels
@@ -473,6 +491,15 @@
}
}
+ int datemincol = mincol, datemaxcol = maxcol;
+
+ if (mincol == maxcol) {
+ --datemincol;
+ ++datemaxcol;
+ } else if (m_alloc[minrow].contains(mincol)) {
+ --datemincol;
+ }
+
// We've given the uncommitted item a column, but not a row yet --
// it always goes at the top
@@ -506,11 +533,6 @@
bool even = false;
int n = 0;
- if (mincol == maxcol) {
- --mincol;
- ++maxcol;
- }
-
for (int row = minrow; row <= maxrow; ++row) {
QString date = m_rowDates[row];
@@ -520,7 +542,7 @@
if (prevDate != "") {
DateItem *item = new DateItem();
item->setDateString(prevDate);
- item->setCols(mincol, maxcol - mincol + 1);
+ item->setCols(datemincol, datemaxcol - datemincol + 1);
item->setRows(changeRow, n);
item->setEven(even);
item->setZValue(-1);
@@ -536,7 +558,7 @@
if (n > 0) {
DateItem *item = new DateItem();
item->setDateString(prevDate);
- item->setCols(mincol, maxcol - mincol + 1);
+ item->setCols(datemincol, datemaxcol - datemincol + 1);
item->setRows(changeRow, n+1);
item->setEven(even);
item->setZValue(-1);
diff -r 2b997861174b -r 70fe12873106 grapher.h
--- a/grapher.h Thu Dec 02 11:51:15 2010 +0000
+++ b/grapher.h Thu Dec 02 17:55:21 2010 +0000
@@ -34,7 +34,9 @@
public:
Grapher(ChangesetScene *scene) { m_scene = scene; }
- void layout(Changesets csets, QString uncommittedSproutsFrom = "");
+ void layout(Changesets csets,
+ QStringList uncommittedParents,
+ QString uncommittedBranch);
ChangesetItem *getItemFor(Changeset *cs);
@@ -77,7 +79,7 @@
typedef QMap RowDateMap;
RowDateMap m_rowDates;
- QString m_uncommittedParentId;
+ QStringList m_uncommittedParents;
int m_uncommittedParentRow;
UncommittedItem *m_uncommitted;
bool m_haveAllocatedUncommittedColumn;
diff -r 2b997861174b -r 70fe12873106 hgtabwidget.cpp
--- a/hgtabwidget.cpp Thu Dec 02 11:51:15 2010 +0000
+++ b/hgtabwidget.cpp Thu Dec 02 17:55:21 2010 +0000
@@ -52,6 +52,9 @@
connect(m_historyWidget, SIGNAL(diffWorkingFolder()),
this, SIGNAL(diffWorkingFolder()));
+ connect(m_historyWidget, SIGNAL(showWork()),
+ this, SLOT(showWorkTab()));
+
connect(m_historyWidget, SIGNAL(updateTo(QString)),
this, SIGNAL(updateTo(QString)));
@@ -73,9 +76,9 @@
m_fileStatusWidget->clearSelections();
}
-void HgTabWidget::setCurrent(QStringList ids)
+void HgTabWidget::setCurrent(QStringList ids, QString branch)
{
- m_historyWidget->setCurrent(ids, canCommit());
+ m_historyWidget->setCurrent(ids, branch, canCommit());
}
bool HgTabWidget::canCommit() const
@@ -160,7 +163,7 @@
{
m_historyWidget->parseNewLog(hgLogList);
if (m_historyWidget->haveNewItems()) {
- setCurrentWidget(m_historyWidget);
+ showHistoryTab();
}
}
@@ -168,7 +171,7 @@
{
m_historyWidget->parseIncrementalLog(hgLogList);
if (m_historyWidget->haveNewItems()) {
- setCurrentWidget(m_historyWidget);
+ showHistoryTab();
}
}
@@ -182,3 +185,14 @@
{
m_fileStatusWidget->setState(state);
}
+
+void HgTabWidget::showWorkTab()
+{
+ setCurrentWidget(m_fileStatusWidget);
+}
+
+void HgTabWidget::showHistoryTab()
+{
+ setCurrentWidget(m_historyWidget);
+}
+
diff -r 2b997861174b -r 70fe12873106 hgtabwidget.h
--- a/hgtabwidget.h Thu Dec 02 11:51:15 2010 +0000
+++ b/hgtabwidget.h Thu Dec 02 17:55:21 2010 +0000
@@ -48,7 +48,7 @@
void setWorkFolderAndRepoNames(QString workFolderPath, QString remoteRepoPath);
void setState(QString state);
- void setCurrent(QStringList ids);
+ void setCurrent(QStringList ids, QString branch);
FileStates getFileStates() { return m_fileStates; }
@@ -87,6 +87,8 @@
public slots:
void clearSelections();
+ void showWorkTab();
+ void showHistoryTab();
private:
FileStatusWidget *m_fileStatusWidget;
diff -r 2b997861174b -r 70fe12873106 historywidget.cpp
--- a/historywidget.cpp Thu Dec 02 11:51:15 2010 +0000
+++ b/historywidget.cpp Thu Dec 02 17:55:21 2010 +0000
@@ -58,15 +58,18 @@
m_changesets.clear();
}
-void HistoryWidget::setCurrent(QStringList ids, bool showUncommitted)
+void HistoryWidget::setCurrent(QStringList ids, QString branch,
+ bool showUncommitted)
{
- if (m_currentIds == ids && m_showUncommitted == showUncommitted) return;
+ if (m_currentIds == ids &&
+ m_currentBranch == branch &&
+ m_showUncommitted == showUncommitted) return;
DEBUG << "HistoryWidget::setCurrent: " << ids.size() << " ids, "
<< "showUncommitted: " << showUncommitted << endl;
m_currentIds.clear();
- m_uncommittedParentId = "";
+ m_currentBranch = branch;
m_showUncommitted = showUncommitted;
if (ids.empty()) return;
@@ -75,7 +78,6 @@
m_currentIds.push_back(id);
}
- if (m_showUncommitted) m_uncommittedParentId = m_currentIds[0];
layoutAll();
}
@@ -159,7 +161,9 @@
if (!m_changesets.empty()) {
Grapher g(scene);
try {
- g.layout(m_changesets, m_uncommittedParentId);
+ g.layout(m_changesets,
+ m_showUncommitted ? m_currentIds : QStringList(),
+ m_currentBranch);
} catch (std::string s) {
std::cerr << "Internal error: Layout failed: " << s << std::endl;
}
@@ -244,6 +248,9 @@
connect(scene, SIGNAL(diffWorkingFolder()),
this, SIGNAL(diffWorkingFolder()));
+ connect(scene, SIGNAL(showWork()),
+ this, SIGNAL(showWork()));
+
connect(scene, SIGNAL(updateTo(QString)),
this, SIGNAL(updateTo(QString)));
diff -r 2b997861174b -r 70fe12873106 historywidget.h
--- a/historywidget.h Thu Dec 02 11:51:15 2010 +0000
+++ b/historywidget.h Thu Dec 02 17:55:21 2010 +0000
@@ -36,7 +36,7 @@
HistoryWidget();
virtual ~HistoryWidget();
- void setCurrent(QStringList ids, bool showUncommitted);
+ void setCurrent(QStringList ids, QString branch, bool showUncommitted);
void parseNewLog(QString log);
void parseIncrementalLog(QString log);
@@ -47,6 +47,7 @@
void commit();
void revert();
void diffWorkingFolder();
+ void showWork();
void updateTo(QString id);
void diffToParent(QString id, QString parent);
@@ -57,9 +58,9 @@
private:
Changesets m_changesets;
QStringList m_currentIds;
+ QString m_currentBranch;
QSet m_newIds;
bool m_showUncommitted;
- QString m_uncommittedParentId;
Panned *m_panned;
Panner *m_panner;
diff -r 2b997861174b -r 70fe12873106 mainwindow.cpp
--- a/mainwindow.cpp Thu Dec 02 11:51:15 2010 +0000
+++ b/mainwindow.cpp Thu Dec 02 17:55:21 2010 +0000
@@ -89,6 +89,7 @@
ColourSet *cs = ColourSet::instance();
cs->clearDefaultNames();
cs->addDefaultName("");
+ cs->addDefaultName("default");
cs->addDefaultName(getUserInfo());
if (workFolderPath == "") {
@@ -159,6 +160,12 @@
{
QStringList params;
params << "stat" << "-ardum";
+
+ // annoyingly, hg stat actually modifies the working directory --
+ // it creates files called hg-checklink and hg-checkexec to test
+ // properties of the filesystem
+ if (fsWatcher) fsWatcher->blockSignals(true);
+
runner->requestAction(HgAction(ACT_STAT, workFolderPath, params));
}
@@ -204,8 +211,7 @@
params << "log";
foreach (QString p, prune) {
- QString number = p.split(':')[0];
- params << "--prune" << number;
+ params << "--prune" << Changeset::hashOf(p);
}
params << "--template";
@@ -450,6 +456,8 @@
params << "--config" << "extensions.extdiff=" << "extdiff";
params << "--program" << diffBinaryName;
+ params << hgTabs->getSelectedCommittableFiles(); // may be none: whole dir
+
runner->requestAction(HgAction(ACT_FOLDERDIFF, workFolderPath, params));
}
@@ -462,7 +470,7 @@
params << "--config" << "extensions.extdiff=" << "extdiff";
params << "--program" << diffBinaryName;
- params << "--rev" << id;
+ params << "--rev" << Changeset::hashOf(id);
runner->requestAction(HgAction(ACT_FOLDERDIFF, workFolderPath, params));
}
@@ -476,7 +484,8 @@
params << "--config" << "extensions.extdiff=" << "extdiff";
params << "--program" << diffBinaryName;
- params << "--rev" << parent << "--rev" << child;
+ params << "--rev" << Changeset::hashOf(parent)
+ << "--rev" << Changeset::hashOf(child);
runner->requestAction(HgAction(ACT_CHGSETDIFF, workFolderPath, params));
}
@@ -496,7 +505,7 @@
{
QStringList params;
- params << "update" << "--rev" << id << "--check";
+ params << "update" << "--rev" << Changeset::hashOf(id) << "--check";
runner->requestAction(HgAction(ACT_UPDATE, workFolderPath, params));
}
@@ -551,7 +560,7 @@
QStringList params;
params << "merge";
- params << "--rev" << id;
+ params << "--rev" << Changeset::hashOf(id);
runner->requestAction(HgAction(ACT_MERGE, workFolderPath, params));
}
@@ -1236,6 +1245,7 @@
break;
case ACT_STAT:
+ if (fsWatcher) fsWatcher->blockSignals(false);
hgTabs->updateWorkFolderFileList(output);
updateFileSystemWatcher();
break;
@@ -1290,7 +1300,7 @@
foreach (Changeset *cs, currentParents) delete cs;
currentParents = Changeset::parseChangesets(output);
QStringList parentIds = Changeset::getIds(currentParents);
- hgTabs->setCurrent(parentIds);
+ hgTabs->setCurrent(parentIds, currentBranch);
}
break;
diff -r 2b997861174b -r 70fe12873106 uncommitteditem.cpp
--- a/uncommitteditem.cpp Thu Dec 02 11:51:15 2010 +0000
+++ b/uncommitteditem.cpp Thu Dec 02 17:55:21 2010 +0000
@@ -18,6 +18,7 @@
#include "uncommitteditem.h"
#include "colourset.h"
#include "debug.h"
+#include "textabbrev.h"
#include
#include
@@ -28,7 +29,7 @@
#include
UncommittedItem::UncommittedItem() :
- m_column(0), m_row(0), m_wide(false)
+ m_showBranch(false), m_column(0), m_row(0), m_wide(false)
{
m_font = QFont();
m_font.setPixelSize(11);
@@ -55,21 +56,33 @@
}
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("Uncommitted changes"));
+ QLabel *label = new QLabel(tr(" Uncommitted changes"));
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()));
+
+ 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()));
- QAction *dif = menu->addAction(tr("Diff"));
- connect(dif, SIGNAL(triggered()), this, SIGNAL(diff()));
menu->exec(QCursor::pos());
@@ -129,6 +142,16 @@
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;
}
diff -r 2b997861174b -r 70fe12873106 uncommitteditem.h
--- a/uncommitteditem.h Thu Dec 02 11:51:15 2010 +0000
+++ b/uncommitteditem.h Thu Dec 02 17:55:21 2010 +0000
@@ -34,6 +34,9 @@
QString branch() const { return m_branch; }
void setBranch(QString b) { m_branch = b; }
+
+ bool showBranch() const { return m_showBranch; }
+ void setShowBranch(bool s) { m_showBranch = s; }
int column() const { return m_column; }
int row() const { return m_row; }
@@ -47,14 +50,17 @@
void commit();
void revert();
void diff();
+ void showWork();
protected:
virtual void mousePressEvent(QGraphicsSceneMouseEvent *);
+ virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *);
private:
void activateMenu();
QString m_branch;
+ bool m_showBranch;
QFont m_font;
int m_column;
int m_row;