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"