[goffice] Ensure that 0 is in the default values axis range for column, bar and other 1.5d plots. [#663717]



commit ba5f1935ff1291842e328d7ed6a0617f8c7302f4
Author: Jean Brefort <jean brefort normalesup org>
Date:   Mon Nov 14 10:54:49 2011 +0100

    Ensure that 0 is in the default values axis range for column, bar and other 1.5d plots. [#663717]

 ChangeLog                        |   11 +++++++++++
 NEWS                             |    2 ++
 goffice/canvas/goc-component.c   |    8 +++++---
 goffice/component/go-component.c |   35 +++++++++++++++++++++++++++++++----
 goffice/component/go-component.h |    3 +++
 plugins/plot_barcol/gog-1.5d.c   |    6 ++++++
 6 files changed, 58 insertions(+), 7 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index bf227b8..d76ba63 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2011-11-14  Jean Brefort  <jean brefort normalesup org>
+
+	* goffice/canvas/goc-component.c (goc_component_set_property): don't change
+	the size when not needed.
+	* goffice/component/go-component.c (go_component_get_mime_type),
+	(editor_destroy_cb), (go_component_edit),
+	(go_component_stop_editing): add new functions.
+	* goffice/component/go-component.h: ditto.
+	* plugins/plot_barcol/gog-1.5d.c (gog_plot1_5d_axis_get_bounds): ensure
+	that 0 is in the default values axis range. [#663717]
+
 2011-11-10  Morten Welinder  <terra gnome org>
 
 	* goffice/app/go-conf.h (go_conf_node_get_key_type)
diff --git a/NEWS b/NEWS
index 477d5e8..586ffbd 100644
--- a/NEWS
+++ b/NEWS
@@ -41,6 +41,8 @@ Jean:
 	* Fixed a memory leak in GocPolyline code. [#663355]
 	* Fixed pixels dust in text rotation selector. [#662393]
 	* Remove GConf support.
+	* Ensure that 0 is in the default values axis range for column, bar
+	and other 1.5d plots. [#663717]
 
 Morten:
 	* Recognize scientific formats with longer exponents.
diff --git a/goffice/canvas/goc-component.c b/goffice/canvas/goc-component.c
index daac1ae..9e305d2 100644
--- a/goffice/canvas/goc-component.c
+++ b/goffice/canvas/goc-component.c
@@ -108,9 +108,11 @@ goc_component_set_property (GObject *obj, guint param_id,
 		if (component->component != NULL) {
 			g_object_ref (component->component);
 			/* set default or fixed size */
-			go_component_get_size (component->component, &component->w, &component->h);
-			component->w = GO_IN_TO_PT (component->w);
-			component->h = GO_IN_TO_PT (component->h);
+			if (component->w == 0 || component->h == 0 || !go_component_is_resizable (component->component)) {
+				go_component_get_size (component->component, &component->w, &component->h);
+				component->w = GO_IN_TO_PT (component->w);
+				component->h = GO_IN_TO_PT (component->h);
+			}
 		}
 		break;
 
diff --git a/goffice/component/go-component.c b/goffice/component/go-component.c
index f28b21a..222e4f5 100644
--- a/goffice/component/go-component.c
+++ b/goffice/component/go-component.c
@@ -398,6 +398,12 @@ go_component_get_data (GOComponent *component, gpointer *data, int *length,
 	return res;
 }
 
+char const *
+go_component_get_mime_type (GOComponent *component)
+{
+	return component->mime_type;
+}
+
 void
 go_component_set_size (GOComponent *component, double width, double height)
 {
@@ -445,16 +451,37 @@ go_component_is_editable (GOComponent *component)
 	return component->editable;
 }
 
-GtkWindow *go_component_edit (GOComponent *component)
+static void
+editor_destroy_cb (GOComponent *component)
+{
+	component->editor = NULL;
+}
+
+GtkWindow *
+go_component_edit (GOComponent *component)
 {
 	GOComponentClass *klass;
 
 	g_return_val_if_fail (GO_IS_COMPONENT (component), NULL);
 
+	if (component->editor)
+		return component->editor;
 	klass = GO_COMPONENT_GET_CLASS(component);
-	if (component->editable && klass->edit)
-		return klass->edit (component);
-	return NULL;
+	if (component->editable && klass->edit) {
+		component->editor = klass->edit (component);
+		if (component->editor)
+			g_signal_connect_swapped (component->editor, "destroy",
+			                          G_CALLBACK (editor_destroy_cb),
+			                          component);
+	}
+	return component->editor;
+}
+
+void go_component_stop_editing (GOComponent *component)
+{
+	g_return_if_fail (GO_IS_COMPONENT (component));
+	if (component->editor)
+		gtk_widget_destroy (GTK_WIDGET (component->editor));
 }
 
 void
diff --git a/goffice/component/go-component.h b/goffice/component/go-component.h
index 2990ec1..26f159a 100644
--- a/goffice/component/go-component.h
+++ b/goffice/component/go-component.h
@@ -52,6 +52,7 @@ struct _GOComponent {
 	GOSnapshotType snapshot_type;
 	void *snapshot_data;
 	size_t snapshot_length;
+	GtkWindow *editor;
 	gpointer priv;
 };
 
@@ -98,10 +99,12 @@ void go_component_set_data (GOComponent *component,
 			    char const *data, int length);
 gboolean go_component_get_data (GOComponent *component, gpointer *data, int *length,
 				GDestroyNotify *clearfunc, gpointer *user_data);
+char const *go_component_get_mime_type (GOComponent *component);
 void go_component_set_size (GOComponent *component, double width, double height);
 gboolean go_component_is_resizable (GOComponent *component);
 gboolean go_component_is_editable (GOComponent *component);
 GtkWindow* go_component_edit (GOComponent *component);
+void go_component_stop_editing (GOComponent *component);
 void go_component_emit_changed (GOComponent *component);
 
 void go_component_set_command_context (GOCmdContext *cc);
diff --git a/plugins/plot_barcol/gog-1.5d.c b/plugins/plot_barcol/gog-1.5d.c
index 5169e63..c7eb993 100644
--- a/plugins/plot_barcol/gog-1.5d.c
+++ b/plugins/plot_barcol/gog-1.5d.c
@@ -286,6 +286,12 @@ gog_plot1_5d_axis_get_bounds (GogPlot *plot, GogAxisType axis,
 		if (model->date_conv)
 			bounds->date_conv = model->date_conv;
 
+		if (plot->desc.series.num_dim == 4 && bounds->val.minima * bounds->val.maxima > 0) {
+			if (bounds->val.minima > 0)
+				bounds->val.minima = 0;
+			else
+				bounds->val.maxima = 0.;
+		}
 		return NULL;
 	} else if (axis == gog_axis_get_atype (gog_plot1_5d_get_index_axis (model))) {
 		GSList *ptr;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]