diff --git a/src/project.cc b/src/project.cc index a8e898b..ddec12b 100644 --- a/src/project.cc +++ b/src/project.cc @@ -18,6 +18,7 @@ std::atomic Project::compiling(false); std::atomic Project::debugging(false); std::pair > Project::debug_stop; std::unique_ptr Project::current; +std::unordered_map Project::Clang::debug_options_popovers; Gtk::Label &Project::debug_status_label() { static Gtk::Label label; @@ -153,6 +154,13 @@ void Project::Base::debug_start() { Info::get().print("Could not find a supported project"); } +Project::Clang::DebugOptionsPopover::DebugOptionsPopover() : Gtk::Popover() { + hbox.pack_start(test, true, true); + add(hbox); + show_all(); + set_visible(false); +} + std::pair Project::Clang::get_run_arguments() { auto build_path=build->get_default_path(); if(build_path.empty()) @@ -266,6 +274,12 @@ std::pair Project::Clang::debug_get_run_arguments() { return {project_path, arguments}; } +Gtk::Popover *Project::Clang::debug_get_options_popover() { + if(!build->project_path.empty()) + return &debug_options_popovers[build->project_path.string()]; + return nullptr; +} + void Project::Clang::debug_start() { auto debug_build_path=build->get_debug_path(); if(debug_build_path.empty() || !build->update_debug()) diff --git a/src/project.h b/src/project.h index 831eb87..925162b 100644 --- a/src/project.h +++ b/src/project.h @@ -37,6 +37,7 @@ namespace Project { virtual void compile_and_run(); virtual std::pair debug_get_run_arguments(); + virtual Gtk::Popover *debug_get_options_popover() { return nullptr; } Tooltips debug_variable_tooltips; virtual void debug_start(); virtual void debug_continue() {} @@ -56,7 +57,15 @@ namespace Project { }; class Clang : public Base { - private: + class DebugOptionsPopover : public Gtk::Popover { + public: + DebugOptionsPopover(); + private: + Gtk::HBox hbox; + Gtk::Label test=Gtk::Label("Not yet implemented"); + }; + static std::unordered_map debug_options_popovers; + Dispatcher dispatcher; public: Clang(std::unique_ptr &&build) : Base(std::move(build)) {} @@ -69,6 +78,7 @@ namespace Project { std::mutex debug_start_mutex; #ifdef JUCI_ENABLE_DEBUG std::pair debug_get_run_arguments() override; + Gtk::Popover *debug_get_options_popover() override; void debug_start() override; void debug_continue() override; void debug_stop() override; diff --git a/src/window.cc b/src/window.cc index 36de2d4..d80270c 100644 --- a/src/window.cc +++ b/src/window.cc @@ -718,6 +718,17 @@ void Window::set_menu_actions() { }, 50); auto entry_it=EntryBox::get().entries.begin(); entry_it->set_placeholder_text("Debug: Set Run Arguments"); + + if(auto options_popover=project->debug_get_options_popover()) { + EntryBox::get().buttons.emplace_back("", [this, options_popover]() { + options_popover->set_visible(true); + }); + EntryBox::get().buttons.back().set_image_from_icon_name("preferences-system"); + EntryBox::get().buttons.back().set_always_show_image(true); + EntryBox::get().buttons.back().set_tooltip_text("Additional Options"); + options_popover->set_relative_to(EntryBox::get().buttons.back()); + } + EntryBox::get().buttons.emplace_back("Debug: set run arguments", [this, entry_it](){ entry_it->activate(); });