Commit 2074c922 authored by Jody Goldberg's avatar Jody Goldberg Committed by Jody Goldberg

Generalized and moved from item-grid.c


2000-10-11  Jody Goldberg <jgoldberg@home.com>

	* src/gnumeric-util.c (gnumeric_create_popup_menu) : Generalized and
	  moved from item-grid.c

2000-10-10  Jody Goldberg <jgoldberg@home.com>

	* src/gnumeric-util.c (run_popup_menu) : Delete.
	(popup_menu_item_activated) : Delete.
	(gtk_radio_button_select) : Delete.

	* src/item-cursor.c (item_cursor_do_drop) : Use item_grid_popup_menu.

	* src/sheet-object.c (display_object_menu) : Rename from create_popup_menu
	  and display the menu.
	(control_point_handle_event) : simplify with display_object_menu.
	(sheet_object_canvas_event) : simplify with display_object_menu.

	* src/gnumeric-util.c (gnumeric_popup_menu) : Do not pass the button
	  number from the event that is poping up the menu.  That disables the
	  ability to select a menu item via a different button.
parent e44d4539
......@@ -4,18 +4,15 @@ and longer term bugs.
Release Critical
----------------
- Parser : The single character '%' is parsed as an expression '0%'
Post 0.57 Changes
-----------------
- Model View Controller
- Fix Borders
- format.c: we should resolve all the separators at gnumeric_setlocale time,
not every time we need them.
Long term breakage
------------------
- locale : Saving xml should not rely on changing the textdomain to
disable translation of TRUE/FALSE in expressions.
: Support parsing and displaying locale specific function
names.
- when guessing the format of a possible value we should try the format
associated with the cell FIRST rather than later. eg enter '10-1' (without
quotes) in a cell with an assigned format of Text. This should be treated as
text. Instead It parses as a Date (Oct 1) and gets converted.
- We should put the sensitization/desensitization of the toolbars
on a timer/idle hander so that it will not trigger until a second
......@@ -34,6 +31,18 @@ Long term breakage
- Copy sheet, and insert new sheet both append to the end of the sheet list
rather than inserting before the current sheet.
- Model View Controller
- Fix Borders
Long term breakage
------------------
STF - pasting a single line should not invoke the importer
- locale : Saving xml should not rely on changing the textdomain to
disable translation of TRUE/FALSE in expressions.
: Support parsing and displaying locale specific function
names.
- formats with AM/PM need to be internationalized.
- Changing an expression name that is in use does not recalc, or regen depends
......@@ -56,13 +65,8 @@ Long term breakage
- 'General' numbers need to be formated based on the width of the cell.
- when guessing the format of a possible value we should try the format
associated with the cell FIRST rather than later. eg enter '10-1' (without
quotes) in a cell with an assigned format of Text. This should be treated as
text. Instead It parses as a Date (Oct 1) and gets converted.
- The File->Print Preview icon is too big. Use the stock version when the next
release of gnome-libs is made. (tigert is adding to gnome-libs)
release of gnome-libs is made.
- Underline should scale with font size. (Say, max (1, font->descent/4?)
gnome-print has a function we could use for printing which returns the
......@@ -82,11 +86,6 @@ Long term breakage
bounding_box_remove
to handle shaped objects.
- Parser : The single character '%' is parsed as an expression '0%'
- format.c: we should resolve all the separators at gnumeric_setlocale time,
not every time we need them.
Dialogs
-------
- Use color combos in format dialog.
......@@ -105,7 +104,6 @@ Function Breakage
- Index : does not support 0,0 or reference syntax.
- ftest : Needs auditing. All calls to eval_pos_init_cellref are questionable.
- address : This code is a duplicate. Have the function use the standard routines.
- chitest : See why this crashes.
Printing
--------
......
2000-10-11 Jody Goldberg <jgoldberg@home.com>
* src/gnumeric-util.c (gnumeric_create_popup_menu) : Generalized and
moved from item-grid.c
2000-10-11 Jon K Hellan <hellan@acm.org>
* src/history.c (file_history_cmd): Removed yet another vestige of
......@@ -18,9 +23,6 @@
(popup_menu_item_activated) : Delete.
(gtk_radio_button_select) : Delete.
* src/item-bar.c (item_bar_event) : Adjust to changes
in item_grid_popup_menu.
* src/item-cursor.c (item_cursor_do_drop) : Use item_grid_popup_menu.
* src/sheet-object.c (display_object_menu) : Rename from create_popup_menu
......
Gnumeric 0.58
Jody:
* Fix popup context menus.
--------------------------------------------------------------------------
Gnumeric 0.57
......
2000-10-11 Jody Goldberg <jgoldberg@home.com>
* src/gnumeric-util.c (gnumeric_create_popup_menu) : Generalized and
moved from item-grid.c
2000-10-11 Jon K Hellan <hellan@acm.org>
* src/history.c (file_history_cmd): Removed yet another vestige of
......@@ -18,9 +23,6 @@
(popup_menu_item_activated) : Delete.
(gtk_radio_button_select) : Delete.
* src/item-bar.c (item_bar_event) : Adjust to changes
in item_grid_popup_menu.
* src/item-cursor.c (item_cursor_do_drop) : Use item_grid_popup_menu.
* src/sheet-object.c (display_object_menu) : Rename from create_popup_menu
......
2000-10-11 Jody Goldberg <jgoldberg@home.com>
* src/gnumeric-util.c (gnumeric_create_popup_menu) : Generalized and
moved from item-grid.c
2000-10-11 Jon K Hellan <hellan@acm.org>
* src/history.c (file_history_cmd): Removed yet another vestige of
......@@ -18,9 +23,6 @@
(popup_menu_item_activated) : Delete.
(gtk_radio_button_select) : Delete.
* src/item-bar.c (item_bar_event) : Adjust to changes
in item_grid_popup_menu.
* src/item-cursor.c (item_cursor_do_drop) : Use item_grid_popup_menu.
* src/sheet-object.c (display_object_menu) : Rename from create_popup_menu
......
2000-10-11 Jody Goldberg <jgoldberg@home.com>
* src/gnumeric-util.c (gnumeric_create_popup_menu) : Generalized and
moved from item-grid.c
2000-10-11 Jon K Hellan <hellan@acm.org>
* src/history.c (file_history_cmd): Removed yet another vestige of
......@@ -18,9 +23,6 @@
(popup_menu_item_activated) : Delete.
(gtk_radio_button_select) : Delete.
* src/item-bar.c (item_bar_event) : Adjust to changes
in item_grid_popup_menu.
* src/item-cursor.c (item_cursor_do_drop) : Use item_grid_popup_menu.
* src/sheet-object.c (display_object_menu) : Rename from create_popup_menu
......
2000-10-11 Jody Goldberg <jgoldberg@home.com>
* src/gnumeric-util.c (gnumeric_create_popup_menu) : Generalized and
moved from item-grid.c
2000-10-11 Jon K Hellan <hellan@acm.org>
* src/history.c (file_history_cmd): Removed yet another vestige of
......@@ -18,9 +23,6 @@
(popup_menu_item_activated) : Delete.
(gtk_radio_button_select) : Delete.
* src/item-bar.c (item_bar_event) : Adjust to changes
in item_grid_popup_menu.
* src/item-cursor.c (item_cursor_do_drop) : Use item_grid_popup_menu.
* src/sheet-object.c (display_object_menu) : Rename from create_popup_menu
......
......@@ -336,71 +336,6 @@ gtk_radio_group_get_selected (GSList *radio_group)
return 0;
}
void
gtk_radio_button_select (GSList *group, int n)
{
GSList *l;
int len = g_slist_length (group);
g_return_if_fail ((n >= 0) && n < len);
l = g_slist_nth (group, len - n - 1);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (l->data), 1);
}
static void
popup_menu_item_activated (GtkWidget *item, void *value)
{
int *dest = gtk_object_get_user_data (GTK_OBJECT (item));
*dest = GPOINTER_TO_INT (value);
gtk_main_quit ();
}
int
run_popup_menu (GdkEvent *event, int button, char **strings)
{
GtkWidget *menu;
int i;
g_return_val_if_fail (event != NULL, -1);
g_return_val_if_fail (strings != NULL, -1);
/* Create the popup menu */
menu = gtk_menu_new ();
for (i = 0;*strings; strings++, i++){
GtkWidget *item;
item = gtk_menu_item_new_with_label (_(*strings));
gtk_widget_show (item);
gtk_signal_connect (
GTK_OBJECT (item), "activate",
GTK_SIGNAL_FUNC (popup_menu_item_activated), GINT_TO_POINTER (i));
/* Pass a pointer where we want the result stored */
gtk_object_set_user_data (GTK_OBJECT (item), &i);
gtk_menu_append (GTK_MENU (menu), item);
}
i = -1;
/* Configure it: */
gtk_signal_connect (GTK_OBJECT (menu), "deactivate",
GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
/* popup the menu */
gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
event->button.button, event->button.time);
gtk_main ();
gtk_widget_destroy (menu);
return i;
}
static char *
font_change_component_1 (const char *fontname, int idx,
const char *newvalue, char const **end)
......@@ -512,7 +447,12 @@ gnumeric_popup_menu (GtkMenu *menu, GdkEventButton *event)
g_return_if_fail (GTK_IS_MENU (menu));
gnumeric_auto_kill_popup_menu_on_hide (menu);
gtk_menu_popup (menu, NULL, NULL, 0, NULL, event->button, event->time);
/* Do NOT pass the button used to create the menu.
* instead pass 0. Otherwise bringing up a menu with
* the right button will disable clicking on the menu with the left.
*/
gtk_menu_popup (menu, NULL, NULL, 0, NULL, 0, event->time);
}
/*
......@@ -759,3 +699,97 @@ gnumeric_inject_widget_into_bonoboui (Workbook *wb, GtkWidget *widget, char cons
NULL);
}
#endif
static void
popup_item_activate (GtkWidget *item, gpointer *user_data)
{
GnumericPopupMenuElement const *elem =
gtk_object_get_data (GTK_OBJECT (item), "descriptor");
GnumericPopupMenuHandler handler =
gtk_object_get_data (GTK_OBJECT (item), "handler");
g_return_if_fail (elem != NULL);
g_return_if_fail (handler != NULL);
if (handler (elem, user_data))
gtk_widget_destroy (gtk_widget_get_toplevel (item));
}
void
gnumeric_create_popup_menu (GnumericPopupMenuElement const *elements,
GnumericPopupMenuHandler handler,
gpointer user_data,
int display_filter, int sensitive_filter,
GdkEventButton *event)
{
GtkWidget *menu, *item;
int i;
menu = gtk_menu_new ();
for (i = 0; elements [i].name != NULL; i++) {
char const * const name = elements [i].name;
char const * const pix_name = elements [i].pixmap;
item = NULL;
if (elements [i].display_filter != 0 &&
elements [i].display_filter != display_filter)
continue;
if (name != NULL && *name != '\0') {
/* ICK ! There should be a utility routine for this in gnome or gtk */
GtkWidget *label;
guint label_accel;
label = gtk_accel_label_new ("");
label_accel = gtk_label_parse_uline (
GTK_LABEL (label), _(name));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_widget_show (label);
item = gtk_pixmap_menu_item_new ();
gtk_container_add (GTK_CONTAINER (item), label);
if (label_accel != GDK_VoidSymbol) {
gtk_widget_add_accelerator (
item,
"activate_item",
gtk_menu_ensure_uline_accel_group (GTK_MENU (menu)),
label_accel, 0,
GTK_ACCEL_LOCKED);
}
} else
item = gtk_menu_item_new ();
if (elements [i].sensitive_filter != 0 &&
elements [i].sensitive_filter != sensitive_filter)
gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE);
if (pix_name != NULL) {
GtkWidget *pixmap =
gnome_stock_pixmap_widget (GTK_WIDGET (item),
pix_name);
gtk_widget_show (pixmap);
gtk_pixmap_menu_item_set_pixmap (
GTK_PIXMAP_MENU_ITEM (item),
pixmap);
}
if (elements [i].index != 0) {
gtk_signal_connect (
GTK_OBJECT (item), "activate",
GTK_SIGNAL_FUNC (&popup_item_activate),
user_data);
gtk_object_set_data (
GTK_OBJECT (item), "descriptor", (gpointer)(elements + i));
gtk_object_set_data (
GTK_OBJECT (item), "handler", (gpointer)handler);
}
gtk_widget_show (item);
gtk_menu_append (GTK_MENU (menu), item);
}
gnumeric_popup_menu (GTK_MENU (menu), event);
}
......@@ -33,7 +33,6 @@ int run_popup_menu (GdkEvent *event, int button, char **strings);
/* Utility routine as Gtk does not have any decent routine to do this */
int gtk_radio_group_get_selected (GSList *radio_group);
void gtk_radio_button_select (GSList *group, int n);
char *x11_font_get_bold_name (const char *fontname, int units);
char *x11_font_get_italic_name (const char *fontname, int units);
......@@ -69,4 +68,23 @@ void gnumeric_inject_widget_into_bonoboui (Workbook *wb,
GtkWidget *widget,
char const *path);
typedef struct {
char const * name;
char const * pixmap;
int display_filter;
int sensitive_filter;
int index;
} GnumericPopupMenuElement;
typedef gboolean (*GnumericPopupMenuHandler) (GnumericPopupMenuElement const *e,
gpointer user_data);
void gnumeric_create_popup_menu (GnumericPopupMenuElement const *elements,
GnumericPopupMenuHandler handler,
gpointer user_data,
int display_filter,
int sensitive_filter,
GdkEventButton *event);
#endif /* GNUMERIC_GNUMERIC_UTIL_H */
......@@ -336,71 +336,6 @@ gtk_radio_group_get_selected (GSList *radio_group)
return 0;
}
void
gtk_radio_button_select (GSList *group, int n)
{
GSList *l;
int len = g_slist_length (group);
g_return_if_fail ((n >= 0) && n < len);
l = g_slist_nth (group, len - n - 1);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (l->data), 1);
}
static void
popup_menu_item_activated (GtkWidget *item, void *value)
{
int *dest = gtk_object_get_user_data (GTK_OBJECT (item));
*dest = GPOINTER_TO_INT (value);
gtk_main_quit ();
}
int
run_popup_menu (GdkEvent *event, int button, char **strings)
{
GtkWidget *menu;
int i;
g_return_val_if_fail (event != NULL, -1);
g_return_val_if_fail (strings != NULL, -1);
/* Create the popup menu */
menu = gtk_menu_new ();
for (i = 0;*strings; strings++, i++){
GtkWidget *item;
item = gtk_menu_item_new_with_label (_(*strings));
gtk_widget_show (item);
gtk_signal_connect (
GTK_OBJECT (item), "activate",
GTK_SIGNAL_FUNC (popup_menu_item_activated), GINT_TO_POINTER (i));
/* Pass a pointer where we want the result stored */
gtk_object_set_user_data (GTK_OBJECT (item), &i);
gtk_menu_append (GTK_MENU (menu), item);
}
i = -1;
/* Configure it: */
gtk_signal_connect (GTK_OBJECT (menu), "deactivate",
GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
/* popup the menu */
gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
event->button.button, event->button.time);
gtk_main ();
gtk_widget_destroy (menu);
return i;
}
static char *
font_change_component_1 (const char *fontname, int idx,
const char *newvalue, char const **end)
......@@ -512,7 +447,12 @@ gnumeric_popup_menu (GtkMenu *menu, GdkEventButton *event)
g_return_if_fail (GTK_IS_MENU (menu));
gnumeric_auto_kill_popup_menu_on_hide (menu);
gtk_menu_popup (menu, NULL, NULL, 0, NULL, event->button, event->time);
/* Do NOT pass the button used to create the menu.
* instead pass 0. Otherwise bringing up a menu with
* the right button will disable clicking on the menu with the left.
*/
gtk_menu_popup (menu, NULL, NULL, 0, NULL, 0, event->time);
}
/*
......@@ -759,3 +699,97 @@ gnumeric_inject_widget_into_bonoboui (Workbook *wb, GtkWidget *widget, char cons
NULL);
}
#endif
static void
popup_item_activate (GtkWidget *item, gpointer *user_data)
{
GnumericPopupMenuElement const *elem =
gtk_object_get_data (GTK_OBJECT (item), "descriptor");
GnumericPopupMenuHandler handler =
gtk_object_get_data (GTK_OBJECT (item), "handler");
g_return_if_fail (elem != NULL);
g_return_if_fail (handler != NULL);
if (handler (elem, user_data))
gtk_widget_destroy (gtk_widget_get_toplevel (item));
}
void
gnumeric_create_popup_menu (GnumericPopupMenuElement const *elements,
GnumericPopupMenuHandler handler,
gpointer user_data,
int display_filter, int sensitive_filter,
GdkEventButton *event)
{
GtkWidget *menu, *item;
int i;
menu = gtk_menu_new ();
for (i = 0; elements [i].name != NULL; i++) {
char const * const name = elements [i].name;
char const * const pix_name = elements [i].pixmap;
item = NULL;
if (elements [i].display_filter != 0 &&
elements [i].display_filter != display_filter)
continue;
if (name != NULL && *name != '\0') {
/* ICK ! There should be a utility routine for this in gnome or gtk */
GtkWidget *label;
guint label_accel;
label = gtk_accel_label_new ("");
label_accel = gtk_label_parse_uline (
GTK_LABEL (label), _(name));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_widget_show (label);
item = gtk_pixmap_menu_item_new ();
gtk_container_add (GTK_CONTAINER (item), label);
if (label_accel != GDK_VoidSymbol) {
gtk_widget_add_accelerator (
item,
"activate_item",
gtk_menu_ensure_uline_accel_group (GTK_MENU (menu)),
label_accel, 0,
GTK_ACCEL_LOCKED);
}
} else
item = gtk_menu_item_new ();
if (elements [i].sensitive_filter != 0 &&
elements [i].sensitive_filter != sensitive_filter)
gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE);
if (pix_name != NULL) {
GtkWidget *pixmap =
gnome_stock_pixmap_widget (GTK_WIDGET (item),
pix_name);
gtk_widget_show (pixmap);
gtk_pixmap_menu_item_set_pixmap (
GTK_PIXMAP_MENU_ITEM (item),
pixmap);
}
if (elements [i].index != 0) {
gtk_signal_connect (
GTK_OBJECT (item), "activate",
GTK_SIGNAL_FUNC (&popup_item_activate),
user_data);
gtk_object_set_data (
GTK_OBJECT (item), "descriptor", (gpointer)(elements + i));
gtk_object_set_data (
GTK_OBJECT (item), "handler", (gpointer)handler);
}
gtk_widget_show (item);
gtk_menu_append (GTK_MENU (menu), item);
}
gnumeric_popup_menu (GTK_MENU (menu), event);
}
......@@ -33,7 +33,6 @@ int run_popup_menu (GdkEvent *event, int button, char **strings);
/* Utility routine as Gtk does not have any decent routine to do this */
int gtk_radio_group_get_selected (GSList *radio_group);
void gtk_radio_button_select (GSList *group, int n);
char *x11_font_get_bold_name (const char *fontname, int units);
char *x11_font_get_italic_name (const char *fontname, int units);
......@@ -69,4 +68,23 @@ void gnumeric_inject_widget_into_bonoboui (Workbook *wb,
GtkWidget *widget,
char const *path);
typedef struct {
char const * name;
char const * pixmap;
int display_filter;
int sensitive_filter;
int index;
} GnumericPopupMenuElement;
typedef gboolean (*GnumericPopupMenuHandler) (GnumericPopupMenuElement const *e,
gpointer user_data);
void gnumeric_create_popup_menu (GnumericPopupMenuElement const *elements,
GnumericPopupMenuHandler handler,
gpointer user_data,
int display_filter,
int sensitive_filter,
GdkEventButton *event);
#endif /* GNUMERIC_GNUMERIC_UTIL_H */
......@@ -672,10 +672,8 @@ item_bar_event (GnomeCanvasItem *item, GdkEvent *e)
item_bar_signals [SELECTION_CHANGED],
element, e->button.state | GDK_BUTTON1_MASK);
if (is_vertical)
item_grid_popup_menu (sheet, e, 0, element, FALSE, TRUE);
else
item_grid_popup_menu (sheet, e, element, 0, TRUE, FALSE);
item_grid_popup_menu (sheet, &e->button,
!is_vertical, is_vertical);
} else if (cri) {
/*
* Record the important bits.
......
......@@ -684,9 +684,9 @@ item_cursor_target_region_ok (ItemCursor *item_cursor)
}
typedef enum {
ACTION_NONE = -1,
ACTION_NONE = 0,
ACTION_MOVE_CELLS = 1,
ACTION_COPY_CELLS,
ACTION_MOVE_CELLS,
ACTION_COPY_FORMATS,
ACTION_COPY_VALUES,
ACTION_SHIFT_DOWN_AND_COPY,
......@@ -701,18 +701,15 @@ item_cursor_do_action (ItemCursor *item_cursor, ActionType action, guint32 time)
Sheet *sheet = item_cursor->sheet_view->sheet;
Workbook *wb = sheet->workbook;
PasteTarget pt;
Range const *target = selection_first_range (sheet, FALSE);
if (target != NULL && range_equal (target, &item_cursor->pos))
if (action == ACTION_NONE)
return;
switch (action){
case ACTION_NONE:
if (!item_cursor_target_region_ok (item_cursor))
return;
switch (action) {
case ACTION_COPY_CELLS:
if (!item_cursor_target_region_ok (item_cursor))
return;
if (!sheet_selection_copy (workbook_command_context_gui (wb), sheet))
return;
cmd_paste (workbook_command_context_gui (wb),
......@@ -721,8 +718,6 @@ item_cursor_do_action (ItemCursor *item_cursor, ActionType action, guint32 time)
return;
case ACTION_MOVE_CELLS:
if (!item_cursor_target_region_ok (item_cursor))
return;
if (!sheet_selection_cut (workbook_command_context_gui (wb), sheet))
return;
cmd_paste (workbook_command_context_gui (wb),
......@@ -731,8 +726,6 @@ item_cursor_do_action (ItemCursor *item_cursor, ActionType action, guint32 time)
return;
case ACTION_COPY_FORMATS:
if (!item_cursor_target_region_ok (item_cursor))
return;
if (!sheet_selection_copy (workbook_command_context_gui (wb), sheet))
return;
cmd_paste (workbook_command_context_gui (wb),
......@@ -741,8 +734,6 @@ item_cursor_do_action (ItemCursor *item_cursor, ActionType action, guint32 time)
return;
case ACTION_COPY_VALUES:
if (!item_cursor_target_region_ok (item_cursor))
return;
if (!sheet_selection_copy (workbook_command_context_gui (wb), sheet))
return;
cmd_paste (workbook_command_context_gui (wb),
......@@ -755,38 +746,81 @@ item_cursor_do_action (ItemCursor *item_cursor, ActionType action, guint32 time)
case ACTION_SHIFT_DOWN_AND_MOVE:
case ACTION_SHIFT_RIGHT_AND_MOVE:
g_warning ("Operation not yet implemented\n");
break;
default :
g_warning ("Invalid Operation %d\n", action);
}
}
static char *drop_context_actions [] = {
N_("Copy"),
N_("Move"),
N_("Copy formats"),
N_("Copy values"),
N_("Shift cells down and copy"),
N_("Shift cells right and copy"),
N_("Shift cells down and move"),
N_("Shift cells right and move"),
NULL,
};
static gboolean
context_menu_hander (GnumericPopupMenuElement const *element,
gpointer ic)
{
g_return_val_if_fail (element != NULL, TRUE);
item_cursor_do_action (ic, element->index, GDK_CURRENT_TIME);
return TRUE;
}
static void
item_cursor_popup_menu (ItemCursor *ic, GdkEventButton *event)
{
static GnumericPopupMenuElement const popup_elements[] = {
{ N_("_Move"), NULL,
0, 0, ACTION_MOVE_CELLS },
{ N_("_Copy"), GNOME_STOCK_PIXMAP_COPY,
0, 0, ACTION_COPY_CELLS },
{ N_("Copy _Formats"), NULL,
0, 0, ACTION_COPY_FORMATS },
{ N_("Copy _Values"), NULL,
0, 0, ACTION_COPY_VALUES },
{ "", NULL, 0, 0, 0 },
{ N_("Shift _Down and Copy"), NULL,
0, 0, ACTION_SHIFT_DOWN_AND_COPY },
{ N_("Shift _Right and Copy"), NULL,
0, 0, ACTION_SHIFT_RIGHT_AND_COPY },
{ N_("Shift Dow_n and Move"), NULL,
0, 0, ACTION_SHIFT_DOWN_AND_MOVE },
{ N_("Shift Righ_t and Move"), NULL,
0, 0, ACTION_SHIFT_RIGHT_AND_MOVE },
{ "", NULL, 0, 0, 0 },
{ N_("C_ancel"), NULL,
0, 0, ACTION_NONE },
{ NULL, NULL, 0, 0, 0 }
};
gnumeric_create_popup_menu (popup_elements,
&context_menu_hander, ic,
0, 0, event);
}
/*
* Invoked when the item has been dropped
*/