clearcasesettings.cpp 6.23 KB
Newer Older
Orgad Shaneh's avatar
Orgad Shaneh committed
1 2
/**************************************************************************
**
3
** Copyright (c) 2014 AudioCodes Ltd.
Orgad Shaneh's avatar
Orgad Shaneh committed
4
** Author: Orgad Shaneh <orgad.shaneh@audiocodes.com>
hjk's avatar
hjk committed
5
** Contact: http://www.qt-project.org/legal
Orgad Shaneh's avatar
Orgad Shaneh committed
6
**
hjk's avatar
hjk committed
7
** This file is part of Qt Creator.
Orgad Shaneh's avatar
Orgad Shaneh committed
8
**
hjk's avatar
hjk committed
9 10 11 12 13 14 15
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.  For licensing terms and
** conditions see http://qt.digia.com/licensing.  For further information
** use the contact form at http://qt.digia.com/contact-us.
Orgad Shaneh's avatar
Orgad Shaneh committed
16 17
**
** GNU Lesser General Public License Usage
hjk's avatar
hjk committed
18 19 20 21 22 23 24 25 26
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights.  These rights are described in the Digia Qt LGPL Exception
Orgad Shaneh's avatar
Orgad Shaneh committed
27 28
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
hjk's avatar
hjk committed
29
****************************************************************************/
Orgad Shaneh's avatar
Orgad Shaneh committed
30 31 32 33

#include "clearcasesettings.h"

#include <utils/environment.h>
34
#include <utils/hostosinfo.h>
Orgad Shaneh's avatar
Orgad Shaneh committed
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

#include <QSettings>

static const char groupC[] = "ClearCase";
static const char commandKeyC[] = "Command";

static const char historyCountKeyC[] = "HistoryCount";
static const char timeOutKeyC[] = "TimeOut";
static const char autoCheckOutKeyC[] = "AutoCheckOut";
static const char diffTypeKeyC[] = "DiffType";
static const char diffArgsKeyC[] = "DiffArgs";
static const char autoAssignActivityKeyC[] = "AutoAssignActivityName";
static const char promptToCheckInKeyC[] = "PromptToCheckIn";
static const char disableIndexerKeyC[] = "DisableIndexer";
static const char totalFilesKeyC[] = "TotalFiles";
static const char indexOnlyVOBsC[] = "IndexOnlyVOBs";

static const char defaultDiffArgs[] = "-ubp";

enum { defaultTimeOutS = 30, defaultHistoryCount = 50 };

56
static QString defaultCommand()
Orgad Shaneh's avatar
Orgad Shaneh committed
57
{
58
    return QLatin1String("cleartool" QTC_HOST_EXE_SUFFIX);
Orgad Shaneh's avatar
Orgad Shaneh committed
59 60 61 62 63
}

using namespace ClearCase::Internal;

ClearCaseSettings::ClearCaseSettings() :
64
    ccCommand(defaultCommand()),
Orgad Shaneh's avatar
Orgad Shaneh committed
65 66 67 68 69 70 71 72 73 74 75 76 77 78
    historyCount(defaultHistoryCount),
    timeOutS(defaultTimeOutS),
    diffType(GraphicalDiff),
    diffArgs(QLatin1String(defaultDiffArgs)),
    autoAssignActivityName(true),
    autoCheckOut(true),
    promptToCheckIn(false),
    disableIndexer(false)
{
}

