gnumeric r16635 - in trunk: . src
- From: jody svn gnome org
- To: svn-commits-list gnome org
- Subject: gnumeric r16635 - in trunk: . src
- Date: Thu, 19 Jun 2008 13:02:01 +0000 (UTC)
Author: jody
Date: Thu Jun 19 13:02:01 2008
New Revision: 16635
URL: http://svn.gnome.org/viewvc/gnumeric?rev=16635&view=rev
Log:
* Make object insertion more flexible. [#97216]
Modified:
trunk/ChangeLog
trunk/NEWS
trunk/src/gnm-pane.c
trunk/src/item-bar.c
trunk/src/item-grid.c
trunk/src/sheet-control-gui-priv.h
trunk/src/sheet-control-gui.c
trunk/src/sheet-control-gui.h
trunk/src/wbc-gtk-actions.c
trunk/src/wbc-gtk-edit.c
trunk/src/wbc-gtk-impl.h
trunk/src/wbc-gtk.c
trunk/src/wbc-gtk.h
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Thu Jun 19 13:02:01 2008
@@ -15,6 +15,7 @@
* Fix range highlighting while editing.
* Fix highlighting of merged cells. [#127415]
* Fix PageSetup on windows.
+ * Make object insertion more flexible. [#97216]
Morten:
* Fix Excel export problem for strings that need quoting. [#530704]
Modified: trunk/src/gnm-pane.c
==============================================================================
--- trunk/src/gnm-pane.c (original)
+++ trunk/src/gnm-pane.c Thu Jun 19 13:02:01 2008
@@ -565,7 +565,8 @@
}
/* Object manipulation */
- if ((scg->selected_objects != NULL || scg->new_object != NULL)) {
+ if (scg->selected_objects != NULL ||
+ scg->wbcg->new_object != NULL) {
if (wbc_gtk_get_guru (scg->wbcg) == NULL &&
gnm_pane_object_key_press (pane, event))
return TRUE;
Modified: trunk/src/item-bar.c
==============================================================================
--- trunk/src/item-bar.c (original)
+++ trunk/src/item-bar.c Thu Jun 19 13:02:01 2008
@@ -19,7 +19,7 @@
#include "sheet-control-gui-priv.h"
#include "application.h"
#include "selection.h"
-#include "wbc-gtk.h"
+#include "wbc-gtk-impl.h"
#include "gui-util.h"
#include "parse-util.h"
#include "commands.h"
@@ -338,7 +338,7 @@
int prev_level;
GdkRectangle rect;
GdkPoint points[3];
- gboolean const has_object = scg->new_object != NULL || scg->selected_objects != NULL;
+ gboolean const has_object = scg->wbcg->new_object != NULL || scg->selected_objects != NULL;
gboolean const rtl = sheet->text_is_rtl != FALSE;
int shadow;
int first_line_offset = 1;
Modified: trunk/src/item-grid.c
==============================================================================
--- trunk/src/item-grid.c (original)
+++ trunk/src/item-grid.c Thu Jun 19 13:02:01 2008
@@ -395,7 +395,7 @@
gboolean const draw_selection =
ig->scg->selected_objects == NULL &&
- ig->scg->new_object == NULL;
+ wbcg->new_object == NULL;
if (dir < 0) {
start_col = gnm_pane_find_col (pane, expose->area.x+width+2, &start_x);
@@ -769,12 +769,12 @@
ig_obj_create_begin (ItemGrid *ig, GdkEventButton *event)
{
GnmPane *pane = GNM_PANE (FOO_CANVAS_ITEM (ig)->canvas);
- SheetObject *so = ig->scg->new_object;
+ SheetObject *so = ig->scg->wbcg->new_object;
SheetObjectAnchor anchor;
double coords[4];
g_return_val_if_fail (ig->scg->selected_objects == NULL, TRUE);
- g_return_val_if_fail (ig->scg->new_object != NULL, TRUE);
+ g_return_val_if_fail (so != NULL, TRUE);
coords[0] = coords[2] = event->x;
coords[1] = coords[3] = event->y;
@@ -819,7 +819,7 @@
return TRUE;
/* A new object is ready to be realized and inserted */
- if (scg->new_object != NULL)
+ if (wbcg->new_object != NULL)
return ig_obj_create_begin (ig, event);
/* If we are not configuring an object then clicking on the sheet
Modified: trunk/src/sheet-control-gui-priv.h
==============================================================================
--- trunk/src/sheet-control-gui-priv.h (original)
+++ trunk/src/sheet-control-gui-priv.h Thu Jun 19 13:02:01 2008
@@ -39,7 +39,6 @@
guint pane_drag_handler;
/* SheetObject support */
- SheetObject *new_object; /* A newly created object that has yet to be realized */
GHashTable *selected_objects;
/* Keep track of a rangeselector state */
Modified: trunk/src/sheet-control-gui.c
==============================================================================
--- trunk/src/sheet-control-gui.c (original)
+++ trunk/src/sheet-control-gui.c Thu Jun 19 13:02:01 2008
@@ -690,7 +690,6 @@
scg->delayedMovement.handler = NULL;
scg->grab_stack = 0;
- scg->new_object = NULL;
scg->selected_objects = NULL;
}
@@ -725,7 +724,6 @@
{
FooCanvas *colc;
int col_offset;
- Sheet *sheet = ((SheetControl*) pane->simple.scg)->sheet;
g_return_val_if_fail (0 <= new_first_col && new_first_col < gnm_sheet_get_max_cols (sheet), 0);
@@ -792,7 +790,6 @@
{
FooCanvas *rowc;
int row_offset;
- Sheet *sheet = ((SheetControl*) pane->simple.scg)->sheet;
g_return_val_if_fail (0 <= new_first_row && new_first_row < gnm_sheet_get_max_rows (sheet), 0);
@@ -1913,7 +1910,7 @@
return TRUE;
}
-static void
+void
scg_cursor_visible (SheetControlGUI *scg, gboolean is_visible)
{
SheetControl *sc = (SheetControl *) scg;
@@ -1930,25 +1927,6 @@
/***************************************************************************/
-static gboolean
-scg_mode_clear (SheetControlGUI *scg)
-{
- WorkbookControl *wbc;
-
- g_return_val_if_fail (IS_SHEET_CONTROL_GUI (scg), FALSE);
-
- if (scg->new_object != NULL) {
- g_object_unref (G_OBJECT (scg->new_object));
- scg->new_object = NULL;
- }
- scg_object_unselect (scg, NULL);
- wbc = scg_wbc (scg);
- if (wbc != NULL) /* during destruction */
- wb_control_update_action_sensitivity (wbc);
-
- return TRUE;
-}
-
/**
* scg_mode_edit:
* @sc: The sheet control
@@ -1962,13 +1940,15 @@
{
g_return_if_fail (IS_SHEET_CONTROL_GUI (scg));
- scg_mode_clear (scg);
+ if (scg->wbcg != NULL) /* Can be NULL during destruction */
+ wbcg_insert_object_clear (scg->wbcg);
/* During destruction we have already been disconnected
* so don't bother changing the cursor */
if (scg->table != NULL &&
scg_sheet (scg) != NULL &&
scg_view (scg) != NULL) {
+ scg_object_unselect (scg, NULL);
scg_set_display_cursor (scg);
scg_cursor_visible (scg, TRUE);
}
@@ -1984,28 +1964,6 @@
scg_mode_edit ((SheetControlGUI *)sc);
}
-/**
- * scg_mode_create_object :
- * @so : The object the needs to be placed
- *
- * Takes a newly created SheetObject that has not yet been realized and
- * prepares to place it on the sheet.
- * NOTE : Absorbs a reference to the object.
- **/
-void
-scg_mode_create_object (SheetControlGUI *scg, SheetObject *so)
-{
- g_return_if_fail (IS_SHEET_OBJECT (so));
-
- if (scg_mode_clear (scg)) {
- scg->new_object = so;
- scg_cursor_visible (scg, FALSE);
- scg_take_focus (scg);
- scg_set_display_cursor (scg);
- wb_control_update_action_sensitivity (scg_wbc (scg));
- }
-}
-
static int
calc_obj_place (GnmPane *pane, int canvas_coord, gboolean is_col,
float *offset)
@@ -2052,7 +2010,8 @@
!wbcg_edit_finish (scg->wbcg, WBC_EDIT_ACCEPT, NULL))
return;
g_object_ref (so);
- scg_mode_clear (scg);
+
+ wbcg_insert_object_clear (scg->wbcg);
scg_cursor_visible (scg, FALSE);
scg_set_display_cursor (scg);
scg_unant (SHEET_CONTROL (scg));
@@ -2357,7 +2316,7 @@
int drag_type, double dx, double dy, gboolean symmetric, gboolean snap_to_grid)
{
/* no nudging if we are creating an object */
- if (!scg->new_object) {
+ if (!scg->wbcg->new_object) {
scg_objects_drag (scg, pane, NULL, &dx, &dy, drag_type, symmetric, snap_to_grid, FALSE);
scg_objects_drag_commit (scg, drag_type, FALSE);
}
@@ -2798,7 +2757,7 @@
g_return_if_fail (IS_SHEET_CONTROL_GUI (scg));
- if (scg->new_object != NULL)
+ if (scg->wbcg->new_object != NULL)
cursor = GDK_CROSSHAIR;
SCG_FOREACH_PANE (scg, pane, {
Modified: trunk/src/sheet-control-gui.h
==============================================================================
--- trunk/src/sheet-control-gui.h (original)
+++ trunk/src/sheet-control-gui.h Thu Jun 19 13:02:01 2008
@@ -19,8 +19,6 @@
void scg_take_focus (SheetControlGUI *scg);
-void scg_mode_create_object (SheetControlGUI *scg, SheetObject *so);
-
void scg_context_menu (SheetControlGUI *scg, GdkEventButton *event,
gboolean is_col, gboolean is_row);
@@ -75,6 +73,7 @@
gboolean force_scroll, gboolean couple_panes);
void scg_set_display_cursor (SheetControlGUI *scg);
+void scg_cursor_visible (SheetControlGUI *scg, gboolean is_visible);
void scg_cursor_move (SheetControlGUI *scg, int dir,
gboolean jump_to_bound, gboolean horiz);
void scg_cursor_extend (SheetControlGUI *scg, int n,
Modified: trunk/src/wbc-gtk-actions.c
==============================================================================
--- trunk/src/wbc-gtk-actions.c (original)
+++ trunk/src/wbc-gtk-actions.c Thu Jun 19 13:02:01 2008
@@ -963,7 +963,7 @@
guint8 const *data = gsf_input_read (input, len, NULL);
SheetObjectImage *soi = g_object_new (SHEET_OBJECT_IMAGE_TYPE, NULL);
sheet_object_image_set_image (soi, "", (guint8 *)data, len, TRUE);
- scg_mode_create_object (wbcg_cur_scg (wbcg), SHEET_OBJECT (soi));
+ wbcg_insert_object (wbcg, SHEET_OBJECT (soi));
g_object_unref (input);
} else
go_cmd_context_error (GO_CMD_CONTEXT (wbcg), err);
@@ -1038,8 +1038,7 @@
static void
cb_add_graph (GogGraph *graph, gpointer wbcg)
{
- SheetControlGUI *scg = wbcg_cur_scg (WBC_GTK (wbcg));
- scg_mode_create_object (scg, sheet_object_graph_new (graph));
+ wbcg_insert_object (WBC_GTK (wbcg), sheet_object_graph_new (graph));
}
static GNM_ACTION_DEF (cb_launch_chart_guru)
@@ -1055,17 +1054,11 @@
char const *first_property_name,
...)
{
- SheetControlGUI *scg = wbcg_cur_scg (wbcg);
- Sheet *sheet = scg_sheet (scg);
va_list args;
-
va_start (args, first_property_name);
- scg_mode_create_object (scg, (SheetObject *)
+ wbcg_insert_object (wbcg, (SheetObject *)
g_object_new_valist (t, first_property_name, args));
va_end (args);
-
- workbook_recalc (sheet->workbook);
- sheet_update (sheet);
}
static GNM_ACTION_DEF (cmd_create_label)
Modified: trunk/src/wbc-gtk-edit.c
==============================================================================
--- trunk/src/wbc-gtk-edit.c (original)
+++ trunk/src/wbc-gtk-edit.c Thu Jun 19 13:02:01 2008
@@ -977,6 +977,68 @@
}
/**
+ * wbcg_insert_object :
+ * @wbcg : #WBCGtk *
+ * @so : The object the needs to be placed
+ *
+ * Takes a newly created #SheetObject that has not yet been realized and
+ * prepares to place it on the sheet.
+ *
+ * NOTE : Absorbs a reference to the object.
+ **/
+void
+wbcg_insert_object (WBCGtk *wbcg, SheetObject *so)
+{
+ int i, npages;
+ SheetControlGUI *scg;
+
+ g_return_if_fail (IS_WBC_GTK (wbcg));
+ g_return_if_fail (IS_SHEET_OBJECT (so));
+
+ wbcg_insert_object_clear (wbcg);
+ wbcg->new_object = so;
+
+ npages = gtk_notebook_get_n_pages (wbcg->notebook);
+ for (i = 0; i < npages; i++)
+ if (NULL != (scg = wbcg_get_nth_scg (wbcg, i))) {
+ scg_object_unselect (scg, NULL);
+ scg_cursor_visible (scg, FALSE);
+ scg_set_display_cursor (scg);
+ sc_unant (SHEET_CONTROL (scg));
+ }
+
+ wb_control_update_action_sensitivity (WORKBOOK_CONTROL (wbcg));
+}
+
+/**
+ * wbcg_insert_object_clear :
+ * @wbcg : #WBCGtk
+ *
+ * If we are preparing to insert a new object, unref the object, and restore
+ * a normal state to the scgs that was changed in wbcg_insert_object
+ * (e.g. visiblity of cursors)
+ **/
+void
+wbcg_insert_object_clear (WBCGtk *wbcg)
+{
+ g_return_if_fail (IS_WBC_GTK (wbcg));
+
+ if (NULL != wbcg->new_object) {
+ int i, npages;
+ SheetControlGUI *scg;
+
+ g_object_unref (G_OBJECT (wbcg->new_object));
+ wbcg->new_object = NULL;
+
+ npages = gtk_notebook_get_n_pages (wbcg->notebook);
+ for (i = 0; i < npages; i++)
+ if (NULL != (scg = wbcg_get_nth_scg (wbcg, i)))
+ scg_cursor_visible (scg, TRUE);
+ }
+}
+
+
+/**
* wbcg_get_entry :
* @WBCGtk : @wbcg
*
@@ -985,6 +1047,7 @@
GtkEntry *
wbcg_get_entry (WBCGtk const *wbcg)
{
+ g_return_val_if_fail (IS_WBC_GTK (wbcg), NULL);
g_return_val_if_fail (wbcg != NULL, NULL);
return gnm_expr_entry_get_entry (wbcg->edit_line.entry);
Modified: trunk/src/wbc-gtk-impl.h
==============================================================================
--- trunk/src/wbc-gtk-impl.h (original)
+++ trunk/src/wbc-gtk-impl.h Thu Jun 19 13:02:01 2008
@@ -124,6 +124,8 @@
Sheet *editing_sheet;
gboolean editing;
+ SheetObject *new_object; /* A newly created object that has yet to be realized */
+
char *preferred_geometry;
};
Modified: trunk/src/wbc-gtk.c
==============================================================================
--- trunk/src/wbc-gtk.c (original)
+++ trunk/src/wbc-gtk.c Thu Jun 19 13:02:01 2008
@@ -167,7 +167,7 @@
static SheetControlGUI *
wbcg_get_scg (WBCGtk *wbcg, Sheet *sheet)
{
- GtkWidget *w;
+ SheetControlGUI *scg;
int i, npages;
if (sheet == NULL || wbcg->notebook == NULL)
@@ -176,12 +176,9 @@
g_return_val_if_fail (IS_SHEET (sheet), NULL);
g_return_val_if_fail (sheet->index_in_wb >= 0, NULL);
- w = gtk_notebook_get_nth_page (wbcg->notebook, sheet->index_in_wb);
- if (w) {
- SheetControlGUI *scg = g_object_get_data (G_OBJECT (w), SHEET_CONTROL_KEY);
- if (scg_sheet (scg) == sheet)
- return scg;
- }
+ scg = wbcg_get_nth_scg (wbcg, sheet->index_in_wb);
+ if (NULL != scg && scg_sheet (scg) == sheet)
+ return scg;
/*
* index_in_wb is probably not accurate because we are in the
@@ -189,9 +186,8 @@
*/
npages = gtk_notebook_get_n_pages (wbcg->notebook);
for (i = 0; i < npages; i++) {
- GtkWidget *w = gtk_notebook_get_nth_page (wbcg->notebook, i);
- SheetControlGUI *scg = g_object_get_data (G_OBJECT (w), SHEET_CONTROL_KEY);
- if (scg_sheet (scg) == sheet)
+ scg = wbcg_get_nth_scg (wbcg, i);
+ if (NULL != scg && scg_sheet (scg) == sheet)
return scg;
}
@@ -308,7 +304,7 @@
WBCGtk *wbcg = WBC_GTK (wbc);
SheetControlGUI *scg = wbcg_cur_scg (wbcg);
gboolean edit_object = scg != NULL &&
- (scg->selected_objects != NULL || scg->new_object != NULL);
+ (scg->selected_objects != NULL || wbcg->new_object != NULL);
gboolean enable_actions = TRUE;
gboolean enable_edit_ok_cancel = FALSE;
@@ -506,13 +502,11 @@
{
SheetControlGUI *scg;
gint n_source;
- GtkWidget *p_source;
g_return_if_fail (IS_WBC_GTK (wbcg));
n_source = gnm_notebook_page_num_by_label (wbcg->notebook, widget);
- p_source = gtk_notebook_get_nth_page (wbcg->notebook, n_source);
- scg = g_object_get_data (G_OBJECT (p_source), SHEET_CONTROL_KEY);
+ scg = wbcg_get_nth_scg (wbcg, n_source);
gtk_selection_data_set (selection_data, selection_data->target,
8, (void *) scg, sizeof (scg));
@@ -740,7 +734,6 @@
{
Sheet *sheet;
SheetControlGUI *new_scg;
- GtkWidget *child;
g_return_if_fail (IS_WBC_GTK (wbcg));
@@ -758,9 +751,7 @@
if (NULL != wbcg->rangesel)
scg_rangesel_stop (wbcg->rangesel, TRUE);
- child = gtk_notebook_get_nth_page (notebook, page_num);
- new_scg = g_object_get_data (G_OBJECT (child), SHEET_CONTROL_KEY);
-
+ new_scg = wbcg_get_nth_scg (wbcg, page_num);
cb_direction_change (NULL, NULL, new_scg);
if (wbcg_is_editing (wbcg) && wbcg_rangesel_possible (wbcg)) {
@@ -1065,10 +1056,8 @@
SheetControlGUI **scgs = g_new (SheetControlGUI *, n);
/* Collect the scgs first as we are moving pages. */
- for (i = 0 ; i < n; i++) {
- GtkWidget *w = gtk_notebook_get_nth_page (nb, i);
- scgs[i] = g_object_get_data (G_OBJECT (w), SHEET_CONTROL_KEY);
- }
+ for (i = 0 ; i < n; i++)
+ scgs[i] = wbcg_get_nth_scg (wbcg, i);
for (i = 0 ; i < n; i++) {
SheetControlGUI *scg = scgs[i];
@@ -1139,7 +1128,7 @@
gboolean const has_guru = wbc_gtk_get_guru (wbcg) != NULL;
gboolean has_filtered_rows = sheet->has_filtered_rows;
gboolean edit_object = scg != NULL &&
- (scg->selected_objects != NULL || scg->new_object != NULL);
+ (scg->selected_objects != NULL || wbcg->new_object != NULL);
if (!has_filtered_rows) {
GSList *ptr = sheet->filters;
@@ -4394,6 +4383,8 @@
wbcg->editing_sheet = NULL;
wbcg->editing_cell = NULL;
+ wbcg->new_object = NULL;
+
#warning "why is this here ?"
wbcg->current_saver = NULL;
wbcg->menu_zone = gtk_vbox_new (TRUE, 0);
@@ -4627,6 +4618,33 @@
go_gtk_window_set_transient (wbcg_toplevel (wbcg), window);
}
+/**
+ * wbcg_get_nth_scg
+ * @wbcg : #WBCGtk
+ * @i :
+ *
+ * Returns the scg associated with the @i-th tab in @wbcg's notebook.
+ * NOTE : @i != scg->sv->sheet->index_in_wb
+ **/
+SheetControlGUI *
+wbcg_get_nth_scg (WBCGtk *wbcg, int i)
+{
+ SheetControlGUI *scg;
+ GtkWidget *w;
+
+ g_return_val_if_fail (IS_WBC_GTK (wbcg), NULL);
+
+ if (NULL != wbcg->notebook &&
+ NULL != (w = gtk_notebook_get_nth_page (wbcg->notebook, i)) &&
+ NULL != (scg = g_object_get_data (G_OBJECT (w), SHEET_CONTROL_KEY)) &&
+ NULL != scg->table &&
+ NULL != scg_sheet (scg) &&
+ NULL != scg_view (scg))
+ return scg;
+
+ return NULL;
+}
+
#warning merge these and clarfy whether we want the visible scg, or the logical (view) scg
/**
* wbcg_focus_cur_scg :
@@ -4641,7 +4659,6 @@
Sheet *
wbcg_focus_cur_scg (WBCGtk *wbcg)
{
- GtkWidget *table;
SheetControlGUI *scg;
g_return_val_if_fail (IS_WBC_GTK (wbcg), NULL);
@@ -4649,9 +4666,8 @@
if (wbcg->notebook == NULL)
return NULL;
- table = gtk_notebook_get_nth_page (wbcg->notebook,
+ scg = wbcg_get_nth_scg (wbcg,
gtk_notebook_get_current_page (wbcg->notebook));
- scg = g_object_get_data (G_OBJECT (table), SHEET_CONTROL_KEY);
g_return_val_if_fail (scg != NULL, NULL);
Modified: trunk/src/wbc-gtk.h
==============================================================================
--- trunk/src/wbc-gtk.h (original)
+++ trunk/src/wbc-gtk.h Thu Jun 19 13:02:01 2008
@@ -25,6 +25,7 @@
GtkWindow *wbcg_toplevel (WBCGtk *wbcg);
void wbcg_set_transient (WBCGtk *wbcg,
GtkWindow *window);
+SheetControlGUI *wbcg_get_nth_scg (WBCGtk *wbcg, int page);
SheetControlGUI *wbcg_cur_scg (WBCGtk *wbcg);
Sheet *wbcg_cur_sheet (WBCGtk *wbcg);
Sheet *wbcg_focus_cur_scg (WBCGtk *wbcg);
@@ -62,6 +63,9 @@
gboolean wbcg_edit_start (WBCGtk *wbcg,
gboolean blankp, gboolean cursorp);
+void wbcg_insert_object (WBCGtk *wbcg, SheetObject *so);
+void wbcg_insert_object_clear (WBCGtk *wbcg);
+
void wbc_gtk_detach_guru (WBCGtk *wbcg);
void wbc_gtk_attach_guru (WBCGtk *wbcg, GtkWidget *guru);
void wbc_gtk_attach_guru_with_unfocused_rs (WBCGtk *wbcg, GtkWidget *guru,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]