[gnumeric] remove duplicate code
- From: Andreas J. Guelzow <guelzow src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] remove duplicate code
- Date: Thu, 29 Sep 2011 05:33:54 +0000 (UTC)
commit bbfcfc5da53cbe6eb1834c88d53aa8b47f67c29c
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date: Wed Sep 28 23:32:34 2011 -0600
remove duplicate code
2011-09-28 Andreas J. Guelzow <aguelzow pyrshep ca>
* src/gnm-pane.c (cb_so_menu_activate): delete
(build_so_menu): delete
(gnm_pane_display_object_menu): use sheet_object_build_menu instead of
build_so_menu
* src/print.c (gnm_print_so): new stub
* src/print.h (gnm_print_so): new
* src/sheet-object-impl.h (SheetObjectAction): add field
* src/sheet-object.c (build_so_menu): rename to sheet_object_build_menu
(cb_so_print): new
(sheet_object_can_prop): new
(sheet_object_populate_menu_real): use enabler/disabler
(sheet_object_populate_menu): do not recurse infinitely
(cb_so_menu_activate): combine with the function of same name from src/gnm-pane.c
(sheet_object_view_button_pressed): use sheet_object_build_menu instead of
build_so_menu
* src/sheet-object.h (sheet_object_build_menu): new
ChangeLog | 19 ++++++
src/gnm-pane.c | 51 +----------------
src/print.c | 6 ++
src/print.h | 2 +
src/sheet-object-impl.h | 2 +
src/sheet-object.c | 141 ++++++++++++++++++++++++++--------------------
src/sheet-object.h | 4 +-
7 files changed, 115 insertions(+), 110 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index d71cb03..d38b84f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,24 @@
2011-09-28 Andreas J. Guelzow <aguelzow pyrshep ca>
+ * src/gnm-pane.c (cb_so_menu_activate): delete
+ (build_so_menu): delete
+ (gnm_pane_display_object_menu): use sheet_object_build_menu instead of
+ build_so_menu
+ * src/print.c (gnm_print_so): new stub
+ * src/print.h (gnm_print_so): new
+ * src/sheet-object-impl.h (SheetObjectAction): add field
+ * src/sheet-object.c (build_so_menu): rename to sheet_object_build_menu
+ (cb_so_print): new
+ (sheet_object_can_prop): new
+ (sheet_object_populate_menu_real): use enabler/disabler
+ (sheet_object_populate_menu): do not recurse infinitely
+ (cb_so_menu_activate): combine with the function of same name from src/gnm-pane.c
+ (sheet_object_view_button_pressed): use sheet_object_build_menu instead of
+ build_so_menu
+ * src/sheet-object.h (sheet_object_build_menu): new
+
+2011-09-28 Andreas J. Guelzow <aguelzow pyrshep ca>
+
* src/stf-parse.c (stf_parse_options_csv_set_stringindicator): allow \0
as stringindicator
(stf_parse_options_valid): ditto
diff --git a/src/gnm-pane.c b/src/gnm-pane.c
index ea06c7b..7161fd1 100644
--- a/src/gnm-pane.c
+++ b/src/gnm-pane.c
@@ -2354,51 +2354,6 @@ cb_slide_handler (GnmPane *pane, GnmPaneSlideInfo const *info)
}
static void
-cb_so_menu_activate (GObject *menu, GocItem *view)
-{
- SheetObjectAction const *a = g_object_get_data (menu, "action");
- if (a->func)
- (a->func) (sheet_object_view_get_so (SHEET_OBJECT_VIEW (view)),
- SHEET_CONTROL (GNM_SIMPLE_CANVAS (view->canvas)->scg));
-}
-
-static GtkWidget *
-build_so_menu (GnmPane *pane, SheetObjectView *view,
- GPtrArray const *actions, unsigned *i)
-{
- SheetObjectAction const *a;
- GtkWidget *item, *menu = gtk_menu_new ();
-
- while (*i < actions->len) {
- a = g_ptr_array_index (actions, *i);
- (*i)++;
- if (a->submenu < 0)
- break;
- if (a->icon != NULL) {
- if (a->label != NULL) {
- item = gtk_image_menu_item_new_with_mnemonic (_(a->label));
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item),
- gtk_image_new_from_stock (a->icon, GTK_ICON_SIZE_MENU));
- } else
- item = gtk_image_menu_item_new_from_stock (a->icon, NULL);
- } else if (a->label != NULL)
- item = gtk_menu_item_new_with_mnemonic (_(a->label));
- else
- item = gtk_separator_menu_item_new ();
- if (a->submenu > 0)
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (item),
- build_so_menu (pane, view, actions, i));
- else if (a->label != NULL || a->icon != NULL) { /* not a separator or menu */
- g_object_set_data (G_OBJECT (item), "action", (gpointer)a);
- g_signal_connect_object (G_OBJECT (item), "activate",
- G_CALLBACK (cb_so_menu_activate), view, 0);
- }
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- }
- return menu;
-}
-
-static void
cb_ptr_array_free (GPtrArray *actions)
{
g_ptr_array_free (actions, TRUE);
@@ -2424,9 +2379,9 @@ gnm_pane_display_object_menu (GnmPane *pane, SheetObject *so, GdkEvent *event)
return;
}
- menu = build_so_menu (pane,
- sheet_object_get_view (so, (SheetObjectViewContainer *) pane),
- actions, &i);
+ menu = sheet_object_build_menu
+ (sheet_object_get_view (so, (SheetObjectViewContainer *) pane),
+ actions, &i);
g_object_set_data_full (G_OBJECT (menu), "actions", actions,
(GDestroyNotify)cb_ptr_array_free);
gtk_widget_show_all (menu);
diff --git a/src/print.c b/src/print.c
index d3047dd..cb6342c 100644
--- a/src/print.c
+++ b/src/print.c
@@ -1816,3 +1816,9 @@ gnm_print_sheet (WorkbookControl *wbc, Sheet *sheet,
g_object_unref (print);
}
+
+void
+gnm_print_so (WorkbookControl *wbc, SheetObject *so)
+{
+ g_print ("gnm_print_so\n");
+}
diff --git a/src/print.h b/src/print.h
index a3ba61e..3ab2cd2 100644
--- a/src/print.h
+++ b/src/print.h
@@ -28,6 +28,8 @@ void gnm_print_sheet (WorkbookControl *wbc, Sheet *sheet,
gboolean preview, PrintRange default_range,
GsfOutput *export_dst);
+void gnm_print_so (WorkbookControl *wbc, SheetObject *so);
+
void gnm_print_sheet_objects (cairo_t *cr,
Sheet const *sheet,
GnmRange *range,
diff --git a/src/sheet-object-impl.h b/src/sheet-object-impl.h
index 12b2704..924d1c7 100644
--- a/src/sheet-object-impl.h
+++ b/src/sheet-object-impl.h
@@ -34,12 +34,14 @@ struct _SheetObject {
};
typedef void (*SheetObjectActionFunc) (SheetObject *so, SheetControl *sc);
+typedef gboolean (*SheetObjectEnableActionFunc) (SheetObject const *so);
typedef struct {
char const *icon; /* optionally NULL */
char const *label; /* NULL for separators */
char const *msg_domain; /* for plugins to specify translations */
int submenu; /* > 1 starts a menu, < 1 end one */
SheetObjectActionFunc func;
+ SheetObjectEnableActionFunc enable_func;
} SheetObjectAction;
typedef struct {
diff --git a/src/sheet-object.c b/src/sheet-object.c
index 4f02f1c..6ab9118 100644
--- a/src/sheet-object.c
+++ b/src/sheet-object.c
@@ -36,6 +36,7 @@
#include "sheet-object-image.h"
#include "wbc-gtk-impl.h"
#include "graph.h"
+#include "print.h"
#include <goffice/goffice.h>
#include "application.h"
#include "gutils.h"
@@ -129,6 +130,11 @@ cb_so_delete (SheetObject *so, SheetControl *sc)
cmd_objects_delete (sc_wbc (sc),
go_slist_create (so, NULL), NULL);
}
+static void
+cb_so_print (SheetObject *so, SheetControl *sc)
+{
+ gnm_print_so (sc_wbc (sc), so);
+}
void
sheet_object_get_editor (SheetObject *so, SheetControl *sc)
{
@@ -162,57 +168,85 @@ cb_so_copy (SheetObject *so, SheetControl *sc)
go_slist_create (so, NULL));
}
+gboolean
+sheet_object_can_print (SheetObject const *so)
+{
+ g_return_val_if_fail (IS_SHEET_OBJECT (so), FALSE);
+ return (so->flags & SHEET_OBJECT_IS_VISIBLE) &&
+ (so->flags & SHEET_OBJECT_PRINT) &&
+ SO_CLASS (so)->draw_cairo != NULL;
+}
+
+gboolean
+sheet_object_can_resize (SheetObject const *so)
+{
+ g_return_val_if_fail (IS_SHEET_OBJECT (so), FALSE);
+ return so->flags & SHEET_OBJECT_CAN_RESIZE;
+}
+
+gboolean
+sheet_object_can_edit (SheetObject const *so)
+{
+ g_return_val_if_fail (IS_SHEET_OBJECT (so), FALSE);
+ return so->flags & SHEET_OBJECT_CAN_EDIT;
+}
+
+static gboolean
+sheet_object_can_prop (SheetObject const *so)
+{
+ g_return_val_if_fail (IS_SHEET_OBJECT (so), FALSE);
+ return (sheet_object_can_edit (so) && (SO_CLASS(so)->user_config != NULL));
+}
+
static void
sheet_object_populate_menu_real (SheetObject *so, GPtrArray *actions)
{
unsigned i;
if (so->sheet->sheet_type == GNM_SHEET_OBJECT) {
static SheetObjectAction const so_actions [] = {
- { "gtk-properties", NULL, NULL, 0, sheet_object_get_editor },
- { NULL, NULL, NULL, 0, NULL },
- { "gtk-copy", NULL, NULL, 0, cb_so_copy },
+ { "gtk-properties", NULL, NULL, 0, sheet_object_get_editor, sheet_object_can_prop},
+ { NULL, NULL, NULL, 0, NULL, NULL },
+ { "gtk-copy", NULL, NULL, 0, cb_so_copy, NULL },
};
for (i = 0 ; i < G_N_ELEMENTS (so_actions); i++)
- if (i != 0 || SO_CLASS(so)->user_config != NULL)
g_ptr_array_add (actions, (gpointer) (so_actions + i));
} else {
static SheetObjectAction const so_actions [] = {
- { "gtk-properties", NULL, NULL, 0, sheet_object_get_editor },
- { NULL, NULL, NULL, 0, NULL },
- { GTK_STOCK_LEAVE_FULLSCREEN, N_("Size _& Position"), NULL, 0, cb_so_size_position },
- { "gtk-fullscreen", N_("_Snap to Grid"), NULL, 0, cb_so_snap_to_grid },
- { NULL, N_("_Order"), NULL, 1, NULL },
- { NULL, N_("Pul_l to Front"), NULL, 0, cb_so_pull_to_front },
- { NULL, N_("Pull _Forward"), NULL, 0, cb_so_pull_forward },
- { NULL, N_("Push _Backward"), NULL, 0, cb_so_push_backward },
- { NULL, N_("Pus_h to Back"), NULL, 0, cb_so_push_to_back },
- { NULL, NULL, NULL, -1, NULL },
- { NULL, NULL, NULL, 0, NULL },
- { "gtk-cut", NULL, NULL, 0, cb_so_cut },
- { "gtk-copy", NULL, NULL, 0, cb_so_copy },
- { "gtk-delete", NULL, NULL, 0, cb_so_delete },
+ { GTK_STOCK_PROPERTIES, NULL, NULL, 0, sheet_object_get_editor, sheet_object_can_prop},
+ { NULL, NULL, NULL, 0, NULL, NULL },
+ { GTK_STOCK_LEAVE_FULLSCREEN, N_("Size _& Position"), NULL, 0, cb_so_size_position, NULL },
+ { GTK_STOCK_FULLSCREEN, N_("_Snap to Grid"), NULL, 0, cb_so_snap_to_grid, NULL },
+ { NULL, N_("_Order"), NULL, 1, NULL, NULL },
+ { NULL, N_("Pul_l to Front"), NULL, 0, cb_so_pull_to_front, NULL },
+ { NULL, N_("Pull _Forward"), NULL, 0, cb_so_pull_forward, NULL },
+ { NULL, N_("Push _Backward"), NULL, 0, cb_so_push_backward, NULL },
+ { NULL, N_("Pus_h to Back"), NULL, 0, cb_so_push_to_back, NULL },
+ { NULL, NULL, NULL, -1, NULL, NULL },
+ { NULL, NULL, NULL, 0, NULL, NULL },
+ { GTK_STOCK_CUT, NULL, NULL, 0, cb_so_cut, NULL },
+ { GTK_STOCK_COPY, NULL, NULL, 0, cb_so_copy, NULL },
+ { GTK_STOCK_DELETE, NULL, NULL, 0, cb_so_delete, NULL },
+ /* { NULL, NULL, NULL, 0, NULL, NULL }, */
+ /* { GTK_STOCK_PRINT, NULL, NULL, 0, cb_so_print, sheet_object_can_print}, */
};
- for (i = sheet_object_can_edit (so)? 0: 1 ; i < G_N_ELEMENTS (so_actions); i++)
- if (i != 0 || SO_CLASS(so)->user_config != NULL)
+ for (i = 0; i < G_N_ELEMENTS (so_actions); i++)
g_ptr_array_add (actions, (gpointer) (so_actions + i));
}
}
/**
* sheet_object_populate_menu :
- * @so : #SheetObject optionally NULL
+ * @so : #SheetObject
* @actions : #GPtrArray
*
- * Get a list of the actions that can be performed on @so, if @so is NULL use
- * the default set.
+ * Get a list of the actions that can be performed on @so
**/
void
sheet_object_populate_menu (SheetObject *so, GPtrArray *actions)
{
- if (NULL != so)
- SHEET_OBJECT_CLASS (G_OBJECT_GET_CLASS(so))->populate_menu (so, actions);
- else
- sheet_object_populate_menu (NULL, actions);
+ g_return_if_fail (NULL != so);
+
+ SHEET_OBJECT_CLASS (G_OBJECT_GET_CLASS(so))->populate_menu (so, actions);
}
/**
@@ -634,29 +668,6 @@ sheet_object_new_view (SheetObject *so, SheetObjectViewContainer *container)
return view;
}
-gboolean
-sheet_object_can_print (SheetObject const *so)
-{
- g_return_val_if_fail (IS_SHEET_OBJECT (so), FALSE);
- return (so->flags & SHEET_OBJECT_IS_VISIBLE) &&
- (so->flags & SHEET_OBJECT_PRINT) &&
- SO_CLASS (so)->draw_cairo != NULL;
-}
-
-gboolean
-sheet_object_can_resize (SheetObject const *so)
-{
- g_return_val_if_fail (IS_SHEET_OBJECT (so), FALSE);
- return so->flags & SHEET_OBJECT_CAN_RESIZE;
-}
-
-gboolean
-sheet_object_can_edit (SheetObject const *so)
-{
- g_return_val_if_fail (IS_SHEET_OBJECT (so), FALSE);
- return so->flags & SHEET_OBJECT_CAN_EDIT;
-}
-
/**
* sheet_object_draw_cairo :
*
@@ -1261,10 +1272,16 @@ static void
cb_so_menu_activate (GObject *menu, GocItem *view)
{
SheetObjectAction const *a = g_object_get_data (menu, "action");
- SheetObject *so = sheet_object_view_get_so (SHEET_OBJECT_VIEW (view));
- if (a->func)
- (a->func) (so,
- SHEET_CONTROL (g_object_get_data (G_OBJECT (view->canvas), "sheet-control")));
+
+ if (a->func) {
+ SheetObject *so = sheet_object_view_get_so (SHEET_OBJECT_VIEW (view));
+ gpointer data = g_object_get_data (G_OBJECT (view->canvas), "sheet-control");
+
+ if (data == NULL)
+ data = GNM_SIMPLE_CANVAS (view->canvas)->scg;
+
+ (a->func) (so, SHEET_CONTROL (data));
+ }
}
static void
@@ -1273,9 +1290,9 @@ cb_ptr_array_free (GPtrArray *actions)
g_ptr_array_free (actions, TRUE);
}
-static GtkWidget *
-build_so_menu (SheetObjectViewContainer *cont, SheetObjectView *view,
- GPtrArray const *actions, unsigned *i)
+GtkWidget *
+sheet_object_build_menu (SheetObjectView *view,
+ GPtrArray const *actions, unsigned *i)
{
SheetObjectAction const *a;
GtkWidget *item, *menu = gtk_menu_new ();
@@ -1298,11 +1315,13 @@ build_so_menu (SheetObjectViewContainer *cont, SheetObjectView *view,
item = gtk_separator_menu_item_new ();
if (a->submenu > 0)
gtk_menu_item_set_submenu (GTK_MENU_ITEM (item),
- build_so_menu (cont, view, actions, i));
+ sheet_object_build_menu (view, actions, i));
else if (a->label != NULL || a->icon != NULL) { /* not a separator or menu */
g_object_set_data (G_OBJECT (item), "action", (gpointer)a);
g_signal_connect_object (G_OBJECT (item), "activate",
G_CALLBACK (cb_so_menu_activate), view, 0);
+ gtk_widget_set_sensitive (item, a->enable_func == NULL
+ || a->enable_func (sheet_object_view_get_so (view)));
}
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
}
@@ -1362,9 +1381,9 @@ sheet_object_view_button_pressed (GocItem *item, int button, double x, double y)
return FALSE;
}
- menu = build_so_menu ((SheetObjectViewContainer *) item->canvas,
- sheet_object_get_view (so, (SheetObjectViewContainer *) item->canvas),
- actions, &i);
+ menu = sheet_object_build_menu
+ (sheet_object_get_view (so, (SheetObjectViewContainer *) item->canvas),
+ actions, &i);
g_object_set_data_full (G_OBJECT (menu), "actions", actions,
(GDestroyNotify) cb_ptr_array_free);
gtk_widget_show_all (menu);
diff --git a/src/sheet-object.h b/src/sheet-object.h
index cc11e6d..be33615 100644
--- a/src/sheet-object.h
+++ b/src/sheet-object.h
@@ -75,7 +75,9 @@ gboolean sheet_object_can_edit (SheetObject const *so);
void sheet_object_get_editor (SheetObject *so, SheetControl *sc);
void sheet_object_populate_menu (SheetObject *so, GPtrArray *actions);
-
+GtkWidget * sheet_object_build_menu (SheetObjectView *view,
+ GPtrArray const *actions,
+ unsigned *i);
void sheet_object_update_bounds (SheetObject *so, GnmCellPos const *p);
void sheet_object_default_size (SheetObject *so, double *w, double *h);
gint sheet_object_adjust_stacking(SheetObject *so, gint positions);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]