File indexing completed on 2024-04-21 05:43:03
0001 /* 0002 SPDX-FileCopyrightText: 2001-2004 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 #ifndef KOMPARENAVTREEPART_H 0010 #define KOMPARENAVTREEPART_H 0011 0012 // Qt 0013 #include <QHash> 0014 #include <QSplitter> 0015 #include <QTreeWidget> 0016 #include <QTreeWidgetItem> 0017 // KF 0018 #include <KParts/ReadOnlyPart> 0019 // KompareDiff2 0020 #include <KompareDiff2/DiffModelList> 0021 0022 namespace KompareDiff2 { 0023 class DiffModel; 0024 class Difference; 0025 class Info; 0026 } 0027 0028 class KDirLVI; 0029 class KFileLVI; 0030 class KChangeLVI; 0031 0032 class KompareNavTreePart : public KParts::ReadOnlyPart 0033 { 0034 Q_OBJECT 0035 0036 public: 0037 explicit KompareNavTreePart(QWidget* parentWidget, QObject* parent, 0038 const KPluginMetaData& metaData, const QVariantList& args); 0039 ~KompareNavTreePart() override; 0040 0041 public: 0042 bool openFile() override { return false; }; 0043 0044 public Q_SLOTS: 0045 void slotSetSelection(const KompareDiff2::DiffModel* model, const KompareDiff2::Difference* diff); 0046 void slotSetSelection(const KompareDiff2::Difference* diff); 0047 void slotModelsChanged(const KompareDiff2::DiffModelList* modelList); 0048 void slotKompareInfo(KompareDiff2::Info* info); 0049 0050 Q_SIGNALS: 0051 void selectionChanged(const KompareDiff2::DiffModel* model, const KompareDiff2::Difference* diff); 0052 void selectionChanged(const KompareDiff2::Difference* diff); 0053 0054 private Q_SLOTS: 0055 void slotSrcDirTreeSelectionChanged(QTreeWidgetItem* item); 0056 void slotDestDirTreeSelectionChanged(QTreeWidgetItem* item); 0057 void slotFileListSelectionChanged(QTreeWidgetItem* item); 0058 void slotChangesListSelectionChanged(QTreeWidgetItem* item); 0059 0060 void slotApplyDifference(bool apply); 0061 void slotApplyAllDifferences(bool apply); 0062 void slotApplyDifference(const KompareDiff2::Difference* diff, bool apply); 0063 0064 void buildTreeInMemory(); 0065 0066 private: 0067 void setSelectedDir(const KompareDiff2::DiffModel* model); 0068 void setSelectedFile(const KompareDiff2::DiffModel* model); 0069 void setSelectedDifference(const KompareDiff2::Difference* diff); 0070 0071 void buildDirectoryTree(); 0072 0073 QString compareFromEndAndReturnSame(const QString& string1, const QString& string2); 0074 0075 private: 0076 QSplitter* m_splitter; 0077 const KompareDiff2::DiffModelList* m_modelList; 0078 0079 QHash<const KompareDiff2::Difference*, KChangeLVI*> m_diffToChangeItemDict; 0080 QHash<const KompareDiff2::DiffModel*, KFileLVI*> m_modelToFileItemDict; 0081 QHash<const KompareDiff2::DiffModel*, KDirLVI*> m_modelToSrcDirItemDict; 0082 QHash<const KompareDiff2::DiffModel*, KDirLVI*> m_modelToDestDirItemDict; 0083 0084 QTreeWidget* m_srcDirTree; 0085 QTreeWidget* m_destDirTree; 0086 QTreeWidget* m_fileList; 0087 QTreeWidget* m_changesList; 0088 0089 KDirLVI* m_srcRootItem; 0090 KDirLVI* m_destRootItem; 0091 0092 const KompareDiff2::DiffModel* m_selectedModel; 0093 const KompareDiff2::Difference* m_selectedDifference; 0094 0095 QString m_source; 0096 QString m_destination; 0097 0098 KompareDiff2::Info* m_info; 0099 }; 0100 0101 // These 3 classes are need to store the models into a tree so it is easier 0102 // to extract the info we need for the navigation widgets 0103 0104 class KChangeLVI : public QTreeWidgetItem 0105 { 0106 public: 0107 KChangeLVI(QTreeWidget* parent, KompareDiff2::Difference* diff); 0108 ~KChangeLVI() override; 0109 public: 0110 KompareDiff2::Difference* difference() { return m_difference; }; 0111 bool operator<(const QTreeWidgetItem& item) const override; 0112 0113 void setDifferenceText(); 0114 private: 0115 KompareDiff2::Difference* m_difference; 0116 }; 0117 0118 class KFileLVI : public QTreeWidgetItem 0119 { 0120 public: 0121 KFileLVI(QTreeWidget* parent, KompareDiff2::DiffModel* model); 0122 ~KFileLVI() override; 0123 public: 0124 KompareDiff2::DiffModel* model() { return m_model; }; 0125 void fillChangesList(QTreeWidget* changesList, QHash<const KompareDiff2::Difference*, KChangeLVI*>* diffToChangeItemDict); 0126 private: 0127 bool hasExtension(const QString& extensions, const QString& fileName); 0128 const QString getIcon(const QString& fileName); 0129 private: 0130 KompareDiff2::DiffModel* m_model; 0131 }; 0132 0133 class KDirLVI : public QTreeWidgetItem 0134 { 0135 public: 0136 KDirLVI(KDirLVI* parent, const QString& dir); 0137 KDirLVI(QTreeWidget* parent, const QString& dir); 0138 ~KDirLVI() override; 0139 public: 0140 void addModel(QString& dir, KompareDiff2::DiffModel* model, QHash<const KompareDiff2::DiffModel*, KDirLVI*>* modelToDirItemDict); 0141 QString& dirName() { return m_dirName; }; 0142 QString fullPath(QString& path); 0143 0144 KDirLVI* setSelected(const QString& dir); 0145 void setSelected(bool selected) { QTreeWidgetItem::setSelected(selected); } 0146 0147 void fillFileList(QTreeWidget* fileList, QHash<const KompareDiff2::DiffModel*, KFileLVI*>* modelToFileItemDict); 0148 bool isRootItem() { return m_rootItem; }; 0149 0150 private: 0151 KDirLVI* findChild(const QString& dir); 0152 private: 0153 KompareDiff2::DiffModelList m_modelList; 0154 QString m_dirName; 0155 bool m_rootItem; 0156 }; 0157 0158 #endif