Mercurial > hg > easyhg
view hgtabwidget.cpp @ 106:729438d70af8
* Retrieve and store current branch and heads; some refactoring
author | Chris Cannam |
---|---|
date | Thu, 25 Nov 2010 17:54:35 +0000 |
parents | 0bd32aedc6f6 |
children | 8ae3b44c0073 |
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 "hgtabwidget.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> HgTabWidget::HgTabWidget(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 HgTabWidget::clearSelections() { fileStatusWidget->clearSelections(); } bool HgTabWidget::canCommit() const { return fileStatusWidget->haveChangesToCommit(); } bool HgTabWidget::canAdd() const { if (fileStatusWidget->getSelectedAddableFiles().empty()) return false; if (!fileStatusWidget->getSelectedCommittableFiles().empty()) return false; if (!fileStatusWidget->getSelectedRemovableFiles().empty()) return false; return true; } bool HgTabWidget::canRemove() const { if (fileStatusWidget->getSelectedRemovableFiles().empty()) return false; if (!fileStatusWidget->getSelectedAddableFiles().empty()) return false; return true; } bool HgTabWidget::canDoDiff() const { return canCommit(); } QStringList HgTabWidget::getAllSelectedFiles() const { return fileStatusWidget->getAllSelectedFiles(); } QStringList HgTabWidget::getSelectedCommittableFiles() const { return fileStatusWidget->getSelectedCommittableFiles(); } QStringList HgTabWidget::getSelectedAddableFiles() const { return fileStatusWidget->getSelectedAddableFiles(); } QStringList HgTabWidget::getSelectedRemovableFiles() const { return fileStatusWidget->getSelectedRemovableFiles(); } QStringList HgTabWidget::getAllCommittableFiles() const { return fileStatusWidget->getAllCommittableFiles(); } QStringList HgTabWidget::getAllAddableFiles() const { return fileStatusWidget->getAllAddableFiles(); } QStringList HgTabWidget::getAllRemovableFiles() const { return fileStatusWidget->getAllRemovableFiles(); } void HgTabWidget::updateWorkFolderFileList(QString fileList) { fileStates.parseStates(fileList); fileStatusWidget->setFileStates(fileStates); } void HgTabWidget::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 HgTabWidget::parseChangeSets(QString changeSetsStr) { Changesets csets; LogList log = LogParser(changeSetsStr).parse(); foreach (LogEntry e, log) { Changeset *cs = new Changeset(e); 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 HgTabWidget::setWorkFolderAndRepoNames(QString workFolderPath, QString remoteRepoPath) { fileStatusWidget->setLocalPath(workFolderPath); fileStatusWidget->setRemoteURL(remoteRepoPath); } void HgTabWidget::setBranch(QString branch) { fileStatusWidget->setBranch(branch); }