[niepce] Issue #13 - Added workspace context menu
- From: Hubert Figuière <hub src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [niepce] Issue #13 - Added workspace context menu
- Date: Mon, 30 Dec 2019 16:49:06 +0000 (UTC)
commit 25b6341cbfa3a63f2b38e1fea77bab87debced0f
Author: Hubert Figuière <hub figuiere net>
Date: Mon Dec 30 11:48:00 2019 -0500
Issue #13 - Added workspace context menu
src/niepce/ui/workspacecontroller.cpp | 37 +++++++++++++++++++++++++++++++----
src/niepce/ui/workspacecontroller.hpp | 3 +++
2 files changed, 36 insertions(+), 4 deletions(-)
---
diff --git a/src/niepce/ui/workspacecontroller.cpp b/src/niepce/ui/workspacecontroller.cpp
index 5f84bef..95c5e5f 100644
--- a/src/niepce/ui/workspacecontroller.cpp
+++ b/src/niepce/ui/workspacecontroller.cpp
@@ -1,7 +1,7 @@
/*
* niepce - ui/workspacecontroller.cpp
*
- * Copyright (C) 2007-2018 Hubert Figuiere
+ * Copyright (C) 2007-2019 Hubert Figuière
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,8 +17,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <boost/any.hpp>
-
#include <glibmm/i18n.h>
#include <gtkmm/icontheme.h>
@@ -51,6 +49,7 @@ WorkspaceController::WorkspaceController(const Glib::RefPtr<Gio::SimpleActionGro
: fwk::UiController()
, m_action_group(action_group)
, m_vbox(Gtk::ORIENTATION_VERTICAL)
+ , m_context_menu(nullptr)
{
static struct _Icons {
int icon_id;
@@ -396,6 +395,7 @@ Gtk::Widget * WorkspaceController::buildWidget()
m_widget = &m_vbox;
m_treestore = Gtk::TreeStore::create(m_librarycolumns);
m_librarytree.set_model(m_treestore);
+ m_librarytree.set_activate_on_single_click(true);
DBG_ASSERT(m_treestore->get_flags() & Gtk::TREE_MODEL_ITERS_PERSIST,
"Model isn't persistent");
@@ -465,6 +465,9 @@ Gtk::Widget * WorkspaceController::buildWidget()
m_vbox.pack_start(*scrolled);
scrolled->add(m_librarytree);
+ m_context_menu = Gtk::manage(new Gtk::Menu(menu));
+ m_context_menu->attach_to_widget(m_librarytree);
+
m_librarytree.get_selection()->signal_changed().connect (
sigc::mem_fun(this,
&WorkspaceController::on_libtree_selection));
@@ -474,7 +477,10 @@ Gtk::Widget * WorkspaceController::buildWidget()
m_librarytree.signal_row_collapsed().connect(
sigc::mem_fun(this,
&WorkspaceController::on_row_collapsed));
-
+ m_librarytree.signal_popup_menu()
+ .connect(sigc::mem_fun(*this, &WorkspaceController::on_popup_menu));
+ m_librarytree.signal_button_press_event()
+ .connect_notify(sigc::mem_fun(*this, &WorkspaceController::on_button_press_event));
return m_widget;
}
@@ -500,12 +506,35 @@ void WorkspaceController::on_ready()
}
}
+bool WorkspaceController::on_popup_menu()
+{
+ if (m_context_menu && m_librarytree.get_selection()->count_selected_rows() != 0) {
+ m_context_menu->popup_at_widget(&m_librarytree, Gdk::GRAVITY_CENTER,
+ Gdk::GRAVITY_NORTH, nullptr);
+ return true;
+ }
+ return false;
+}
+
+void WorkspaceController::on_button_press_event(GdkEventButton* e)
+{
+ GdkEvent* event = (GdkEvent*)e;
+ if (gdk_event_triggers_context_menu(event)
+ && gdk_event_get_event_type(event) == GDK_BUTTON_PRESS
+ && m_librarytree.get_selection()->count_selected_rows() != 0) {
+
+ m_context_menu->popup_at_pointer(event);
+ }
+}
+
}
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0))
+ c-basic-offset:4
+ tab-width:4
indent-tabs-mode:nil
fill-column:80
End:
diff --git a/src/niepce/ui/workspacecontroller.hpp b/src/niepce/ui/workspacecontroller.hpp
index 22d2d69..ff15f29 100644
--- a/src/niepce/ui/workspacecontroller.hpp
+++ b/src/niepce/ui/workspacecontroller.hpp
@@ -101,6 +101,8 @@ private:
const Gtk::TreePath& path);
void on_row_collapsed(const Gtk::TreeIter& iter,
const Gtk::TreePath& path);
+ bool on_popup_menu();
+ void on_button_press_event(GdkEventButton *event);
libraryclient::LibraryClientPtr getLibraryClient() const;
fwk::Configuration::Ptr getLibraryConfig() const;
@@ -143,6 +145,7 @@ private:
Gtk::Box m_vbox;
Gtk::Label m_label;
Gtk::TreeView m_librarytree;
+ Gtk::Menu* m_context_menu;
Gtk::TreeModel::iterator m_folderNode; /**< the folder node */
Gtk::TreeModel::iterator m_projectNode; /**< the project node */
Gtk::TreeModel::iterator m_keywordsNode; /**< the keywords node */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]