annotate hgexpwidget.cpp @ 87:a7904378ac6a

* tiny mod
author Chris Cannam
date Mon, 22 Nov 2010 21:28:00 +0000
parents 89f793fbedda
children c5e34ed5b791
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
jtkorhonen@0 18 #include "hgexpwidget.h"
jtkorhonen@0 19 #include "common.h"
Chris@43 20 #include "logparser.h"
Chris@43 21 #include "changeset.h"
Chris@43 22 #include "changesetitem.h"
Chris@44 23 #include "grapher.h"
cannam@45 24 #include "panner.h"
cannam@45 25 #include "panned.h"
Chris@44 26
Chris@50 27 #include <QClipboard>
Chris@50 28 #include <QContextMenuEvent>
Chris@50 29 #include <QApplication>
Chris@50 30
Chris@44 31 #include <iostream>
jtkorhonen@0 32
jtkorhonen@0 33 #define REMOTE_REPO_STR "Remote repository: "
jtkorhonen@0 34 #define LOCAL_REPO_STR "Local repository: "
jtkorhonen@0 35 #define WORKFOLDER_STR "Working folder: "
jtkorhonen@0 36
jtkorhonen@0 37
jtkorhonen@0 38 const char hgStatViewOptions[NUM_STAT_FILE_TYPES] = {'m','a','r','d','u','c','i'};
jtkorhonen@0 39
jtkorhonen@0 40 const char *statFilesStr[NUM_STAT_FILE_TYPES] = { "M: Modified",
jtkorhonen@0 41 "A: To be added on next commit",
jtkorhonen@0 42 "R: To be removed on next commit",
jtkorhonen@0 43 "!: Tracked, locally deleted",
jtkorhonen@0 44 "?: Unknown, not yet tracked",
jtkorhonen@0 45 "C: Clean (not changed)",
jtkorhonen@0 46 "I: Ignored (via .hgignore file)"};
jtkorhonen@0 47
jtkorhonen@0 48
jtkorhonen@0 49 HgExpWidget::HgExpWidget(QWidget *parent, QString remoteRepo, QString workFolderPath, unsigned char viewFileTypesBits): QTabWidget(parent)
jtkorhonen@0 50 {
jtkorhonen@0 51 //Work page
jtkorhonen@0 52 //Work page
jtkorhonen@0 53 //Work page
jtkorhonen@0 54
jtkorhonen@0 55 //Remote repo
jtkorhonen@0 56 grpRemoteRepo = new QGroupBox(tr(REMOTE_REPO_STR) + remoteRepo);
jtkorhonen@0 57 grpRemoteRepo -> setMinimumHeight(24);
jtkorhonen@0 58
jtkorhonen@0 59 //Local Repo
jtkorhonen@0 60 grpLocalRepo = new QGroupBox(tr(LOCAL_REPO_STR) + workFolderPath + getHgDirName());
jtkorhonen@0 61 parentsLabel = new QLabel(tr("Working folder parent(s):"));
jtkorhonen@0 62 localRepoHgParentsList = new QListWidget;
jtkorhonen@0 63 localRepoHgParentsList -> setSelectionMode(QAbstractItemView::NoSelection);
jtkorhonen@0 64 parentsLayout = new QVBoxLayout;
jtkorhonen@0 65 parentsLayout -> addWidget(parentsLabel);
jtkorhonen@0 66 parentsLayout -> addWidget(localRepoHgParentsList);
jtkorhonen@0 67 grpLocalRepo -> setLayout(parentsLayout);
jtkorhonen@32 68 copyCommentAct = new QAction("Copy comment", localRepoHgParentsList);
jtkorhonen@32 69 userListMenu = new QMenu(localRepoHgParentsList);
jtkorhonen@32 70 userListMenu -> addAction(copyCommentAct);
jtkorhonen@32 71 connect(copyCommentAct, SIGNAL(triggered()), this, SLOT(copyComment()));
jtkorhonen@0 72
jtkorhonen@0 73 //Workfolder
jtkorhonen@0 74 grpWorkFolder = new QGroupBox(tr(WORKFOLDER_STR) + workFolderPath);
jtkorhonen@0 75 workFolderLayout = new QHBoxLayout;
jtkorhonen@0 76 workFolderFileList = new QListWidget;
jtkorhonen@19 77 workFolderFileList -> setSelectionMode(QAbstractItemView::ExtendedSelection);
jtkorhonen@0 78 grpViewFileTypes = new QGroupBox;
jtkorhonen@0 79 fileTypesLayout = new QVBoxLayout;
jtkorhonen@0 80
jtkorhonen@0 81 for(int i = 0; i < NUM_STAT_FILE_TYPES; i++)
jtkorhonen@0 82 {
jtkorhonen@0 83 chkViewFileTypes[i] = new QCheckBox(statFilesStr[i]);
jtkorhonen@0 84 if ((1U << i) & viewFileTypesBits)
jtkorhonen@0 85 {
jtkorhonen@0 86 chkViewFileTypes[i]->setChecked(true);
jtkorhonen@0 87 }
jtkorhonen@0 88 else
jtkorhonen@0 89 {
jtkorhonen@0 90 chkViewFileTypes[i]->setChecked(false);
jtkorhonen@0 91 }
jtkorhonen@0 92 connect(chkViewFileTypes[i], SIGNAL(stateChanged(int)), this, SIGNAL(workFolderViewTypesChanged()));
jtkorhonen@0 93 fileTypesLayout -> addWidget(chkViewFileTypes[i]);
jtkorhonen@0 94 }
jtkorhonen@0 95
jtkorhonen@0 96 grpViewFileTypes -> setLayout(fileTypesLayout);
jtkorhonen@0 97 workFolderLayout->addWidget(workFolderFileList, 3);
jtkorhonen@0 98 workFolderLayout->addWidget(grpViewFileTypes, 1);
jtkorhonen@0 99 grpWorkFolder -> setLayout(workFolderLayout);
jtkorhonen@0 100
jtkorhonen@0 101 workPageWidget = new QWidget;
jtkorhonen@0 102 mainLayout = new QVBoxLayout(workPageWidget);
jtkorhonen@0 103 mainLayout -> addWidget(grpRemoteRepo, 1);
jtkorhonen@0 104 mainLayout -> addWidget(grpLocalRepo, 8);
jtkorhonen@0 105 mainLayout -> addWidget(grpWorkFolder, 12);
Chris@58 106 addTab(workPageWidget, tr("My work"));
jtkorhonen@0 107
Chris@43 108 // History graph page
cannam@45 109 historyGraphPageWidget = new QWidget;
cannam@45 110 Panned *panned = new Panned;
cannam@45 111 Panner *panner = new Panner;
cannam@45 112 historyGraphWidget = panned;
cannam@45 113 historyGraphPanner = panner;
cannam@45 114 QGridLayout *layout = new QGridLayout;
cannam@45 115 layout->addWidget(historyGraphWidget, 0, 0);
cannam@45 116 layout->addWidget(historyGraphPanner, 0, 1);
cannam@45 117 panner->setMaximumWidth(80);
cannam@45 118 panner->connectToPanned(panned);
cannam@45 119 historyGraphPageWidget->setLayout(layout);
Chris@58 120 addTab(historyGraphPageWidget, tr("History"));
Chris@43 121
Chris@43 122
jtkorhonen@0 123 //History page
jtkorhonen@0 124 //History page
jtkorhonen@0 125 //History page
jtkorhonen@0 126 historyPageWidget = new QWidget;
jtkorhonen@0 127 localRepoHgLogList = new QListWidget;
jtkorhonen@0 128 localRepoHgLogList->setFont(QFont("Courier New"));
jtkorhonen@0 129 localRepoHgLogList -> setSelectionMode(QAbstractItemView::ExtendedSelection);
jtkorhonen@0 130
jtkorhonen@0 131 historyLayout = new QVBoxLayout(historyPageWidget);
jtkorhonen@0 132 historyLayout->addWidget(localRepoHgLogList);
Chris@58 133 //!!! addTab(historyPageWidget, tr("History (log)"));
jtkorhonen@0 134
jtkorhonen@0 135 //Heads page
jtkorhonen@0 136 //Heads page
jtkorhonen@0 137 //Heads page
jtkorhonen@0 138 headsPageWidget = new QWidget;
jtkorhonen@0 139 localRepoHeadsList = new QListWidget;
jtkorhonen@0 140 localRepoHeadsList -> setSelectionMode(QAbstractItemView::ExtendedSelection);
jtkorhonen@0 141
jtkorhonen@0 142 headsLayout = new QVBoxLayout(headsPageWidget);
jtkorhonen@0 143 headsLayout->addWidget(localRepoHeadsList);
Chris@58 144 //!!! addTab(headsPageWidget, tr("Heads"));
jtkorhonen@0 145
jtkorhonen@0 146 //Initially, only work page is active
Chris@58 147 //!!! setTabEnabled(HEADSTAB, false);
Chris@58 148 //!!! setTabEnabled(HISTORYTAB, false);
jtkorhonen@0 149 }
jtkorhonen@0 150
jtkorhonen@32 151 void HgExpWidget::contextMenuEvent(QContextMenuEvent * event)
jtkorhonen@32 152 {
jtkorhonen@32 153 if (copyCommentAct -> isEnabled())
jtkorhonen@32 154 {
jtkorhonen@32 155 QPoint topL;
jtkorhonen@32 156 QPoint bottomR;
jtkorhonen@32 157
jtkorhonen@32 158 topL = localRepoHgParentsList->
jtkorhonen@32 159 mapToGlobal(QPoint(0, 0));
jtkorhonen@32 160 bottomR = localRepoHgParentsList->
jtkorhonen@32 161 mapToGlobal(QPoint(localRepoHgParentsList -> width(), localRepoHgParentsList -> height()));
jtkorhonen@32 162
jtkorhonen@32 163 if ((event -> globalPos().x() > topL.x()) && (event -> globalPos().x() < bottomR.x()))
jtkorhonen@32 164 {
jtkorhonen@32 165 if ((event -> globalPos().y() > topL.y()) && (event -> globalPos().y() < bottomR.y()))
jtkorhonen@32 166 {
jtkorhonen@32 167 userListMenu->exec(event -> globalPos());
jtkorhonen@32 168 }
jtkorhonen@32 169 }
jtkorhonen@32 170 }
jtkorhonen@32 171 }
jtkorhonen@32 172
jtkorhonen@32 173 void HgExpWidget::copyComment()
jtkorhonen@32 174 {
jtkorhonen@32 175 if (localRepoHgParentsList -> count() >= 1)
jtkorhonen@32 176 {
jtkorhonen@32 177 QListWidgetItem *it = localRepoHgParentsList -> item(0);
jtkorhonen@32 178 QString tmp = it -> text();
jtkorhonen@32 179 int ind = tmp.indexOf("summary:");
jtkorhonen@32 180 if (ind != -1)
jtkorhonen@32 181 {
jtkorhonen@32 182 QString comment;
jtkorhonen@32 183 ind += 11; //jump over word "summary:"
jtkorhonen@32 184
jtkorhonen@32 185 comment = tmp.mid(ind);
jtkorhonen@32 186
jtkorhonen@32 187 QClipboard *clipboard = QApplication::clipboard();
jtkorhonen@32 188 clipboard->setText(comment);
jtkorhonen@32 189 }
jtkorhonen@32 190 }
jtkorhonen@32 191 }
jtkorhonen@32 192
jtkorhonen@32 193
jtkorhonen@0 194
jtkorhonen@0 195 QString HgExpWidget::getStatFlags()
jtkorhonen@0 196 {
jtkorhonen@0 197 QString ret;
jtkorhonen@0 198
jtkorhonen@0 199 for(int i = 0; i < NUM_STAT_FILE_TYPES; i++)
jtkorhonen@0 200 {
jtkorhonen@0 201 if (Qt::Checked == chkViewFileTypes[i]->checkState())
jtkorhonen@0 202 {
jtkorhonen@0 203 ret += hgStatViewOptions[i];
jtkorhonen@0 204 }
jtkorhonen@0 205 }
jtkorhonen@0 206
jtkorhonen@0 207 return ret;
jtkorhonen@0 208 }
jtkorhonen@0 209
jtkorhonen@0 210
jtkorhonen@0 211 unsigned char HgExpWidget::getFileTypesBits()
jtkorhonen@0 212 {
jtkorhonen@0 213 unsigned char ret;
jtkorhonen@0 214
jtkorhonen@0 215 ret = 0;
jtkorhonen@0 216
jtkorhonen@0 217 for(int i = 0; i < NUM_STAT_FILE_TYPES; i++)
jtkorhonen@0 218 {
jtkorhonen@0 219 if (Qt::Checked == chkViewFileTypes[i]->checkState())
jtkorhonen@0 220 {
jtkorhonen@0 221 ret |= (1U << i);
jtkorhonen@0 222 }
jtkorhonen@0 223 }
jtkorhonen@0 224
jtkorhonen@0 225 return ret;
jtkorhonen@0 226 }
jtkorhonen@0 227
jtkorhonen@0 228
jtkorhonen@0 229 void HgExpWidget::updateWorkFolderFileList(QString fileList)
jtkorhonen@0 230 {
Chris@86 231 statParser = StatParser(fileList);
Chris@86 232
jtkorhonen@0 233 workFolderFileList-> clear();
jtkorhonen@0 234 workFolderFileList -> addItems(fileList.split("\n"));
jtkorhonen@0 235 }
jtkorhonen@0 236
jtkorhonen@0 237 void HgExpWidget::updateLocalRepoHeadsList(QString headList)
jtkorhonen@0 238 {
jtkorhonen@0 239 localRepoHeadsList-> clear();
jtkorhonen@0 240 localRepoHeadsList -> addItems(splitChangeSets(headList));
jtkorhonen@0 241
jtkorhonen@0 242 //heads list is interesting only when we have 2 or more
jtkorhonen@0 243 if (localRepoHeadsList-> count() < 2)
jtkorhonen@0 244 {
jtkorhonen@0 245 setTabEnabled(HEADSTAB, false);
jtkorhonen@0 246 }
jtkorhonen@0 247 else
jtkorhonen@0 248 {
jtkorhonen@0 249 setTabEnabled(HEADSTAB, true);
jtkorhonen@0 250 }
jtkorhonen@0 251 }
jtkorhonen@0 252
jtkorhonen@0 253
jtkorhonen@0 254 void HgExpWidget::clearLists()
jtkorhonen@0 255 {
jtkorhonen@0 256 localRepoHeadsList-> clear();
jtkorhonen@0 257 localRepoHgParentsList-> clear();
jtkorhonen@0 258 workFolderFileList-> clear();
jtkorhonen@0 259 localRepoHgLogList -> clear();
jtkorhonen@0 260 }
jtkorhonen@0 261
jtkorhonen@0 262 void HgExpWidget::updateLocalRepoParentsList(QString parentsList)
jtkorhonen@0 263 {
jtkorhonen@0 264 localRepoHgParentsList-> clear();
jtkorhonen@0 265 localRepoHgParentsList -> addItems(splitChangeSets(parentsList));
jtkorhonen@0 266 }
jtkorhonen@0 267
jtkorhonen@0 268 void HgExpWidget::updateLocalRepoHgLogList(QString hgLogList)
jtkorhonen@0 269 {
jtkorhonen@0 270 localRepoHgLogList -> clear();
jtkorhonen@0 271 localRepoHgLogList -> addItems(splitChangeSets(hgLogList));
jtkorhonen@0 272
Chris@43 273 //!!!
cannam@45 274 Panned *panned = static_cast<Panned *>(historyGraphWidget);
cannam@45 275 Panner *panner = static_cast<Panner *>(historyGraphPanner);
Chris@43 276 QGraphicsScene *scene = new QGraphicsScene();
Chris@43 277 Changesets csets = parseChangeSets(hgLogList);
Chris@44 278 if (csets.empty()) return;
Chris@53 279 Grapher g(scene);
Chris@44 280 try {
Chris@53 281 g.layout(csets);
Chris@44 282 } catch (std::string s) {
Chris@44 283 std::cerr << "Internal error: Layout failed: " << s << std::endl;
Chris@44 284 }
Chris@87 285 QGraphicsScene *oldScene = panned->scene();
cannam@45 286 panned->setScene(scene);
cannam@45 287 panner->setScene(scene);
Chris@87 288 if (oldScene) delete oldScene;
Chris@53 289 ChangesetItem *tipItem = g.getItemFor(csets[0]);
Chris@53 290 if (tipItem) tipItem->ensureVisible();
jtkorhonen@0 291 }
jtkorhonen@0 292
jtkorhonen@0 293
Chris@43 294
jtkorhonen@0 295 int HgExpWidget::findLineStart(int nowIndex, QString str)
jtkorhonen@0 296 {
jtkorhonen@0 297 if (nowIndex < 0)
jtkorhonen@0 298 {
jtkorhonen@0 299 return -1;
jtkorhonen@0 300 }
jtkorhonen@0 301
jtkorhonen@0 302 while(str.at(nowIndex) != '\n')
jtkorhonen@0 303 {
jtkorhonen@0 304 if (nowIndex == 0)
jtkorhonen@0 305 {
jtkorhonen@0 306 return nowIndex;
jtkorhonen@0 307 }
jtkorhonen@0 308 nowIndex--;
jtkorhonen@0 309 }
jtkorhonen@0 310 return nowIndex + 1;
jtkorhonen@0 311 }
jtkorhonen@0 312
jtkorhonen@0 313
jtkorhonen@0 314 QStringList HgExpWidget::splitChangeSets(QString chgSetsStr)
jtkorhonen@0 315 {
Chris@43 316 return LogParser(chgSetsStr).split();
Chris@43 317 /*
jtkorhonen@0 318 int currChgSet;
jtkorhonen@0 319 int currChgSetLineStart;
jtkorhonen@0 320
jtkorhonen@0 321 int prevChgSet;
jtkorhonen@0 322 QStringList tmp;
jtkorhonen@0 323
jtkorhonen@0 324 currChgSet = chgSetsStr.indexOf(CHGSET);
jtkorhonen@0 325 currChgSetLineStart = findLineStart(currChgSet, chgSetsStr);
jtkorhonen@0 326 prevChgSet = -1;
jtkorhonen@0 327 while (currChgSet != -1)
jtkorhonen@0 328 {
jtkorhonen@0 329 if (prevChgSet != -1)
jtkorhonen@0 330 {
jtkorhonen@0 331 tmp.append(chgSetsStr.mid(prevChgSet, (currChgSetLineStart - prevChgSet - 1)));
jtkorhonen@0 332 }
jtkorhonen@0 333
jtkorhonen@0 334 prevChgSet = currChgSetLineStart;
jtkorhonen@0 335
jtkorhonen@0 336 currChgSet = chgSetsStr.indexOf(CHGSET, currChgSet + 1);
jtkorhonen@0 337 currChgSetLineStart = findLineStart(currChgSet, chgSetsStr);
jtkorhonen@0 338 }
jtkorhonen@0 339
jtkorhonen@0 340 if (prevChgSet != -1)
jtkorhonen@0 341 {
jtkorhonen@0 342 //Last changeset
jtkorhonen@0 343 tmp.append(chgSetsStr.mid(prevChgSet));
jtkorhonen@0 344 }
jtkorhonen@0 345 else
jtkorhonen@0 346 {
jtkorhonen@0 347 //Only changeset (if any)
jtkorhonen@0 348 if (!chgSetsStr.isEmpty())
jtkorhonen@0 349 {
jtkorhonen@0 350 tmp.append(chgSetsStr.mid(0));
jtkorhonen@0 351 }
jtkorhonen@0 352 }
jtkorhonen@0 353
jtkorhonen@0 354 return tmp;
Chris@43 355 */
Chris@43 356 }
Chris@43 357
Chris@43 358 Changesets HgExpWidget::parseChangeSets(QString changeSetsStr)
Chris@43 359 {
Chris@43 360 Changesets csets;
Chris@43 361 LogList log = LogParser(changeSetsStr).parse();
Chris@43 362 foreach (LogEntry e, log) {
Chris@43 363 Changeset *cs = new Changeset();
Chris@43 364 foreach (QString key, e.keys()) {
Chris@44 365 if (key == "parents") {
Chris@44 366 QStringList parents = e.value(key).split
Chris@44 367 (" ", QString::SkipEmptyParts);
Chris@44 368 cs->setParents(parents);
Chris@52 369 } else if (key == "timestamp") {
Chris@52 370 cs->setTimestamp(e.value(key).split(" ")[0].toULongLong());
Chris@44 371 } else {
Chris@44 372 cs->setProperty(key.toLocal8Bit().data(), e.value(key));
Chris@44 373 }
Chris@43 374 }
Chris@43 375 csets.push_back(cs);
Chris@43 376 }
Chris@44 377 for (int i = 0; i+1 < csets.size(); ++i) {
Chris@44 378 Changeset *cs = csets[i];
Chris@44 379 if (cs->parents().empty()) {
Chris@44 380 QStringList list;
Chris@44 381 list.push_back(csets[i+1]->id());
Chris@44 382 cs->setParents(list);
Chris@44 383 }
Chris@44 384 }
Chris@43 385 return csets;
jtkorhonen@0 386 }
jtkorhonen@0 387
jtkorhonen@0 388 QString HgExpWidget::getCurrentFileListLine()
jtkorhonen@0 389 {
jtkorhonen@0 390 if (workFolderFileList -> currentItem() != NULL)
jtkorhonen@0 391 {
jtkorhonen@0 392 return workFolderFileList -> currentItem()->text();
jtkorhonen@0 393 }
jtkorhonen@0 394 return "";
jtkorhonen@0 395 }
jtkorhonen@0 396
jtkorhonen@0 397 void HgExpWidget::setWorkFolderAndRepoNames(QString workFolderPath, QString remoteRepoPath)
jtkorhonen@0 398 {
jtkorhonen@0 399 grpRemoteRepo -> setTitle(tr(REMOTE_REPO_STR) + remoteRepoPath);
jtkorhonen@0 400 grpLocalRepo -> setTitle(tr(LOCAL_REPO_STR) + workFolderPath + getHgDirName());
jtkorhonen@0 401 grpWorkFolder -> setTitle(tr(WORKFOLDER_STR) + workFolderPath);
jtkorhonen@0 402 }
jtkorhonen@0 403
jtkorhonen@0 404 #define MERC_SHA1_MARKER_LEN 12
jtkorhonen@0 405 QString HgExpWidget::findRev(QString itemText, QString & smallRev)
jtkorhonen@0 406 {
jtkorhonen@0 407 QString tmp(itemText);
jtkorhonen@0 408 int i;
jtkorhonen@0 409 int j;
jtkorhonen@0 410
jtkorhonen@0 411 smallRev ="0";
jtkorhonen@0 412
jtkorhonen@0 413 i = tmp.indexOf(CHGSET);
jtkorhonen@0 414 if (i != -1)
jtkorhonen@0 415 {
jtkorhonen@0 416 j = i + 10;
jtkorhonen@0 417 i = tmp.indexOf(":", j); //xx:yyyyyy after changeset:
jtkorhonen@0 418
jtkorhonen@0 419 if (i != -1)
jtkorhonen@0 420 {
jtkorhonen@0 421 smallRev = tmp.mid(j, (i-j));
jtkorhonen@0 422 return tmp.mid(i+1, MERC_SHA1_MARKER_LEN);
jtkorhonen@0 423 }
jtkorhonen@0 424 }
jtkorhonen@0 425
jtkorhonen@0 426 return "";
jtkorhonen@0 427 }
jtkorhonen@0 428
jtkorhonen@0 429 void HgExpWidget::getHistoryDiffRevisions(QString& revA, QString& revB)
jtkorhonen@0 430 {
jtkorhonen@0 431 QList <QListWidgetItem *> histList = localRepoHgLogList->selectedItems();
jtkorhonen@0 432 QList <QListWidgetItem *> headList = localRepoHeadsList->selectedItems();
jtkorhonen@0 433
jtkorhonen@0 434 QString revATmp;
jtkorhonen@0 435 QString revBTmp;
jtkorhonen@0 436 QString smallRevA;
jtkorhonen@0 437 QString smallRevB;
jtkorhonen@0 438 QString txtA;
jtkorhonen@0 439 QString txtB;
jtkorhonen@0 440
jtkorhonen@0 441 if (histList.count() == REQUIRED_CHGSET_DIFF_COUNT)
jtkorhonen@0 442 {
jtkorhonen@0 443 txtA = histList.last()->text();
jtkorhonen@0 444 txtB = histList.first()->text();
jtkorhonen@0 445
jtkorhonen@0 446 }
jtkorhonen@0 447 else if (headList.count() == REQUIRED_CHGSET_DIFF_COUNT)
jtkorhonen@0 448 {
jtkorhonen@0 449 txtA = headList.last()->text();
jtkorhonen@0 450 txtB = headList.first()->text();
jtkorhonen@0 451 }
jtkorhonen@0 452 else
jtkorhonen@0 453 {
jtkorhonen@0 454 revA = "";
jtkorhonen@0 455 revB = "";
jtkorhonen@0 456 return;
jtkorhonen@0 457 }
jtkorhonen@0 458
jtkorhonen@0 459 revATmp = findRev(txtA, smallRevA);
jtkorhonen@0 460 revBTmp = findRev(txtB, smallRevB);
jtkorhonen@0 461
jtkorhonen@0 462 //Switch order according to repo small revision number (user can select items from list in "wrong" order)
jtkorhonen@0 463 if (smallRevB.toULongLong() > smallRevA.toULongLong())
jtkorhonen@0 464 {
jtkorhonen@0 465 revA = revATmp;
jtkorhonen@0 466 revB = revBTmp;
jtkorhonen@0 467 }
jtkorhonen@0 468 else
jtkorhonen@0 469 {
jtkorhonen@0 470 revA = revBTmp;
jtkorhonen@0 471 revB = revATmp;
jtkorhonen@0 472 }
jtkorhonen@0 473 }
jtkorhonen@0 474
jtkorhonen@0 475
jtkorhonen@0 476 void HgExpWidget::getUpdateToRevRevision(QString& rev)
jtkorhonen@0 477 {
jtkorhonen@0 478 QList <QListWidgetItem *> histList = localRepoHgLogList->selectedItems();
jtkorhonen@0 479 QString txt;
jtkorhonen@0 480 QString smallRev;
jtkorhonen@0 481
jtkorhonen@0 482
jtkorhonen@0 483 if (histList.count() == 1)
jtkorhonen@0 484 {
jtkorhonen@0 485 txt = histList.first()->text();
jtkorhonen@0 486 rev = findRev(txt, smallRev);
jtkorhonen@0 487 }
jtkorhonen@0 488 else
jtkorhonen@0 489 {
jtkorhonen@0 490 rev = "";
jtkorhonen@0 491 }
jtkorhonen@0 492 }
jtkorhonen@0 493
jtkorhonen@0 494
jtkorhonen@32 495 void HgExpWidget::enableDisableOtherTabs(int tabPage)
jtkorhonen@32 496 {
jtkorhonen@32 497 static int oldTabPage = -1;
jtkorhonen@0 498
jtkorhonen@32 499 if (tabPage != oldTabPage)
jtkorhonen@32 500 {
jtkorhonen@32 501 oldTabPage = tabPage;
jtkorhonen@32 502 if (tabPage == WORKTAB)
jtkorhonen@32 503 {
jtkorhonen@32 504 copyCommentAct -> setEnabled(true);
jtkorhonen@32 505 }
jtkorhonen@32 506 else
jtkorhonen@32 507 {
jtkorhonen@32 508 copyCommentAct -> setEnabled(false);
jtkorhonen@32 509 }
jtkorhonen@32 510 }
jtkorhonen@32 511
jtkorhonen@0 512 //history list is only interesting when we have something in it ;-)
jtkorhonen@0 513 if (localRepoHgLogList -> count() < 2)
jtkorhonen@0 514 {
jtkorhonen@0 515 setTabEnabled(HISTORYTAB, false);
jtkorhonen@0 516 }
jtkorhonen@0 517 else
jtkorhonen@0 518 {
jtkorhonen@0 519 setTabEnabled(HISTORYTAB, true);
jtkorhonen@0 520 }
jtkorhonen@0 521
jtkorhonen@0 522 //history list is only interesting when we have something in it ;-)
jtkorhonen@0 523 if (localRepoHgLogList -> count() < 2)
jtkorhonen@0 524 {
jtkorhonen@0 525 setTabEnabled(HISTORYTAB, false);
jtkorhonen@0 526 }
jtkorhonen@0 527 else
jtkorhonen@0 528 {
jtkorhonen@0 529 setTabEnabled(HISTORYTAB, true);
jtkorhonen@0 530 }
jtkorhonen@0 531 }
jtkorhonen@0 532
jtkorhonen@0 533
jtkorhonen@0 534
jtkorhonen@0 535