Browse Source

Added Zen mode

pipelines/235045657
eidheim 5 years ago
parent
commit
bd3dfab765
  1. 2
      CMakeLists.txt
  2. 1
      README.md
  3. 1
      src/files.hpp
  4. 4
      src/menu.cpp
  5. 5
      src/notebook.cpp
  6. 6
      src/notebook.hpp
  7. 8
      src/terminal.cpp
  8. 45
      src/window.cpp
  9. 1
      src/window.hpp

2
CMakeLists.txt

@ -1,7 +1,7 @@
cmake_minimum_required (VERSION 2.8.8) cmake_minimum_required (VERSION 2.8.8)
project(juci) project(juci)
set(JUCI_VERSION "1.6.0.3") set(JUCI_VERSION "1.6.0.4")
set(CPACK_PACKAGE_NAME "jucipp") set(CPACK_PACKAGE_NAME "jucipp")
set(CPACK_PACKAGE_CONTACT "Ole Christian Eidheim <eidheim@gmail.com>") set(CPACK_PACKAGE_CONTACT "Ole Christian Eidheim <eidheim@gmail.com>")

1
README.md

@ -43,6 +43,7 @@ can use juCi++ through POSIX compatibility layers such as MSYS2.
* Auto-indentation through [clang-format](http://clang.llvm.org/docs/ClangFormat.html) or [Prettier](https://github.com/prettier/prettier) if installed * Auto-indentation through [clang-format](http://clang.llvm.org/docs/ClangFormat.html) or [Prettier](https://github.com/prettier/prettier) if installed
* Source minimap * Source minimap
* Split view * Split view
* Zen mode
* Full UTF-8 support * Full UTF-8 support
* Wayland supported with GTK+ 3.20 or newer * Wayland supported with GTK+ 3.20 or newer

1
src/files.hpp

@ -173,6 +173,7 @@ const std::string default_config_file = R"RAW({
#endif #endif
R"RAW( R"RAW(
"window_toggle_tabs": "", "window_toggle_tabs": "",
"window_toggle_zen_mode": "",
"window_clear_terminal": "" "window_clear_terminal": ""
}, },
"project": { "project": {

4
src/menu.cpp

@ -521,6 +521,10 @@ const Glib::ustring menu_xml = R"RAW(<interface>
<attribute name='label' translatable='yes'>_Toggle _Tabs _Visibility</attribute> <attribute name='label' translatable='yes'>_Toggle _Tabs _Visibility</attribute>
<attribute name='action'>app.window_toggle_tabs</attribute> <attribute name='action'>app.window_toggle_tabs</attribute>
</item> </item>
<item>
<attribute name='label' translatable='yes'>_Toggle _Zen _Mode</attribute>
<attribute name='action'>app.window_toggle_zen_mode</attribute>
</item>
</section> </section>
<section> <section>
<item> <item>

5
src/notebook.cpp

@ -632,11 +632,6 @@ void Notebook::toggle_split() {
} }
split = !split; split = !split;
} }
void Notebook::toggle_tabs() {
//Show / Hide tabs for each notebook.
for(auto &notebook : Notebook::notebooks)
notebook.set_show_tabs(!notebook.get_show_tabs());
}
std::vector<std::pair<size_t, Source::View *>> Notebook::get_notebook_views() { std::vector<std::pair<size_t, Source::View *>> Notebook::get_notebook_views() {
std::vector<std::pair<size_t, Source::View *>> notebook_views; std::vector<std::pair<size_t, Source::View *>> notebook_views;

6
src/notebook.hpp

@ -23,7 +23,6 @@ class Notebook : public Gtk::Paned {
Source::Mark mark; Source::Mark mark;
}; };
private:
Notebook(); Notebook();
public: public:
@ -32,6 +31,8 @@ public:
return singleton; return singleton;
} }
std::vector<Gtk::Notebook> notebooks;
size_t size(); size_t size();
Source::View *get_view(size_t index); Source::View *get_view(size_t index);
Source::View *get_current_view(); Source::View *get_current_view();
@ -49,8 +50,6 @@ public:
void next(); void next();
void previous(); void previous();
void toggle_split(); void toggle_split();
/// Hide/Show tabs.
void toggle_tabs();
std::vector<std::pair<size_t, Source::View *>> get_notebook_views(); std::vector<std::pair<size_t, Source::View *>> get_notebook_views();
Gtk::Label status_location; Gtk::Label status_location;
@ -82,7 +81,6 @@ private:
/// Throws if view is not found /// Throws if view is not found
std::pair<size_t, int> get_notebook_page(Source::View *view); std::pair<size_t, int> get_notebook_page(Source::View *view);
std::vector<Gtk::Notebook> notebooks;
std::vector<Source::View *> source_views; //Is NOT freed in destructor, this is intended for quick program exit. std::vector<Source::View *> source_views; //Is NOT freed in destructor, this is intended for quick program exit.
std::vector<std::unique_ptr<Gtk::Widget>> source_maps; std::vector<std::unique_ptr<Gtk::Widget>> source_maps;
std::vector<std::unique_ptr<Gtk::ScrolledWindow>> scrolled_windows; std::vector<std::unique_ptr<Gtk::ScrolledWindow>> scrolled_windows;

