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.
53 lines
1.9 KiB
53 lines
1.9 KiB
#pragma once |
|
#include "dispatcher.h" |
|
#include "gtkmm.h" |
|
#include "process.hpp" |
|
#include <boost/filesystem.hpp> |
|
#include <functional> |
|
#include <iostream> |
|
#include <mutex> |
|
#include <tuple> |
|
|
|
class Terminal : public Gtk::TextView { |
|
Terminal(); |
|
|
|
public: |
|
static Terminal &get() { |
|
static Terminal singleton; |
|
return singleton; |
|
} |
|
|
|
int process(const std::string &command, const boost::filesystem::path &path = "", bool use_pipes = true); |
|
int process(std::istream &stdin_stream, std::ostream &stdout_stream, const std::string &command, const boost::filesystem::path &path = "", std::ostream *stderr_stream = nullptr); |
|
void async_process(const std::string &command, const boost::filesystem::path &path = "", const std::function<void(int exit_status)> &callback = nullptr, bool quiet = false); |
|
void kill_last_async_process(bool force = false); |
|
void kill_async_processes(bool force = false); |
|
|
|
size_t print(const std::string &message, bool bold = false); |
|
void async_print(const std::string &message, bool bold = false); |
|
void async_print(size_t line_nr, const std::string &message); |
|
|
|
void configure(); |
|
|
|
void clear(); |
|
|
|
protected: |
|
bool on_motion_notify_event(GdkEventMotion *motion_event) override; |
|
bool on_button_press_event(GdkEventButton *button_event) override; |
|
bool on_key_press_event(GdkEventKey *event) override; |
|
|
|
private: |
|
Dispatcher dispatcher; |
|
Glib::RefPtr<Gtk::TextTag> bold_tag; |
|
Glib::RefPtr<Gtk::TextTag> link_tag; |
|
Glib::RefPtr<Gdk::Cursor> link_mouse_cursor; |
|
Glib::RefPtr<Gdk::Cursor> default_mouse_cursor; |
|
size_t deleted_lines = 0; |
|
|
|
std::tuple<size_t, size_t, std::string, std::string, std::string> find_link(const std::string &line); |
|
void apply_link_tags(const Gtk::TextIter &start_iter, const Gtk::TextIter &end_iter); |
|
|
|
std::vector<std::shared_ptr<TinyProcessLib::Process>> processes; |
|
std::mutex processes_mutex; |
|
Glib::ustring stdin_buffer; |
|
};
|
|
|