[gnote] Update backlinks for popover
- From: Aurimas Černius <aurimasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnote] Update backlinks for popover
- Date: Sat, 2 Jan 2016 18:19:43 +0000 (UTC)
commit a1f75189c14ca646d31303688bbe8f9b3db7d877
Author: Aurimas Černius <aurisc4 gmail com>
Date: Sat Jan 2 20:17:53 2016 +0200
Update backlinks for popover
src/addins/backlinks/Makefile.am | 1 -
src/addins/backlinks/backlinkmenuitem.cpp | 107 --------------------------
src/addins/backlinks/backlinkmenuitem.hpp | 72 -----------------
src/addins/backlinks/backlinks.desktop.in.in | 4 +-
src/addins/backlinks/backlinksnoteaddin.cpp | 90 ++++++++++++++--------
src/addins/backlinks/backlinksnoteaddin.hpp | 13 +--
6 files changed, 66 insertions(+), 221 deletions(-)
---
diff --git a/src/addins/backlinks/Makefile.am b/src/addins/backlinks/Makefile.am
index bf462a9..389b779 100644
--- a/src/addins/backlinks/Makefile.am
+++ b/src/addins/backlinks/Makefile.am
@@ -12,7 +12,6 @@ addins_DATA = $(desktop_files)
backlinks_la_SOURCES = backlinksnoteaddin.hpp backlinksnoteaddin.cpp \
- backlinkmenuitem.hpp backlinkmenuitem.cpp \
$(NULL)
EXTRA_DIST = $(desktop_in_files)
diff --git a/src/addins/backlinks/backlinks.desktop.in.in b/src/addins/backlinks/backlinks.desktop.in.in
index 0182168..c5fa5f6 100644
--- a/src/addins/backlinks/backlinks.desktop.in.in
+++ b/src/addins/backlinks/backlinks.desktop.in.in
@@ -4,8 +4,10 @@ _Name=Backlinks
_Description=See which notes link to the one you're currently viewing.
_Authors=Hubert Figuiere and Tomboy Project
Category=Tools
-Version=0.3
+Version=0.4
DefaultEnabled=true
Module=backlinks
LibgnoteRelease= LIBGNOTE_RELEASE@
LibgnoteVersionInfo= LIBGNOTE_VERSION_INFO@
+[Actions]
+actions_string=backlinks-open-note
diff --git a/src/addins/backlinks/backlinksnoteaddin.cpp b/src/addins/backlinks/backlinksnoteaddin.cpp
index 91de10a..1a20a42 100644
--- a/src/addins/backlinks/backlinksnoteaddin.cpp
+++ b/src/addins/backlinks/backlinksnoteaddin.cpp
@@ -1,7 +1,7 @@
/*
* gnote
*
- * Copyright (C) 2010-2011,2013-2014 Aurimas Cernius
+ * Copyright (C) 2010-2011,2013-2014,2016 Aurimas Cernius
* Copyright (C) 2009 Hubert Figuiere
*
* This program is free software: you can redistribute it and/or modify
@@ -19,12 +19,14 @@
*/
#include <glibmm/i18n.h>
+#include <gtkmm/modelbutton.h>
#include "sharp/string.hpp"
#include "backlinksnoteaddin.hpp"
-#include "backlinkmenuitem.hpp"
#include "iactionmanager.hpp"
+#include "mainwindow.hpp"
#include "notemanager.hpp"
+#include "preferences.hpp"
#include "utils.hpp"
namespace backlinks {
@@ -53,56 +55,80 @@ void BacklinksNoteAddin::shutdown ()
void BacklinksNoteAddin::on_note_opened ()
{
- Glib::RefPtr<Gtk::Action> action = BacklinkAction::create(
- sigc::mem_fun(*this, &BacklinksNoteAddin::update_menu));
- add_note_action(action, gnote::BACKLINKS_ORDER);
+ register_main_window_action_callback("backlinks-open-note",
+ sigc::mem_fun(*this, &BacklinksNoteAddin::on_open_note));
}
-void BacklinksNoteAddin::update_menu(Gtk::Menu *menu)
+void BacklinksNoteAddin::on_open_note(const Glib::VariantBase & param)
{
- //
- // Clear out the old list
- //
- std::vector<Gtk::Widget*> menu_items = menu->get_children();
- for(std::vector<Gtk::Widget*>::reverse_iterator iter = menu_items.rbegin();
- iter != menu_items.rend(); ++iter) {
- menu->remove(**iter);
+ Glib::ustring uri = Glib::VariantBase::cast_dynamic<Glib::Variant<Glib::ustring>>(param).get();
+ gnote::NoteBase::Ptr note = get_note()->manager().find_by_uri(uri);
+ if(note) {
+ gnote::MainWindow::present_in_new_window(static_pointer_cast<gnote::Note>(note),
+ gnote::Preferences::obj().get_schema_settings(gnote::Preferences::SCHEMA_GNOTE)->
+ get_boolean(gnote::Preferences::ENABLE_CLOSE_NOTE_ON_ESCAPE));
}
+}
+
+std::map<int, Gtk::Widget*> BacklinksNoteAddin::get_actions_popover_widgets() const
+{
+ auto widgets = NoteAddin::get_actions_popover_widgets();
+ auto menu_button = gnote::utils::create_popover_submenu_button("backlinks-menu", _("What links here?"));
+ gnote::utils::add_item_to_ordered_map(widgets, gnote::BACKLINKS_ORDER, menu_button);
+
+ auto submenu = gnote::utils::create_popover_submenu("backlinks-menu");
+ update_menu(submenu);
+ gnote::utils::add_item_to_ordered_map(widgets, 100000, submenu);
- //
- // Build a new list
- //
- std::list<BacklinkMenuItem*> items;
+ return widgets;
+}
+
+void BacklinksNoteAddin::update_menu(Gtk::Grid *menu) const
+{
+ std::list<Gtk::Widget*> items;
get_backlink_menu_items(items);
- for(std::list<BacklinkMenuItem*>::iterator iter = items.begin();
- iter != items.end(); ++iter) {
- BacklinkMenuItem * item(*iter);
- item->show_all();
- menu->append (*item);
+ int top = 0;
+ auto sub = manage(new Gtk::Grid);
+ gnote::utils::set_common_popover_widget_props(*sub);
+ int subtop = 0;
+ for(auto item : items) {
+ dynamic_cast<Gtk::ModelButton*>(item)->property_inverted() = true;
+ sub->attach(*item, 0, subtop++, 1, 1);
}
// If nothing was found, add in a "dummy" item
- if(menu->get_children().size() == 0) {
- Gtk::MenuItem *blank_item = manage(new Gtk::MenuItem(_("(none)")));
- blank_item->set_sensitive(false);
- blank_item->show_all ();
- menu->append(*blank_item);
+ if(subtop == 0) {
+ Gtk::Widget *blank_item = manage(gnote::utils::create_popover_button("win.backlinks-nonexistent",
_("(none)")));
+ sub->attach(*blank_item, 0, subtop++, 1, 1);
}
+ menu->attach(*sub, 0, top++, 1, 1);
+
+ sub = manage(new Gtk::Grid);
+ gnote::utils::set_common_popover_widget_props(*sub);
+ subtop = 0;
+ auto back = gnote::utils::create_popover_submenu_button("main", _("_Back"));
+ dynamic_cast<Gtk::ModelButton*>(back)->property_inverted() = true;
+ sub->attach(*back, 0, subtop++, 1, 1);
+ menu->attach(*sub, 0, top++, 1, 1);
}
-void BacklinksNoteAddin::get_backlink_menu_items(std::list<BacklinkMenuItem*> & items)
+void BacklinksNoteAddin::get_backlink_menu_items(std::list<Gtk::Widget*> & items) const
{
gnote::NoteBase::List notes = get_note()->manager().get_notes_linking_to(get_note()->get_title());
FOREACH(const gnote::NoteBase::Ptr & note, notes) {
if(note != get_note()) { // don't match ourself
- BacklinkMenuItem *item = manage(new BacklinkMenuItem(note, get_note()->get_title()));
-
- items.push_back(item);
+ auto button = manage(gnote::utils::create_popover_button("win.backlinks-open-note",
note->get_title()));
+ gtk_actionable_set_action_target_value(GTK_ACTIONABLE(button->gobj()),
+ Glib::Variant<Glib::ustring>::create(note->uri()).gobj());
+ items.push_back(button);
}
}
- items.sort();
+ items.sort([](Gtk::Widget *x, Gtk::Widget *y)
+ {
+ return dynamic_cast<Gtk::ModelButton*>(x)->get_label() <
dynamic_cast<Gtk::ModelButton*>(y)->get_label();
+ });
}
diff --git a/src/addins/backlinks/backlinksnoteaddin.hpp b/src/addins/backlinks/backlinksnoteaddin.hpp
index 6bdf35c..6075fba 100644
--- a/src/addins/backlinks/backlinksnoteaddin.hpp
+++ b/src/addins/backlinks/backlinksnoteaddin.hpp
@@ -1,7 +1,7 @@
/*
* gnote
*
- * Copyright (C) 2010,2013 Aurimas Cernius
+ * Copyright (C) 2010,2013,2016 Aurimas Cernius
* Copyright (C) 2009 Hubert Figuiere
*
* This program is free software: you can redistribute it and/or modify
@@ -23,12 +23,7 @@
#include <list>
-#include <gtkmm/imagemenuitem.h>
-#include <gtkmm/menu.h>
-
-#include "base/macros.hpp"
#include "sharp/dynamicmodule.hpp"
-#include "note.hpp"
#include "noteaddin.hpp"
namespace backlinks {
@@ -57,9 +52,11 @@ public:
virtual void initialize() override;
virtual void shutdown() override;
virtual void on_note_opened() override;
+ virtual std::map<int, Gtk::Widget*> get_actions_popover_widgets() const override;
private:
- void update_menu(Gtk::Menu *menu);
- void get_backlink_menu_items(std::list<BacklinkMenuItem*> & items);
+ void on_open_note(const Glib::VariantBase & param);
+ void update_menu(Gtk::Grid *menu) const;
+ void get_backlink_menu_items(std::list<Gtk::Widget*> & items) const;
bool check_note_has_match(const gnote::Note::Ptr &, const std::string &);
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]