8
src/terminal.cpp

@ -259,6 +259,14 @@ boost::optional<Terminal::Link> Terminal::find_link(const std::string &line, siz
} }
void Terminal::print(std::string message, bool bold) { void Terminal::print(std::string message, bool bold) {
if(message.empty())
return;
if(auto parent = get_parent()) {
if(!parent->is_visible())
parent->show();
}
#ifdef _WIN32 #ifdef _WIN32
// Remove color codes // Remove color codes
size_t pos = 0; size_t pos = 0;

45
src/window.cpp

@ -1658,7 +1658,26 @@ void Window::set_menu_actions() {
fullscreen(); fullscreen();
}); });
menu.add_action("window_toggle_tabs", [] { menu.add_action("window_toggle_tabs", [] {
Notebook::get().toggle_tabs(); for(auto &notebook : Notebook::get().notebooks)
notebook.set_show_tabs(!notebook.get_show_tabs());
});
menu.add_action("window_toggle_zen_mode", [this] {
bool not_zen_mode = std::any_of(Notebook::get().notebooks.begin(),
Notebook::get().notebooks.end(),
[](const Gtk::Notebook &notebook) { return notebook.get_show_tabs(); }) ||
directories_scrolled_window.is_visible() || terminal_scrolled_window.is_visible() || get_show_menubar();
for(auto &notebook : Notebook::get().notebooks)
notebook.set_show_tabs(!not_zen_mode);
if(not_zen_mode) {
directories_scrolled_window.hide();
terminal_scrolled_window.hide();
}
else {
directories_scrolled_window.show();
terminal_scrolled_window.show();
}
set_show_menubar(!not_zen_mode);
}); });
menu.add_action("window_clear_terminal", [] { menu.add_action("window_clear_terminal", [] {
Terminal::get().clear(); Terminal::get().clear();
@ -1699,16 +1718,14 @@ void Window::set_menu_actions() {
} }
void Window::add_widgets() { void Window::add_widgets() {
auto directories_scrolled_window = Gtk::manage(new Gtk::ScrolledWindow()); directories_scrolled_window.add(Directories::get());
directories_scrolled_window->add(Directories::get());
auto notebook_vbox = Gtk::manage(new Gtk::Box(Gtk::Orientation::ORIENTATION_VERTICAL)); auto notebook_vbox = Gtk::manage(new Gtk::Box(Gtk::Orientation::ORIENTATION_VERTICAL));
notebook_vbox->pack_start(Notebook::get()); notebook_vbox->pack_start(Notebook::get());
notebook_vbox->pack_end(EntryBox::get(), Gtk::PACK_SHRINK); notebook_vbox->pack_end(EntryBox::get(), Gtk::PACK_SHRINK);
auto terminal_scrolled_window = Gtk::manage(new Gtk::ScrolledWindow()); terminal_scrolled_window.get_style_context()->add_class("juci_terminal_scrolledwindow");
terminal_scrolled_window->get_style_context()->add_class("juci_terminal_scrolledwindow"); terminal_scrolled_window.add(Terminal::get());
terminal_scrolled_window->add(Terminal::get());
int width, height; int width, height;
get_default_size(width, height); get_default_size(width, height);
@ -1716,11 +1733,11 @@ void Window::add_widgets() {
auto notebook_and_terminal_vpaned = Gtk::manage(new Gtk::Paned(Gtk::Orientation::ORIENTATION_VERTICAL)); auto notebook_and_terminal_vpaned = Gtk::manage(new Gtk::Paned(Gtk::Orientation::ORIENTATION_VERTICAL));
notebook_and_terminal_vpaned->set_position(static_cast<int>(0.75 * height)); notebook_and_terminal_vpaned->set_position(static_cast<int>(0.75 * height));
notebook_and_terminal_vpaned->pack1(*notebook_vbox, Gtk::SHRINK); notebook_and_terminal_vpaned->pack1(*notebook_vbox, Gtk::SHRINK);
notebook_and_terminal_vpaned->pack2(*terminal_scrolled_window, Gtk::SHRINK); notebook_and_terminal_vpaned->pack2(terminal_scrolled_window, Gtk::SHRINK);
auto hpaned = Gtk::manage(new Gtk::Paned()); auto hpaned = Gtk::manage(new Gtk::Paned());
hpaned->set_position(static_cast<int>(0.2 * width)); hpaned->set_position(static_cast<int>(0.2 * width));
hpaned->pack1(*directories_scrolled_window, Gtk::SHRINK); hpaned->pack1(directories_scrolled_window, Gtk::SHRINK);
hpaned->pack2(*notebook_and_terminal_vpaned, Gtk::SHRINK); hpaned->pack2(*notebook_and_terminal_vpaned, Gtk::SHRINK);
auto status_hbox = Gtk::manage(new Gtk::Box()); auto status_hbox = Gtk::manage(new Gtk::Box());
@ -1769,18 +1786,18 @@ void Window::add_widgets() {
// Scroll to end of terminal whenever info is printed and end of terminal is shown // Scroll to end of terminal whenever info is printed and end of terminal is shown
auto scrolled_to_bottom = std::make_shared<bool>(true); auto scrolled_to_bottom = std::make_shared<bool>(true);
terminal_scrolled_window->get_vadjustment()->signal_value_changed().connect([terminal_scrolled_window, scrolled_to_bottom] { terminal_scrolled_window.get_vadjustment()->signal_value_changed().connect([this, scrolled_to_bottom] {
auto adjustment = terminal_scrolled_window->get_vadjustment(); auto adjustment = terminal_scrolled_window.get_vadjustment();
*scrolled_to_bottom = adjustment->get_value() == adjustment->get_upper() - adjustment->get_page_size(); *scrolled_to_bottom = adjustment->get_value() == adjustment->get_upper() - adjustment->get_page_size();
}); });
terminal_scrolled_window->get_vadjustment()->signal_changed().connect([terminal_scrolled_window, scrolled_to_bottom] { terminal_scrolled_window.get_vadjustment()->signal_changed().connect([this, scrolled_to_bottom] {
auto adjustment = terminal_scrolled_window->get_vadjustment(); auto adjustment = terminal_scrolled_window.get_vadjustment();
if(adjustment->get_value() == adjustment->get_upper() - adjustment->get_page_size()) // If for instance the terminal has been cleared if(adjustment->get_value() == adjustment->get_upper() - adjustment->get_page_size()) // If for instance the terminal has been cleared
*scrolled_to_bottom = true; *scrolled_to_bottom = true;
}); });
Terminal::get().signal_size_allocate().connect([terminal_scrolled_window, scrolled_to_bottom](Gtk::Allocation &allocation) mutable { Terminal::get().signal_size_allocate().connect([this, scrolled_to_bottom](Gtk::Allocation &allocation) mutable {
if(*scrolled_to_bottom) { if(*scrolled_to_bottom) {
auto adjustment = terminal_scrolled_window->get_vadjustment(); auto adjustment = terminal_scrolled_window.get_vadjustment();
adjustment->set_value(adjustment->get_upper() - adjustment->get_page_size()); adjustment->set_value(adjustment->get_upper() - adjustment->get_page_size());
*scrolled_to_bottom = true; *scrolled_to_bottom = true;
Terminal::get().queue_draw(); Terminal::get().queue_draw();

1
src/window.hpp

@ -22,6 +22,7 @@ protected:
private: private:
Gtk::AboutDialog about; Gtk::AboutDialog about;
Gtk::ScrolledWindow directories_scrolled_window, terminal_scrolled_window;
void configure(); void configure();
void set_menu_actions(); void set_menu_actions();

Loading…
Cancel
Save