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 };