diff --git a/src/project.cc b/src/project.cc index 6a2ecf1..67a0f37 100644 --- a/src/project.cc +++ b/src/project.cc @@ -17,6 +17,7 @@ std::unordered_map Project::debug_run_arguments; std::atomic Project::compiling(false); std::atomic Project::debugging(false); std::pair > Project::debug_stop; +std::string Project::debug_status; std::unique_ptr Project::current; #ifdef JUCI_ENABLE_DEBUG std::unordered_map Project::Clang::debug_options; @@ -67,20 +68,27 @@ void Project::on_save(size_t index) { } } -void Project::debug_update_status(const std::string &debug_status) { +void Project::debug_update_status(const std::string &new_debug_status) { + debug_status=new_debug_status; if(debug_status.empty()) debug_status_label().set_text(""); else debug_status_label().set_text("debug: "+debug_status); + debug_activate_menu_items(); +} + +void Project::debug_activate_menu_items() { auto &menu=Menu::get(); + auto view=Notebook::get().get_current_view(); menu.actions["debug_stop"]->set_enabled(!debug_status.empty()); menu.actions["debug_kill"]->set_enabled(!debug_status.empty()); menu.actions["debug_step_over"]->set_enabled(!debug_status.empty()); menu.actions["debug_step_into"]->set_enabled(!debug_status.empty()); menu.actions["debug_step_out"]->set_enabled(!debug_status.empty()); - menu.actions["debug_backtrace"]->set_enabled(!debug_status.empty()); - menu.actions["debug_show_variables"]->set_enabled(!debug_status.empty()); + menu.actions["debug_backtrace"]->set_enabled(!debug_status.empty() && view); + menu.actions["debug_show_variables"]->set_enabled(!debug_status.empty() && view); menu.actions["debug_run_command"]->set_enabled(!debug_status.empty()); + menu.actions["debug_toggle_breakpoint"]->set_enabled(view && static_cast(view->toggle_breakpoint)); menu.actions["debug_goto_stop"]->set_enabled(!debug_status.empty()); } diff --git a/src/project.h b/src/project.h index d9596c6..ee1a96b 100644 --- a/src/project.h +++ b/src/project.h @@ -21,8 +21,10 @@ namespace Project { extern std::atomic compiling; extern std::atomic debugging; extern std::pair > debug_stop; + extern std::string debug_status; + void debug_update_status(const std::string &new_debug_status); + void debug_activate_menu_items(); void debug_update_stop(); - void debug_update_status(const std::string &debug_status); class Base { protected: diff --git a/src/window.cc b/src/window.cc index 7782413..2876337 100644 --- a/src/window.cc +++ b/src/window.cc @@ -30,7 +30,7 @@ Window::Window() { set_menu_actions(); configure(); - activate_menu_items(false); + activate_menu_items(); set_default_size(Config::get().window.default_size.first, Config::get().window.default_size.second); @@ -1036,7 +1036,7 @@ void Window::set_menu_actions() { Notebook::get().status.set_text(""); Notebook::get().info.set_text(""); - activate_menu_items(false); + activate_menu_items(); } } }); @@ -1048,24 +1048,34 @@ void Window::set_menu_actions() { }); } -void Window::activate_menu_items(bool activate) { +void Window::activate_menu_items() { auto &menu = Menu::get(); - auto ¬ebook = Notebook::get(); - menu.actions["source_indentation_auto_indent_buffer"]->set_enabled(activate ? static_cast(notebook.get_current_view()->auto_indent) : false); - menu.actions["source_find_symbol_ctags"]->set_enabled(activate); - menu.actions["source_comments_toggle"]->set_enabled(activate ? static_cast(notebook.get_current_view()->toggle_comments) : false); - menu.actions["source_comments_add_documentation"]->set_enabled(activate ? static_cast(notebook.get_current_view()->add_documentation) : false); - menu.actions["source_find_documentation"]->set_enabled(activate ? static_cast(notebook.get_current_view()->get_token_data) : false); - menu.actions["source_goto_declaration"]->set_enabled(activate ? static_cast(notebook.get_current_view()->get_declaration_location) : false); - menu.actions["source_goto_implementation"]->set_enabled(activate ? static_cast(notebook.get_current_view()->get_implementation_locations) : false); - menu.actions["source_goto_usage"]->set_enabled(activate ? static_cast(notebook.get_current_view()->get_usages) : false); - menu.actions["source_goto_method"]->set_enabled(activate ? static_cast(notebook.get_current_view()->get_methods) : false); - menu.actions["source_rename"]->set_enabled(activate ? static_cast(notebook.get_current_view()->rename_similar_tokens) : false); - menu.actions["source_implement_method"]->set_enabled(activate ? static_cast(notebook.get_current_view()->get_method) : false); - menu.actions["source_goto_next_diagnostic"]->set_enabled(activate ? static_cast(notebook.get_current_view()->goto_next_diagnostic) : false); - menu.actions["source_apply_fix_its"]->set_enabled(activate ? static_cast(notebook.get_current_view()->get_fix_its) : false); + auto view=Notebook::get().get_current_view(); + + menu.actions["source_spellcheck"]->set_enabled(view); + menu.actions["source_spellcheck_clear"]->set_enabled(view); + menu.actions["source_spellcheck_next_error"]->set_enabled(view); + menu.actions["source_git_next_diff"]->set_enabled(view); + menu.actions["source_git_show_diff"]->set_enabled(view); + menu.actions["source_indentation_set_buffer_tab"]->set_enabled(view); + menu.actions["source_goto_line"]->set_enabled(view); + menu.actions["source_center_cursor"]->set_enabled(view); + + menu.actions["source_indentation_auto_indent_buffer"]->set_enabled(view && static_cast(view->auto_indent)); + menu.actions["source_find_symbol_ctags"]->set_enabled(view); + menu.actions["source_comments_toggle"]->set_enabled(view && static_cast(view->toggle_comments)); + menu.actions["source_comments_add_documentation"]->set_enabled(view && static_cast(view->add_documentation)); + menu.actions["source_find_documentation"]->set_enabled(view && static_cast(view->get_token_data)); + menu.actions["source_goto_declaration"]->set_enabled(view && static_cast(view->get_declaration_location)); + menu.actions["source_goto_implementation"]->set_enabled(view && static_cast(view->get_implementation_locations)); + menu.actions["source_goto_usage"]->set_enabled(view && static_cast(view->get_usages)); + menu.actions["source_goto_method"]->set_enabled(view && static_cast(view->get_methods)); + menu.actions["source_rename"]->set_enabled(view && static_cast(view->rename_similar_tokens)); + menu.actions["source_implement_method"]->set_enabled(view && static_cast(view->get_method)); + menu.actions["source_goto_next_diagnostic"]->set_enabled(view && static_cast(view->goto_next_diagnostic)); + menu.actions["source_apply_fix_its"]->set_enabled(view && static_cast(view->get_fix_its)); #ifdef JUCI_ENABLE_DEBUG - menu.actions["debug_toggle_breakpoint"]->set_enabled(activate ? static_cast(notebook.get_current_view()->toggle_breakpoint) : false); + Project::debug_activate_menu_items(); #endif } diff --git a/src/window.h b/src/window.h index febbd7e..1ec5d33 100644 --- a/src/window.h +++ b/src/window.h @@ -23,7 +23,7 @@ private: void configure(); void set_menu_actions(); - void activate_menu_items(bool activate=true); + void activate_menu_items(); void search_and_replace_entry(); void set_tab_entry(); void goto_line_entry();