[gnote] Refactor to use PopoverWidget all the way
- From: Aurimas Černius <aurimasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnote] Refactor to use PopoverWidget all the way
- Date: Sun, 31 Mar 2019 21:05:46 +0000 (UTC)
commit 529b47a7b26172c259939184a7290918dbcd6b44
Author: Aurimas Černius <aurisc4 gmail com>
Date: Mon Apr 1 00:05:26 2019 +0300
Refactor to use PopoverWidget all the way
src/mainwindowembeds.hpp | 5 +++--
src/notewindow.cpp | 43 ++++++++++++++-----------------------------
src/notewindow.hpp | 4 ++--
src/popoverwidgets.hpp | 1 +
src/recentchanges.cpp | 41 ++++++++++++++++++++++-------------------
src/recentchanges.hpp | 4 ++--
src/searchnoteswidget.cpp | 14 ++------------
src/searchnoteswidget.hpp | 4 ++--
8 files changed, 48 insertions(+), 68 deletions(-)
---
diff --git a/src/mainwindowembeds.hpp b/src/mainwindowembeds.hpp
index b5d123ae..9984782b 100644
--- a/src/mainwindowembeds.hpp
+++ b/src/mainwindowembeds.hpp
@@ -1,7 +1,7 @@
/*
* gnote
*
- * Copyright (C) 2013,2015-2017 Aurimas Cernius
+ * Copyright (C) 2013,2015-2017,2019 Aurimas Cernius
*
* 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
@@ -25,6 +25,7 @@
#include <gtkmm/widget.h>
#include "mainwindowaction.hpp"
+#include "popoverwidgets.hpp"
namespace gnote {
@@ -91,7 +92,7 @@ public:
class HasActions
{
public:
- virtual std::vector<Gtk::Widget*> get_popover_widgets() = 0;
+ virtual std::vector<PopoverWidget> get_popover_widgets() = 0;
virtual std::vector<MainWindowAction::Ptr> get_widget_actions() = 0;
sigc::signal<void> signal_popover_widgets_changed;
diff --git a/src/notewindow.cpp b/src/notewindow.cpp
index 8b76eac2..43333560 100644
--- a/src/notewindow.cpp
+++ b/src/notewindow.cpp
@@ -304,26 +304,21 @@ namespace gnote {
return m_embeddable_toolbar;
}
- std::vector<Gtk::Widget*> NoteWindow::get_popover_widgets()
+ std::vector<PopoverWidget> NoteWindow::get_popover_widgets()
{
- std::vector<Gtk::Widget*> widgets;
- std::map<int, Gtk::Widget*> widget_map;
std::vector<PopoverWidget> popover_widgets;
popover_widgets.reserve(20);
- Gtk::Widget *new_note = manage(utils::create_popover_button("app.new-note", _("_New Note")));
- widgets.push_back(new_note);
- Gtk::Widget *new_window = manage(utils::create_popover_button("app.new-window", _("New _Window")));
- widgets.push_back(new_window);
- widgets.push_back(NULL);
- Gtk::Widget *undo = manage(utils::create_popover_button("win.undo", _("_Undo")));
- widgets.push_back(undo);
- Gtk::Widget *redo = manage(utils::create_popover_button("win.redo", _("_Redo")));
- widgets.push_back(redo);
- widgets.push_back(NULL);
-
- Gtk::Widget *link = manage(utils::create_popover_button("win.link", _("_Link to New Note")));
- popover_widgets.push_back(PopoverWidget::create_for_note(2000, link));
+ Gtk::Widget *new_note = utils::create_popover_button("app.new-note", _("_New Note"));
+ popover_widgets.push_back(PopoverWidget(NOTE_SECTION_NEW, 1, new_note));
+ Gtk::Widget *new_window = utils::create_popover_button("app.new-window", _("New _Window"));
+ popover_widgets.push_back(PopoverWidget(NOTE_SECTION_NEW, 2, new_window));
+ Gtk::Widget *undo = utils::create_popover_button("win.undo", _("_Undo"));
+ popover_widgets.push_back(PopoverWidget(NOTE_SECTION_UNDO, 1, undo));
+ Gtk::Widget *redo = utils::create_popover_button("win.redo", _("_Redo"));
+ popover_widgets.push_back(PopoverWidget(NOTE_SECTION_UNDO, 2, redo));
+ Gtk::Widget *link = utils::create_popover_button("win.link", _("_Link to New Note"));
+ popover_widgets.push_back(PopoverWidget::create_for_note(LINK_ORDER, link));
Gtk::Widget *important = utils::create_popover_button("win.important-note", _("_Important"));
popover_widgets.push_back(PopoverWidget(NOTE_SECTION_FLAGS, IMPORTANT_ORDER, important));
@@ -334,20 +329,10 @@ namespace gnote {
popover_widgets.insert(popover_widgets.end(), addin_widgets.begin(), addin_widgets.end());
}
- std::sort(popover_widgets.begin(), popover_widgets.end());
- int last_section = 0;
- for(auto & w : popover_widgets) {
- // put separator between groups
- if(w.section != last_section && widgets.size() > 0 && widgets.back() != NULL) {
- widgets.push_back(NULL);
- }
- last_section = w.section;
- widgets.push_back(w.widget);
- }
-
- widgets.push_back(utils::create_popover_button("win.delete-note", _("_Delete…")));
+ auto delete_button = utils::create_popover_button("win.delete-note", _("_Delete…"));
+ popover_widgets.push_back(PopoverWidget(NOTE_SECTION_ACTIONS, 1000, delete_button));
- return widgets;
+ return popover_widgets;
}
std::vector<MainWindowAction::Ptr> NoteWindow::get_widget_actions()
diff --git a/src/notewindow.hpp b/src/notewindow.hpp
index f54a9abe..6e95b367 100644
--- a/src/notewindow.hpp
+++ b/src/notewindow.hpp
@@ -1,7 +1,7 @@
/*
* gnote
*
- * Copyright (C) 2011-2017 Aurimas Cernius
+ * Copyright (C) 2011-2017,2019 Aurimas Cernius
* Copyright (C) 2009 Hubert Figuiere
*
* This program is free software: you can redistribute it and/or modify
@@ -193,7 +193,7 @@ public:
virtual void reference() const override;
virtual void unreference() const override;
};
- virtual std::vector<Gtk::Widget*> get_popover_widgets() override;
+ virtual std::vector<PopoverWidget> get_popover_widgets() override;
virtual std::vector<MainWindowAction::Ptr> get_widget_actions() override;
void set_size(int width, int height)
diff --git a/src/popoverwidgets.hpp b/src/popoverwidgets.hpp
index 534617e6..5025b2f8 100644
--- a/src/popoverwidgets.hpp
+++ b/src/popoverwidgets.hpp
@@ -43,6 +43,7 @@ enum NoteActionOrder {
SPELL_CHECK_ORDER = 200,
IMPORTANT_ORDER = 300,
// actions
+ LINK_ORDER = 50,
EXPORT_TO_HTML_ORDER = 100,
EXPORT_TO_GTG_ORDER = 200,
INSERT_TIMESTAMP_ORDER = 300,
diff --git a/src/recentchanges.cpp b/src/recentchanges.cpp
index 6b983549..30d6909d 100644
--- a/src/recentchanges.cpp
+++ b/src/recentchanges.cpp
@@ -1,7 +1,7 @@
/*
* gnote
*
- * Copyright (C) 2010-2018 Aurimas Cernius
+ * Copyright (C) 2010-2019 Aurimas Cernius
* Copyright (C) 2010 Debarshi Ray
* Copyright (C) 2009 Hubert Figuiere
*
@@ -759,49 +759,52 @@ namespace gnote {
HasActions *embed_with_actions = dynamic_cast<HasActions*>(currently_embedded());
if(embed_with_actions) {
if(m_window_menu_embedded == NULL) {
- m_window_menu_embedded = make_window_menu(m_window_actions_button,
embed_with_actions->get_popover_widgets());
+ m_window_menu_embedded = make_window_menu(m_window_actions_button,
std::move(embed_with_actions->get_popover_widgets()));
}
m_window_menu_embedded->show_all();
}
else {
if(m_window_menu_default == NULL) {
- m_window_menu_default = make_window_menu(m_window_actions_button, std::vector<Gtk::Widget*>());
+ m_window_menu_default = make_window_menu(m_window_actions_button, std::vector<PopoverWidget>());
}
m_window_menu_default->show_all();
}
}
- Gtk::PopoverMenu *NoteRecentChanges::make_window_menu(Gtk::Button *button, const std::vector<Gtk::Widget*>
& items)
+ Gtk::PopoverMenu *NoteRecentChanges::make_window_menu(Gtk::Button *button, std::vector<PopoverWidget> &&
items)
{
- std::map<Glib::ustring, Gtk::Widget*> submenus;
+ std::sort(items.begin(), items.end());
Gtk::PopoverMenu *menu = manage(new Gtk::PopoverMenu);
Gtk::Box *menu_box = manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
utils::set_common_popover_widget_props(*menu_box);
if(items.size() > 0) {
- FOREACH(Gtk::Widget *item, items) {
- if(item) {
- utils::PopoverSubmenu *submenu = dynamic_cast<utils::PopoverSubmenu*>(item);
+ auto iter = items.begin();
+ auto current_section = iter->section;
+ for(; iter != items.end() && iter->section != APP_CUSTOM_SECTION; ++iter) {
+ if(iter->section != current_section) {
+ current_section = iter->section;
+ menu_box->add(*manage(new Gtk::Separator));
+ }
+ menu_box->add(*manage(iter->widget));
+ }
+
+ menu->add(*menu_box);
+ for(; iter != items.end(); ++iter) {
+ utils::PopoverSubmenu *submenu = dynamic_cast<utils::PopoverSubmenu*>(iter->widget);
if(submenu) {
- submenus[submenu->name()] = item;
+ menu->add(*manage(iter->widget));
+ menu->child_property_submenu(*iter->widget) = submenu->name();
}
else {
- menu_box->add(*manage(item));
+ ERR_OUT(_("Expected widget to be a sub-menu!"));
}
- }
- else {
- menu_box->add(*manage(new Gtk::Separator));
- }
}
}
else {
menu_box->add(*manage(new Gtk::Label(_("No configured actions"))));
+ menu->add(*menu_box);
}
- menu->add(*menu_box);
- for(auto & submenu : submenus) {
- menu->add(*submenu.second);
- menu->child_property_submenu(*submenu.second) = submenu.first;
- }
menu->set_relative_to(*button);
menu->set_modal(true);
menu->set_position(Gtk::POS_BOTTOM);
diff --git a/src/recentchanges.hpp b/src/recentchanges.hpp
index d6a59945..1ce5e1e5 100644
--- a/src/recentchanges.hpp
+++ b/src/recentchanges.hpp
@@ -1,7 +1,7 @@
/*
* gnote
*
- * Copyright (C) 2010-2017 Aurimas Cernius
+ * Copyright (C) 2010-2017,2019 Aurimas Cernius
* Copyright (C) 2010 Debarshi Ray
* Copyright (C) 2009 Hubert Figuiere
*
@@ -87,7 +87,7 @@ private:
void on_search_button_toggled();
void on_find_next_button_clicked();
void on_find_prev_button_clicked();
- Gtk::PopoverMenu *make_window_menu(Gtk::Button *button, const std::vector<Gtk::Widget*> & items);
+ Gtk::PopoverMenu *make_window_menu(Gtk::Button *button, std::vector<PopoverWidget> && items);
void on_embedded_name_changed(const Glib::ustring & name);
void on_settings_changed(const Glib::ustring & key);
bool on_notes_widget_key_press(GdkEventKey*);
diff --git a/src/searchnoteswidget.cpp b/src/searchnoteswidget.cpp
index ced9d848..e206a6d1 100644
--- a/src/searchnoteswidget.cpp
+++ b/src/searchnoteswidget.cpp
@@ -1433,7 +1433,7 @@ void SearchNotesWidget::size_internals()
}
}
-std::vector<Gtk::Widget*> SearchNotesWidget::get_popover_widgets()
+std::vector<PopoverWidget> SearchNotesWidget::get_popover_widgets()
{
std::vector<PopoverWidget> popover_widgets;
popover_widgets.reserve(20);
@@ -1441,17 +1441,7 @@ std::vector<Gtk::Widget*> SearchNotesWidget::get_popover_widgets()
for(unsigned i = 0; i < popover_widgets.size(); ++i) {
popover_widgets[i].secondary_order = i;
}
- std::sort(popover_widgets.begin(), popover_widgets.end());
- std::vector<Gtk::Widget*> widgets;
- int section = popover_widgets.size() ? popover_widgets.front().section : 0;
- for(auto& widget : popover_widgets) {
- if (section != widget.section) {
- widgets.push_back(NULL);
- section = widget.section;
- }
- widgets.push_back(widget.widget);
- }
- return widgets;
+ return popover_widgets;
}
std::vector<MainWindowAction::Ptr> SearchNotesWidget::get_widget_actions()
diff --git a/src/searchnoteswidget.hpp b/src/searchnoteswidget.hpp
index ddda1383..0121d182 100644
--- a/src/searchnoteswidget.hpp
+++ b/src/searchnoteswidget.hpp
@@ -1,7 +1,7 @@
/*
* gnote
*
- * Copyright (C) 2010-2015,2017 Aurimas Cernius
+ * Copyright (C) 2010-2015,2017,2019 Aurimas Cernius
* Copyright (C) 2010 Debarshi Ray
* Copyright (C) 2009 Hubert Figuiere
*
@@ -54,7 +54,7 @@ public:
virtual void hint_size(int & width, int & height) override;
virtual void size_internals() override;
virtual void perform_search(const Glib::ustring & search_text) override;
- virtual std::vector<Gtk::Widget*> get_popover_widgets() override;
+ virtual std::vector<PopoverWidget> get_popover_widgets() override;
virtual std::vector<MainWindowAction::Ptr> get_widget_actions() override;
void select_all_notes_notebook();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]