annotate hgtabwidget.cpp @ 363:f89e50d748ed feature_93

Enable Push button whenever the repo is non-empty, even when there is no remote location -- ask for remote location when it is pressed. Also change "Change Remote..." to "Set Remote..." to be consistent with this new usage
author Chris Cannam
date Thu, 17 Mar 2011 17:48:18 +0000
parents 4cd753e083cc
children
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@244 8 Copyright (c) 2011 Chris Cannam
Chris@244 9 Copyright (c) 2011 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 workFolderPath) :
Chris@117 31 QTabWidget(parent)
jtkorhonen@0 32 {
Chris@326 33 // Work tab
Chris@116 34 m_fileStatusWidget = new FileStatusWidget;
Chris@116 35 m_fileStatusWidget->setLocalPath(workFolderPath);
Chris@326 36
Chris@116 37 connect(m_fileStatusWidget, SIGNAL(selectionChanged()),
Chris@95 38 this, SIGNAL(selectionChanged()));
Chris@326 39
Chris@199 40 connect(m_fileStatusWidget, SIGNAL(showAllChanged(bool)),
Chris@199 41 this, SIGNAL(showAllChanged(bool)));
Chris@326 42
Chris@326 43 connect(m_fileStatusWidget, SIGNAL(annotateFiles(QStringList)),
Chris@326 44 this, SIGNAL(annotateFiles(QStringList)));
Chris@326 45
Chris@326 46 connect(m_fileStatusWidget, SIGNAL(diffFiles(QStringList)),
Chris@326 47 this, SIGNAL(diffFiles(QStringList)));
Chris@326 48
Chris@326 49 connect(m_fileStatusWidget, SIGNAL(commitFiles(QStringList)),
Chris@326 50 this, SIGNAL(commitFiles(QStringList)));
Chris@326 51
Chris@326 52 connect(m_fileStatusWidget, SIGNAL(revertFiles(QStringList)),
Chris@326 53 this, SIGNAL(revertFiles(QStringList)));
Chris@326 54
Chris@361 55 connect(m_fileStatusWidget, SIGNAL(renameFiles(QStringList)),
Chris@361 56 this, SIGNAL(renameFiles(QStringList)));
Chris@361 57
Chris@361 58 connect(m_fileStatusWidget, SIGNAL(copyFiles(QStringList)),
Chris@361 59 this, SIGNAL(copyFiles(QStringList)));
Chris@361 60
Chris@326 61 connect(m_fileStatusWidget, SIGNAL(addFiles(QStringList)),
Chris@326 62 this, SIGNAL(addFiles(QStringList)));
Chris@326 63
Chris@326 64 connect(m_fileStatusWidget, SIGNAL(removeFiles(QStringList)),
Chris@326 65 this, SIGNAL(removeFiles(QStringList)));
Chris@326 66
Chris@326 67 connect(m_fileStatusWidget, SIGNAL(redoFileMerges(QStringList)),
Chris@326 68 this, SIGNAL(redoFileMerges(QStringList)));
Chris@326 69
Chris@326 70 connect(m_fileStatusWidget, SIGNAL(markFilesResolved(QStringList)),
Chris@326 71 this, SIGNAL(markFilesResolved(QStringList)));
Chris@326 72
Chris@326 73 connect(m_fileStatusWidget, SIGNAL(ignoreFiles(QStringList)),
Chris@326 74 this, SIGNAL(ignoreFiles(QStringList)));
Chris@326 75
Chris@326 76 connect(m_fileStatusWidget, SIGNAL(unIgnoreFiles(QStringList)),
Chris@326 77 this, SIGNAL(unIgnoreFiles(QStringList)));
Chris@326 78
Chris@116 79 addTab(m_fileStatusWidget, tr("My work"));
Chris@88 80
Chris@326 81 // History graph tab
Chris@116 82 m_historyWidget = new HistoryWidget;
Chris@116 83 addTab(m_historyWidget, tr("History"));
Chris@141 84
Chris@141 85 connect(m_historyWidget, SIGNAL(commit()),
Chris@141 86 this, SIGNAL(commit()));
Chris@141 87
Chris@141 88 connect(m_historyWidget, SIGNAL(revert()),
Chris@141 89 this, SIGNAL(revert()));
Chris@141 90
Chris@168 91 connect(m_historyWidget, SIGNAL(showSummary()),
Chris@168 92 this, SIGNAL(showSummary()));
Chris@168 93
Chris@311 94 connect(m_historyWidget, SIGNAL(newBranch()),
Chris@311 95 this, SIGNAL(newBranch()));
Chris@311 96
Chris@311 97 connect(m_historyWidget, SIGNAL(noBranch()),
Chris@311 98 this, SIGNAL(noBranch()));
Chris@311 99
Chris@141 100 connect(m_historyWidget, SIGNAL(diffWorkingFolder()),
Chris@141 101 this, SIGNAL(diffWorkingFolder()));
Chris@141 102
Chris@153 103 connect(m_historyWidget, SIGNAL(showWork()),
Chris@153 104 this, SLOT(showWorkTab()));
Chris@153 105
Chris@141 106 connect(m_historyWidget, SIGNAL(updateTo(QString)),
Chris@141 107 this, SIGNAL(updateTo(QString)));
Chris@141 108
Chris@141 109 connect(m_historyWidget, SIGNAL(diffToCurrent(QString)),
Chris@141 110 this, SIGNAL(diffToCurrent(QString)));
Chris@141 111
Chris@148 112 connect(m_historyWidget, SIGNAL(diffToParent(QString, QString)),
Chris@148 113 this, SIGNAL(diffToParent(QString, QString)));
Chris@141 114
Chris@289 115 connect(m_historyWidget, SIGNAL(showSummary(Changeset *)),
Chris@289 116 this, SIGNAL(showSummary(Changeset *)));
Chris@288 117
Chris@141 118 connect(m_historyWidget, SIGNAL(mergeFrom(QString)),
Chris@141 119 this, SIGNAL(mergeFrom(QString)));
Chris@141 120
Chris@278 121 connect(m_historyWidget, SIGNAL(newBranch(QString)),
Chris@278 122 this, SIGNAL(newBranch(QString)));
Chris@278 123
Chris@141 124 connect(m_historyWidget, SIGNAL(tag(QString)),
Chris@141 125 this, SIGNAL(tag(QString)));
jtkorhonen@32 126 }
jtkorhonen@32 127
Chris@96 128 void HgTabWidget::clearSelections()
Chris@94 129 {
Chris@116 130 m_fileStatusWidget->clearSelections();
Chris@94 131 }
Chris@94 132
Chris@153 133 void HgTabWidget::setCurrent(QStringList ids, QString branch)
Chris@128 134 {
Chris@172 135 bool showUncommitted = haveChangesToCommit();
Chris@163 136 m_historyWidget->setCurrent(ids, branch, showUncommitted);
Chris@129 137 }
Chris@129 138
Chris@230 139 void HgTabWidget::updateFileStates()
Chris@230 140 {
Chris@230 141 m_fileStatusWidget->updateWidgets();
Chris@230 142 }
Chris@230 143
Chris@154 144 void HgTabWidget::updateHistory()
Chris@154 145 {
Chris@154 146 m_historyWidget->update();
Chris@154 147 }
Chris@154 148
Chris@163 149 bool HgTabWidget::canDiff() const
Chris@163 150 {
Chris@237 151 return canRevert();
Chris@163 152 }
Chris@163 153
Chris@96 154 bool HgTabWidget::canCommit() const
Chris@90 155 {
Chris@237 156 if (!m_fileStatusWidget->haveChangesToCommit()) return false;
Chris@237 157 if (!m_fileStatusWidget->getAllUnresolvedFiles().empty()) return false;
Chris@326 158 return true;
Chris@90 159 }
jtkorhonen@0 160
Chris@109 161 bool HgTabWidget::canRevert() const
Chris@109 162 {
Chris@237 163 // Not the same as canCommit() -- we can revert (and diff)
Chris@237 164 // unresolved files, but we can't commit them
Chris@237 165 if (!m_fileStatusWidget->haveChangesToCommit() &&
Chris@237 166 m_fileStatusWidget->getAllUnresolvedFiles().empty()) return false;
Chris@326 167 return true;
Chris@109 168 }
Chris@109 169
Chris@96 170 bool HgTabWidget::canAdd() const
Chris@95 171 {
Chris@327 172 // Permit this only when work tab is visible
Chris@327 173 if (currentIndex() != 0) return false;
Chris@327 174
Chris@204 175 QStringList addable = m_fileStatusWidget->getSelectedAddableFiles();
Chris@204 176 if (addable.empty()) return false;
Chris@204 177
Chris@204 178 QStringList removable = m_fileStatusWidget->getSelectedRemovableFiles();
Chris@204 179 if (!removable.empty()) return false;
Chris@204 180
Chris@326 181 return true;
Chris@95 182 }
Chris@95 183
Chris@96 184 bool HgTabWidget::canRemove() const
Chris@95 185 {
Chris@327 186 // Permit this only when work tab is visible
Chris@327 187 if (currentIndex() != 0) return false;
Chris@327 188
Chris@116 189 if (m_fileStatusWidget->getSelectedRemovableFiles().empty()) return false;
Chris@116 190 if (!m_fileStatusWidget->getSelectedAddableFiles().empty()) return false;
Chris@95 191 return true;
Chris@95 192 }
Chris@95 193
Chris@163 194 bool HgTabWidget::canResolve() const
Chris@95 195 {
Chris@326 196 return !m_fileStatusWidget->getAllUnresolvedFiles().empty();
Chris@95 197 }
Chris@95 198
Chris@172 199 bool HgTabWidget::haveChangesToCommit() const
Chris@172 200 {
Chris@172 201 return m_fileStatusWidget->haveChangesToCommit();
Chris@172 202 }
Chris@172 203
Chris@109 204 QStringList HgTabWidget::getAllCommittableFiles() const
Chris@109 205 {
Chris@116 206 return m_fileStatusWidget->getAllCommittableFiles();
Chris@109 207 }
Chris@109 208
Chris@109 209 QStringList HgTabWidget::getAllRevertableFiles() const
Chris@109 210 {
Chris@116 211 return m_fileStatusWidget->getAllRevertableFiles();
Chris@109 212 }
Chris@109 213
Chris@96 214 QStringList HgTabWidget::getSelectedAddableFiles() const
Chris@95 215 {
Chris@116 216 return m_fileStatusWidget->getSelectedAddableFiles();
Chris@95 217 }
Chris@95 218
Chris@96 219 QStringList HgTabWidget::getSelectedRemovableFiles() const
Chris@95 220 {
Chris@116 221 return m_fileStatusWidget->getSelectedRemovableFiles();
Chris@95 222 }
Chris@95 223
Chris@163 224 QStringList HgTabWidget::getAllUnresolvedFiles() const
Chris@163 225 {
Chris@163 226 return m_fileStatusWidget->getAllUnresolvedFiles();
Chris@163 227 }
Chris@163 228
Chris@96 229 void HgTabWidget::updateWorkFolderFileList(QString fileList)
jtkorhonen@0 230 {
Chris@116 231 m_fileStates.parseStates(fileList);
Chris@116 232 m_fileStatusWidget->setFileStates(m_fileStates);
jtkorhonen@0 233 }
jtkorhonen@0 234
Chris@120 235 void HgTabWidget::setNewLog(QString hgLogList)
jtkorhonen@0 236 {
Chris@120 237 m_historyWidget->parseNewLog(hgLogList);
Chris@134 238 if (m_historyWidget->haveNewItems()) {
Chris@153 239 showHistoryTab();
Chris@134 240 }
Chris@120 241 }
Chris@120 242
Chris@120 243 void HgTabWidget::addIncrementalLog(QString hgLogList)
Chris@120 244 {
Chris@120 245 m_historyWidget->parseIncrementalLog(hgLogList);
Chris@134 246 if (m_historyWidget->haveNewItems()) {
Chris@153 247 showHistoryTab();
Chris@134 248 }
jtkorhonen@0 249 }
jtkorhonen@0 250
Chris@287 251 void HgTabWidget::setLocalPath(QString workFolderPath)
jtkorhonen@0 252 {
Chris@116 253 m_fileStatusWidget->setLocalPath(workFolderPath);
Chris@106 254 }
Chris@153 255
Chris@153 256 void HgTabWidget::showWorkTab()
Chris@153 257 {
Chris@153 258 setCurrentWidget(m_fileStatusWidget);
Chris@153 259 }
Chris@153 260
Chris@153 261 void HgTabWidget::showHistoryTab()
Chris@153 262 {
Chris@153 263 setCurrentWidget(m_historyWidget);
Chris@153 264 }
Chris@153 265