annotate hgtabwidget.cpp @ 296:d40294e164da status_outside_tabs

Merge from the default branch
author Chris Cannam
date Tue, 22 Feb 2011 13:03:03 +0000
parents 3fbafca196e4 37f67999b661
children 5b4aa1c24407
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@91 33 // Work page
Chris@116 34 m_fileStatusWidget = new FileStatusWidget;
Chris@116 35 m_fileStatusWidget->setLocalPath(workFolderPath);
Chris@116 36 connect(m_fileStatusWidget, SIGNAL(selectionChanged()),
Chris@95 37 this, SIGNAL(selectionChanged()));
Chris@199 38 connect(m_fileStatusWidget, SIGNAL(showAllChanged(bool)),
Chris@199 39 this, SIGNAL(showAllChanged(bool)));
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@289 70 connect(m_historyWidget, SIGNAL(showSummary(Changeset *)),
Chris@289 71 this, SIGNAL(showSummary(Changeset *)));
Chris@288 72
Chris@141 73 connect(m_historyWidget, SIGNAL(mergeFrom(QString)),
Chris@141 74 this, SIGNAL(mergeFrom(QString)));
Chris@141 75
Chris@141 76 connect(m_historyWidget, SIGNAL(tag(QString)),
Chris@141 77 this, SIGNAL(tag(QString)));
jtkorhonen@32 78 }
jtkorhonen@32 79
Chris@96 80 void HgTabWidget::clearSelections()
Chris@94 81 {
Chris@116 82 m_fileStatusWidget->clearSelections();
Chris@94 83 }
Chris@94 84
Chris@153 85 void HgTabWidget::setCurrent(QStringList ids, QString branch)
Chris@128 86 {
Chris@172 87 bool showUncommitted = haveChangesToCommit();
Chris@163 88 m_historyWidget->setCurrent(ids, branch, showUncommitted);
Chris@129 89 }
Chris@129 90
Chris@230 91 void HgTabWidget::updateFileStates()
Chris@230 92 {
Chris@230 93 m_fileStatusWidget->updateWidgets();
Chris@230 94 }
Chris@230 95
Chris@154 96 void HgTabWidget::updateHistory()
Chris@154 97 {
Chris@154 98 m_historyWidget->update();
Chris@154 99 }
Chris@154 100
Chris@163 101 bool HgTabWidget::canDiff() const
Chris@163 102 {
Chris@237 103 return canRevert();
Chris@163 104 }
Chris@163 105
Chris@96 106 bool HgTabWidget::canCommit() const
Chris@90 107 {
Chris@237 108 if (!m_fileStatusWidget->haveChangesToCommit()) return false;
Chris@237 109 if (!m_fileStatusWidget->getAllUnresolvedFiles().empty()) return false;
Chris@237 110
Chris@237 111 QStringList addable = m_fileStatusWidget->getSelectedAddableFiles();
Chris@237 112 if (addable.empty()) return true;
Chris@237 113
Chris@237 114 QStringList committable = m_fileStatusWidget->getSelectedCommittableFiles();
Chris@237 115
Chris@237 116 // "Removed" files are both committable and addable; don't return
Chris@237 117 // a false negative if the selection only contains these
Chris@237 118 if (committable == addable) return true;
Chris@237 119 return false;
Chris@90 120 }
jtkorhonen@0 121
Chris@109 122 bool HgTabWidget::canRevert() const
Chris@109 123 {
Chris@237 124 // Not the same as canCommit() -- we can revert (and diff)
Chris@237 125 // unresolved files, but we can't commit them
Chris@237 126 if (!m_fileStatusWidget->haveChangesToCommit() &&
Chris@237 127 m_fileStatusWidget->getAllUnresolvedFiles().empty()) return false;
Chris@237 128
Chris@237 129 // The rest of this logic is as in canCommit though
Chris@237 130
Chris@237 131 QStringList addable = m_fileStatusWidget->getSelectedAddableFiles();
Chris@237 132 if (addable.empty()) return true;
Chris@237 133
Chris@237 134 QStringList committable = m_fileStatusWidget->getSelectedCommittableFiles();
Chris@237 135 if (committable == addable) return true;
Chris@237 136 return false;
Chris@109 137 }
Chris@109 138
Chris@96 139 bool HgTabWidget::canAdd() const
Chris@95 140 {
Chris@204 141 QStringList addable = m_fileStatusWidget->getSelectedAddableFiles();
Chris@204 142 if (addable.empty()) return false;
Chris@204 143
Chris@204 144 QStringList removable = m_fileStatusWidget->getSelectedRemovableFiles();
Chris@204 145 if (!removable.empty()) return false;
Chris@204 146
Chris@204 147 QStringList committable = m_fileStatusWidget->getSelectedCommittableFiles();
Chris@237 148
Chris@204 149 // "Removed" files are both committable and addable; don't return
Chris@237 150 // a false negative if the selection only contains these
Chris@204 151 if (committable == addable || committable.empty()) return true;
Chris@204 152 return false;
Chris@95 153 }
Chris@95 154
Chris@96 155 bool HgTabWidget::canRemove() const
Chris@95 156 {
Chris@116 157 if (m_fileStatusWidget->getSelectedRemovableFiles().empty()) return false;
Chris@116 158 if (!m_fileStatusWidget->getSelectedAddableFiles().empty()) return false;
Chris@95 159 return true;
Chris@95 160 }
Chris@95 161
Chris@163 162 bool HgTabWidget::canResolve() const
Chris@95 163 {
Chris@163 164 return !m_fileStatusWidget->getSelectedUnresolvedFiles().empty();
Chris@95 165 }
Chris@95 166
Chris@172 167 bool HgTabWidget::haveChangesToCommit() const
Chris@172 168 {
Chris@172 169 return m_fileStatusWidget->haveChangesToCommit();
Chris@172 170 }
Chris@172 171
Chris@96 172 QStringList HgTabWidget::getAllSelectedFiles() const
Chris@95 173 {
Chris@116 174 return m_fileStatusWidget->getAllSelectedFiles();
Chris@95 175 }
Chris@95 176
Chris@109 177 QStringList HgTabWidget::getAllCommittableFiles() const
Chris@109 178 {
Chris@116 179 return m_fileStatusWidget->getAllCommittableFiles();
Chris@109 180 }
Chris@109 181
Chris@96 182 QStringList HgTabWidget::getSelectedCommittableFiles() const
Chris@95 183 {
Chris@116 184 return m_fileStatusWidget->getSelectedCommittableFiles();
Chris@95 185 }
Chris@95 186
Chris@109 187 QStringList HgTabWidget::getAllRevertableFiles() const
Chris@109 188 {
Chris@116 189 return m_fileStatusWidget->getAllRevertableFiles();
Chris@109 190 }
Chris@109 191
Chris@109 192 QStringList HgTabWidget::getSelectedRevertableFiles() const
Chris@109 193 {
Chris@116 194 return m_fileStatusWidget->getSelectedRevertableFiles();
Chris@109 195 }
Chris@109 196
Chris@96 197 QStringList HgTabWidget::getSelectedAddableFiles() const
Chris@95 198 {
Chris@116 199 return m_fileStatusWidget->getSelectedAddableFiles();
Chris@95 200 }
Chris@95 201
Chris@109 202 QStringList HgTabWidget::getAllRemovableFiles() const
Chris@109 203 {
Chris@116 204 return m_fileStatusWidget->getAllRemovableFiles();
Chris@109 205 }
Chris@109 206
Chris@96 207 QStringList HgTabWidget::getSelectedRemovableFiles() const
Chris@95 208 {
Chris@116 209 return m_fileStatusWidget->getSelectedRemovableFiles();
Chris@95 210 }
Chris@95 211
Chris@163 212 QStringList HgTabWidget::getAllUnresolvedFiles() const
Chris@163 213 {
Chris@163 214 return m_fileStatusWidget->getAllUnresolvedFiles();
Chris@163 215 }
Chris@163 216
Chris@163 217 QStringList HgTabWidget::getSelectedUnresolvedFiles() const
Chris@163 218 {
Chris@163 219 return m_fileStatusWidget->getSelectedUnresolvedFiles();
Chris@163 220 }
Chris@163 221
Chris@96 222 void HgTabWidget::updateWorkFolderFileList(QString fileList)
jtkorhonen@0 223 {
Chris@116 224 m_fileStates.parseStates(fileList);
Chris@116 225 m_fileStatusWidget->setFileStates(m_fileStates);
jtkorhonen@0 226 }
jtkorhonen@0 227
Chris@120 228 void HgTabWidget::setNewLog(QString hgLogList)
jtkorhonen@0 229 {
Chris@120 230 m_historyWidget->parseNewLog(hgLogList);
Chris@134 231 if (m_historyWidget->haveNewItems()) {
Chris@153 232 showHistoryTab();
Chris@134 233 }
Chris@120 234 }
Chris@120 235
Chris@120 236 void HgTabWidget::addIncrementalLog(QString hgLogList)
Chris@120 237 {
Chris@120 238 m_historyWidget->parseIncrementalLog(hgLogList);
Chris@134 239 if (m_historyWidget->haveNewItems()) {
Chris@153 240 showHistoryTab();
Chris@134 241 }
jtkorhonen@0 242 }
jtkorhonen@0 243
Chris@287 244 void HgTabWidget::setLocalPath(QString workFolderPath)
jtkorhonen@0 245 {
Chris@116 246 m_fileStatusWidget->setLocalPath(workFolderPath);
Chris@106 247 }
Chris@153 248
Chris@153 249 void HgTabWidget::showWorkTab()
Chris@153 250 {
Chris@153 251 setCurrentWidget(m_fileStatusWidget);
Chris@153 252 }
Chris@153 253
Chris@153 254 void HgTabWidget::showHistoryTab()
Chris@153 255 {
Chris@153 256 setCurrentWidget(m_historyWidget);
Chris@153 257 }
Chris@153 258