File indexing completed on 2025-05-04 05:17:22
0001 /* 0002 SPDX-FileCopyrightText: 2021 Hamed Masafi <hamed.masfi@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "appmainwindow.h" 0010 #include "libkommitwidgets_export.h" 0011 0012 #include <entities/file.h> 0013 0014 #include <QSharedPointer> 0015 0016 namespace Git 0017 { 0018 class Manager; 0019 class Tag; 0020 class Tree; 0021 class Branch; 0022 }; 0023 0024 class DiffTreeModel; 0025 class DiffWidget; 0026 class DiffTreeView; 0027 class FilesModel; 0028 class LIBKOMMITWIDGETS_EXPORT DiffWindow : public AppMainWindow 0029 { 0030 Q_OBJECT 0031 0032 public: 0033 explicit DiffWindow(); 0034 explicit DiffWindow(Git::Manager *git); 0035 DiffWindow(QSharedPointer<Git::File> oldFile, QSharedPointer<Git::File> newFile); 0036 DiffWindow(Git::Manager *git, const QString &oldBranch, const QString &newBranch); 0037 DiffWindow(Git::Manager *git, QSharedPointer<Git::Tag> tag); 0038 DiffWindow(Git::Branch *oldBranch, Git::Branch *newBranch); 0039 DiffWindow(Git::Manager *git, QSharedPointer<Git::Tree> leftTree); 0040 DiffWindow(const QString &oldDir, const QString &newDir); 0041 0042 private Q_SLOTS: 0043 void fileOpen(); 0044 void slotTreeViewFileSelected(const QString &file); 0045 0046 private: 0047 Git::Manager *mGit; 0048 QSharedPointer<Git::File> mOldFile; 0049 QSharedPointer<Git::File> mNewFile; 0050 0051 QString mOldBranch; 0052 QString mNewBranch; 0053 0054 QString mLeftDir, mRightDir; 0055 0056 FilesModel *mFilesModel; 0057 DiffTreeModel *mDiffModel; 0058 DiffWidget *mDiffWidget; 0059 DiffTreeView *mTreeView; 0060 QDockWidget *mDock; 0061 0062 void initActions(); 0063 void init(bool showSideBar); 0064 0065 enum Mode { None, Dirs, Files }; 0066 0067 struct Storage { 0068 enum class Mode { NoStorage, FileSystem, Git, Tree }; 0069 0070 QSharedPointer<Git::File> file(const QString &path) const; 0071 0072 void setGitManager(Git::Manager *manager); 0073 void setPath(const QString &path); 0074 void setTree(QSharedPointer<Git::Tree> tree); 0075 0076 private: 0077 QString mPath; 0078 QSharedPointer<Git::Tree> mTree; 0079 Git::Manager *mManager; 0080 Mode mMode{Mode::NoStorage}; 0081 }; 0082 0083 Storage mLeftStorage; 0084 Storage mRightStorage; 0085 void compareDirs(); 0086 };