From 13c35a254f90f1b82524a9978612ba3b43ed297f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lien=20Sell=C3=A6g?= Date: Thu, 15 Dec 2016 00:59:01 +0100 Subject: [PATCH] New right click context menu features include rename, toggle comments, etc. --- src/CMakeLists.txt | 2 +- src/menu.cc | 97 +++++++++++++++++++++++++++++++++++++++++----- src/menu.h | 6 +-- src/source.cc | 15 +++++++ src/window.cc | 3 ++ 5 files changed, 109 insertions(+), 14 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fd17bb6..779a231 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,7 +10,6 @@ set(project_files entrybox.cc info.cc juci.cc - menu.cc notebook.cc project.cc selectiondialog.cc @@ -27,6 +26,7 @@ set(project_shared_files dispatcher.cc filesystem.cc git.cc + menu.cc meson.cc project_build.cc source.cc diff --git a/src/menu.cc b/src/menu.cc index 9fafdb1..e85fdab 100644 --- a/src/menu.cc +++ b/src/menu.cc @@ -3,9 +3,85 @@ #include #include -Menu::Menu() { - ui_xml = R"RAW( - +const Glib::ustring menu_xml= R"RAW( + +
+ + _Undo + app.edit_undo + + + _Redo + app.edit_redo + +
+
+ + _Paste + app.edit_paste + +
+
+ + _Reload _File + app.reload_file + +
+
+ + _Go _to _Declaration + app.source_goto_declaration + + + _Go _to _Method + app.source_goto_method + + + _Go _to _Usage + app.source_goto_usage + + + _Rename + app.source_rename + + + _Toggle _Line _Comment + app.source_comments_toggle + +
+
+ +
+ + _Undo + app.edit_undo + + + _Redo + app.edit_redo + +
+
+ + _Cut + app.edit_cut + + + _Copy + app.edit_copy + + + _Paste + app.edit_paste + +
+
+ + _Toggle _Line _Comment + app.source_comments_toggle + +
+
@@ -378,7 +454,6 @@ Menu::Menu() {
)RAW"; -} void Menu::add_action(const std::string &name, std::function action) { auto g_application=g_application_get_default(); @@ -400,14 +475,18 @@ void Menu::set_keys() { } void Menu::build() { - builder = Gtk::Builder::create(); - try { - builder->add_from_string(ui_xml); - auto object = Menu::get().builder->get_object("juci-menu"); + builder = Gtk::Builder::create_from_string(menu_xml); + auto object = builder->get_object("juci-menu"); juci_menu = Glib::RefPtr::cast_dynamic(object); - object = Menu::get().builder->get_object("window-menu"); + object = builder->get_object("window-menu"); window_menu = Glib::RefPtr::cast_dynamic(object); + object = builder->get_object("right-click-line-menu"); + auto ptr = Glib::RefPtr::cast_dynamic(object); + right_click_line_menu = std::make_unique(ptr); + object = builder->get_object("right-click-selected-menu"); + ptr = Glib::RefPtr::cast_dynamic(object); + right_click_selected_menu = std::make_unique(ptr); } catch (const Glib::Error &ex) { std::cerr << "building menu failed: " << ex.what(); diff --git a/src/menu.h b/src/menu.h index 9e3fc56..6f9abd1 100644 --- a/src/menu.h +++ b/src/menu.h @@ -6,8 +6,6 @@ #include class Menu { -private: - Menu(); public: static Menu &get() { static Menu singleton; @@ -22,9 +20,9 @@ public: Glib::RefPtr juci_menu; Glib::RefPtr window_menu; - + std::unique_ptr right_click_line_menu; + std::unique_ptr right_click_selected_menu; private: Glib::RefPtr builder; - std::string ui_xml; }; #endif // JUCI_MENU_H_ diff --git a/src/source.cc b/src/source.cc index 7075694..308f861 100644 --- a/src/source.cc +++ b/src/source.cc @@ -4,6 +4,7 @@ #include "terminal.h" #include "info.h" #include "directories.h" +#include "menu.h" #include #include #include @@ -2123,6 +2124,20 @@ bool Source::View::on_button_press_event(GdkEventButton *event) { return true; } + if((event->type == GDK_BUTTON_PRESS) && (event->button == 3)){ + if(!get_buffer()->get_has_selection()){ + int x,y; + window_to_buffer_coords(Gtk::TextWindowType::TEXT_WINDOW_TEXT,event->x,event->y,x,y); + Gtk::TextIter iter; + get_iter_at_location(iter,x,y); + if(iter) + get_buffer()->place_cursor(iter); + Menu::get().right_click_line_menu->popup(event->button,event->time); + } else { + Menu::get().right_click_selected_menu->popup(event->button,event->time); + } + return true; + } return Gsv::View::on_button_press_event(event); } diff --git a/src/window.cc b/src/window.cc index 106efaf..71a9e0b 100644 --- a/src/window.cc +++ b/src/window.cc @@ -32,6 +32,9 @@ Window::Window() { configure(); activate_menu_items(); + Menu::get().right_click_line_menu->attach_to_widget(*this); + Menu::get().right_click_selected_menu->attach_to_widget(*this); + set_default_size(Config::get().window.default_size.first, Config::get().window.default_size.second); auto directories_scrolled_window=Gtk::manage(new Gtk::ScrolledWindow());