Mercurial > hg > easyhg
view hgexpwidget.cpp @ 95:d1be9712818a
* Update actions appropriately when selections are changed
author | Chris Cannam |
---|---|
date | Wed, 24 Nov 2010 16:29:05 +0000 |
parents | 44ed7766d55a |
children |
line wrap: on
line source
/* -*- 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 "hgexpwidget.h" #include "common.h" #include "logparser.h" #include "changeset.h" #include "changesetitem.h" #include "grapher.h" #include "panner.h" #include "panned.h" #include "filestatuswidget.h" #include <QClipboard> #include <QContextMenuEvent> #include <QApplication> #include <iostream> HgExpWidget::HgExpWidget(QWidget *parent, QString remoteRepo, QString workFolderPath) : QTabWidget(parent) { // Work page fileStatusWidget = new FileStatusWidget; fileStatusWidget->setLocalPath(workFolderPath); fileStatusWidget->setRemoteURL(remoteRepo); connect(fileStatusWidget, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged())); addTab(fileStatusWidget, tr("My work")); // History graph page historyGraphPageWidget = new QWidget; Panned *panned = new Panned; Panner *panner = new Panner; historyGraphWidget = panned; historyGraphPanner = panner; QGridLayout *layout = new QGridLayout; layout->addWidget(historyGraphWidget, 0, 0); layout->addWidget(historyGraphPanner, 0, 1); panner->setMaximumWidth(80); panner->connectToPanned(panned); historyGraphPageWidget->setLayout(layout); addTab(historyGraphPageWidget, tr("History")); } void HgExpWidget::clearSelections() { fileStatusWidget->clearSelections(); } bool HgExpWidget::canCommit() const { return fileStatusWidget->haveChangesToCommit(); } bool HgExpWidget::canAdd() const { if (fileStatusWidget->getSelectedAddableFiles().empty()) return false; if (!fileStatusWidget->getSelectedCommittableFiles().empty()) return false; if (!fileStatusWidget->getSelectedRemovableFiles().empty()) return false; return true; } bool HgExpWidget::canRemove() const { if (fileStatusWidget->getSelectedRemovableFiles().empty()) return false; if (!fileStatusWidget->getSelectedAddableFiles().empty()) return false; return true; } bool HgExpWidget::canDoDiff() const { return canCommit(); } QStringList HgExpWidget::getAllSelectedFiles() const { return fileStatusWidget->getAllSelectedFiles(); } QStringList HgExpWidget::getSelectedCommittableFiles() const { return fileStatusWidget->getSelectedCommittableFiles(); } QStringList HgExpWidget::getSelectedAddableFiles() const { return fileStatusWidget->getSelectedAddableFiles(); } QStringList HgExpWidget::getSelectedRemovableFiles() const { return fileStatusWidget->getSelectedRemovableFiles(); } void HgExpWidget::updateWorkFolderFileList(QString fileList) { fileStates.parseStates(fileList); fileStatusWidget->setFileStates(fileStates); } void HgExpWidget::updateLocalRepoHgLogList(QString hgLogList) { //!!! Panned *panned = static_cast<Panned *>(historyGraphWidget); Panner *panner = static_cast<Panner *>(historyGraphPanner); QGraphicsScene *scene = new QGraphicsScene(); Changesets csets = parseChangeSets(hgLogList); if (csets.empty()) return; Grapher g(scene); try { g.layout(csets); } catch (std::string s) { std::cerr << "Internal error: Layout failed: " << s << std::endl; } QGraphicsScene *oldScene = panned->scene(); panned->setScene(scene); panner->setScene(scene); if (oldScene) delete oldScene; ChangesetItem *tipItem = g.getItemFor(csets[0]); if (tipItem) tipItem->ensureVisible(); } Changesets HgExpWidget::parseChangeSets(QString changeSetsStr) { Changesets csets; LogList log = LogParser(changeSetsStr).parse(); foreach (LogEntry e, log) { Changeset *cs = new Changeset(); foreach (QString key, e.keys()) { if (key == "parents") { QStringList parents = e.value(key).split (" ", QString::SkipEmptyParts); cs->setParents(parents); } else if (key == "timestamp") { cs->setTimestamp(e.value(key).split(" ")[0].toULongLong()); } else { cs->setProperty(key.toLocal8Bit().data(), e.value(key)); } } csets.push_back(cs); } 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; } void HgExpWidget::setWorkFolderAndRepoNames(QString workFolderPath, QString remoteRepoPath) { fileStatusWidget->setLocalPath(workFolderPath); fileStatusWidget->setRemoteURL(remoteRepoPath); }