From bcd804c6c383e2964b072257da282d9a91db7d16 Mon Sep 17 00:00:00 2001 From: Kris De Gussem Date: Thu, 5 Apr 2012 22:14:44 +0200 Subject: C++ify context menu: - c++ified context-menu.cpp (and included in interface.cpp) - removed dozens of pointer conversions (of which some were erroneous) - fixed a memory leak - added some null pointer checks to prevent crashes (bzr r11160) --- src/interface.h | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 4 deletions(-) (limited to 'src/interface.h') diff --git a/src/interface.h b/src/interface.h index 2b01a20d7..db98c3ae3 100644 --- a/src/interface.h +++ b/src/interface.h @@ -8,7 +8,9 @@ * Lauris Kaplinski * Frank Felfe * Abhishek Sharma + * Kris De Gussem * + * Copyright (C) 2012 Kris De Gussem * Copyright (C) 1999-2002 authors * Copyright (C) 2001-2002 Ximian, Inc. * @@ -16,6 +18,7 @@ */ #include +#include #include "sp-item.h" @@ -58,10 +61,7 @@ unsigned int sp_ui_close_all (void); */ GtkWidget *sp_ui_main_menubar (Inkscape::UI::View::View *view); -/** - * - */ -GtkWidget *sp_ui_context_menu (Inkscape::UI::View::View *v, SPItem *item); +static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb *verb, Inkscape::UI::View::View *view, bool radio = false, GSList *group = NULL); /** @@ -82,6 +82,59 @@ void sp_ui_dialog_title_string (Inkscape::Verb * verb, gchar* c); void sp_ui_error_dialog (const gchar * message); bool sp_ui_overwrite_file (const gchar * filename); +class ContextMenu : public Gtk::Menu +{ + public: + ContextMenu(Inkscape::UI::View::View *view, SPItem *item); + ~ContextMenu(void); + private: + SPItem *_item; + SPObject *_object; + SPDesktop *_desktop; + + std::vector separators; + Gtk::MenuItem MIGroup; + Gtk::MenuItem MIParent; + + Gtk::SeparatorMenuItem* AddSeparator(void); + void AppendItemFromVerb(Inkscape::Verb *verb, Inkscape::UI::View::View *view); + void MakeObjectMenu (void); + void MakeItemMenu (void); + void MakeGroupMenu (void); + void MakeAnchorMenu (void); + void MakeImageMenu (void); + void MakeShapeMenu (void); + void MakeTextMenu (void); + + void EnterGroup(Gtk::MenuItem* mi); + void LeaveGroup(void); + void ItemProperties(void); + void ItemSelectThis(void); + void SelectSameFillStroke(void); + void ItemCreateLink(void); + void SetMask(void); + void ReleaseMask(void); + void SetClip(void); + void ReleaseClip(void); + + void ActivateUngroup(void); + + void AnchorLinkProperties(void); + void AnchorLinkFollow(void); + void AnchorLinkRemove(void); + + void ImageProperties(void); + void ImageEdit(void); + Glib::ustring getImageEditorName(); + void ImageEmbed(void); + void ImageExtract(void); + + void FillSettings(void); + + void TextSettings(void); + void SpellcheckSettings(void); +}; + #endif // SEEN_SP_INTERFACE_H /* -- cgit v1.2.3 From a5080325d2e488598ece94094a3984dcdd292055 Mon Sep 17 00:00:00 2001 From: Kris De Gussem Date: Fri, 6 Apr 2012 08:09:09 +0200 Subject: build warning fix (bzr r11161) --- src/interface.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'src/interface.h') diff --git a/src/interface.h b/src/interface.h index db98c3ae3..fecfa4ae4 100644 --- a/src/interface.h +++ b/src/interface.h @@ -61,9 +61,6 @@ unsigned int sp_ui_close_all (void); */ GtkWidget *sp_ui_main_menubar (Inkscape::UI::View::View *view); -static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb *verb, Inkscape::UI::View::View *view, bool radio = false, GSList *group = NULL); - - /** * */ -- cgit v1.2.3 From e7c6906dfd496f02786ef57099629f7e6940f225 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Fri, 6 Apr 2012 18:41:00 +0100 Subject: drop some deprecated gdk_draw functions (bzr r11166) --- src/interface.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/interface.h') diff --git a/src/interface.h b/src/interface.h index fecfa4ae4..d6e4c1c4f 100644 --- a/src/interface.h +++ b/src/interface.h @@ -17,11 +17,11 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include #include -#include "sp-item.h" - +class SPItem; +class SPObject; +class SPDesktop; class SPViewWidget; namespace Inkscape { -- cgit v1.2.3 From f0e728e66264419d8dbeaab2f0b0a246cb2ae16d Mon Sep 17 00:00:00 2001 From: Kris De Gussem Date: Fri, 6 Apr 2012 20:51:45 +0200 Subject: restore item order of dialogs in context menu (Bug #910529) (bzr r11167) --- src/interface.h | 80 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 41 insertions(+), 39 deletions(-) (limited to 'src/interface.h') diff --git a/src/interface.h b/src/interface.h index d6e4c1c4f..e21a0f752 100644 --- a/src/interface.h +++ b/src/interface.h @@ -86,50 +86,52 @@ class ContextMenu : public Gtk::Menu ~ContextMenu(void); private: SPItem *_item; - SPObject *_object; - SPDesktop *_desktop; - - std::vector separators; + SPObject *_object; + SPDesktop *_desktop; + + int positionOfLastDialog; + + std::vector separators; Gtk::MenuItem MIGroup; Gtk::MenuItem MIParent; Gtk::SeparatorMenuItem* AddSeparator(void); void AppendItemFromVerb(Inkscape::Verb *verb, Inkscape::UI::View::View *view); - void MakeObjectMenu (void); - void MakeItemMenu (void); - void MakeGroupMenu (void); - void MakeAnchorMenu (void); - void MakeImageMenu (void); - void MakeShapeMenu (void); - void MakeTextMenu (void); - - void EnterGroup(Gtk::MenuItem* mi); - void LeaveGroup(void); - void ItemProperties(void); - void ItemSelectThis(void); - void SelectSameFillStroke(void); - void ItemCreateLink(void); - void SetMask(void); - void ReleaseMask(void); - void SetClip(void); - void ReleaseClip(void); - - void ActivateUngroup(void); - - void AnchorLinkProperties(void); - void AnchorLinkFollow(void); - void AnchorLinkRemove(void); - - void ImageProperties(void); - void ImageEdit(void); - Glib::ustring getImageEditorName(); - void ImageEmbed(void); - void ImageExtract(void); - - void FillSettings(void); - - void TextSettings(void); - void SpellcheckSettings(void); + void MakeObjectMenu (void); + void MakeItemMenu (void); + void MakeGroupMenu (void); + void MakeAnchorMenu (void); + void MakeImageMenu (void); + void MakeShapeMenu (void); + void MakeTextMenu (void); + + void EnterGroup(Gtk::MenuItem* mi); + void LeaveGroup(void); + void ItemProperties(void); + void ItemSelectThis(void); + void SelectSameFillStroke(void); + void ItemCreateLink(void); + void SetMask(void); + void ReleaseMask(void); + void SetClip(void); + void ReleaseClip(void); + + void ActivateUngroup(void); + + void AnchorLinkProperties(void); + void AnchorLinkFollow(void); + void AnchorLinkRemove(void); + + void ImageProperties(void); + void ImageEdit(void); + Glib::ustring getImageEditorName(); + void ImageEmbed(void); + void ImageExtract(void); + + void FillSettings(void); + + void TextSettings(void); + void SpellcheckSettings(void); }; #endif // SEEN_SP_INTERFACE_H -- cgit v1.2.3 From d0dd1656c0c53026ea672a366e7405a6e9cfc637 Mon Sep 17 00:00:00 2001 From: Kris De Gussem Date: Mon, 9 Apr 2012 21:18:03 +0200 Subject: Documentation / dropping some pointer conversions in context menu (bzr r11200) --- src/interface.h | 145 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 125 insertions(+), 20 deletions(-) (limited to 'src/interface.h') diff --git a/src/interface.h b/src/interface.h index e21a0f752..0751171e2 100644 --- a/src/interface.h +++ b/src/interface.h @@ -41,35 +41,40 @@ class View; void sp_create_window (SPViewWidget *vw, gboolean editable); /** - * + * \param widget unused */ void sp_ui_close_view (GtkWidget *widget); +void sp_ui_new_view (void); + /** - * + * @todo TODO: not yet working. To be re-enabled (by adding to menu) once it works. */ -void sp_ui_new_view (void); void sp_ui_new_view_preview (void); /** + * This function is called to exit the program, and iterates through all + * open document view windows, attempting to close each in turn. If the + * view has unsaved information, the user will be prompted to save, + * discard, or cancel. * + * Returns FALSE if the user cancels the close_all operation, TRUE + * otherwise. */ unsigned int sp_ui_close_all (void); /** + * Build the main tool bar. + * + * Currently the main tool bar is built as a dynamic XML menu using + * \c sp_ui_build_dyn_menus. This function builds the bar, and then + * pass it to get items attached to it. * + * @param view View to build the bar for */ GtkWidget *sp_ui_main_menubar (Inkscape::UI::View::View *view); -/** - * - */ void sp_menu_append_recent_documents (GtkWidget *menu); - - -/** - * - */ void sp_ui_dialog_title_string (Inkscape::Verb * verb, gchar* c); @@ -79,34 +84,88 @@ void sp_ui_dialog_title_string (Inkscape::Verb * verb, gchar* c); void sp_ui_error_dialog (const gchar * message); bool sp_ui_overwrite_file (const gchar * filename); + +/** + * Implements the Inkscape context menu. + * + * For the context menu implementation, the ContextMenu class stores the object + * that was selected in a private data member. This should be farely safe to do + * and a pointer to the SPItem as well as SPObject class are kept. + * All callbacks of the context menu entries are implemented as private + * functions. + * + * @todo add callbacks to destroy the context menu when it is closed (=key or mouse button pressed out of the scope of the context menu) + */ class ContextMenu : public Gtk::Menu { public: - ContextMenu(Inkscape::UI::View::View *view, SPItem *item); + /** + * The ContextMenu constructor contains all code to create and show the + * menu entries (aka child widgets). + * + * @param desktop pointer to the desktop the user is currently working on. + * @param item SPItem pointer to the object selected at the time the ContextMenu is created. + */ + ContextMenu(SPDesktop *desktop, SPItem *item); ~ContextMenu(void); + private: - SPItem *_item; - SPObject *_object; - SPDesktop *_desktop; + SPItem *_item; // pointer to the object selected at the time the ContextMenu is created + SPObject *_object; // pointer to the object selected at the time the ContextMenu is created + SPDesktop *_desktop; //pointer to the desktop the user was currently working on at the time the ContextMenu is created int positionOfLastDialog; - std::vector separators; - Gtk::MenuItem MIGroup; - Gtk::MenuItem MIParent; + std::vector separators; //contains pointers to separators + Gtk::MenuItem MIGroup; //menu entry to enter a group + Gtk::MenuItem MIParent; //menu entry to leave a group + /** + * auxiliary function that adds a separator line in the context menu + */ Gtk::SeparatorMenuItem* AddSeparator(void); - void AppendItemFromVerb(Inkscape::Verb *verb, Inkscape::UI::View::View *view); - void MakeObjectMenu (void); + + /** + * c++ified version of sp_ui_menu_append_item. + * + * @see sp_ui_menu_append_item_from_verb and synchronize/drop that function when c++ifying other code in interface.cpp + */ + void AppendItemFromVerb(Inkscape::Verb *verb); + + /** + * main function which is responsible for creating the context sensitive menu items, + * calls subfunctions below to create the menu entry widgets. + */ + void MakeObjectMenu (void); + /** + * creates menu entries for an SP_TYPE_ITEM object + */ void MakeItemMenu (void); + /** + * creates menu entries for a grouped object + */ void MakeGroupMenu (void); + /** + * creates menu entries for an anchor object + */ void MakeAnchorMenu (void); + /** + * creates menu entries for a bitmap image object + */ void MakeImageMenu (void); + /** + * creates menu entries for a shape object + */ void MakeShapeMenu (void); + /** + * creates menu entries for a text object + */ void MakeTextMenu (void); void EnterGroup(Gtk::MenuItem* mi); void LeaveGroup(void); + ////////////////////////////////////////// + //callbacks for the context menu entries of an SP_TYPE_ITEM object void ItemProperties(void); void ItemSelectThis(void); void SelectSameFillStroke(void); @@ -115,22 +174,68 @@ class ContextMenu : public Gtk::Menu void ReleaseMask(void); void SetClip(void); void ReleaseClip(void); + ////////////////////////////////////////// + + /** + * callback, is executed on clicking the anchor "Ungroup" menu entry + */ void ActivateUngroup(void); + void AnchorLinkProperties(void); + /** + * placeholder for callback to be executed on clicking the anchor "Follow link" context menu entry + * @todo add code to follow link externally + */ void AnchorLinkFollow(void); + + /** + * callback, is executed on clicking the anchor "Link remove" menu entry + */ void AnchorLinkRemove(void); + + /** + * callback, opens the image properties dialog and is executed on clicking the context menu entry with similar name + */ void ImageProperties(void); + + /** + * callback, is executed on clicking the image "Edit Externally" menu entry + */ void ImageEdit(void); + + /** + * auxiliary function that loads the external image editor name from the settings. + */ Glib::ustring getImageEditorName(); + + /** + * callback, is executed on clicking the "Embed Image" menu entry + */ void ImageEmbed(void); + + /** + * callback, is executed on clicking the "Extract Image" menu entry + */ void ImageExtract(void); + + /** + * callback, is executed on clicking the "Fill and Stroke" menu entry + */ void FillSettings(void); + + /** + * callback, is executed on clicking the "Text and Font" menu entry + */ void TextSettings(void); + + /** + * callback, is executed on clicking the "Check spelling" menu entry + */ void SpellcheckSettings(void); }; -- cgit v1.2.3 From 0024197c76bca50d557edc2824646a636d695c4d Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Sun, 15 Apr 2012 01:17:25 +0100 Subject: Get rid of remaining deprecated GDK Key symbols (bzr r11250) --- src/interface.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/interface.h') diff --git a/src/interface.h b/src/interface.h index 0751171e2..1ea13f639 100644 --- a/src/interface.h +++ b/src/interface.h @@ -24,6 +24,10 @@ class SPObject; class SPDesktop; class SPViewWidget; +namespace Gtk { +class SeparatorMenuItem; +} + namespace Inkscape { class Verb; -- cgit v1.2.3