Browse Source

Completed toggle breakpoint on click

merge-requests/365/head
eidheim 9 years ago
parent
commit
28eaf0652e
  1. 19
      src/notebook.cc
  2. 28
      src/source.cc
  3. 5
      src/source.h
  4. 25
      src/window.cc

19
src/notebook.cc

@ -221,6 +221,25 @@ void Notebook::open(const boost::filesystem::path &file_path, size_t notebook_in
return false;
});
#ifdef JUCI_ENABLE_DEBUG
if(dynamic_cast<Source::ClangView*>(source_view)) {
source_view->toggle_breakpoint=[source_view](int line_nr) {
if(source_view->get_source_buffer()->get_source_marks_at_line(line_nr, "debug_breakpoint").size()>0) {
auto start_iter=source_view->get_buffer()->get_iter_at_line(line_nr);
auto end_iter=source_view->get_iter_at_line_end(line_nr);
source_view->get_source_buffer()->remove_source_marks(start_iter, end_iter, "debug_breakpoint");
if(Project::current && Project::debugging)
Project::current->debug_remove_breakpoint(source_view->file_path, line_nr+1, source_view->get_buffer()->get_line_count()+1);
}
else {
source_view->get_source_buffer()->create_source_mark("debug_breakpoint", source_view->get_buffer()->get_iter_at_line(line_nr));
if(Project::current && Project::debugging)
Project::current->debug_add_breakpoint(source_view->file_path, line_nr+1);
}
};
}
#endif
if(notebook_index==static_cast<size_t>(-1)) {
if(!split)
notebook_index=0;

28
src/source.cc

@ -4,7 +4,6 @@
#include "terminal.h"
#include "info.h"
#include "directories.h"
#include "project.h"
#include <gtksourceview/gtksource.h>
#include <boost/property_tree/json_parser.hpp>
#include <boost/spirit/home/qi/char.hpp>
@ -147,11 +146,14 @@ Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtr<Gsv::L
signal_realize().connect([this] {
auto gutter=get_gutter(Gtk::TextWindowType::TEXT_WINDOW_LEFT);
auto render=gutter->get_renderer_at_pos(30, 0);
if(render)
render->signal_activate().connect([this](const Gtk::TextIter& iter, const Gdk::Rectangle&, GdkEvent*) {
Source::View::toggle_breakpoint(iter.get_line());
auto renderer=gutter->get_renderer_at_pos(15, 0);
if(renderer) {
renderer_activate_connection.disconnect();
renderer_activate_connection=renderer->signal_activate().connect([this](const Gtk::TextIter& iter, const Gdk::Rectangle&, GdkEvent*) {
if(toggle_breakpoint)
toggle_breakpoint(iter.get_line());
});
}
});
set_tooltip_and_dialog_events();
@ -532,21 +534,6 @@ void Source::View::configure() {
}
}
void Source::View::toggle_breakpoint(int line_nr){
if(get_source_buffer()->get_source_marks_at_line(line_nr, "debug_breakpoint").size()>0) {
auto start_iter=get_buffer()->get_iter_at_line(line_nr);
auto end_iter=get_iter_at_line_end(line_nr);
get_source_buffer()->remove_source_marks(start_iter, end_iter, "debug_breakpoint");
if(Project::current && Project::debugging)
Project::current->debug_remove_breakpoint(file_path, line_nr+1, get_buffer()->get_line_count()+1);
}
else {
get_source_buffer()->create_source_mark("debug_breakpoint", get_buffer()->get_iter_at_line(line_nr));
if(Project::current && Project::debugging)
Project::current->debug_add_breakpoint(file_path, line_nr+1);
}
}
void Source::View::set_tooltip_and_dialog_events() {
get_buffer()->signal_changed().connect([this] {
hide_tooltips();
@ -635,6 +622,7 @@ Source::View::~View() {
g_clear_object(&search_settings);
delayed_tooltips_connection.disconnect();
renderer_activate_connection.disconnect();
}
void Source::View::search_highlight(const std::string &text, bool case_sensitive, bool regex) {

5
src/source.h

@ -46,8 +46,6 @@ namespace Source {
virtual bool save(const std::vector<Source::View*> &views);
void configure() override;
void toggle_breakpoint(int line_nr);
void search_highlight(const std::string &text, bool case_sensitive, bool regex);
std::function<void(int number)> update_search_occurrences;
void search_forward();
@ -73,6 +71,7 @@ namespace Source {
std::function<std::vector<FixIt>()> get_fix_its;
std::function<void()> toggle_comments;
std::function<void()> add_documentation;
std::function<void(int)> toggle_breakpoint;
std::unique_ptr<CompletionDialog> autocomplete_dialog;
std::unique_ptr<SelectionDialog> selection_dialog;
@ -154,6 +153,8 @@ namespace Source {
GtkSourceSearchContext *search_context;
GtkSourceSearchSettings *search_settings;
static void search_occurrences_updated(GtkWidget* widget, GParamSpec* property, gpointer data);
sigc::connection renderer_activate_connection;
};
class GenericView : public View {

25
src/window.cc

@ -999,20 +999,8 @@ void Window::set_menu_actions() {
});
menu.add_action("debug_toggle_breakpoint", [this](){
if(auto view=Notebook::get().get_current_view()) {
auto line_nr=view->get_buffer()->get_insert()->get_iter().get_line();
if(view->get_source_buffer()->get_source_marks_at_line(line_nr, "debug_breakpoint").size()>0) {
auto start_iter=view->get_buffer()->get_iter_at_line(line_nr);
auto end_iter=view->get_iter_at_line_end(line_nr);
view->get_source_buffer()->remove_source_marks(start_iter, end_iter, "debug_breakpoint");
if(Project::current && Project::debugging)
Project::current->debug_remove_breakpoint(view->file_path, line_nr+1, view->get_buffer()->get_line_count()+1);
}
else {
view->get_source_buffer()->create_source_mark("debug_breakpoint", view->get_buffer()->get_insert()->get_iter());
if(Project::current && Project::debugging)
Project::current->debug_add_breakpoint(view->file_path, line_nr+1);
}
if(view->toggle_breakpoint)
view->toggle_breakpoint(view->get_buffer()->get_insert()->get_iter().get_line());
}
});
menu.add_action("debug_goto_stop", [this](){
@ -1077,14 +1065,7 @@ void Window::activate_menu_items(bool activate) {
menu.actions["source_goto_next_diagnostic"]->set_enabled(activate ? static_cast<bool>(notebook.get_current_view()->goto_next_diagnostic) : false);
menu.actions["source_apply_fix_its"]->set_enabled(activate ? static_cast<bool>(notebook.get_current_view()->get_fix_its) : false);
#ifdef JUCI_ENABLE_DEBUG
if(auto view=notebook.get_current_view()) {
if(view->language && (view->language->get_id()=="c" || view->language->get_id()=="cpp" || view->language->get_id()=="objc" || view->language->get_id()=="chdr" || view->language->get_id()=="cpphdr"))
menu.actions["debug_toggle_breakpoint"]->set_enabled(true);
else
menu.actions["debug_toggle_breakpoint"]->set_enabled(false);
}
else
menu.actions["debug_toggle_breakpoint"]->set_enabled(false);
menu.actions["debug_toggle_breakpoint"]->set_enabled(activate ? static_cast<bool>(notebook.get_current_view()->toggle_breakpoint) : false);
#endif
}

Loading…
Cancel
Save