From 6aae196472280f5f22c3a086aaaf1a0a4278e9ee Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 17 Mar 2016 11:54:45 +0100 Subject: [PATCH] Made EntryBox a singleton for use in Directories, and fixed some includes --- src/entrybox.h | 10 ++- src/project.cc | 5 ++ src/project.h | 7 +- src/source_clang.cc | 2 +- src/window.cc | 159 ++++++++++++++++++++++---------------------- src/window.h | 2 - 6 files changed, 95 insertions(+), 90 deletions(-) diff --git a/src/entrybox.h b/src/entrybox.h index 6f8cecf..3393d59 100644 --- a/src/entrybox.h +++ b/src/entrybox.h @@ -32,9 +32,15 @@ public: Label(std::function update=nullptr); std::function update; }; - -public: + +private: EntryBox(); +public: + static EntryBox &get() { + static EntryBox singleton; + return singleton; + } + Gtk::Box upper_box; Gtk::Box lower_box; void clear(); diff --git a/src/project.cc b/src/project.cc index 1d64e13..a0763a4 100644 --- a/src/project.cc +++ b/src/project.cc @@ -18,6 +18,11 @@ std::atomic Project::debugging(false); std::pair > Project::debug_stop; std::unique_ptr Project::current_language; +Gtk::Label &Project::debug_status_label() { + static Gtk::Label label; + return label; +} + void Project::save_files(const boost::filesystem::path &path) { if(Notebook::get().get_current_page()==-1) return; diff --git a/src/project.h b/src/project.h index ad2f4bc..e81e346 100644 --- a/src/project.h +++ b/src/project.h @@ -8,11 +8,11 @@ #include #include "tooltips.h" #include "dispatcher.h" -#include "cmake.h" #include #include "project_build.h" namespace Project { + Gtk::Label &debug_status_label(); void save_files(const boost::filesystem::path &path); extern boost::filesystem::path debug_last_stop_file_path; @@ -24,11 +24,6 @@ namespace Project { void debug_update_stop(); void debug_update_status(const std::string &debug_status); - inline Gtk::Label &debug_status_label() { - static Gtk::Label label; - return label; - } - class Language { public: Language(); diff --git a/src/source_clang.cc b/src/source_clang.cc index e26962d..4fe0d30 100644 --- a/src/source_clang.cc +++ b/src/source_clang.cc @@ -1,7 +1,7 @@ #include "source_clang.h" #include "config.h" #include "terminal.h" -#include "project.h" +#include "project_build.h" #ifdef JUCI_ENABLE_DEBUG #include "debug_clang.h" #endif diff --git a/src/window.cc b/src/window.cc index 6a746cc..2adcea4 100644 --- a/src/window.cc +++ b/src/window.cc @@ -7,6 +7,7 @@ #include "dialogs.h" #include "filesystem.h" #include "project.h" +#include "entrybox.h" namespace sigc { #ifndef SIGC_FUNCTORS_DEDUCE_RESULT_TYPE_WITH_DECLTYPE @@ -39,7 +40,7 @@ Window::Window() : notebook(Notebook::get()) { directories_scrolled_window.add(Directories::get()); directory_and_notebook_panes.pack1(directories_scrolled_window, Gtk::SHRINK); notebook_vbox.pack_start(notebook); - notebook_vbox.pack_end(entry_box, Gtk::PACK_SHRINK); + notebook_vbox.pack_end(EntryBox::get(), Gtk::PACK_SHRINK); directory_and_notebook_panes.pack2(notebook_vbox, Gtk::SHRINK); directory_and_notebook_panes.set_position(static_cast(0.2*Config::get().window.default_size.first)); vpaned.set_position(static_cast(0.75*Config::get().window.default_size.second)); @@ -73,17 +74,17 @@ Window::Window() : notebook(Notebook::get()) { Terminal::get().queue_draw(); }); - entry_box.signal_show().connect([this](){ + EntryBox::get().signal_show().connect([this](){ vpaned.set_focus_chain({&directory_and_notebook_panes}); directory_and_notebook_panes.set_focus_chain({¬ebook_vbox}); - notebook_vbox.set_focus_chain({&entry_box}); + notebook_vbox.set_focus_chain({&EntryBox::get()}); }); - entry_box.signal_hide().connect([this](){ + EntryBox::get().signal_hide().connect([this](){ vpaned.unset_focus_chain(); directory_and_notebook_panes.unset_focus_chain(); notebook_vbox.unset_focus_chain(); }); - entry_box.signal_hide().connect([this]() { + EntryBox::get().signal_hide().connect([this]() { if(notebook.get_current_page()!=-1) { notebook.get_current_view()->grab_focus(); } @@ -92,9 +93,9 @@ Window::Window() : notebook(Notebook::get()) { notebook.signal_switch_page().connect([this](Gtk::Widget* page, guint page_num) { if(notebook.get_current_page()!=-1) { auto view=notebook.get_current_view(); - if(search_entry_shown && entry_box.labels.size()>0) { + if(search_entry_shown && EntryBox::get().labels.size()>0) { view->update_search_occurrences=[this](int number){ - entry_box.labels.begin()->update(0, std::to_string(number)); + EntryBox::get().labels.begin()->update(0, std::to_string(number)); }; view->search_highlight(last_search, case_sensitive_search, regex_search); } @@ -115,7 +116,7 @@ Window::Window() : notebook(Notebook::get()) { } }); notebook.signal_page_removed().connect([this](Gtk::Widget* page, guint page_num) { - entry_box.hide(); + EntryBox::get().hide(); }); about.signal_response().connect([this](int d){ @@ -505,23 +506,23 @@ void Window::set_menu_actions() { if(run_arguments->second.empty()) return; - entry_box.clear(); - entry_box.labels.emplace_back(); - auto label_it=entry_box.labels.begin(); + EntryBox::get().clear(); + EntryBox::get().labels.emplace_back(); + auto label_it=EntryBox::get().labels.begin(); label_it->update=[label_it](int state, const std::string& message){ label_it->set_text("Set empty to let juCi++ deduce executable"); }; label_it->update(0, ""); - entry_box.entries.emplace_back(run_arguments->second, [this, run_arguments](const std::string& content){ + EntryBox::get().entries.emplace_back(run_arguments->second, [this, run_arguments](const std::string& content){ Project::run_arguments[run_arguments->first]=content; - entry_box.hide(); + EntryBox::get().hide(); }, 50); - auto entry_it=entry_box.entries.begin(); + auto entry_it=EntryBox::get().entries.begin(); entry_it->set_placeholder_text("Project: Set Run Arguments"); - entry_box.buttons.emplace_back("Project: set run arguments", [this, entry_it](){ + EntryBox::get().buttons.emplace_back("Project: set run arguments", [this, entry_it](){ entry_it->activate(); }); - entry_box.show(); + EntryBox::get().show(); }); menu.add_action("compile_and_run", [this]() { if(Project::compiling || Project::debugging) @@ -547,14 +548,14 @@ void Window::set_menu_actions() { }); menu.add_action("run_command", [this]() { - entry_box.clear(); - entry_box.labels.emplace_back(); - auto label_it=entry_box.labels.begin(); + EntryBox::get().clear(); + EntryBox::get().labels.emplace_back(); + auto label_it=EntryBox::get().labels.begin(); label_it->update=[label_it](int state, const std::string& message){ label_it->set_text("Run Command directory order: opened directory, file path, current directory"); }; label_it->update(0, ""); - entry_box.entries.emplace_back(last_run_command, [this](const std::string& content){ + EntryBox::get().entries.emplace_back(last_run_command, [this](const std::string& content){ if(content!="") { last_run_command=content; auto run_path=notebook.get_current_folder(); @@ -564,14 +565,14 @@ void Window::set_menu_actions() { Terminal::get().async_print(content+" returned: "+std::to_string(exit_status)+'\n'); }); } - entry_box.hide(); + EntryBox::get().hide(); }, 30); - auto entry_it=entry_box.entries.begin(); + auto entry_it=EntryBox::get().entries.begin(); entry_it->set_placeholder_text("Command"); - entry_box.buttons.emplace_back("Run command", [this, entry_it](){ + EntryBox::get().buttons.emplace_back("Run command", [this, entry_it](){ entry_it->activate(); }); - entry_box.show(); + EntryBox::get().show(); }); menu.add_action("kill_last_running", [this]() { @@ -588,23 +589,23 @@ void Window::set_menu_actions() { if(run_arguments->second.empty()) return; - entry_box.clear(); - entry_box.labels.emplace_back(); - auto label_it=entry_box.labels.begin(); + EntryBox::get().clear(); + EntryBox::get().labels.emplace_back(); + auto label_it=EntryBox::get().labels.begin(); label_it->update=[label_it](int state, const std::string& message){ label_it->set_text("Set empty to let juCi++ deduce executable"); }; label_it->update(0, ""); - entry_box.entries.emplace_back(run_arguments->second, [this, run_arguments](const std::string& content){ + EntryBox::get().entries.emplace_back(run_arguments->second, [this, run_arguments](const std::string& content){ Project::debug_run_arguments[run_arguments->first]=content; - entry_box.hide(); + EntryBox::get().hide(); }, 50); - auto entry_it=entry_box.entries.begin(); + auto entry_it=EntryBox::get().entries.begin(); entry_it->set_placeholder_text("Debug: Set Run Arguments"); - entry_box.buttons.emplace_back("Debug: set run arguments", [this, entry_it](){ + EntryBox::get().buttons.emplace_back("Debug: set run arguments", [this, entry_it](){ entry_it->activate(); }); - entry_box.show(); + EntryBox::get().show(); }); menu.add_action("debug_start_continue", [this](){ if(Project::compiling) @@ -650,21 +651,21 @@ void Window::set_menu_actions() { Project::current_language->debug_show_variables(); }); menu.add_action("debug_run_command", [this]() { - entry_box.clear(); - entry_box.entries.emplace_back(last_run_debug_command, [this](const std::string& content){ + EntryBox::get().clear(); + EntryBox::get().entries.emplace_back(last_run_debug_command, [this](const std::string& content){ if(content!="") { if(Project::current_language) Project::current_language->debug_run_command(content); last_run_debug_command=content; } - entry_box.hide(); + EntryBox::get().hide(); }, 30); - auto entry_it=entry_box.entries.begin(); + auto entry_it=EntryBox::get().entries.begin(); entry_it->set_placeholder_text("Debug Command"); - entry_box.buttons.emplace_back("Run debug command", [this, entry_it](){ + EntryBox::get().buttons.emplace_back("Run debug command", [this, entry_it](){ entry_it->activate(); }); - entry_box.show(); + EntryBox::get().show(); }); menu.add_action("debug_toggle_breakpoint", [this](){ if(notebook.get_current_page()!=-1) { @@ -769,7 +770,7 @@ void Window::activate_menu_items(bool activate) { bool Window::on_key_press_event(GdkEventKey *event) { if(event->keyval==GDK_KEY_Escape) { - entry_box.hide(); + EntryBox::get().hide(); } #ifdef __APPLE__ //For Apple's Command-left, right, up, down keys else if((event->state & GDK_META_MASK)>0 && (event->state & GDK_MOD1_MASK)==0) { @@ -816,9 +817,9 @@ bool Window::on_delete_event(GdkEventAny *event) { } void Window::search_and_replace_entry() { - entry_box.clear(); - entry_box.labels.emplace_back(); - auto label_it=entry_box.labels.begin(); + EntryBox::get().clear(); + EntryBox::get().labels.emplace_back(); + auto label_it=EntryBox::get().labels.begin(); label_it->update=[label_it](int state, const std::string& message){ if(state==0) { try { @@ -833,11 +834,11 @@ void Window::search_and_replace_entry() { catch(const std::exception &e) {} } }; - entry_box.entries.emplace_back(last_search, [this](const std::string& content){ + EntryBox::get().entries.emplace_back(last_search, [this](const std::string& content){ if(notebook.get_current_page()!=-1) notebook.get_current_view()->search_forward(); }); - auto search_entry_it=entry_box.entries.begin(); + auto search_entry_it=EntryBox::get().entries.begin(); search_entry_it->set_placeholder_text("Find"); if(notebook.get_current_page()!=-1) { notebook.get_current_view()->update_search_occurrences=[label_it](int number){ @@ -858,11 +859,11 @@ void Window::search_and_replace_entry() { notebook.get_current_view()->search_highlight(search_entry_it->get_text(), case_sensitive_search, regex_search); }); - entry_box.entries.emplace_back(last_replace, [this](const std::string &content){ + EntryBox::get().entries.emplace_back(last_replace, [this](const std::string &content){ if(notebook.get_current_page()!=-1) notebook.get_current_view()->replace_forward(content); }); - auto replace_entry_it=entry_box.entries.begin(); + auto replace_entry_it=EntryBox::get().entries.begin(); replace_entry_it++; replace_entry_it->set_placeholder_text("Replace"); replace_entry_it->signal_key_press_event().connect([this, replace_entry_it](GdkEventKey* event){ @@ -876,25 +877,25 @@ void Window::search_and_replace_entry() { last_replace=replace_entry_it->get_text(); }); - entry_box.buttons.emplace_back("Replace all", [this, replace_entry_it](){ + EntryBox::get().buttons.emplace_back("Replace all", [this, replace_entry_it](){ if(notebook.get_current_page()!=-1) notebook.get_current_view()->replace_all(replace_entry_it->get_text()); }); - entry_box.toggle_buttons.emplace_back("Match case"); - entry_box.toggle_buttons.back().set_active(case_sensitive_search); - entry_box.toggle_buttons.back().on_activate=[this, search_entry_it](){ + EntryBox::get().toggle_buttons.emplace_back("Match case"); + EntryBox::get().toggle_buttons.back().set_active(case_sensitive_search); + EntryBox::get().toggle_buttons.back().on_activate=[this, search_entry_it](){ case_sensitive_search=!case_sensitive_search; if(notebook.get_current_page()!=-1) notebook.get_current_view()->search_highlight(search_entry_it->get_text(), case_sensitive_search, regex_search); }; - entry_box.toggle_buttons.emplace_back("Use regex"); - entry_box.toggle_buttons.back().set_active(regex_search); - entry_box.toggle_buttons.back().on_activate=[this, search_entry_it](){ + EntryBox::get().toggle_buttons.emplace_back("Use regex"); + EntryBox::get().toggle_buttons.back().set_active(regex_search); + EntryBox::get().toggle_buttons.back().on_activate=[this, search_entry_it](){ regex_search=!regex_search; if(notebook.get_current_page()!=-1) notebook.get_current_view()->search_highlight(search_entry_it->get_text(), case_sensitive_search, regex_search); }; - entry_box.signal_hide().connect([this]() { + EntryBox::get().signal_hide().connect([this]() { for(int c=0;cupdate_search_occurrences=nullptr; notebook.get_view(c)->search_highlight("", case_sensitive_search, regex_search); @@ -902,19 +903,19 @@ void Window::search_and_replace_entry() { search_entry_shown=false; }); search_entry_shown=true; - entry_box.show(); + EntryBox::get().show(); } void Window::set_tab_entry() { - entry_box.clear(); + EntryBox::get().clear(); if(notebook.get_current_page()!=-1) { auto tab_char_and_size=notebook.get_current_view()->get_tab_char_and_size(); - entry_box.labels.emplace_back(); - auto label_it=entry_box.labels.begin(); + EntryBox::get().labels.emplace_back(); + auto label_it=EntryBox::get().labels.begin(); - entry_box.entries.emplace_back(std::to_string(tab_char_and_size.second)); - auto entry_tab_size_it=entry_box.entries.begin(); + EntryBox::get().entries.emplace_back(std::to_string(tab_char_and_size.second)); + auto entry_tab_size_it=EntryBox::get().entries.begin(); entry_tab_size_it->set_placeholder_text("Tab size"); char tab_char=tab_char_and_size.first; @@ -924,8 +925,8 @@ void Window::set_tab_entry() { else if(tab_char=='\t') tab_char_string="tab"; - entry_box.entries.emplace_back(tab_char_string); - auto entry_tab_char_it=entry_box.entries.rbegin(); + EntryBox::get().entries.emplace_back(tab_char_string); + auto entry_tab_char_it=EntryBox::get().entries.rbegin(); entry_tab_char_it->set_placeholder_text("Tab char"); const auto activate_function=[this, entry_tab_char_it, entry_tab_size_it, label_it](const std::string& content){ @@ -945,7 +946,7 @@ void Window::set_tab_entry() { if(tab_char!=0 && tab_size>0) { notebook.get_current_view()->set_tab_char_and_size(tab_char, tab_size); - entry_box.hide(); + EntryBox::get().hide(); } else { label_it->set_text("Tab size must be >0 and tab char set to either 'space' or 'tab'"); @@ -956,18 +957,18 @@ void Window::set_tab_entry() { entry_tab_char_it->on_activate=activate_function; entry_tab_size_it->on_activate=activate_function; - entry_box.buttons.emplace_back("Set tab in current buffer", [this, entry_tab_char_it](){ + EntryBox::get().buttons.emplace_back("Set tab in current buffer", [this, entry_tab_char_it](){ entry_tab_char_it->activate(); }); - entry_box.show(); + EntryBox::get().show(); } } void Window::goto_line_entry() { - entry_box.clear(); + EntryBox::get().clear(); if(notebook.get_current_page()!=-1) { - entry_box.entries.emplace_back("", [this](const std::string& content){ + EntryBox::get().entries.emplace_back("", [this](const std::string& content){ if(notebook.get_current_page()!=-1) { auto view=notebook.get_current_view(); try { @@ -980,31 +981,31 @@ void Window::goto_line_entry() { } } catch(const std::exception &e) {} - entry_box.hide(); + EntryBox::get().hide(); } }); - auto entry_it=entry_box.entries.begin(); + auto entry_it=EntryBox::get().entries.begin(); entry_it->set_placeholder_text("Line number"); - entry_box.buttons.emplace_back("Go to line", [this, entry_it](){ + EntryBox::get().buttons.emplace_back("Go to line", [this, entry_it](){ entry_it->activate(); }); - entry_box.show(); + EntryBox::get().show(); } } void Window::rename_token_entry() { - entry_box.clear(); + EntryBox::get().clear(); if(notebook.get_current_page()!=-1) { if(notebook.get_current_view()->get_token) { auto token=std::make_shared(notebook.get_current_view()->get_token()); if(*token) { - entry_box.labels.emplace_back(); - auto label_it=entry_box.labels.begin(); + EntryBox::get().labels.emplace_back(); + auto label_it=EntryBox::get().labels.begin(); label_it->update=[label_it](int state, const std::string& message){ label_it->set_text("Warning: only opened and parsed tabs will have its content renamed, and modified files will be saved"); }; label_it->update(0, ""); - entry_box.entries.emplace_back(token->spelling, [this, token](const std::string& content){ + EntryBox::get().entries.emplace_back(token->spelling, [this, token](const std::string& content){ if(notebook.get_current_page()!=-1 && content!=token->spelling) { std::vector modified_pages; for(int c=0;csoft_reparse_needed=false; - entry_box.hide(); + EntryBox::get().hide(); } }); - auto entry_it=entry_box.entries.begin(); + auto entry_it=EntryBox::get().entries.begin(); entry_it->set_placeholder_text("New name"); - entry_box.buttons.emplace_back("Rename", [this, entry_it](){ + EntryBox::get().buttons.emplace_back("Rename", [this, entry_it](){ entry_it->activate(); }); - entry_box.show(); + EntryBox::get().show(); } } } diff --git a/src/window.h b/src/window.h index 0a3a740..c8ed3ee 100644 --- a/src/window.h +++ b/src/window.h @@ -2,7 +2,6 @@ #define JUCI_WINDOW_H_ #include -#include "entrybox.h" #include "notebook.h" #include @@ -29,7 +28,6 @@ private: Gtk::ScrolledWindow terminal_scrolled_window; Gtk::HBox info_and_status_hbox; Gtk::AboutDialog about; - EntryBox entry_box; void configure(); void set_menu_actions();