annotate hgtabwidget.cpp @ 168:4bad3c5c053a

* Add "Show summary" feature * Add simplistic kinetic scrolling to history widget
author Chris Cannam
date Tue, 14 Dec 2010 17:20:10 +0000
parents 5c262ac73948
children b6dd1ee0e486
rev   line source
Chris@57 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@57 2
Chris@57 3 /*
Chris@57 4 EasyMercurial
Chris@57 5
Chris@57 6 Based on HgExplorer by Jari Korhonen
Chris@57 7 Copyright (c) 2010 Jari Korhonen
Chris@57 8 Copyright (c) 2010 Chris Cannam
Chris@57 9 Copyright (c) 2010 Queen Mary, University of London
Chris@57 10
Chris@57 11 This program is free software; you can redistribute it and/or
Chris@57 12 modify it under the terms of the GNU General Public License as
Chris@57 13 published by the Free Software Foundation; either version 2 of the
Chris@57 14 License, or (at your option) any later version. See the file
Chris@57 15 COPYING included with this distribution for more information.
Chris@57 16 */
jtkorhonen@0 17
Chris@96 18 #include "hgtabwidget.h"
jtkorhonen@0 19 #include "common.h"
Chris@88 20 #include "filestatuswidget.h"
Chris@116 21 #include "historywidget.h"
Chris@44 22
Chris@50 23 #include <QClipboard>
Chris@50 24 #include <QContextMenuEvent>
Chris@50 25 #include <QApplication>
Chris@50 26
Chris@44 27 #include <iostream>
jtkorhonen@0 28
Chris@96 29 HgTabWidget::HgTabWidget(QWidget *parent,
Chris@95 30 QString remoteRepo,
Chris@95 31 QString workFolderPath) :
Chris@117 32 QTabWidget(parent)
jtkorhonen@0 33 {
Chris@91 34 // Work page
Chris@116 35 m_fileStatusWidget = new FileStatusWidget;
Chris@116 36 m_fileStatusWidget->setLocalPath(workFolderPath);
Chris@116 37 m_fileStatusWidget->setRemoteURL(remoteRepo);
Chris@116 38 connect(m_fileStatusWidget, SIGNAL(selectionChanged()),
Chris@95 39 this, SIGNAL(selectionChanged()));
Chris@116 40 addTab(m_fileStatusWidget, tr("My work"));
Chris@88 41
Chris@43 42 // History graph page
Chris@116 43 m_historyWidget = new HistoryWidget;
Chris@116 44 addTab(m_historyWidget, tr("History"));
Chris@141 45
Chris@141 46 connect(m_historyWidget, SIGNAL(commit()),
Chris@141 47 this, SIGNAL(commit()));
Chris@141 48
Chris@141 49 connect(m_historyWidget, SIGNAL(revert()),
Chris@141 50 this, SIGNAL(revert()));
Chris@141 51
Chris@168 52 connect(m_historyWidget, SIGNAL(showSummary()),
Chris@168 53 this, SIGNAL(showSummary()));
Chris@168 54
Chris@141 55 connect(m_historyWidget, SIGNAL(diffWorkingFolder()),
Chris@141 56 this, SIGNAL(diffWorkingFolder()));
Chris@141 57
Chris@153 58 connect(m_historyWidget, SIGNAL(showWork()),
Chris@153 59 this, SLOT(showWorkTab()));
Chris@153 60
Chris@141 61 connect(m_historyWidget, SIGNAL(updateTo(QString)),
Chris@141 62 this, SIGNAL(updateTo(QString)));
Chris@141 63
Chris@141 64 connect(m_historyWidget, SIGNAL(diffToCurrent(QString)),
Chris@141 65 this, SIGNAL(diffToCurrent(QString)));
Chris@141 66
Chris@148 67 connect(m_historyWidget, SIGNAL(diffToParent(QString, QString)),
Chris@148 68 this, SIGNAL(diffToParent(QString, QString)));
Chris@141 69
Chris@141 70 connect(m_historyWidget, SIGNAL(mergeFrom(QString)),
Chris@141 71 this, SIGNAL(mergeFrom(QString)));
Chris@141 72
Chris@141 73 connect(m_historyWidget, SIGNAL(tag(QString)),
Chris@141 74 this, SIGNAL(tag(QString)));
jtkorhonen@32 75 }
jtkorhonen@32 76
Chris@96 77 void HgTabWidget::clearSelections()
Chris@94 78 {
Chris@116 79 m_fileStatusWidget->clearSelections();
Chris@94 80 }
Chris@94 81
Chris@153 82 void HgTabWidget::setCurrent(QStringList ids, QString branch)
Chris@128 83 {
Chris@163 84 bool showUncommitted = false;
Chris@163 85 if (canRevert()) showUncommitted = true;
Chris@163 86 m_historyWidget->setCurrent(ids, branch, showUncommitted);
Chris@129 87 }
Chris@129 88
Chris@154 89 void HgTabWidget::updateHistory()
Chris@154 90 {
Chris@154 91 m_historyWidget->update();
Chris@154 92 }
Chris@154 93
Chris@163 94 bool HgTabWidget::canDiff() const
Chris@163 95 {
Chris@163 96 if (!m_fileStatusWidget->getSelectedAddableFiles().empty()) return false;
Chris@163 97 return m_fileStatusWidget->haveChangesToCommit() ||
Chris@163 98 !m_fileStatusWidget->getAllUnresolvedFiles().empty();
Chris@163 99 }
Chris@163 100
Chris@96 101 bool HgTabWidget::canCommit() const
Chris@90 102 {
Chris@116 103 if (!m_fileStatusWidget->getSelectedAddableFiles().empty()) return false;
Chris@163 104 return m_fileStatusWidget->haveChangesToCommit() &&
Chris@163 105 m_fileStatusWidget->getAllUnresolvedFiles().empty();
Chris@90 106 }
jtkorhonen@0 107
Chris@109 108 bool HgTabWidget::canRevert() const
Chris@109 109 {
Chris@163 110 if (!m_fileStatusWidget->getSelectedAddableFiles().empty()) return false;
Chris@116 111 return m_fileStatusWidget->haveChangesToCommit() ||
Chris@163 112 !m_fileStatusWidget->getAllUnresolvedFiles().empty();
Chris@109 113 }
Chris@109 114
Chris@96 115 bool HgTabWidget::canAdd() const
Chris@95 116 {
Chris@116 117 if (m_fileStatusWidget->getSelectedAddableFiles().empty()) return false;
Chris@116 118 if (!m_fileStatusWidget->getSelectedCommittableFiles().empty()) return false;
Chris@116 119 if (!m_fileStatusWidget->getSelectedRemovableFiles().empty()) return false;
Chris@95 120 return true;
Chris@95 121 }
Chris@95 122
Chris@96 123 bool HgTabWidget::canRemove() const
Chris@95 124 {
Chris@116 125 if (m_fileStatusWidget->getSelectedRemovableFiles().empty()) return false;
Chris@116 126 if (!m_fileStatusWidget->getSelectedAddableFiles().empty()) return false;
Chris@95 127 return true;
Chris@95 128 }
Chris@95 129
Chris@163 130 bool HgTabWidget::canResolve() const
Chris@95 131 {
Chris@163 132 return !m_fileStatusWidget->getSelectedUnresolvedFiles().empty();
Chris@95 133 }
Chris@95 134
Chris@96 135 QStringList HgTabWidget::getAllSelectedFiles() const
Chris@95 136 {
Chris@116 137 return m_fileStatusWidget->getAllSelectedFiles();
Chris@95 138 }
Chris@95 139
Chris@109 140 QStringList HgTabWidget::getAllCommittableFiles() const
Chris@109 141 {
Chris@116 142 return m_fileStatusWidget->getAllCommittableFiles();
Chris@109 143 }
Chris@109 144
Chris@96 145 QStringList HgTabWidget::getSelectedCommittableFiles() const
Chris@95 146 {
Chris@116 147 return m_fileStatusWidget->getSelectedCommittableFiles();
Chris@95 148 }
Chris@95 149
Chris@109 150 QStringList HgTabWidget::getAllRevertableFiles() const
Chris@109 151 {
Chris@116 152 return m_fileStatusWidget->getAllRevertableFiles();
Chris@109 153 }
Chris@109 154
Chris@109 155 QStringList HgTabWidget::getSelectedRevertableFiles() const
Chris@109 156 {
Chris@116 157 return m_fileStatusWidget->getSelectedRevertableFiles();
Chris@109 158 }
Chris@109 159
Chris@96 160 QStringList HgTabWidget::getSelectedAddableFiles() const
Chris@95 161 {
Chris@116 162 return m_fileStatusWidget->getSelectedAddableFiles();
Chris@95 163 }
Chris@95 164
Chris@109 165 QStringList HgTabWidget::getAllRemovableFiles() const
Chris@109 166 {
Chris@116 167 return m_fileStatusWidget->getAllRemovableFiles();
Chris@109 168 }
Chris@109 169
Chris@96 170 QStringList HgTabWidget::getSelectedRemovableFiles() const
Chris@95 171 {
Chris@116 172 return m_fileStatusWidget->getSelectedRemovableFiles();
Chris@95 173 }
Chris@95 174
Chris@163 175 QStringList HgTabWidget::getAllUnresolvedFiles() const
Chris@163 176 {
Chris@163 177 return m_fileStatusWidget->getAllUnresolvedFiles();
Chris@163 178 }
Chris@163 179
Chris@163 180 QStringList HgTabWidget::getSelectedUnresolvedFiles() const
Chris@163 181 {
Chris@163 182 return m_fileStatusWidget->getSelectedUnresolvedFiles();
Chris@163 183 }
Chris@163 184
Chris@96 185 void HgTabWidget::updateWorkFolderFileList(QString fileList)
jtkorhonen@0 186 {
Chris@116 187 m_fileStates.parseStates(fileList);
Chris@116 188 m_fileStatusWidget->setFileStates(m_fileStates);
jtkorhonen@0 189 }
jtkorhonen@0 190
Chris@120 191 void HgTabWidget::setNewLog(QString hgLogList)
jtkorhonen@0 192 {
Chris@120 193 m_historyWidget->parseNewLog(hgLogList);
Chris@134 194 if (m_historyWidget->haveNewItems()) {
Chris@153 195 showHistoryTab();
Chris@134 196 }
Chris@120 197 }
Chris@120 198
Chris@120 199 void HgTabWidget::addIncrementalLog(QString hgLogList)
Chris@120 200 {
Chris@120 201 m_historyWidget->parseIncrementalLog(hgLogList);
Chris@134 202 if (m_historyWidget->haveNewItems()) {
Chris@153 203 showHistoryTab();
Chris@134 204 }
jtkorhonen@0 205 }
jtkorhonen@0 206
Chris@96 207 void HgTabWidget::setWorkFolderAndRepoNames(QString workFolderPath, QString remoteRepoPath)
jtkorhonen@0 208 {
Chris@116 209 m_fileStatusWidget->setLocalPath(workFolderPath);
Chris@116 210 m_fileStatusWidget->setRemoteURL(remoteRepoPath);
jtkorhonen@0 211 }
Chris@106 212
Chris@115 213 void HgTabWidget::setState(QString state)
Chris@106 214 {
Chris@116 215 m_fileStatusWidget->setState(state);
Chris@106 216 }
Chris@153 217
Chris@153 218 void HgTabWidget::showWorkTab()
Chris@153 219 {
Chris@153 220 setCurrentWidget(m_fileStatusWidget);
Chris@153 221 }
Chris@153 222
Chris@153 223 void HgTabWidget::showHistoryTab()
Chris@153 224 {
Chris@153 225 setCurrentWidget(m_historyWidget);
Chris@153 226 }
Chris@153 227