[gnumeric] Sheet objects: add name property.
- From: Morten Welinder <mortenw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnumeric] Sheet objects: add name property.
- Date: Fri, 2 Oct 2009 17:11:02 +0000 (UTC)
commit a9ff5edecbebb2edc67a1b85c039b6374275507d
Author: Morten Welinder <terra gnome org>
Date: Fri Oct 2 13:10:31 2009 -0400
Sheet objects: add name property.
ChangeLog | 13 +++++
NEWS | 1 +
src/sheet-object-impl.h | 1 +
src/sheet-object-widget.c | 123 +++++++++++++++++++++++---------------------
src/sheet-object.c | 60 ++++++++++++++++++++++
src/sheet-object.h | 2 +
src/xml-sax-read.c | 4 +-
src/xml-sax-write.c | 2 +
8 files changed, 146 insertions(+), 60 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index a87e850..d5abbfb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2009-10-02 Morten Welinder <terra gnome org>
+
+ * src/sheet-object.c (sheet_object_get_property,
+ sheet_object_set_property, sheet_object_set_name): New functions.
+ (sheet_object_finalize): Clear name.
+ (sheet_object_class_init): Install new name property.
+
+ * src/sheet-object-impl.h (struct _SheetObject): Add name element.
+
+ * src/xml-sax-write.c (xml_write_objects): Save object name.
+
+ * src/xml-sax-read.c (xml_sax_read_obj): Read object name.
+
2009-09-29 Morten Welinder <terra gnome org>
* po/LINGUAS: Back out the addition of "id".
diff --git a/NEWS b/NEWS
index 952dd1c..5198af4 100644
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,7 @@ Morten:
* Fix printing of lines and arrows.
* Fix sheet object/clipboard related critical on exit. [#596509]
* Fix Excel-crashing export problem with objects. [#596886]
+ * Add name property to sheet objects.
--------------------------------------------------------------------------
Gnumeric 1.9.13
diff --git a/src/sheet-object-impl.h b/src/sheet-object-impl.h
index 87fee8b..3c32b58 100644
--- a/src/sheet-object-impl.h
+++ b/src/sheet-object-impl.h
@@ -28,6 +28,7 @@ struct _SheetObject {
GList *realized_list;
SheetObjectAnchor anchor;
SheetObjectFlags flags;
+ char *name;
};
typedef void (*SheetObjectActionFunc) (SheetObject *so, SheetControl *sc);
diff --git a/src/sheet-object-widget.c b/src/sheet-object-widget.c
index c392ba3..42316b4 100644
--- a/src/sheet-object-widget.c
+++ b/src/sheet-object-widget.c
@@ -173,41 +173,44 @@ static GSF_CLASS (SOWidgetView, so_widget_view,
#define IS_SHEET_WIDGET_OBJECT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SHEET_OBJECT_WIDGET_TYPE))
#define SOW_CLASS(so) (SHEET_OBJECT_WIDGET_CLASS (G_OBJECT_GET_CLASS(so)))
-#define SOW_MAKE_TYPE(n1, n2, fn_config, fn_set_sheet, fn_clear_sheet, fn_foreach_dep, \
- fn_copy, fn_write_sax, fn_prep_sax_parser, \
- fn_get_property, fn_set_property, class_init_code) \
-static void \
-sheet_widget_ ## n1 ## _class_init (GObjectClass *object_class) \
-{ \
- SheetObjectWidgetClass *sow_class = SHEET_OBJECT_WIDGET_CLASS (object_class); \
- SheetObjectClass *so_class = SHEET_OBJECT_CLASS (object_class); \
- object_class->finalize = &sheet_widget_ ## n1 ## _finalize; \
- object_class->set_property = fn_set_property; \
- object_class->get_property = fn_get_property; \
- so_class->user_config = fn_config; \
- so_class->interactive = TRUE; \
- so_class->assign_to_sheet = fn_set_sheet; \
- so_class->remove_from_sheet = fn_clear_sheet; \
- so_class->foreach_dep = fn_foreach_dep; \
- so_class->copy = fn_copy; \
- so_class->write_xml_sax = fn_write_sax; \
- so_class->prep_sax_parser = fn_prep_sax_parser; \
- sow_class->create_widget = &sheet_widget_ ## n1 ## _create_widget; \
- { class_init_code; } \
-} \
- \
-GSF_CLASS (SheetWidget ## n2, sheet_widget_ ## n1, \
- &sheet_widget_ ## n1 ## _class_init, \
- &sheet_widget_ ## n1 ## _init, \
+#define SOW_MAKE_TYPE(n1, n2, fn_config, fn_set_sheet, fn_clear_sheet, fn_foreach_dep, \
+ fn_copy, fn_write_sax, fn_prep_sax_parser, \
+ fn_get_property, fn_set_property, class_init_code) \
+ \
+static void \
+sheet_widget_ ## n1 ## _class_init (GObjectClass *object_class) \
+{ \
+ SheetObjectWidgetClass *sow_class = SHEET_OBJECT_WIDGET_CLASS (object_class); \
+ SheetObjectClass *so_class = SHEET_OBJECT_CLASS (object_class); \
+ object_class->finalize = &sheet_widget_ ## n1 ## _finalize; \
+ object_class->set_property = fn_set_property; \
+ object_class->get_property = fn_get_property; \
+ so_class->user_config = fn_config; \
+ so_class->interactive = TRUE; \
+ so_class->assign_to_sheet = fn_set_sheet; \
+ so_class->remove_from_sheet = fn_clear_sheet; \
+ so_class->foreach_dep = fn_foreach_dep; \
+ so_class->copy = fn_copy; \
+ so_class->write_xml_sax = fn_write_sax; \
+ so_class->prep_sax_parser = fn_prep_sax_parser; \
+ sow_class->create_widget = &sheet_widget_ ## n1 ## _create_widget; \
+ { class_init_code; } \
+} \
+ \
+GSF_CLASS (SheetWidget ## n2, sheet_widget_ ## n1, \
+ &sheet_widget_ ## n1 ## _class_init, \
+ &sheet_widget_ ## n1 ## _init, \
SHEET_OBJECT_WIDGET_TYPE)
-typedef SheetObject SheetObjectWidget;
+typedef struct {
+ SheetObject so;
+} SheetObjectWidget;
+
typedef struct {
SheetObjectClass parent_class;
GtkWidget *(*create_widget)(SheetObjectWidget *);
} SheetObjectWidgetClass;
-static SheetObjectClass *sheet_object_widget_parent_class = NULL;
static GObjectClass *sheet_object_widget_class = NULL;
static GType sheet_object_widget_get_type (void);
@@ -273,13 +276,12 @@ sheet_object_widget_new_view (SheetObject *so, SheetObjectViewContainer *contain
}
static void
-sheet_object_widget_class_init (GtkObjectClass *object_class)
+sheet_object_widget_class_init (GObjectClass *object_class)
{
SheetObjectClass *so_class = SHEET_OBJECT_CLASS (object_class);
SheetObjectWidgetClass *sow_class = SHEET_OBJECT_WIDGET_CLASS (object_class);
sheet_object_widget_class = G_OBJECT_CLASS (object_class);
- sheet_object_widget_parent_class = g_type_class_peek_parent (object_class);
/* SheetObject class method overrides */
so_class->new_view = sheet_object_widget_new_view;
@@ -427,7 +429,7 @@ sheet_widget_frame_set_label (SheetObject *so, char const* str)
g_free (swf->label);
swf->label = g_strdup (str);
- for (ptr = swf->sow.realized_list; ptr != NULL; ptr = ptr->next) {
+ for (ptr = swf->sow.so.realized_list; ptr != NULL; ptr = ptr->next) {
SheetObjectView *view = ptr->data;
GocWidget *item = get_goc_widget (view);
gtk_frame_set_label (GTK_FRAME (item->widget), str);
@@ -545,7 +547,7 @@ enum {
static void
sheet_widget_button_get_property (GObject *obj, guint param_id,
- GValue *value, GParamSpec *pspec)
+ GValue *value, GParamSpec *pspec)
{
SheetWidgetButton *swb = SHEET_WIDGET_BUTTON (obj);
@@ -571,7 +573,7 @@ sheet_widget_button_set_property (GObject *obj, guint param_id,
switch (param_id) {
case SOB_PROP_TEXT:
sheet_widget_button_set_label (SHEET_OBJECT (swb),
- g_value_get_string (value));
+ g_value_get_string (value));
break;
case SOB_PROP_MARKUP:
#if 0
@@ -952,7 +954,7 @@ sheet_widget_button_set_label (SheetObject *so, char const *str)
g_free (swb->label);
swb->label = new_label;
- for (ptr = swb->sow.realized_list; ptr != NULL; ptr = ptr->next) {
+ for (ptr = swb->sow.so.realized_list; ptr != NULL; ptr = ptr->next) {
SheetObjectView *view = ptr->data;
GocWidget *item = get_goc_widget (view);
gtk_button_set_label (GTK_BUTTON (item->widget), swb->label);
@@ -972,7 +974,7 @@ sheet_widget_button_set_markup (SheetObject *so, PangoAttrList *markup)
swb->markup = markup;
if (markup) pango_attr_list_ref (markup);
- for (ptr = swb->sow.realized_list; ptr != NULL; ptr = ptr->next) {
+ for (ptr = swb->sow.so.realized_list; ptr != NULL; ptr = ptr->next) {
SheetObjectView *view = ptr->data;
GocWidget *item = get_goc_widget (view);
gtk_label_set_attributes (GTK_LABEL (GTK_BIN (item->widget)->child),
@@ -1002,6 +1004,7 @@ SOW_MAKE_TYPE (button, Button,
})
/****************************************************************************/
+
#define SHEET_WIDGET_ADJUSTMENT_TYPE (sheet_widget_adjustment_get_type())
#define SHEET_WIDGET_ADJUSTMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHEET_WIDGET_ADJUSTMENT_TYPE, SheetWidgetAdjustment))
#define DEP_TO_ADJUSTMENT(d_ptr) (SheetWidgetAdjustment *)(((char *)d_ptr) - G_STRUCT_OFFSET(SheetWidgetAdjustment, dep))
@@ -1131,11 +1134,11 @@ sheet_widget_adjustment_set_horizontal (SheetWidgetAdjustment *swa,
swa->horizontal = horizontal;
/* Change direction for all realized widgets. */
- for (ptr = swa->sow.realized_list; ptr != NULL; ptr = ptr->next) {
+ for (ptr = swa->sow.so.realized_list; ptr != NULL; ptr = ptr->next) {
SheetObjectView *view = ptr->data;
GocWidget *item = get_goc_widget (view);
GtkWidget *neww =
- SOW_CLASS (swa)->create_widget (SHEET_OBJECT (swa));
+ SOW_CLASS (swa)->create_widget (SHEET_OBJECT_WIDGET (swa));
gtk_widget_show (neww);
goc_item_set (GOC_ITEM (item), "widget", neww, NULL);
}
@@ -1144,7 +1147,7 @@ sheet_widget_adjustment_set_horizontal (SheetWidgetAdjustment *swa,
static void
sheet_widget_adjustment_get_property (GObject *obj, guint param_id,
- GValue *value, GParamSpec *pspec)
+ GValue *value, GParamSpec *pspec)
{
SheetWidgetAdjustment *swa = SHEET_WIDGET_ADJUSTMENT (obj);
@@ -1560,6 +1563,7 @@ SOW_MAKE_TYPE (adjustment, Adjustment,
})
/****************************************************************************/
+
#define SHEET_WIDGET_SCROLLBAR_TYPE (sheet_widget_scrollbar_get_type ())
#define SHEET_WIDGET_SCROLLBAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SHEET_WIDGET_SCROLLBAR_TYPE, SheetWidgetScrollbar))
#define DEP_TO_SCROLLBAR(d_ptr) (SheetWidgetScrollbar *)(((char *)d_ptr) - G_STRUCT_OFFSET(SheetWidgetScrollbar, dep))
@@ -1609,6 +1613,7 @@ GSF_CLASS (SheetWidgetScrollbar, sheet_widget_scrollbar,
SHEET_WIDGET_ADJUSTMENT_TYPE)
/****************************************************************************/
+
#define SHEET_WIDGET_SPINBUTTON_TYPE (sheet_widget_spinbutton_get_type ())
#define SHEET_WIDGET_SPINBUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SHEET_WIDGET_SPINBUTTON_TYPE, SheetWidgetSpinbutton))
#define DEP_TO_SPINBUTTON(d_ptr) (SheetWidgetSpinbutton *)(((char *)d_ptr) - G_STRUCT_OFFSET(SheetWidgetSpinbutton, dep))
@@ -1657,6 +1662,7 @@ GSF_CLASS (SheetWidgetSpinbutton, sheet_widget_spinbutton,
SHEET_WIDGET_ADJUSTMENT_TYPE)
/****************************************************************************/
+
#define SHEET_WIDGET_SLIDER_TYPE (sheet_widget_slider_get_type ())
#define SHEET_WIDGET_SLIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SHEET_WIDGET_SLIDER_TYPE, SheetWidgetSlider))
#define DEP_TO_SLIDER(d_ptr) (SheetWidgetSlider *)(((char *)d_ptr) - G_STRUCT_OFFSET(SheetWidgetSlider, dep))
@@ -1708,6 +1714,7 @@ GSF_CLASS (SheetWidgetSlider, sheet_widget_slider,
SHEET_WIDGET_ADJUSTMENT_TYPE)
/****************************************************************************/
+
#define SHEET_WIDGET_CHECKBOX_TYPE (sheet_widget_checkbox_get_type ())
#define SHEET_WIDGET_CHECKBOX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SHEET_WIDGET_CHECKBOX_TYPE, SheetWidgetCheckbox))
#define DEP_TO_CHECKBOX(d_ptr) (SheetWidgetCheckbox *)(((char *)d_ptr) - G_STRUCT_OFFSET(SheetWidgetCheckbox, dep))
@@ -1730,7 +1737,7 @@ enum {
static void
sheet_widget_checkbox_get_property (GObject *obj, guint param_id,
- GValue *value, GParamSpec *pspec)
+ GValue *value, GParamSpec *pspec)
{
SheetWidgetCheckbox *swc = SHEET_WIDGET_CHECKBOX (obj);
@@ -1777,7 +1784,7 @@ sheet_widget_checkbox_set_active (SheetWidgetCheckbox *swc)
swc->being_updated = TRUE;
- for (ptr = swc->sow.realized_list; ptr != NULL ; ptr = ptr->next) {
+ for (ptr = swc->sow.so.realized_list; ptr != NULL ; ptr = ptr->next) {
SheetObjectView *view = ptr->data;
GocWidget *item = get_goc_widget (view);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (item->widget),
@@ -2087,7 +2094,6 @@ sheet_widget_checkbox_write_xml_sax (SheetObject const *so, GsfXMLOut *output,
GnmConventions const *convs)
{
SheetWidgetCheckbox const *swc = SHEET_WIDGET_CHECKBOX (so);
-
gsf_xml_out_add_cstr (output, "Label", swc->label);
gsf_xml_out_add_int (output, "Value", swc->value);
sax_write_dep (output, &swc->dep, "Input", convs);
@@ -2146,7 +2152,7 @@ sheet_widget_checkbox_set_label (SheetObject *so, char const *str)
g_free (swc->label);
swc->label = new_label;
- for (list = swc->sow.realized_list; list != NULL; list = list->next) {
+ for (list = swc->sow.so.realized_list; list; list = list->next) {
SheetObjectView *view = list->data;
GocWidget *item = get_goc_widget (view);
gtk_button_set_label (GTK_BUTTON (item->widget), swc->label);
@@ -2205,13 +2211,6 @@ GSF_CLASS (SheetWidgetToggleButton, sheet_widget_toggle_button,
#define SHEET_WIDGET_RADIO_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SHEET_WIDGET_RADIO_BUTTON_TYPE, SheetWidgetRadioButton))
#define DEP_TO_RADIO_BUTTON(d_ptr) (SheetWidgetRadioButton *)(((char *)d_ptr) - G_STRUCT_OFFSET(SheetWidgetRadioButton, dep))
-static GnmValue *
-so_parse_value (SheetObject *so, const char *s)
-{
- Sheet *sheet = so->sheet;
- return format_match (s, NULL, workbook_date_conv (sheet->workbook));
-}
-
typedef struct {
SheetObjectWidget sow;
@@ -2229,9 +2228,16 @@ enum {
SOR_PROP_MARKUP
};
+static GnmValue *
+so_parse_value (SheetObject *so, const char *s)
+{
+ Sheet *sheet = so->sheet;
+ return format_match (s, NULL, workbook_date_conv (sheet->workbook));
+}
+
static void
sheet_widget_radio_button_get_property (GObject *obj, guint param_id,
- GValue *value, GParamSpec *pspec)
+ GValue *value, GParamSpec *pspec)
{
SheetWidgetRadioButton *swrb = SHEET_WIDGET_RADIO_BUTTON (obj);
@@ -2292,7 +2298,7 @@ sheet_widget_radio_button_set_active (SheetWidgetRadioButton *swrb,
swrb->being_updated = TRUE;
- for (ptr = swrb->sow.realized_list; ptr != NULL ; ptr = ptr->next) {
+ for (ptr = swrb->sow.so.realized_list; ptr != NULL ; ptr = ptr->next) {
SheetObjectView *view = ptr->data;
GocWidget *item = get_goc_widget (view);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (item->widget),
@@ -2327,14 +2333,12 @@ radio_button_debug_name (GnmDependent const *dep, GString *target)
static DEPENDENT_MAKE_TYPE (radio_button, NULL)
static void
-sheet_widget_radio_button_init_full (SheetObjectWidget *sow,
+sheet_widget_radio_button_init_full (SheetWidgetRadioButton *swrb,
GnmCellRef const *ref,
char const *label,
GnmValue const *value,
gboolean active)
{
- SheetWidgetRadioButton *swrb = SHEET_WIDGET_RADIO_BUTTON (sow);
-
g_return_if_fail (swrb != NULL);
swrb->being_updated = FALSE;
@@ -2352,9 +2356,7 @@ sheet_widget_radio_button_init_full (SheetObjectWidget *sow,
static void
sheet_widget_radio_button_init (SheetWidgetRadioButton *swrb)
{
- sheet_widget_radio_button_init_full (SHEET_OBJECT (swrb),
- NULL, NULL, NULL,
- TRUE);
+ sheet_widget_radio_button_init_full (swrb, NULL, NULL, NULL, TRUE);
}
static void
@@ -2417,7 +2419,7 @@ sheet_widget_radio_button_copy (SheetObject *dst, SheetObject const *src)
SheetWidgetRadioButton *dst_swrb = SHEET_WIDGET_RADIO_BUTTON (dst);
GnmCellRef ref;
- sheet_widget_radio_button_init_full (SHEET_OBJECT (dst_swrb),
+ sheet_widget_radio_button_init_full (dst_swrb,
so_get_ref (src, &ref, FALSE),
src_swrb->label,
src_swrb->value,
@@ -2529,7 +2531,7 @@ sheet_widget_radio_button_set_label (SheetObject *so, char const *str)
g_free (swrb->label);
swrb->label = new_label;
- for (list = swrb->sow.realized_list; list != NULL; list = list->next) {
+ for (list = swrb->sow.so.realized_list; list; list = list->next) {
SheetObjectView *view = list->data;
GocWidget *item = get_goc_widget (view);
gtk_button_set_label (GTK_BUTTON (item->widget), swrb->label);
@@ -2756,6 +2758,7 @@ SOW_MAKE_TYPE (radio_button, RadioButton,
})
/****************************************************************************/
+
#define SHEET_WIDGET_LIST_BASE_TYPE (sheet_widget_list_base_get_type ())
#define SHEET_WIDGET_LIST_BASE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SHEET_WIDGET_LIST_BASE_TYPE, SheetWidgetListBase))
#define DEP_TO_LIST_BASE_CONTENT(d_ptr) (SheetWidgetListBase *)(((char *)d_ptr) - G_STRUCT_OFFSET(SheetWidgetListBase, content_dep))
@@ -3031,6 +3034,7 @@ sheet_widget_list_base_get_content_dep (SheetObject const *so)
}
/****************************************************************************/
+
#define SHEET_WIDGET_LIST_TYPE (sheet_widget_list_get_type ())
#define SHEET_WIDGET_LIST(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SHEET_WIDGET_LIST_TYPE, SheetWidgetList))
@@ -3117,6 +3121,7 @@ GSF_CLASS (SheetWidgetList, sheet_widget_list,
SHEET_WIDGET_LIST_BASE_TYPE)
/****************************************************************************/
+
#define SHEET_WIDGET_COMBO_TYPE (sheet_widget_combo_get_type ())
#define SHEET_WIDGET_COMBO(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SHEET_WIDGET_COMBO_TYPE, SheetWidgetCombo))
diff --git a/src/sheet-object.c b/src/sheet-object.c
index 3da28b1..01676a3 100644
--- a/src/sheet-object.c
+++ b/src/sheet-object.c
@@ -49,6 +49,11 @@
#define SO_CLASS(so) SHEET_OBJECT_CLASS(G_OBJECT_GET_CLASS(so))
enum {
+ SO_PROP_0 = 0,
+ SO_PROP_NAME
+};
+
+enum {
BOUNDS_CHANGED,
UNREALIZED,
LAST_SIGNAL
@@ -187,12 +192,58 @@ sheet_objects_max_extent (Sheet *sheet)
}
}
+void
+sheet_object_set_name (SheetObject *so, const char *name)
+{
+ if (name == so->name)
+ return;
+
+ g_free (so->name);
+ so->name = g_strdup (name);
+
+ g_object_notify (G_OBJECT (so), "name");
+}
+
+static void
+sheet_object_get_property (GObject *obj, guint param_id,
+ GValue *value, GParamSpec *pspec)
+{
+ SheetObject *so = SHEET_OBJECT (obj);
+
+ switch (param_id) {
+ case SO_PROP_NAME:
+ g_value_set_string (value, so->name);
+ break;
+ default :
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec);
+ break;
+ }
+}
+
+static void
+sheet_object_set_property (GObject *obj, guint param_id,
+ GValue const *value, GParamSpec *pspec)
+{
+ SheetObject *so = SHEET_OBJECT (obj);
+
+ switch (param_id) {
+ case SO_PROP_NAME:
+ sheet_object_set_name (so, g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec);
+ return;
+ }
+}
+
+
static void
sheet_object_finalize (GObject *object)
{
SheetObject *so = SHEET_OBJECT (object);
if (so->sheet != NULL)
sheet_object_clear_sheet (so);
+ g_free (so->name);
parent_klass->finalize (object);
}
@@ -229,7 +280,11 @@ sheet_object_class_init (GObjectClass *klass)
SheetObjectClass *sheet_object_class = SHEET_OBJECT_CLASS (klass);
parent_klass = g_type_class_peek_parent (klass);
+
klass->finalize = sheet_object_finalize;
+ klass->get_property = sheet_object_get_property;
+ klass->set_property = sheet_object_set_property;
+
sheet_object_class->populate_menu = sheet_object_populate_menu_real;
sheet_object_class->user_config = NULL;
sheet_object_class->rubber_band_directly = FALSE;
@@ -238,6 +293,11 @@ sheet_object_class_init (GObjectClass *klass)
sheet_object_class->xml_export_name = NULL;
sheet_object_class->foreach_dep = NULL;
+ g_object_class_install_property
+ (klass, SO_PROP_NAME,
+ g_param_spec_string ("name", NULL, NULL, NULL,
+ GSF_PARAM_STATIC | G_PARAM_READWRITE));
+
signals [BOUNDS_CHANGED] = g_signal_new ("bounds-changed",
SHEET_OBJECT_TYPE,
G_SIGNAL_RUN_LAST,
diff --git a/src/sheet-object.h b/src/sheet-object.h
index 02c35ba..ff7ae39 100644
--- a/src/sheet-object.h
+++ b/src/sheet-object.h
@@ -65,6 +65,8 @@ gboolean sheet_object_set_sheet (SheetObject *so, Sheet *sheet);
Sheet *sheet_object_get_sheet (SheetObject const *so);
void sheet_object_clear_sheet (SheetObject *so);
+void sheet_object_set_name (SheetObject *so, const char *name);
+
SheetObject *sheet_object_dup (SheetObject const *so);
gboolean sheet_object_can_print (SheetObject const *so);
diff --git a/src/xml-sax-read.c b/src/xml-sax-read.c
index dae3e94..ddac01c 100644
--- a/src/xml-sax-read.c
+++ b/src/xml-sax-read.c
@@ -2203,7 +2203,9 @@ xml_sax_read_obj (GsfXMLIn *xin, gboolean needs_cleanup,
anchor_r = sheet_object_get_anchor (so)->cell_bound;
for (i = 0; attrs != NULL && attrs[i] && attrs[i + 1] ; i += 2) {
- if (attr_eq (attrs[i], "ObjectBound"))
+ if (attr_eq (attrs[i], "Name"))
+ sheet_object_set_name (so, CXML2C (attrs[i + 1]));
+ else if (attr_eq (attrs[i], "ObjectBound"))
range_parse (&anchor_r, CXML2C (attrs[i + 1]), gnm_sheet_get_size (state->sheet));
else if (attr_eq (attrs[i], "ObjectOffset") &&
4 == sscanf (CXML2C (attrs[i + 1]), "%g %g %g %g",
diff --git a/src/xml-sax-write.c b/src/xml-sax-write.c
index 12f4959..45aaa2a 100644
--- a/src/xml-sax-write.c
+++ b/src/xml-sax-write.c
@@ -1110,6 +1110,8 @@ xml_write_objects (GnmOutputXML *state, GSList *objects)
tmp = g_strconcat (GNM, type_name, NULL);
gsf_xml_out_start_element (state->output, tmp);
+ if (so->name)
+ gsf_xml_out_add_cstr (state->output, "Name", so->name);
gsf_xml_out_add_cstr (state->output, "ObjectBound", range_as_string (&so->anchor.cell_bound));
snprintf (buffer, sizeof (buffer), "%.3g %.3g %.3g %.3g",
so->anchor.offset [0], so->anchor.offset [1],
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]