Mercurial > hg > easyhg
comparison 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 |
comparison
equal
deleted
inserted
replaced
152:2b997861174b | 153:70fe12873106 |
---|---|
27 #include <QGraphicsSceneMouseEvent> | 27 #include <QGraphicsSceneMouseEvent> |
28 #include <QMenu> | 28 #include <QMenu> |
29 #include <QAction> | 29 #include <QAction> |
30 #include <QLabel> | 30 #include <QLabel> |
31 #include <QWidgetAction> | 31 #include <QWidgetAction> |
32 #include <QApplication> | |
33 #include <QClipboard> | |
32 | 34 |
33 ChangesetItem::ChangesetItem(Changeset *cs) : | 35 ChangesetItem::ChangesetItem(Changeset *cs) : |
34 m_changeset(cs), m_detail(0), | 36 m_changeset(cs), m_detail(0), |
35 m_showBranch(false), m_column(0), m_row(0), m_wide(false), | 37 m_showBranch(false), m_column(0), m_row(0), m_wide(false), |
36 m_current(false), m_new(false) | 38 m_current(false), m_new(false) |
101 } | 103 } |
102 | 104 |
103 void | 105 void |
104 ChangesetItem::activateMenu() | 106 ChangesetItem::activateMenu() |
105 { | 107 { |
108 m_parentDiffActions.clear(); | |
109 | |
106 QMenu *menu = new QMenu; | 110 QMenu *menu = new QMenu; |
107 QLabel *label = new QLabel(tr("<qt><b>Revision: </b>%1</qt>") | 111 QLabel *label = new QLabel(tr("<qt> <b>Revision: </b>%1</qt>") |
108 .arg(m_changeset->id())); | 112 .arg(m_changeset->id())); |
109 QWidgetAction *wa = new QWidgetAction(menu); | 113 QWidgetAction *wa = new QWidgetAction(menu); |
110 wa->setDefaultWidget(label); | 114 wa->setDefaultWidget(label); |
111 menu->addAction(wa); | 115 menu->addAction(wa); |
112 menu->addSeparator(); | 116 menu->addSeparator(); |
113 | 117 |
118 QAction *copyId = menu->addAction(tr("Copy identifier to clipboard")); | |
119 connect(copyId, SIGNAL(triggered()), this, SLOT(copyIdActivated())); | |
120 | |
121 menu->addSeparator(); | |
122 | |
123 if (m_changeset->parents().size() > 1) { | |
124 | |
125 foreach (QString parentId, m_changeset->parents()) { | |
126 QAction *diffParent = | |
127 menu->addAction(tr("Diff to parent %1").arg(parentId)); | |
128 connect(diffParent, SIGNAL(triggered()), | |
129 this, SLOT(diffToParentActivated())); | |
130 m_parentDiffActions[diffParent] = parentId; | |
131 } | |
132 | |
133 } else { | |
134 | |
135 QAction *diffParent = | |
136 menu->addAction(tr("Diff to parent")); | |
137 connect(diffParent, SIGNAL(triggered()), | |
138 this, SLOT(diffToParentActivated())); | |
139 } | |
140 | |
141 QAction *diffCurrent = menu->addAction(tr("Diff to current working folder")); | |
142 connect(diffCurrent, SIGNAL(triggered()), this, SLOT(diffToCurrentActivated())); | |
143 | |
144 menu->addSeparator(); | |
145 | |
114 QAction *update = menu->addAction(tr("Update to this revision")); | 146 QAction *update = menu->addAction(tr("Update to this revision")); |
115 connect(update, SIGNAL(triggered()), this, SLOT(updateActivated())); | 147 connect(update, SIGNAL(triggered()), this, SLOT(updateActivated())); |
116 | 148 |
117 menu->addSeparator(); | |
118 | |
119 QAction *diffParent = menu->addAction(tr("Diff against previous revision")); | |
120 connect(diffParent, SIGNAL(triggered()), this, SLOT(diffToPreviousActivated())); | |
121 QAction *diffCurrent = menu->addAction(tr("Diff against current revision")); | |
122 connect(diffCurrent, SIGNAL(triggered()), this, SLOT(diffToCurrentActivated())); | |
123 | |
124 menu->addSeparator(); | |
125 | |
126 QAction *merge = menu->addAction(tr("Merge from here to current")); | 149 QAction *merge = menu->addAction(tr("Merge from here to current")); |
127 connect(merge, SIGNAL(triggered()), this, SLOT(mergeActivated())); | 150 connect(merge, SIGNAL(triggered()), this, SLOT(mergeActivated())); |
128 QAction *tag = menu->addAction(tr("Tag this revision")); | 151 |
152 menu->addSeparator(); | |
153 | |
154 QAction *tag = menu->addAction(tr("Add tag...")); | |
129 connect(tag, SIGNAL(triggered()), this, SLOT(tagActivated())); | 155 connect(tag, SIGNAL(triggered()), this, SLOT(tagActivated())); |
130 | 156 |
131 menu->exec(QCursor::pos()); | 157 menu->exec(QCursor::pos()); |
132 | 158 |
133 ungrabMouse(); | 159 ungrabMouse(); |
134 } | 160 } |
135 | 161 |
162 void | |
163 ChangesetItem::copyIdActivated() | |
164 { | |
165 QClipboard *clipboard = QApplication::clipboard(); | |
166 clipboard->setText(Changeset::hashOf(m_changeset->id())); | |
167 } | |
168 | |
169 void ChangesetItem::diffToParentActivated() | |
170 { | |
171 QAction *a = qobject_cast<QAction *>(sender()); | |
172 QString parentId; | |
173 if (m_parentDiffActions.contains(a)) { | |
174 parentId = m_parentDiffActions[a]; | |
175 DEBUG << "ChangesetItem::diffToParentActivated: specific parent " | |
176 << parentId << " selected" << endl; | |
177 } else { | |
178 parentId = m_changeset->parents()[0]; | |
179 DEBUG << "ChangesetItem::diffToParentActivated: " | |
180 << "no specific parent selected, using first parent " | |
181 << parentId << endl; | |
182 } | |
183 | |
184 emit diffToParent(getId(), parentId); | |
185 } | |
186 | |
136 void ChangesetItem::updateActivated() { emit updateTo(getId()); } | 187 void ChangesetItem::updateActivated() { emit updateTo(getId()); } |
137 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! | |
138 void ChangesetItem::diffToCurrentActivated() { emit diffToCurrent(getId()); } | 188 void ChangesetItem::diffToCurrentActivated() { emit diffToCurrent(getId()); } |
139 void ChangesetItem::mergeActivated() { emit mergeFrom(getId()); } | 189 void ChangesetItem::mergeActivated() { emit mergeFrom(getId()); } |
140 void ChangesetItem::tagActivated() { emit tag(getId()); } | 190 void ChangesetItem::tagActivated() { emit tag(getId()); } |
141 | 191 |
142 void | 192 void |
226 } | 276 } |
227 } | 277 } |
228 | 278 |
229 if (m_showBranch) { | 279 if (m_showBranch) { |
230 // write branch name | 280 // write branch name |
281 paint->save(); | |
231 f.setBold(true); | 282 f.setBold(true); |
232 paint->setFont(f); | 283 paint->setFont(f); |
284 paint->setPen(QPen(branchColour)); | |
233 QString branch = m_changeset->branch(); | 285 QString branch = m_changeset->branch(); |
234 if (branch == "") branch = "default"; | 286 if (branch == "") branch = "default"; |
235 int wid = width - 3; | 287 int wid = width - 3; |
236 branch = TextAbbrev::abbreviate(branch, QFontMetrics(f), wid); | 288 branch = TextAbbrev::abbreviate(branch, QFontMetrics(f), wid); |
237 paint->drawText(x0, -fh + fm.ascent() - 4, branch); | 289 paint->drawText(x0, -fh + fm.ascent() - 4, branch); |
238 f.setBold(false); | 290 f.setBold(false); |
239 } | 291 paint->restore(); |
240 | 292 } |
241 // f.setItalic(true); | 293 |
242 fm = QFontMetrics(f); | 294 fm = QFontMetrics(f); |
243 fh = fm.height(); | 295 fh = fm.height(); |
244 paint->setFont(f); | 296 paint->setFont(f); |
245 | 297 |
246 QString comment = m_changeset->comment().trimmed(); | 298 QString comment = m_changeset->comment().trimmed(); |