# HG changeset patch # User Chris Cannam # Date 1290809212 0 # Node ID 807c79350bf1caaddb04b5e586c2cbb98c3b5e41 # Parent 78374cefa10fe3a0c2aedbac2355ec51d32284cd * Pull history tab out into its own widget diff -r 78374cefa10f -r 807c79350bf1 easyhg.pro --- a/easyhg.pro Fri Nov 26 21:48:25 2010 +0000 +++ b/easyhg.pro Fri Nov 26 22:06:52 2010 +0000 @@ -33,7 +33,8 @@ filestates.h \ filestatuswidget.h \ confirmcommentdialog.h \ - hgaction.h + hgaction.h \ + historywidget.h SOURCES = main.cpp \ mainwindow.cpp \ hgtabwidget.cpp \ @@ -57,7 +58,8 @@ selectablelabel.cpp \ filestates.cpp \ filestatuswidget.cpp \ - confirmcommentdialog.cpp + confirmcommentdialog.cpp \ + historywidget.cpp macx-* { SOURCES += common_osx.mm diff -r 78374cefa10f -r 807c79350bf1 hgtabwidget.cpp --- a/hgtabwidget.cpp Fri Nov 26 21:48:25 2010 +0000 +++ b/hgtabwidget.cpp Fri Nov 26 22:06:52 2010 +0000 @@ -17,13 +17,8 @@ #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 "historywidget.h" #include #include @@ -37,57 +32,47 @@ QTabWidget(parent) { // Work page - fileStatusWidget = new FileStatusWidget; - fileStatusWidget->setLocalPath(workFolderPath); - fileStatusWidget->setRemoteURL(remoteRepo); - connect(fileStatusWidget, SIGNAL(selectionChanged()), + m_fileStatusWidget = new FileStatusWidget; + m_fileStatusWidget->setLocalPath(workFolderPath); + m_fileStatusWidget->setRemoteURL(remoteRepo); + connect(m_fileStatusWidget, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged())); - addTab(fileStatusWidget, tr("My work")); + addTab(m_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")); + m_historyWidget = new HistoryWidget; + addTab(m_historyWidget, tr("History")); } void HgTabWidget::clearSelections() { - fileStatusWidget->clearSelections(); + m_fileStatusWidget->clearSelections(); } bool HgTabWidget::canCommit() const { - if (!fileStatusWidget->getSelectedAddableFiles().empty()) return false; - return fileStatusWidget->haveChangesToCommit(); + if (!m_fileStatusWidget->getSelectedAddableFiles().empty()) return false; + return m_fileStatusWidget->haveChangesToCommit(); } bool HgTabWidget::canRevert() const { - return fileStatusWidget->haveChangesToCommit() || - !fileStatusWidget->getSelectedRevertableFiles().empty(); + return m_fileStatusWidget->haveChangesToCommit() || + !m_fileStatusWidget->getSelectedRevertableFiles().empty(); } bool HgTabWidget::canAdd() const { - if (fileStatusWidget->getSelectedAddableFiles().empty()) return false; - if (!fileStatusWidget->getSelectedCommittableFiles().empty()) return false; - if (!fileStatusWidget->getSelectedRemovableFiles().empty()) return false; + if (m_fileStatusWidget->getSelectedAddableFiles().empty()) return false; + if (!m_fileStatusWidget->getSelectedCommittableFiles().empty()) return false; + if (!m_fileStatusWidget->getSelectedRemovableFiles().empty()) return false; return true; } bool HgTabWidget::canRemove() const { - if (fileStatusWidget->getSelectedRemovableFiles().empty()) return false; - if (!fileStatusWidget->getSelectedAddableFiles().empty()) return false; + if (m_fileStatusWidget->getSelectedRemovableFiles().empty()) return false; + if (!m_fileStatusWidget->getSelectedAddableFiles().empty()) return false; return true; } @@ -98,94 +83,62 @@ QStringList HgTabWidget::getAllSelectedFiles() const { - return fileStatusWidget->getAllSelectedFiles(); + return m_fileStatusWidget->getAllSelectedFiles(); } QStringList HgTabWidget::getAllCommittableFiles() const { - return fileStatusWidget->getAllCommittableFiles(); + return m_fileStatusWidget->getAllCommittableFiles(); } QStringList HgTabWidget::getSelectedCommittableFiles() const { - return fileStatusWidget->getSelectedCommittableFiles(); + return m_fileStatusWidget->getSelectedCommittableFiles(); } QStringList HgTabWidget::getAllRevertableFiles() const { - return fileStatusWidget->getAllRevertableFiles(); + return m_fileStatusWidget->getAllRevertableFiles(); } QStringList HgTabWidget::getSelectedRevertableFiles() const { - return fileStatusWidget->getSelectedRevertableFiles(); + return m_fileStatusWidget->getSelectedRevertableFiles(); } QStringList HgTabWidget::getSelectedAddableFiles() const { - return fileStatusWidget->getSelectedAddableFiles(); + return m_fileStatusWidget->getSelectedAddableFiles(); } QStringList HgTabWidget::getAllRemovableFiles() const { - return fileStatusWidget->getAllRemovableFiles(); + return m_fileStatusWidget->getAllRemovableFiles(); } QStringList HgTabWidget::getSelectedRemovableFiles() const { - return fileStatusWidget->getSelectedRemovableFiles(); + return m_fileStatusWidget->getSelectedRemovableFiles(); } void HgTabWidget::updateWorkFolderFileList(QString fileList) { - fileStates.parseStates(fileList); - fileStatusWidget->setFileStates(fileStates); + m_fileStates.parseStates(fileList); + m_fileStatusWidget->setFileStates(m_fileStates); } void HgTabWidget::updateLocalRepoHgLogList(QString hgLogList) { - //!!! - Panned *panned = static_cast(historyGraphWidget); - Panner *panner = static_cast(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(); - //!!! track lifecycle of those Changesets -} - -Changesets HgTabWidget::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; + m_historyWidget->parseLog(hgLogList); } void HgTabWidget::setWorkFolderAndRepoNames(QString workFolderPath, QString remoteRepoPath) { - fileStatusWidget->setLocalPath(workFolderPath); - fileStatusWidget->setRemoteURL(remoteRepoPath); + m_fileStatusWidget->setLocalPath(workFolderPath); + m_fileStatusWidget->setRemoteURL(remoteRepoPath); } void HgTabWidget::setState(QString state) { - fileStatusWidget->setState(state); + m_fileStatusWidget->setState(state); } diff -r 78374cefa10f -r 807c79350bf1 hgtabwidget.h --- a/hgtabwidget.h Fri Nov 26 21:48:25 2010 +0000 +++ b/hgtabwidget.h Fri Nov 26 22:06:52 2010 +0000 @@ -31,7 +31,7 @@ #include class FileStatusWidget; - +class HistoryWidget; class HgTabWidget: public QTabWidget { @@ -45,7 +45,7 @@ void setWorkFolderAndRepoNames(QString workFolderPath, QString remoteRepoPath); void setState(QString state); - FileStates getFileStates() { return fileStates; } + FileStates getFileStates() { return m_fileStates; } bool canCommit() const; bool canRevert() const; @@ -74,14 +74,9 @@ void clearSelections(); private: - FileStatusWidget *fileStatusWidget; - - QWidget *historyGraphPageWidget; - QWidget *historyGraphWidget; - QWidget *historyGraphPanner; - QWidget *historyPageWidget; - - FileStates fileStates; + FileStatusWidget *m_fileStatusWidget; + HistoryWidget *m_historyWidget; + FileStates m_fileStates; Changesets parseChangeSets(QString changeSetsStr); }; diff -r 78374cefa10f -r 807c79350bf1 historywidget.cpp --- /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 + +#include + +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; +} diff -r 78374cefa10f -r 807c79350bf1 historywidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/historywidget.h Fri Nov 26 22:06:52 2010 +0000 @@ -0,0 +1,48 @@ +/* -*- 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. +*/ + +#ifndef HISTORYWIDGET_H +#define HISTORYWIDGET_H + +#include "changeset.h" + +#include + +class Panned; +class Panner; + +class HistoryWidget : public QWidget +{ + Q_OBJECT + +public: + HistoryWidget(); + virtual ~HistoryWidget(); + + void parseLog(QString log); + +private: + Changesets m_changesets; + + Panned *m_panned; + Panner *m_panner; + + void clearChangesets(); + Changesets parseChangeSets(QString); +}; + +#endif diff -r 78374cefa10f -r 807c79350bf1 mainwindow.cpp --- a/mainwindow.cpp Fri Nov 26 21:48:25 2010 +0000 +++ b/mainwindow.cpp Fri Nov 26 22:06:52 2010 +0000 @@ -1140,10 +1140,14 @@ case ACT_REMOVE: case ACT_ADD: case ACT_COMMIT: + case ACT_REVERT: + hgTabs->clearSelections(); + shouldHgStat = true; + break; + case ACT_FILEDIFF: case ACT_FOLDERDIFF: case ACT_CHGSETDIFF: - case ACT_REVERT: case ACT_SERVE: case ACT_TAG: case ACT_HG_IGNORE: