File indexing completed on 2024-05-12 04:38:56
0001 /* 0002 SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "vcsdiffwidget.h" 0008 0009 #include <KLocalizedString> 0010 0011 #include <interfaces/icore.h> 0012 #include <interfaces/iruncontroller.h> 0013 0014 #include "../vcsjob.h" 0015 #include "../vcsrevision.h" 0016 #include "../vcsdiff.h" 0017 #include "debug.h" 0018 0019 #include "ui_vcsdiffwidget.h" 0020 #include "vcsdiffpatchsources.h" 0021 0022 namespace KDevelop 0023 { 0024 0025 class VcsDiffWidgetPrivate 0026 { 0027 public: 0028 Ui::VcsDiffWidget* m_ui; 0029 VcsJob* m_job; 0030 VcsDiffWidget* q; 0031 0032 explicit VcsDiffWidgetPrivate(VcsDiffWidget* _q) : q(_q) { 0033 } 0034 0035 void diffReady( KDevelop::VcsJob* job ) 0036 { 0037 if( job != m_job ) 0038 return; 0039 KDevelop::VcsDiff diff = m_job->fetchResults().value<KDevelop::VcsDiff>(); 0040 0041 // Try using the patch-review plugin if possible 0042 auto* patch = new VCSDiffPatchSource(diff); 0043 0044 if(showVcsDiff(patch)) 0045 { 0046 q->deleteLater(); 0047 return; 0048 }else{ 0049 delete patch; 0050 } 0051 0052 qCDebug(VCS) << "diff:" << diff.diff(); 0053 m_ui->diffDisplay->setPlainText( diff.diff() ); 0054 m_ui->diffDisplay->setReadOnly( true ); 0055 0056 } 0057 0058 }; 0059 0060 VcsDiffWidget::VcsDiffWidget( KDevelop::VcsJob* job, QWidget* parent ) 0061 : QWidget(parent) 0062 , d_ptr(new VcsDiffWidgetPrivate(this)) 0063 { 0064 Q_D(VcsDiffWidget); 0065 0066 d->m_job = job; 0067 d->m_ui = new Ui::VcsDiffWidget(); 0068 d->m_ui->setupUi( this ); 0069 connect( d->m_job, &VcsJob::resultsReady, 0070 this, [this] (VcsJob* job) { Q_D(VcsDiffWidget); d->diffReady(job); } ); 0071 ICore::self()->runController()->registerJob( d->m_job ); 0072 } 0073 0074 VcsDiffWidget::~VcsDiffWidget() 0075 { 0076 Q_D(VcsDiffWidget); 0077 0078 delete d->m_ui; 0079 } 0080 0081 void VcsDiffWidget::setRevisions( const KDevelop::VcsRevision& first, 0082 const KDevelop::VcsRevision& second ) 0083 { 0084 Q_D(VcsDiffWidget); 0085 0086 d->m_ui->revLabel->setText( i18nc("@label", "Difference between revision %1 and %2:", 0087 first.prettyValue(), 0088 second.prettyValue() ) ); 0089 } 0090 0091 } 0092 0093 #include "moc_vcsdiffwidget.cpp"