mirror of https://gitlab.com/cppit/jucipp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.3 KiB
72 lines
2.3 KiB
#pragma once |
|
#include "dispatcher.hpp" |
|
#include "git.hpp" |
|
#include "mutex.hpp" |
|
#include "source_base.hpp" |
|
#include "workers.hpp" |
|
#include <atomic> |
|
#include <boost/filesystem.hpp> |
|
#include <map> |
|
#include <set> |
|
#include <thread> |
|
|
|
namespace Source { |
|
class DiffView : virtual public Source::BaseView { |
|
class Renderer : public Gsv::GutterRenderer { |
|
public: |
|
Renderer(); |
|
|
|
Glib::RefPtr<Gtk::TextTag> tag_added; |
|
Glib::RefPtr<Gtk::TextTag> tag_modified; |
|
Glib::RefPtr<Gtk::TextTag> tag_removed; |
|
Glib::RefPtr<Gtk::TextTag> tag_removed_below; |
|
Glib::RefPtr<Gtk::TextTag> tag_removed_above; |
|
|
|
Gdk::RGBA yellow, red, green; |
|
|
|
protected: |
|
void draw_vfunc(const Cairo::RefPtr<Cairo::Context> &cr, const Gdk::Rectangle &background_area, |
|
const Gdk::Rectangle &cell_area, Gtk::TextIter &start, Gtk::TextIter &end, |
|
Gsv::GutterRendererState p6) override; |
|
}; |
|
|
|
public: |
|
DiffView(const boost::filesystem::path &file_path, const Glib::RefPtr<Gsv::Language> &language); |
|
~DiffView() override; |
|
|
|
void configure() override; |
|
|
|
void rename(const boost::filesystem::path &path) override; |
|
|
|
void goto_next_diff(); |
|
std::string get_diff_details(); |
|
|
|
Mutex canonical_file_path_mutex; |
|
/// Use canonical path to follow symbolic links |
|
boost::filesystem::path canonical_file_path GUARDED_BY(canonical_file_path_mutex); |
|
|
|
private: |
|
std::unique_ptr<Renderer> renderer; |
|
Dispatcher dispatcher; |
|
Workers worker; |
|
std::atomic<size_t> parse_count = {0}; |
|
|
|
Mutex parse_mutex; |
|
|
|
std::shared_ptr<Git::Repository> repository GUARDED_BY(parse_mutex); |
|
std::unique_ptr<Git::Repository::Diff> diff GUARDED_BY(parse_mutex); |
|
std::unique_ptr<Git::Repository::Diff> get_diff() REQUIRES(parse_mutex); |
|
|
|
Glib::ustring parse_buffer GUARDED_BY(parse_mutex); |
|
sigc::connection buffer_insert_connection; |
|
sigc::connection buffer_erase_connection; |
|
sigc::connection monitor_changed_connection; |
|
sigc::connection delayed_buffer_changed_connection; |
|
sigc::connection delayed_monitor_changed_connection; |
|
sigc::connection delayed_reparse_connection; |
|
std::atomic<bool> monitor_changed; |
|
|
|
void parse(size_t count); |
|
void update_tags(const Git::Repository::Diff::Lines &diff_lines); |
|
}; |
|
} // namespace Source
|
|
|