void ClearCaseSettings::fromSettings(QSettings *settings)
{
    settings->beginGroup(QLatin1String(groupC));
79 80
    ccCommand = settings->value(QLatin1String(commandKeyC), defaultCommand()).toString();
    ccBinaryPath = Utils::Environment::systemEnvironment().searchInPath(ccCommand);
Orgad Shaneh's avatar
Orgad Shaneh committed
81 82 83 84 85 86 87 88 89 90 91 92 93 94
    timeOutS = settings->value(QLatin1String(timeOutKeyC), defaultTimeOutS).toInt();
    autoCheckOut = settings->value(QLatin1String(autoCheckOutKeyC), false).toBool();
    QString sDiffType = settings->value(QLatin1String(diffTypeKeyC), QLatin1String("Graphical")).toString();
    switch (sDiffType[0].toUpper().toLatin1()) {
        case 'G': diffType = GraphicalDiff; break;
        case 'E': diffType = ExternalDiff; break;
    }

    diffArgs = settings->value(QLatin1String(diffArgsKeyC), QLatin1String(defaultDiffArgs)).toString();
    autoAssignActivityName = settings->value(QLatin1String(autoAssignActivityKeyC), true).toBool();
    historyCount = settings->value(QLatin1String(historyCountKeyC), int(defaultHistoryCount)).toInt();
    promptToCheckIn = settings->value(QLatin1String(promptToCheckInKeyC), false).toBool();
    disableIndexer = settings->value(QLatin1String(disableIndexerKeyC), false).toBool();
    indexOnlyVOBs = settings->value(QLatin1String(indexOnlyVOBsC), QString()).toString();
95
    extDiffAvailable = !Utils::Environment::systemEnvironment().searchInPath(QLatin1String("diff")).isEmpty();
Orgad Shaneh's avatar
Orgad Shaneh committed
96 97 98 99 100 101 102 103 104
    settings->beginGroup(QLatin1String(totalFilesKeyC));
    foreach (const QString &view, settings->childKeys())
        totalFiles[view] = settings->value(view).toInt();
    settings->endGroup();
    settings->endGroup();
}

void ClearCaseSettings::toSettings(QSettings *settings) const
{
105 106
    typedef QHash<QString, int>::ConstIterator FilesConstIt;

Orgad Shaneh's avatar
Orgad Shaneh committed
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
    settings->beginGroup(QLatin1String(groupC));
    settings->setValue(QLatin1String(commandKeyC), ccCommand);
    settings->setValue(QLatin1String(autoCheckOutKeyC), autoCheckOut);
    settings->setValue(QLatin1String(timeOutKeyC), timeOutS);
    QString sDiffType;
    switch (diffType) {
        case ExternalDiff:  sDiffType = QLatin1String("External");  break;
        default:            sDiffType = QLatin1String("Graphical"); break;
    }

    settings->setValue(QLatin1String(diffArgsKeyC), diffArgs);
    settings->setValue(QLatin1String(diffTypeKeyC), sDiffType);
    settings->setValue(QLatin1String(autoAssignActivityKeyC), autoAssignActivityName);
    settings->setValue(QLatin1String(historyCountKeyC), historyCount);
    settings->setValue(QLatin1String(promptToCheckInKeyC), promptToCheckIn);
    settings->setValue(QLatin1String(disableIndexerKeyC), disableIndexer);
    settings->setValue(QLatin1String(indexOnlyVOBsC), indexOnlyVOBs);
    settings->beginGroup(QLatin1String(totalFilesKeyC));
125 126 127
    const FilesConstIt fcend = totalFiles.constEnd();
    for (FilesConstIt it = totalFiles.constBegin(); it != fcend; ++it)
        settings->setValue(it.key(), it.value());
Orgad Shaneh's avatar
Orgad Shaneh committed
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
    settings->endGroup();
    settings->endGroup();
}

bool ClearCaseSettings::equals(const ClearCaseSettings &s) const
{
    return ccCommand       == s.ccCommand
        && historyCount    == s.historyCount
        && timeOutS        == s.timeOutS
        && autoCheckOut    == s.autoCheckOut
        && diffType        == s.diffType
        && diffArgs     == s.diffArgs
        && autoAssignActivityName == s.autoAssignActivityName
        && promptToCheckIn == s.promptToCheckIn
        && disableIndexer  == s.disableIndexer
        && indexOnlyVOBs   == s.indexOnlyVOBs
        && totalFiles      == s.totalFiles;
}