comparison hgexpwidget.cpp @ 45:4286836bb3c9

* Some more work on graph layout; ensure LANG is set for parseable UTF8 output when running Hg
author Chris Cannam <cannam@all-day-breakfast.com>
date Wed, 10 Nov 2010 12:44:11 +0000
parents bed7ab59f62e
children c76782c14371
comparison
equal deleted inserted replaced
44:bed7ab59f62e 45:4286836bb3c9
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" 14 #include "grapher.h"
15 #include "panner.h"
16 #include "panned.h"
15 17
16 #include <iostream> 18 #include <iostream>
17 19
18 #define REMOTE_REPO_STR "Remote repository: " 20 #define REMOTE_REPO_STR "Remote repository: "
19 #define LOCAL_REPO_STR "Local repository: " 21 #define LOCAL_REPO_STR "Local repository: "
89 mainLayout -> addWidget(grpLocalRepo, 8); 91 mainLayout -> addWidget(grpLocalRepo, 8);
90 mainLayout -> addWidget(grpWorkFolder, 12); 92 mainLayout -> addWidget(grpWorkFolder, 12);
91 addTab(workPageWidget, tr("Work")); 93 addTab(workPageWidget, tr("Work"));
92 94
93 // History graph page 95 // History graph page
94 historyGraphPageWidget = new QGraphicsView; 96 historyGraphPageWidget = new QWidget;
97 Panned *panned = new Panned;
98 Panner *panner = new Panner;
99 historyGraphWidget = panned;
100 historyGraphPanner = panner;
101 QGridLayout *layout = new QGridLayout;
102 layout->addWidget(historyGraphWidget, 0, 0);
103 layout->addWidget(historyGraphPanner, 0, 1);
104 panner->setMaximumWidth(80);
105 panner->connectToPanned(panned);
106 historyGraphPageWidget->setLayout(layout);
95 addTab(historyGraphPageWidget, tr("History (graph)")); 107 addTab(historyGraphPageWidget, tr("History (graph)"));
96 108
97 109
98 //History page 110 //History page
99 //History page 111 //History page
242 { 254 {
243 localRepoHgLogList -> clear(); 255 localRepoHgLogList -> clear();
244 localRepoHgLogList -> addItems(splitChangeSets(hgLogList)); 256 localRepoHgLogList -> addItems(splitChangeSets(hgLogList));
245 257
246 //!!! 258 //!!!
247 QGraphicsView *gv = static_cast<QGraphicsView *>(historyGraphPageWidget); 259 Panned *panned = static_cast<Panned *>(historyGraphWidget);
248 gv->scene()->deleteLater(); 260 Panner *panner = static_cast<Panner *>(historyGraphPanner);
249 QGraphicsScene *scene = new QGraphicsScene(); 261 QGraphicsScene *scene = new QGraphicsScene();
250 Changesets csets = parseChangeSets(hgLogList); 262 Changesets csets = parseChangeSets(hgLogList);
251 if (csets.empty()) return; 263 if (csets.empty()) return;
252 ChangesetItemMap csetItemMap;
253 foreach (Changeset *cs, csets) {
254 ChangesetItem *item = new ChangesetItem(cs);
255 item->setX(0);
256 item->setY(0);
257 csetItemMap[cs] = item;
258 scene->addItem(item);
259 }
260 try { 264 try {
261 Grapher().layout(csets, csetItemMap); 265 Grapher(scene).layout(csets);
262 } catch (std::string s) { 266 } catch (std::string s) {
263 std::cerr << "Internal error: Layout failed: " << s << std::endl; 267 std::cerr << "Internal error: Layout failed: " << s << std::endl;
264 } 268 }
265 /* 269 panned->scene()->deleteLater();
266 QMap<QString, Changeset *> idCsetMap; 270 panned->setScene(scene);
267 foreach (Changeset *cs, csets) { 271 panner->scene()->deleteLater();
268 if (cs->id() == "") { 272 panner->setScene(scene);
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 */
296 gv->setScene(scene);
297 } 273 }
298 274
299 275
300 276
301 int HgExpWidget::findLineStart(int nowIndex, QString str) 277 int HgExpWidget::findLineStart(int nowIndex, QString str)