annotate src/hgtabwidget.cpp @ 425:ad106f5fe75f

Add "Ignore Files" and "Edit Ignored List" to Work menu (latter is subsumed from Advanced menu formerly). Also subsume Serve via HTTP into File menu as Share Repository, and add a more helpful description of it. Remove Advanced menu
author Chris Cannam
date Thu, 23 Jun 2011 10:58:32 +0100
parents b9c153e00e84
children 896b7903e8f2
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@425 199 bool HgTabWidget::canIgnore() const
Chris@425 200 {
Chris@425 201 return canAdd();
Chris@425 202 }
Chris@425 203
Chris@172 204 bool HgTabWidget::haveChangesToCommit() const
Chris@172 205 {
Chris@172 206 return m_fileStatusWidget->haveChangesToCommit();
Chris@172 207 }
Chris@172 208
Chris@109 209 QStringList HgTabWidget::getAllCommittableFiles() const
Chris@109 210 {
Chris@116 211 return m_fileStatusWidget->getAllCommittableFiles();
Chris@109 212 }
Chris@109 213
Chris@109 214 QStringList HgTabWidget::getAllRevertableFiles() const
Chris@109 215 {
Chris@116 216 return m_fileStatusWidget->getAllRevertableFiles();
Chris@109 217 }
Chris@109 218
Chris@96 219 QStringList HgTabWidget::getSelectedAddableFiles() const
Chris@95 220 {
Chris@116 221 return m_fileStatusWidget->getSelectedAddableFiles();
Chris@95 222 }
Chris@95 223
Chris@96 224 QStringList HgTabWidget::getSelectedRemovableFiles() const
Chris@95 225 {
Chris@116 226 return m_fileStatusWidget->getSelectedRemovableFiles();
Chris@95 227 }
Chris@95 228
Chris@163 229 QStringList HgTabWidget::getAllUnresolvedFiles() const
Chris@163 230 {
Chris@163 231 return m_fileStatusWidget->getAllUnresolvedFiles();
Chris@163 232 }
Chris@163 233
Chris@96 234 void HgTabWidget::updateWorkFolderFileList(QString fileList)
jtkorhonen@0 235 {
Chris@116 236 m_fileStates.parseStates(fileList);
Chris@116 237 m_fileStatusWidget->setFileStates(m_fileStates);
jtkorhonen@0 238 }
jtkorhonen@0 239
Chris@120 240 void HgTabWidget::setNewLog(QString hgLogList)
jtkorhonen@0 241 {
Chris@120 242 m_historyWidget->parseNewLog(hgLogList);
Chris@134 243 if (m_historyWidget->haveNewItems()) {
Chris@153 244 showHistoryTab();
Chris@134 245 }
Chris@120 246 }
Chris@120 247
Chris@120 248 void HgTabWidget::addIncrementalLog(QString hgLogList)
Chris@120 249 {
Chris@120 250 m_historyWidget->parseIncrementalLog(hgLogList);
Chris@134 251 if (m_historyWidget->haveNewItems()) {
Chris@153 252 showHistoryTab();
Chris@134 253 }
jtkorhonen@0 254 }
jtkorhonen@0 255
Chris@287 256 void HgTabWidget::setLocalPath(QString workFolderPath)
jtkorhonen@0 257 {
Chris@116 258 m_fileStatusWidget->setLocalPath(workFolderPath);
Chris@106 259 }
Chris@153 260
Chris@153 261 void HgTabWidget::showWorkTab()
Chris@153 262 {
Chris@153 263 setCurrentWidget(m_fileStatusWidget);
Chris@153 264 }
Chris@153 265
Chris@153 266 void HgTabWidget::showHistoryTab()
Chris@153 267 {
Chris@153 268 setCurrentWidget(m_historyWidget);
Chris@153 269 }
Chris@153 270