File indexing completed on 2024-04-28 05:42:02

0001 /***************************************************************************
0002  *   Copyright (C) 2005-2009 by Rajko Albrecht                             *
0003  *   ral@alwins-world.de                                                   *
0004  *                                                                         *
0005  *   This program is free software; you can redistribute it and/or modify  *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  *                                                                         *
0010  *   This program is distributed in the hope that it will be useful,       *
0011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0013  *   GNU General Public License for more details.                          *
0014  *                                                                         *
0015  *   You should have received a copy of the GNU General Public License     *
0016  *   along with this program; if not, write to the                         *
0017  *   Free Software Foundation, Inc.,                                       *
0018  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
0019  ***************************************************************************/
0020 #include "mergedlg_impl.h"
0021 #include "helpers/ktranslateurl.h"
0022 #include "ksvnwidgets/ksvndialog.h"
0023 #include "rangeinput_impl.h"
0024 #include "settings/kdesvnsettings.h"
0025 #include <svnqt/url.h>
0026 #include <svnqt/version_check.h>
0027 
0028 #include <KLocalizedString>
0029 
0030 MergeDlg_impl::MergeDlg_impl(QWidget *parent, bool src1, bool src2, bool out, bool record_only, bool reintegrate)
0031     : QWidget(parent)
0032     , Ui::MergeDlg()
0033 {
0034     setupUi(this);
0035     m_SrcOneInput->setMode(KFile::Directory | KFile::File);
0036     if (!src1) {
0037         m_SrcOneInput->setEnabled(false);
0038         m_SrcOneInput->hide();
0039         m_SrcOneLabel->hide();
0040     }
0041     m_SrcTwoInput->setMode(KFile::Directory | KFile::File);
0042     if (!src2) {
0043         m_SrcTwoInput->setEnabled(false);
0044         m_SrcTwoInput->hide();
0045         m_SrcTwoLabel->hide();
0046     }
0047     m_OutInput->setMode(KFile::LocalOnly | KFile::Directory | KFile::File);
0048     if (!out) {
0049         m_OutInput->setEnabled(false);
0050         m_OutInput->hide();
0051         m_OutLabel->hide();
0052     }
0053     if (!record_only) {
0054         m_RecordOnly->setEnabled(false);
0055         m_RecordOnly->hide();
0056     }
0057     if (!reintegrate) {
0058         m_Reintegrate->setEnabled(false);
0059         m_Reintegrate->hide();
0060     }
0061     if (svn::Version::version_major() == 1 && svn::Version::version_minor() < 7) {
0062         m_AllowMixedRev->setEnabled(false);
0063         m_AllowMixedRev->hide();
0064     }
0065     adjustSize();
0066     setMinimumSize(minimumSizeHint());
0067     m_useExternMerge->setChecked(Kdesvnsettings::extern_merge_default());
0068 }
0069 
0070 MergeDlg_impl::~MergeDlg_impl()
0071 {
0072 }
0073 
0074 void MergeDlg_impl::setSrc1(const QString &what)
0075 {
0076     if (what.isEmpty()) {
0077         m_SrcOneInput->clear();
0078         return;
0079     }
0080     m_SrcOneInput->setUrl(helpers::KTranslateUrl::string2Uri(what));
0081 }
0082 
0083 void MergeDlg_impl::setSrc2(const QString &what)
0084 {
0085     if (what.isEmpty()) {
0086         m_SrcTwoInput->clear();
0087         return;
0088     }
0089     m_SrcTwoInput->setUrl(helpers::KTranslateUrl::string2Uri(what));
0090 }
0091 
0092 void MergeDlg_impl::setDest(const QString &what)
0093 {
0094     if (what.isEmpty()) {
0095         m_OutInput->clear();
0096         return;
0097     }
0098     // only local destination
0099     m_OutInput->setUrl(QUrl::fromLocalFile(what));
0100 }
0101 
0102 bool MergeDlg_impl::recursive() const
0103 {
0104     return m_RecursiveCheck->isChecked();
0105 }
0106 
0107 bool MergeDlg_impl::force() const
0108 {
0109     return m_ForceCheck->isChecked();
0110 }
0111 
0112 bool MergeDlg_impl::ignorerelated() const
0113 {
0114     return m_RelatedCheck->isChecked();
0115 }
0116 
0117 bool MergeDlg_impl::dryrun() const
0118 {
0119     return m_DryCheck->isChecked();
0120 }
0121 
0122 bool MergeDlg_impl::useExtern() const
0123 {
0124     return m_useExternMerge->isChecked();
0125 }
0126 
0127 bool MergeDlg_impl::recordOnly() const
0128 {
0129     return m_RecordOnly->isChecked();
0130 }
0131 
0132 bool MergeDlg_impl::reintegrate() const
0133 {
0134     return m_Reintegrate->isChecked();
0135 }
0136 
0137 bool MergeDlg_impl::allowmixedrevs() const
0138 {
0139     return m_AllowMixedRev->isChecked();
0140 }
0141 
0142 QString MergeDlg_impl::Src1() const
0143 {
0144     QUrl uri(m_SrcOneInput->url());
0145     const QString proto = svn::Url::transformProtokoll(uri.scheme());
0146     if (proto == QLatin1String("file") && !m_SrcOneInput->url().scheme().startsWith("ksvn+file:")) {
0147         return uri.toLocalFile();
0148     }
0149 
0150     uri.setScheme(proto);
0151     return uri.url();
0152 }
0153 
0154 QString MergeDlg_impl::Src2() const
0155 {
0156     if (m_SrcTwoInput->url().isEmpty()) {
0157         return QString();
0158     }
0159     QUrl uri(m_SrcTwoInput->url());
0160     const QString proto = svn::Url::transformProtokoll(uri.scheme());
0161     if (proto == QLatin1String("file") && !m_SrcTwoInput->url().scheme().startsWith("ksvn+file:")) {
0162         return uri.toLocalFile();
0163     }
0164 
0165     uri.setScheme(proto);
0166     return uri.url();
0167 }
0168 
0169 QString MergeDlg_impl::Dest() const
0170 {
0171     return m_OutInput->url().toLocalFile();
0172 }
0173 
0174 Rangeinput_impl::revision_range MergeDlg_impl::getRange() const
0175 {
0176     return m_RangeInput->getRange();
0177 }
0178 
0179 /*!
0180     \fn MergeDlg_impl::getMergeRange(bool*force,bool*recursive,bool*related,bool*dry)
0181  */
0182 bool MergeDlg_impl::getMergeRange(Rangeinput_impl::revision_range &range,
0183                                   bool *force,
0184                                   bool *recursive,
0185                                   bool *ignorerelated,
0186                                   bool *dry,
0187                                   bool *useExternal,
0188                                   bool *allowmixedrevs,
0189                                   QWidget *parent)
0190 {
0191     QPointer<KSvnSimpleOkDialog> dlg(new KSvnSimpleOkDialog(QStringLiteral("merge_range"), parent));
0192     dlg->setWithCancelButton();
0193     dlg->setHelp(QLatin1String("merging-items"));
0194     dlg->setWindowTitle(i18nc("@title:window", "Enter Merge Range"));
0195 
0196     MergeDlg_impl *ptr = new MergeDlg_impl(dlg, false, false, false, false, false);
0197     dlg->addWidget(ptr);
0198     bool ret = false;
0199     if (dlg->exec() == QDialog::Accepted) {
0200         range = ptr->getRange();
0201         *force = ptr->force();
0202         *recursive = ptr->recursive();
0203         *ignorerelated = ptr->ignorerelated();
0204         *dry = ptr->dryrun();
0205         *useExternal = ptr->useExtern();
0206         *allowmixedrevs = ptr->allowmixedrevs();
0207         ret = true;
0208     }
0209     delete dlg;
0210 
0211     return ret;
0212 }
0213 
0214 void MergeDlg_impl::externDisplayToggled(bool how)
0215 {
0216     m_DryCheck->setEnabled(!how);
0217     m_RelatedCheck->setEnabled(!how);
0218     m_ForceCheck->setEnabled(!how);
0219     m_RecordOnly->setEnabled(!how);
0220     m_Reintegrate->setEnabled(!how);
0221 }
0222 
0223 void MergeDlg_impl::recordOnlyToggled(bool)
0224 {
0225 }
0226 
0227 void MergeDlg_impl::reintegrateToggled(bool how)
0228 {
0229     m_RelatedCheck->setEnabled(!how);
0230     m_ForceCheck->setEnabled(!how);
0231     m_RecordOnly->setEnabled(!how);
0232     m_useExternMerge->setEnabled(!how);
0233     m_RecursiveCheck->setEnabled(!how);
0234     m_SrcTwoInput->setEnabled(!how);
0235     m_RangeInput->setStartOnly(how);
0236     if (how) {
0237         m_RecursiveCheck->setChecked(true);
0238         m_useExternMerge->setChecked(false);
0239         m_RecordOnly->setChecked(false);
0240         m_ForceCheck->setChecked(false);
0241         m_RelatedCheck->setChecked(false);
0242     }
0243 }
0244 
0245 #include "moc_mergedlg_impl.cpp"