Mercurial > hg > easyhg
diff historywidget.cpp @ 116:807c79350bf1
* Pull history tab out into its own widget
author | Chris Cannam |
---|---|
date | Fri, 26 Nov 2010 22:06:52 +0000 |
parents | |
children | 005a54380502 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/historywidget.cpp Fri Nov 26 22:06:52 2010 +0000 @@ -0,0 +1,94 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + EasyMercurial + + Based on HgExplorer by Jari Korhonen + Copyright (c) 2010 Jari Korhonen + Copyright (c) 2010 Chris Cannam + Copyright (c) 2010 Queen Mary, University of London + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#include "historywidget.h" + +#include "panned.h" +#include "panner.h" +#include "grapher.h" +#include "debug.h" + +#include <iostream> + +#include <QGridLayout> + +HistoryWidget::HistoryWidget() +{ + m_panned = new Panned; + m_panner = new Panner; + + QGridLayout *layout = new QGridLayout; + layout->addWidget(m_panned, 0, 0); + layout->addWidget(m_panner, 0, 1); + m_panner->setMaximumWidth(80); + m_panner->connectToPanned(m_panned); + + setLayout(layout); +} + +HistoryWidget::~HistoryWidget() +{ + clearChangesets(); +} + +void HistoryWidget::clearChangesets() +{ + foreach (Changeset *cs, m_changesets) delete cs; + m_changesets.clear(); +} + +void HistoryWidget::parseLog(QString log) +{ + QGraphicsScene *scene = new QGraphicsScene(); + Changesets csets = parseChangeSets(log); + ChangesetItem *tipItem = 0; + + if (!csets.empty()) { + Grapher g(scene); + try { + g.layout(csets); + } catch (std::string s) { + std::cerr << "Internal error: Layout failed: " << s << std::endl; + } + tipItem = g.getItemFor(csets[0]); + } + + QGraphicsScene *oldScene = m_panned->scene(); + m_panned->setScene(scene); + m_panner->setScene(scene); + + if (oldScene) delete oldScene; + clearChangesets(); + + m_changesets = csets; + + if (tipItem) tipItem->ensureVisible(); +} + +Changesets HistoryWidget::parseChangeSets(QString changeSetsStr) +{ + Changesets csets = Changeset::parseChangesets(changeSetsStr); + for (int i = 0; i+1 < csets.size(); ++i) { + Changeset *cs = csets[i]; + if (cs->parents().empty()) { + QStringList list; + list.push_back(csets[i+1]->id()); + cs->setParents(list); + } + } + return csets; +}