File indexing completed on 2024-05-05 05:45:47

0001 /*
0002     SPDX-FileCopyrightText: 2001-2003 Otto Bruggeman <otto.bruggeman@home.nl>
0003     SPDX-FileCopyrightText: 2001-2003 John Firebaugh <jfirebaugh@kde.org>
0004     SPDX-FileCopyrightText: 2007-2011 Kevin Kofler <kevin.kofler@chello.at>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #include "komparesaveoptionswidget.h"
0010 
0011 #include <QButtonGroup>
0012 #include <QCheckBox>
0013 #include <QLabel>
0014 #include <QRadioButton>
0015 #include <QSpinBox>
0016 
0017 #include <KIO/Global>
0018 #include <KUrlRequester>
0019 
0020 #include <KompareDiff2/DiffSettings>
0021 
0022 KompareSaveOptionsWidget::KompareSaveOptionsWidget(const QString& source, const QString& destination,
0023                                                    KompareDiff2::DiffSettings* settings, QWidget* parent)
0024     : KompareSaveOptionsBase(parent)
0025     , m_source(source)
0026     , m_destination(destination)
0027     , m_FormatBG(new QButtonGroup(this))
0028 {
0029     setObjectName(QStringLiteral("save options"));
0030 
0031     m_settings = settings;
0032 
0033     m_directoryRequester->setMode(
0034         KFile::ExistingOnly | KFile::Directory | KFile::LocalOnly);
0035 
0036     QUrl sourceURL;
0037     QUrl destinationURL;
0038     sourceURL.setPath(source);
0039     destinationURL.setPath(destination);
0040 
0041     // Find a common root.
0042     QUrl root(sourceURL);
0043     while (root.isValid() && !root.isParentOf(destinationURL) && root != KIO::upUrl(root)) {
0044         root = KIO::upUrl(root);
0045     }
0046 
0047     // If we found a common root, change to that directory and
0048     // strip the common part from source and destination.
0049     if (root.isValid() && root != KIO::upUrl(root)) {
0050         m_directoryRequester->setUrl(root);
0051     }
0052 
0053     connect(m_SmallerChangesCB,   &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0054     connect(m_LargeFilesCB,       &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0055     connect(m_IgnoreCaseCB,       &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0056     connect(m_ExpandTabsCB,       &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0057     connect(m_IgnoreEmptyLinesCB, &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0058     connect(m_IgnoreWhiteSpaceCB, &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0059     connect(m_FunctionNamesCB,    &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0060     connect(m_RecursiveCB,        &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0061     connect(m_NewFilesCB,         &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0062     connect(m_ContextRB,          &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0063     connect(m_EdRB,               &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0064     connect(m_NormalRB,           &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0065     connect(m_RCSRB,              &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0066     connect(m_UnifiedRB,          &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0067     connect(m_SideBySideRB,       &QCheckBox::toggled, this, &KompareSaveOptionsWidget::updateCommandLine);
0068     connect(m_ContextLinesSB,     &QSpinBox::textChanged,
0069             this, &KompareSaveOptionsWidget::updateCommandLine);
0070     connect(m_directoryRequester, &KUrlRequester::textChanged, this, &KompareSaveOptionsWidget::updateCommandLine);
0071 
0072     m_FormatBG->setExclusive(true);
0073     m_FormatBG->addButton(m_ContextRB, KompareDiff2::Context);
0074     m_FormatBG->addButton(m_EdRB, KompareDiff2::Ed);
0075     m_FormatBG->addButton(m_NormalRB, KompareDiff2::Normal);
0076     m_FormatBG->addButton(m_UnifiedRB, KompareDiff2::Unified);
0077     m_FormatBG->addButton(m_RCSRB, KompareDiff2::RCS);
0078     m_FormatBG->addButton(m_SideBySideRB, KompareDiff2::SideBySide);
0079 
0080     loadOptions();
0081 }
0082 
0083 KompareSaveOptionsWidget::~KompareSaveOptionsWidget()
0084 {
0085 
0086 }
0087 
0088 QString KompareSaveOptionsWidget::directory() const
0089 {
0090     return QUrl(m_directoryRequester->url()).toLocalFile();
0091 }
0092 
0093 void KompareSaveOptionsWidget::updateCommandLine()
0094 {
0095     QString cmdLine = QStringLiteral("diff");
0096 
0097     QString options;
0098 
0099     switch (static_cast<KompareDiff2::Format>(m_FormatBG->checkedId())) {
0100     case KompareDiff2::Unified :
0101         cmdLine += QLatin1String(" -U ") + QString::number(m_ContextLinesSB->value());
0102         break;
0103     case KompareDiff2::Context :
0104         cmdLine += QLatin1String(" -C ") + QString::number(m_ContextLinesSB->value());
0105         break;
0106     case KompareDiff2::RCS :
0107         options += QLatin1Char('n');
0108         break;
0109     case KompareDiff2::Ed :
0110         options += QLatin1Char('e');
0111         break;
0112     case KompareDiff2::SideBySide:
0113         options += QLatin1Char('y');
0114         break;
0115     case KompareDiff2::Normal :
0116     case KompareDiff2::UnknownFormat :
0117     default:
0118         break;
0119     }
0120 
0121     if (m_SmallerChangesCB->isChecked()) {
0122         options += QLatin1Char('d');
0123     }
0124 
0125     if (m_LargeFilesCB->isChecked()) {
0126         options += QLatin1Char('H');
0127     }
0128 
0129     if (m_IgnoreCaseCB->isChecked()) {
0130         options += QLatin1Char('i');
0131     }
0132 
0133     if (m_ExpandTabsCB->isChecked()) {
0134         options += QLatin1Char('t');
0135     }
0136 
0137     if (m_IgnoreEmptyLinesCB->isChecked()) {
0138         options += QLatin1Char('B');
0139     }
0140 
0141     if (m_IgnoreWhiteSpaceCB->isChecked()) {
0142         options += QLatin1Char('b');
0143     }
0144 
0145     if (m_FunctionNamesCB->isChecked()) {
0146         options += QLatin1Char('p');
0147     }
0148 
0149 //     if (  ) {
0150 //         cmdLine += " -w";
0151 //     }
0152 
0153     if (m_RecursiveCB->isChecked()) {
0154         options += QLatin1Char('r');
0155     }
0156 
0157     if (m_NewFilesCB->isChecked()) {
0158         options += QLatin1Char('N');
0159     }
0160 
0161 //     if (m_AllTextCB->isChecked()) {
0162 //         options += QLatin1Char('a');
0163 //     }
0164 
0165     if (options.length() > 0) {
0166         cmdLine += QStringLiteral(" -") + options;
0167     }
0168 
0169     QDir dir(directory());
0170     cmdLine += QStringLiteral(" -- ");
0171     cmdLine += dir.relativeFilePath(m_source);
0172     cmdLine += QLatin1Char(' ');
0173     cmdLine += dir.relativeFilePath(m_destination);
0174 
0175     m_CommandLineLabel->setText(cmdLine);
0176 }
0177 
0178 void KompareSaveOptionsWidget::loadOptions()
0179 {
0180     m_SmallerChangesCB->setChecked(m_settings->m_createSmallerDiff);
0181     m_LargeFilesCB->setChecked(m_settings->m_largeFiles);
0182     m_IgnoreCaseCB->setChecked(m_settings->m_ignoreChangesInCase);
0183     m_ExpandTabsCB->setChecked(m_settings->m_convertTabsToSpaces);
0184     m_IgnoreEmptyLinesCB->setChecked(m_settings->m_ignoreEmptyLines);
0185     m_IgnoreWhiteSpaceCB->setChecked(m_settings->m_ignoreWhiteSpace);
0186     m_FunctionNamesCB->setChecked(m_settings->m_showCFunctionChange);
0187     m_RecursiveCB->setChecked(m_settings->m_recursive);
0188     m_NewFilesCB->setChecked(m_settings->m_newFiles);
0189 //     m_AllTextCB->setChecked( m_settings->m_allText );
0190 
0191     m_ContextLinesSB->setValue(m_settings->m_linesOfContext);
0192 
0193     m_FormatBG->button(m_settings->m_format)->setChecked(true);
0194 
0195     updateCommandLine();
0196 }
0197 
0198 void KompareSaveOptionsWidget::saveOptions()
0199 {
0200     m_settings->m_createSmallerDiff   = m_SmallerChangesCB->isChecked();
0201     m_settings->m_largeFiles          = m_LargeFilesCB->isChecked();
0202     m_settings->m_ignoreChangesInCase = m_IgnoreCaseCB->isChecked();
0203     m_settings->m_convertTabsToSpaces = m_ExpandTabsCB->isChecked();
0204     m_settings->m_ignoreEmptyLines    = m_IgnoreEmptyLinesCB->isChecked();
0205     m_settings->m_ignoreWhiteSpace    = m_IgnoreWhiteSpaceCB->isChecked();
0206     m_settings->m_showCFunctionChange = m_FunctionNamesCB->isChecked();
0207     m_settings->m_recursive           = m_RecursiveCB->isChecked();
0208     m_settings->m_newFiles            = m_NewFilesCB->isChecked();
0209 //     m_settings->m_allText             = m_AllTextCB->isChecked();
0210 
0211     m_settings->m_linesOfContext      = m_ContextLinesSB->value();
0212 
0213     m_settings->m_format = static_cast<KompareDiff2::Format>(m_FormatBG->checkedId());
0214 
0215 }
0216 
0217 #include "moc_komparesaveoptionswidget.cpp"