annotate hgtabwidget.cpp @ 230:e67bd8abc3e3

* Add settings for text verboseness and toolbar labels
author Chris Cannam
date Thu, 06 Jan 2011 15:15:02 +0000
parents d256cc418fa3
children c9a7e4ec2f78
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@199 40 connect(m_fileStatusWidget, SIGNAL(showAllChanged(bool)),
Chris@199 41 this, SIGNAL(showAllChanged(bool)));
Chris@116 42 addTab(m_fileStatusWidget, tr("My work"));
Chris@88 43
Chris@43 44 // History graph page
Chris@116 45 m_historyWidget = new HistoryWidget;
Chris@116 46 addTab(m_historyWidget, tr("History"));
Chris@141 47
Chris@141 48 connect(m_historyWidget, SIGNAL(commit()),
Chris@141 49 this, SIGNAL(commit()));
Chris@141 50
Chris@141 51 connect(m_historyWidget, SIGNAL(revert()),
Chris@141 52 this, SIGNAL(revert()));
Chris@141 53
Chris@168 54 connect(m_historyWidget, SIGNAL(showSummary()),
Chris@168 55 this, SIGNAL(showSummary()));
Chris@168 56
Chris@141 57 connect(m_historyWidget, SIGNAL(diffWorkingFolder()),
Chris@141 58 this, SIGNAL(diffWorkingFolder()));
Chris@141 59
Chris@153 60 connect(m_historyWidget, SIGNAL(showWork()),
Chris@153 61 this, SLOT(showWorkTab()));
Chris@153 62
Chris@141 63 connect(m_historyWidget, SIGNAL(updateTo(QString)),
Chris@141 64 this, SIGNAL(updateTo(QString)));
Chris@141 65
Chris@141 66 connect(m_historyWidget, SIGNAL(diffToCurrent(QString)),
Chris@141 67 this, SIGNAL(diffToCurrent(QString)));
Chris@141 68
Chris@148 69 connect(m_historyWidget, SIGNAL(diffToParent(QString, QString)),
Chris@148 70 this, SIGNAL(diffToParent(QString, QString)));
Chris@141 71
Chris@141 72 connect(m_historyWidget, SIGNAL(mergeFrom(QString)),
Chris@141 73 this, SIGNAL(mergeFrom(QString)));
Chris@141 74
Chris@141 75 connect(m_historyWidget, SIGNAL(tag(QString)),
Chris@141 76 this, SIGNAL(tag(QString)));
jtkorhonen@32 77 }
jtkorhonen@32 78
Chris@96 79 void HgTabWidget::clearSelections()
Chris@94 80 {
Chris@116 81 m_fileStatusWidget->clearSelections();
Chris@94 82 }
Chris@94 83
Chris@153 84 void HgTabWidget::setCurrent(QStringList ids, QString branch)
Chris@128 85 {
Chris@172 86 bool showUncommitted = haveChangesToCommit();
Chris@163 87 m_historyWidget->setCurrent(ids, branch, showUncommitted);
Chris@129 88 }
Chris@129 89
Chris@230 90 void HgTabWidget::updateFileStates()
Chris@230 91 {
Chris@230 92 m_fileStatusWidget->updateWidgets();
Chris@230 93 }
Chris@230 94
Chris@154 95 void HgTabWidget::updateHistory()
Chris@154 96 {
Chris@154 97 m_historyWidget->update();
Chris@154 98 }
Chris@154 99
Chris@163 100 bool HgTabWidget::canDiff() const
Chris@163 101 {
Chris@163 102 if (!m_fileStatusWidget->getSelectedAddableFiles().empty()) return false;
Chris@163 103 return m_fileStatusWidget->haveChangesToCommit() ||
Chris@163 104 !m_fileStatusWidget->getAllUnresolvedFiles().empty();
Chris@163 105 }
Chris@163 106
Chris@96 107 bool HgTabWidget::canCommit() const
Chris@90 108 {
Chris@116 109 if (!m_fileStatusWidget->getSelectedAddableFiles().empty()) return false;
Chris@163 110 return m_fileStatusWidget->haveChangesToCommit() &&
Chris@163 111 m_fileStatusWidget->getAllUnresolvedFiles().empty();
Chris@90 112 }
jtkorhonen@0 113
Chris@109 114 bool HgTabWidget::canRevert() const
Chris@109 115 {
Chris@163 116 if (!m_fileStatusWidget->getSelectedAddableFiles().empty()) return false;
Chris@116 117 return m_fileStatusWidget->haveChangesToCommit() ||
Chris@163 118 !m_fileStatusWidget->getAllUnresolvedFiles().empty();
Chris@109 119 }
Chris@109 120
Chris@96 121 bool HgTabWidget::canAdd() const
Chris@95 122 {
Chris@204 123 QStringList addable = m_fileStatusWidget->getSelectedAddableFiles();
Chris@204 124 if (addable.empty()) return false;
Chris@204 125
Chris@204 126 QStringList removable = m_fileStatusWidget->getSelectedRemovableFiles();
Chris@204 127 if (!removable.empty()) return false;
Chris@204 128
Chris@204 129 QStringList committable = m_fileStatusWidget->getSelectedCommittableFiles();
Chris@204 130 // "Removed" files are both committable and addable; don't return
Chris@204 131 // a false positive if the selection only contains these
Chris@204 132 if (committable == addable || committable.empty()) return true;
Chris@204 133 return false;
Chris@95 134 }
Chris@95 135
Chris@96 136 bool HgTabWidget::canRemove() const
Chris@95 137 {
Chris@116 138 if (m_fileStatusWidget->getSelectedRemovableFiles().empty()) return false;
Chris@116 139 if (!m_fileStatusWidget->getSelectedAddableFiles().empty()) return false;
Chris@95 140 return true;
Chris@95 141 }
Chris@95 142
Chris@163 143 bool HgTabWidget::canResolve() const
Chris@95 144 {
Chris@163 145 return !m_fileStatusWidget->getSelectedUnresolvedFiles().empty();
Chris@95 146 }
Chris@95 147
Chris@172 148 bool HgTabWidget::haveChangesToCommit() const
Chris@172 149 {
Chris@172 150 return m_fileStatusWidget->haveChangesToCommit();
Chris@172 151 }
Chris@172 152
Chris@96 153 QStringList HgTabWidget::getAllSelectedFiles() const
Chris@95 154 {
Chris@116 155 return m_fileStatusWidget->getAllSelectedFiles();
Chris@95 156 }
Chris@95 157
Chris@109 158 QStringList HgTabWidget::getAllCommittableFiles() const
Chris@109 159 {
Chris@116 160 return m_fileStatusWidget->getAllCommittableFiles();
Chris@109 161 }
Chris@109 162
Chris@96 163 QStringList HgTabWidget::getSelectedCommittableFiles() const
Chris@95 164 {
Chris@116 165 return m_fileStatusWidget->getSelectedCommittableFiles();
Chris@95 166 }
Chris@95 167
Chris@109 168 QStringList HgTabWidget::getAllRevertableFiles() const
Chris@109 169 {
Chris@116 170 return m_fileStatusWidget->getAllRevertableFiles();
Chris@109 171 }
Chris@109 172
Chris@109 173 QStringList HgTabWidget::getSelectedRevertableFiles() const
Chris@109 174 {
Chris@116 175 return m_fileStatusWidget->getSelectedRevertableFiles();
Chris@109 176 }
Chris@109 177
Chris@96 178 QStringList HgTabWidget::getSelectedAddableFiles() const
Chris@95 179 {
Chris@116 180 return m_fileStatusWidget->getSelectedAddableFiles();
Chris@95 181 }
Chris@95 182
Chris@109 183 QStringList HgTabWidget::getAllRemovableFiles() const
Chris@109 184 {
Chris@116 185 return m_fileStatusWidget->getAllRemovableFiles();
Chris@109 186 }
Chris@109 187
Chris@96 188 QStringList HgTabWidget::getSelectedRemovableFiles() const
Chris@95 189 {
Chris@116 190 return m_fileStatusWidget->getSelectedRemovableFiles();
Chris@95 191 }
Chris@95 192
Chris@163 193 QStringList HgTabWidget::getAllUnresolvedFiles() const
Chris@163 194 {
Chris@163 195 return m_fileStatusWidget->getAllUnresolvedFiles();
Chris@163 196 }
Chris@163 197
Chris@163 198 QStringList HgTabWidget::getSelectedUnresolvedFiles() const
Chris@163 199 {
Chris@163 200 return m_fileStatusWidget->getSelectedUnresolvedFiles();
Chris@163 201 }
Chris@163 202
Chris@96 203 void HgTabWidget::updateWorkFolderFileList(QString fileList)
jtkorhonen@0 204 {
Chris@116 205 m_fileStates.parseStates(fileList);
Chris@116 206 m_fileStatusWidget->setFileStates(m_fileStates);
jtkorhonen@0 207 }
jtkorhonen@0 208
Chris@120 209 void HgTabWidget::setNewLog(QString hgLogList)
jtkorhonen@0 210 {
Chris@120 211 m_historyWidget->parseNewLog(hgLogList);
Chris@134 212 if (m_historyWidget->haveNewItems()) {
Chris@153 213 showHistoryTab();
Chris@134 214 }
Chris@120 215 }
Chris@120 216
Chris@120 217 void HgTabWidget::addIncrementalLog(QString hgLogList)
Chris@120 218 {
Chris@120 219 m_historyWidget->parseIncrementalLog(hgLogList);
Chris@134 220 if (m_historyWidget->haveNewItems()) {
Chris@153 221 showHistoryTab();
Chris@134 222 }
jtkorhonen@0 223 }
jtkorhonen@0 224
Chris@96 225 void HgTabWidget::setWorkFolderAndRepoNames(QString workFolderPath, QString remoteRepoPath)
jtkorhonen@0 226 {
Chris@116 227 m_fileStatusWidget->setLocalPath(workFolderPath);
Chris@116 228 m_fileStatusWidget->setRemoteURL(remoteRepoPath);
jtkorhonen@0 229 }
Chris@106 230
Chris@115 231 void HgTabWidget::setState(QString state)
Chris@106 232 {
Chris@116 233 m_fileStatusWidget->setState(state);
Chris@106 234 }
Chris@153 235
Chris@153 236 void HgTabWidget::showWorkTab()
Chris@153 237 {
Chris@153 238 setCurrentWidget(m_fileStatusWidget);
Chris@153 239 }
Chris@153 240
Chris@153 241 void HgTabWidget::showHistoryTab()
Chris@153 242 {
Chris@153 243 setCurrentWidget(m_historyWidget);
Chris@153 244 }
Chris@153 245