Mercurial > hg > easyhg
comparison hgexpwidget.cpp @ 44:bed7ab59f62e
* A snatched bit of work on graph layout
author | Chris Cannam |
---|---|
date | Tue, 09 Nov 2010 17:51:12 +0000 |
parents | c32067cd19f8 |
children | 4286836bb3c9 |
comparison
equal
deleted
inserted
replaced
43:c32067cd19f8 | 44:bed7ab59f62e |
---|---|
9 #include "hgexpwidget.h" | 9 #include "hgexpwidget.h" |
10 #include "common.h" | 10 #include "common.h" |
11 #include "logparser.h" | 11 #include "logparser.h" |
12 #include "changeset.h" | 12 #include "changeset.h" |
13 #include "changesetitem.h" | 13 #include "changesetitem.h" |
14 #include "grapher.h" | |
15 | |
16 #include <iostream> | |
14 | 17 |
15 #define REMOTE_REPO_STR "Remote repository: " | 18 #define REMOTE_REPO_STR "Remote repository: " |
16 #define LOCAL_REPO_STR "Local repository: " | 19 #define LOCAL_REPO_STR "Local repository: " |
17 #define WORKFOLDER_STR "Working folder: " | 20 #define WORKFOLDER_STR "Working folder: " |
18 | 21 |
243 //!!! | 246 //!!! |
244 QGraphicsView *gv = static_cast<QGraphicsView *>(historyGraphPageWidget); | 247 QGraphicsView *gv = static_cast<QGraphicsView *>(historyGraphPageWidget); |
245 gv->scene()->deleteLater(); | 248 gv->scene()->deleteLater(); |
246 QGraphicsScene *scene = new QGraphicsScene(); | 249 QGraphicsScene *scene = new QGraphicsScene(); |
247 Changesets csets = parseChangeSets(hgLogList); | 250 Changesets csets = parseChangeSets(hgLogList); |
251 if (csets.empty()) return; | |
252 ChangesetItemMap csetItemMap; | |
248 foreach (Changeset *cs, csets) { | 253 foreach (Changeset *cs, csets) { |
249 ChangesetItem *item = new ChangesetItem(cs); | 254 ChangesetItem *item = new ChangesetItem(cs); |
250 item->setX(0); | 255 item->setX(0); |
251 item->setY(cs->number() * 100); | 256 item->setY(0); |
257 csetItemMap[cs] = item; | |
252 scene->addItem(item); | 258 scene->addItem(item); |
253 } | 259 } |
260 try { | |
261 Grapher().layout(csets, csetItemMap); | |
262 } catch (std::string s) { | |
263 std::cerr << "Internal error: Layout failed: " << s << std::endl; | |
264 } | |
265 /* | |
266 QMap<QString, Changeset *> idCsetMap; | |
267 foreach (Changeset *cs, csets) { | |
268 if (cs->id() == "") { | |
269 throw std::string("Changeset has no ID"); | |
270 } | |
271 if (idCsetMap.contains(cs->id())) { | |
272 throw std::string("Changeset ID is already in map"); | |
273 } | |
274 idCsetMap[cs->id()] = cs; | |
275 } | |
276 typedef QSet<int> ColumnSet; | |
277 typedef QMap<int, ColumnSet> GridAlloc; | |
278 typedef QMap<Changeset *, ChangesetItem *> ChangesetItemMap; | |
279 ChangesetItemMap csetItemMap; | |
280 foreach (Changeset *cs, csets) { | |
281 ChangesetItem *item = new ChangesetItem(cs); | |
282 item->setX(0); | |
283 item->setY(-cs->number() * 100); | |
284 csetItemMap[cs] = item; | |
285 scene->addItem(item); | |
286 } | |
287 QSet<Changeset *> handled; | |
288 for (int i = csets.size() - 1; i >= 0; --i) { | |
289 Changeset *cs = csets[i]; | |
290 if (handled.contains(cs)) continue; | |
291 | |
292 | |
293 handled.insert(cs); | |
294 } | |
295 */ | |
254 gv->setScene(scene); | 296 gv->setScene(scene); |
255 } | 297 } |
256 | 298 |
257 | 299 |
258 | 300 |
324 Changesets csets; | 366 Changesets csets; |
325 LogList log = LogParser(changeSetsStr).parse(); | 367 LogList log = LogParser(changeSetsStr).parse(); |
326 foreach (LogEntry e, log) { | 368 foreach (LogEntry e, log) { |
327 Changeset *cs = new Changeset(); | 369 Changeset *cs = new Changeset(); |
328 foreach (QString key, e.keys()) { | 370 foreach (QString key, e.keys()) { |
329 cs->setProperty(key.toLocal8Bit().data(), e.value(key)); | 371 if (key == "parents") { |
372 QStringList parents = e.value(key).split | |
373 (" ", QString::SkipEmptyParts); | |
374 cs->setParents(parents); | |
375 } else { | |
376 cs->setProperty(key.toLocal8Bit().data(), e.value(key)); | |
377 } | |
330 } | 378 } |
331 csets.push_back(cs); | 379 csets.push_back(cs); |
380 } | |
381 for (int i = 0; i+1 < csets.size(); ++i) { | |
382 Changeset *cs = csets[i]; | |
383 if (cs->parents().empty()) { | |
384 QStringList list; | |
385 list.push_back(csets[i+1]->id()); | |
386 cs->setParents(list); | |
387 } | |
332 } | 388 } |
333 return csets; | 389 return csets; |
334 } | 390 } |
335 | 391 |
336 QString HgExpWidget::getCurrentFileListLine() | 392 QString HgExpWidget::getCurrentFileListLine() |