1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
/***************************************************************************
Copyright 2006 David Nolden <david.nolden.kdevelop@art-master.de>
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef KDEVPLATFORM_PLUGIN_PATCHREVIEW_H
#define KDEVPLATFORM_PLUGIN_PATCHREVIEW_H
#include <QPointer>
#include <interfaces/iplugin.h>
#include <interfaces/ipatchsource.h>
#include <interfaces/ilanguagesupport.h>
class PatchHighlighter;
class PatchReviewToolViewFactory;
class QTimer;
namespace KDevelop {
class IDocument;
}
namespace Sublime {
class Area;
}
namespace Diff2
{
class KompareModelList;
class DiffModel;
}
namespace Kompare
{
struct Info;
}
class DiffSettings;
class PatchReviewPlugin;
class PatchReviewPlugin : public KDevelop::IPlugin, public KDevelop::IPatchReview, public KDevelop::ILanguageSupport
{
Q_OBJECT
Q_INTERFACES( KDevelop::IPatchReview )
Q_INTERFACES( KDevelop::ILanguageSupport )
public :
explicit PatchReviewPlugin( QObject *parent, const QVariantList & = QVariantList() );
~PatchReviewPlugin() override;
void unload() override;
KDevelop::IPatchSource::Ptr patch() const {
return m_patch;
}
Diff2::KompareModelList* modelList() const {
return m_modelList.data();
}
QString name() const override {
return QStringLiteral("diff");
}
KDevelop::ParseJob *createParseJob(const KDevelop::IndexedString &) override {
return nullptr;
}
void seekHunk( bool forwards, const QUrl& file = QUrl() );
void setPatch( KDevelop::IPatchSource* patch );
void startReview( KDevelop::IPatchSource* patch, ReviewMode mode ) override;
void finishReview(const QList<QUrl>& selection);
QUrl urlForFileModel( const Diff2::DiffModel* model );
QAction* finishReviewAction() const { return m_finishReview; }
KDevelop::ContextMenuExtension contextMenuExtension(KDevelop::Context* context, QWidget* parent) override;
Q_SIGNALS:
void startingNewReview();
void patchChanged();
public Q_SLOTS :
//Does parts of the review-starting that are problematic to do directly in startReview, as they may open dialogs etc.
void updateReview();
void cancelReview();
void notifyPatchChanged();
void highlightPatch();
void updateKompareModel();
void forceUpdate();
void areaChanged(Sublime::Area* area);
void executeFileReviewAction();
private Q_SLOTS :
void documentClosed( KDevelop::IDocument* );
void textDocumentCreated( KDevelop::IDocument* );
void documentSaved( KDevelop::IDocument* );
void closeReview();
private:
void switchToEmptyReviewArea();
/// Makes sure that this working set is active only in the @p area, and that its name starts with "review".
void setUniqueEmptyWorkingSet(Sublime::Area* area);
void addHighlighting( const QUrl& file, KDevelop::IDocument* document = nullptr );
void removeHighlighting( const QUrl& file = QUrl() );
KDevelop::IPatchSource::Ptr m_patch;
QTimer* m_updateKompareTimer;
PatchReviewToolViewFactory* m_factory;
QAction* m_finishReview;
#if 0
void determineState();
#endif
QPointer< DiffSettings > m_diffSettings;
QScopedPointer< Kompare::Info > m_kompareInfo;
QScopedPointer< Diff2::KompareModelList > m_modelList;
uint m_depth = 0; // depth of the patch represented by m_modelList
using HighlightMap = QMap<QUrl, QPointer<PatchHighlighter>>;
HighlightMap m_highlighters;
friend class PatchReviewToolView; // to access slot exporterSelected();
};
#endif
|