[libgda/gtk3] GdauiRtEDitor: new "in-scrolled-window" property



commit e97a014a9a7529d0ed6c1ff1ae074587acdd594f
Author: Vivien Malerba <malerba gnome-db org>
Date:   Sat Feb 26 17:58:54 2011 +0100

    GdauiRtEDitor: new "in-scrolled-window" property
    
    which defines if the widget's contents needs to be placed in a
    scrolled window

 libgda-ui/gdaui-rt-editor.c |   44 ++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 43 insertions(+), 1 deletions(-)
---
diff --git a/libgda-ui/gdaui-rt-editor.c b/libgda-ui/gdaui-rt-editor.c
index e8122c1..c89357d 100644
--- a/libgda-ui/gdaui-rt-editor.c
+++ b/libgda-ui/gdaui-rt-editor.c
@@ -83,6 +83,7 @@ struct _GdauiRtEditorPriv
 	gint            insert_offset;
 
 	gboolean        contents_setting; /* TRUE if whole contents is being changed */
+	GtkWidget      *sw; /* swrolled window in which the contents is */
 };
 
 /* get a pointer to the parents to be able to call their destructor */
@@ -123,7 +124,8 @@ enum {
 	PROP_0,
 	PROP_NO_BACKGROUND,
 	PROP_SHOW_MARKUP,
-	PROP_TEXTBUFFER
+	PROP_TEXTBUFFER,
+	PROP_SCROLLED_WINDOW
 };
 
 /* global pixbufs */
@@ -261,6 +263,17 @@ gdaui_rt_editor_class_init (GdauiRtEditorClass *klass)
 							      _("The buffer which is displayed"),
 							      NULL, GTK_TYPE_TEXT_BUFFER,
 							      G_PARAM_READABLE));
+
+	/**
+	 * GdauiRtEditor:in-scrolled-window:
+	 *
+	 * Determines if the contents of the widget appears in a scrolled window or not.
+	 **/
+	g_object_class_install_property (object_class, PROP_SCROLLED_WINDOW,
+					 g_param_spec_boolean ("in-scrolled-window",
+                                                               _("Determines if the contents appears in a scrolled window"),
+                                                               NULL, TRUE,
+                                                               G_PARAM_READABLE | G_PARAM_WRITABLE));
 }
 
 static void
@@ -294,6 +307,7 @@ gdaui_rt_editor_init (GdauiRtEditor *rte)
 	gtk_widget_show_all (sw);
 
 	rte->priv = g_new0 (GdauiRtEditorPriv, 1);
+	rte->priv->sw = sw;
 	rte->priv->saved_for_help = NULL;
 	rte->priv->enable_changed_signal = TRUE;
 	rte->priv->no_background = FALSE;
@@ -453,6 +467,31 @@ gdaui_rt_editor_set_property (GObject *object,
 		case PROP_SHOW_MARKUP:
 			_gdaui_rt_editor_set_show_markup (editor, g_value_get_boolean (value));
 			break;
+		case PROP_SCROLLED_WINDOW: {
+			gboolean setting;
+			setting = g_value_get_boolean (value);
+			if ((editor->priv->sw && setting) ||
+			    (! editor->priv->sw && ! setting))
+				break; /* nothing to change */
+			if (editor->priv->sw) {
+				/* remove scrolled window */
+				gtk_widget_reparent (GTK_WIDGET (editor->priv->textview), GTK_WIDGET (editor));
+				gtk_widget_destroy (editor->priv->sw);
+				editor->priv->sw = NULL;
+			}
+			else {
+				/* add scrolled window */
+				GtkWidget *sw;
+				sw = gtk_scrolled_window_new (NULL, NULL);
+				gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+								GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+				gtk_box_pack_end (GTK_BOX (editor), sw, TRUE, TRUE, 0);
+				editor->priv->sw = sw;
+				gtk_widget_show (sw);
+				gtk_widget_reparent (GTK_WIDGET (editor->priv->textview), GTK_WIDGET (sw));
+			}
+			break;
+		}
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
 			break;
@@ -480,6 +519,9 @@ gdaui_rt_editor_get_property (GObject *object,
 		case PROP_TEXTBUFFER:
 			g_value_set_object (value, editor->priv->textbuffer);
 			break;
+		case PROP_SCROLLED_WINDOW:
+			g_value_set_boolean (value, editor->priv->sw ? TRUE : FALSE);
+			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
 			break;



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