File indexing completed on 2024-04-14 05:34:15

0001 /*
0002     SPDX-FileCopyrightText: 2011 Vishesh Yadav <vishesh3y@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "pulldialog.h"
0008 #include "hgwrapper.h"
0009 #include "hgconfig.h"
0010 #include "pathselector.h"
0011 #include "fileviewhgpluginsettings.h"
0012 
0013 #include <QStringList>
0014 #include <QTextCodec>
0015 #include <QHeaderView>
0016 #include <QCheckBox>
0017 #include <QGroupBox>
0018 #include <QTableWidget>
0019 #include <QString>
0020 #include <KTextEdit>
0021 #include <KLocalizedString>
0022 #include <KMessageBox>
0023 
0024 
0025 HgPullDialog::HgPullDialog(QWidget *parent):
0026     HgSyncBaseDialog(HgSyncBaseDialog::PullDialog, parent)
0027 {
0028     // dialog properties
0029     this->setWindowTitle(xi18nc("@title:window",
0030                 "<application>Hg</application> Pull Repository"));
0031     setup();
0032 
0033 }
0034 
0035 void HgPullDialog::setOptions()
0036 {
0037     m_optUpdate = new QCheckBox(xi18nc("@label:checkbox",
0038                 "Update to new branch head if changesets were pulled"));
0039     m_optInsecure = new QCheckBox(xi18nc("@label:checkbox",
0040                 "Do not verify server certificate"));
0041     m_optForce = new QCheckBox(xi18nc("@label:checkbox",
0042                 "Force Pull"));
0043     m_optionGroup = new QGroupBox(xi18nc("@label:group",
0044                 "Options"));
0045 
0046     m_options << m_optForce;
0047     m_options << m_optUpdate;
0048     m_options << m_optInsecure;
0049 }
0050 
0051 void HgPullDialog::createChangesGroup()
0052 {
0053     m_changesGroup = new QGroupBox(xi18nc("@label:group",
0054                 "Incoming Changes"));    
0055     QHBoxLayout *hbox = new QHBoxLayout;
0056     m_changesList = new QTableWidget;
0057 
0058     m_changesList->setColumnCount(4);
0059     m_changesList->verticalHeader()->hide();
0060     m_changesList->horizontalHeader()->hide();
0061     m_changesList->setSelectionBehavior(QAbstractItemView::SelectRows);
0062     m_changesList->setEditTriggers(QAbstractItemView::NoEditTriggers);
0063 
0064     hbox->addWidget(m_changesList);
0065 
0066     m_changesGroup->setLayout(hbox);
0067     m_changesGroup->setVisible(false);
0068 
0069     connect(this, &HgSyncBaseDialog::changeListAvailable,
0070             this, &HgPullDialog::slotUpdateChangesGeometry);
0071 }
0072 
0073 void HgPullDialog::getHgChangesArguments(QStringList &args)
0074 {
0075     args << QStringLiteral("incoming");
0076     args << m_pathSelector->remote();
0077     args << QStringLiteral("--config");
0078     args << QStringLiteral("ui.verbose=False");
0079     args << QStringLiteral("--template");
0080     args << QStringLiteral("Commit: {rev}:{node|short}   "
0081                     "{author}  "
0082                     "{date|isodate}   {desc|firstline}\n");
0083 }
0084 
0085 void HgPullDialog::parseUpdateChanges(const QString &input)
0086 {
0087     QStringList list = input.split(QLatin1String("  "), Qt::SkipEmptyParts);
0088     QTableWidgetItem *author = new QTableWidgetItem;
0089     QTableWidgetItem *changeset = new QTableWidgetItem;
0090     QTableWidgetItem *date = new QTableWidgetItem;
0091     QTableWidgetItem *summary = new QTableWidgetItem;
0092 
0093     author->setForeground(Qt::darkRed);
0094     changeset->setForeground(Qt::red);
0095     date->setForeground(Qt::blue);
0096 
0097     author->setText(list.takeFirst());
0098     changeset->setText(list.takeFirst());
0099     date->setText(list.takeFirst());
0100     summary->setText(list.takeFirst());
0101 
0102     int rowCount = m_changesList->rowCount();
0103     m_changesList->insertRow(rowCount);
0104     m_changesList->setItem(rowCount, 0, author);
0105     m_changesList->setItem(rowCount, 1, changeset);
0106     m_changesList->setItem(rowCount, 2, date);
0107     m_changesList->setItem(rowCount, 3, summary);
0108 }
0109 
0110 void HgPullDialog::appendOptionArguments(QStringList &args)
0111 {
0112     if (m_optForce->isChecked()) {
0113         args << QStringLiteral("--force");
0114     }
0115     if (m_optUpdate->isChecked()) {
0116         args << QStringLiteral("--update");
0117     }
0118     if (m_optInsecure->isChecked()) {
0119         args << QStringLiteral("--insecure");
0120     }
0121 }
0122 
0123 void HgPullDialog::slotUpdateChangesGeometry()
0124 {
0125     m_changesList->resizeColumnsToContents();
0126     m_changesList->resizeRowsToContents();
0127     m_changesList->horizontalHeader()->setStretchLastSection(true);
0128 }
0129 
0130 void HgPullDialog::readBigSize()
0131 {
0132     FileViewHgPluginSettings *settings = FileViewHgPluginSettings::self();
0133     m_bigSize = QSize(settings->pullDialogBigWidth(), settings->pushDialogBigHeight());
0134 }
0135 
0136 void HgPullDialog::writeBigSize()
0137 {
0138     qDebug() << "Saving geometry";
0139     FileViewHgPluginSettings *settings = FileViewHgPluginSettings::self();
0140     settings->setPullDialogBigWidth(m_bigSize.width());
0141     settings->setPullDialogBigHeight(m_bigSize.height());
0142     settings->save();
0143 }
0144 
0145 void HgPullDialog::noChangesMessage()
0146 {
0147     KMessageBox::information(this, xi18nc("@message:info",
0148                 "No incoming changes!"));
0149 }
0150 
0151 
0152 
0153 #include "moc_pulldialog.cpp"