[libgda] Improvements in the GdauiDataSelector's implementations



commit 7078a5b41e2e73b0de975d60660b30ae6abaaa4c
Author: Vivien Malerba <malerba gnome-db org>
Date:   Wed Jan 13 20:48:42 2010 +0100

    Improvements in the GdauiDataSelector's implementations

 libgda-ui/gdaui-cloud.c         |    6 +++---
 libgda-ui/gdaui-combo.c         |    6 +++---
 libgda-ui/gdaui-data-selector.c |   21 +++++++++++++++++++--
 libgda-ui/gdaui-data-selector.h |    4 ++--
 libgda-ui/gdaui-form.c          |    6 +++---
 libgda-ui/gdaui-grid.c          |    6 +++---
 libgda-ui/gdaui-raw-form.c      |   25 +++++++++++++++++++------
 libgda-ui/gdaui-raw-grid.c      |   37 ++++++++++++++++++++++++++++++-------
 8 files changed, 82 insertions(+), 29 deletions(-)
---
diff --git a/libgda-ui/gdaui-cloud.c b/libgda-ui/gdaui-cloud.c
index e18b25a..f9d8ac5 100644
--- a/libgda-ui/gdaui-cloud.c
+++ b/libgda-ui/gdaui-cloud.c
@@ -43,7 +43,7 @@ static void              gdaui_cloud_selector_init (GdauiDataSelectorIface *ifac
 static GdaDataModel     *cloud_selector_get_model (GdauiDataSelector *iface);
 static void              cloud_selector_set_model (GdauiDataSelector *iface, GdaDataModel *model);
 static GArray           *cloud_selector_get_selected_rows (GdauiDataSelector *iface);
-static GdaDataModelIter *cloud_selector_get_current_selection (GdauiDataSelector *iface);
+static GdaDataModelIter *cloud_selector_get_data_set (GdauiDataSelector *iface);
 static gboolean          cloud_selector_select_row (GdauiDataSelector *iface, gint row);
 static void              cloud_selector_unselect_row (GdauiDataSelector *iface, gint row);
 static void              cloud_selector_set_column_visible (GdauiDataSelector *iface, gint column, gboolean visible);
@@ -178,7 +178,7 @@ gdaui_cloud_selector_init (GdauiDataSelectorIface *iface)
 	iface->get_model = cloud_selector_get_model;
 	iface->set_model = cloud_selector_set_model;
 	iface->get_selected_rows = cloud_selector_get_selected_rows;
-	iface->get_current_selection = cloud_selector_get_current_selection;
+	iface->get_data_set = cloud_selector_get_data_set;
 	iface->select_row = cloud_selector_select_row;
 	iface->unselect_row = cloud_selector_unselect_row;
 	iface->set_column_visible = cloud_selector_set_column_visible;
@@ -1139,7 +1139,7 @@ cloud_selector_get_selected_rows (GdauiDataSelector *iface)
 }
 
 static GdaDataModelIter *
-cloud_selector_get_current_selection (GdauiDataSelector *iface)
+cloud_selector_get_data_set (GdauiDataSelector *iface)
 {
 	GdauiCloud *cloud;
 
diff --git a/libgda-ui/gdaui-combo.c b/libgda-ui/gdaui-combo.c
index 7f3cc11..afa351a 100644
--- a/libgda-ui/gdaui-combo.c
+++ b/libgda-ui/gdaui-combo.c
@@ -63,7 +63,7 @@ static void              gdaui_combo_selector_init (GdauiDataSelectorIface *ifac
 static GdaDataModel     *combo_selector_get_model (GdauiDataSelector *iface);
 static void              combo_selector_set_model (GdauiDataSelector *iface, GdaDataModel *model);
 static GArray           *combo_selector_get_selected_rows (GdauiDataSelector *iface);
-static GdaDataModelIter *combo_selector_get_current_selection (GdauiDataSelector *iface);
+static GdaDataModelIter *combo_selector_get_data_set (GdauiDataSelector *iface);
 static gboolean          combo_selector_select_row (GdauiDataSelector *iface, gint row);
 static void              combo_selector_unselect_row (GdauiDataSelector *iface, gint row);
 static void              combo_selector_set_column_visible (GdauiDataSelector *iface, gint column, gboolean visible);
@@ -140,7 +140,7 @@ gdaui_combo_selector_init (GdauiDataSelectorIface *iface)
 	iface->get_model = combo_selector_get_model;
 	iface->set_model = combo_selector_set_model;
 	iface->get_selected_rows = combo_selector_get_selected_rows;
-	iface->get_current_selection = combo_selector_get_current_selection;
+	iface->get_data_set = combo_selector_get_data_set;
 	iface->select_row = combo_selector_select_row;
 	iface->unselect_row = combo_selector_unselect_row;
 	iface->set_column_visible = combo_selector_set_column_visible;
@@ -710,7 +710,7 @@ combo_selector_get_selected_rows (GdauiDataSelector *iface)
 }
 
 static GdaDataModelIter *
-combo_selector_get_current_selection (GdauiDataSelector *iface)
+combo_selector_get_data_set (GdauiDataSelector *iface)
 {
 	GdauiCombo *combo;
 
diff --git a/libgda-ui/gdaui-data-selector.c b/libgda-ui/gdaui-data-selector.c
index 5063d9e..5bfff25 100644
--- a/libgda-ui/gdaui-data-selector.c
+++ b/libgda-ui/gdaui-data-selector.c
@@ -127,6 +127,11 @@ gdaui_data_selector_set_model (GdauiDataSelector *iface, GdaDataModel *model)
  *
  * Gat an array of selected rows. If no row is selected, the the returned value is %NULL.
  *
+ * Please note that rows refers to the "visible" rows
+ * at the time it's being called, which may change if the widget implementing this interface
+ * uses a #GdaDataProxy (as is the case for example for the #GdauiRawForm, #GdauiForm, #GdauiRawGrid
+ * and #GdauiGrid).
+ *
  * Returns: an array of #gint values, one for each selected row. Use g_array_free() when
  * finished (passing %TRUE as the last argument)
  *
@@ -148,6 +153,13 @@ gdaui_data_selector_get_selected_rows (GdauiDataSelector *iface)
  * @iface: an object which implements the #GdauiDataSelector interface
  * @row: the row to select
  *
+ * Force the selection of a specific row.
+ *
+ * Please note that @row refers to the "visible" row
+ * at the time it's being called, which may change if the widget implementing this interface
+ * uses a #GdaDataProxy (as is the case for example for the #GdauiRawForm, #GdauiForm, #GdauiRawGrid
+ * and #GdauiGrid).
+ *
  * Returns: %TRUE if the row has been selected
  *
  * Since: 4.2
@@ -168,6 +180,11 @@ gdaui_data_selector_select_row (GdauiDataSelector *iface, gint row)
  * @iface: an object which implements the #GdauiDataSelector interface
  * @row: the row to unselect
  *
+ * Please note that @row refers to the "visible" row
+ * at the time it's being called, which may change if the widget implementing this interface
+ * uses a #GdaDataProxy (as is the case for example for the #GdauiRawForm, #GdauiForm, #GdauiRawGrid
+ * and #GdauiGrid).
+ *
  * Since: 4.2
  */
 void
@@ -218,7 +235,7 @@ gdaui_data_selector_get_data_set (GdauiDataSelector *iface)
 {
 	g_return_val_if_fail (GDAUI_IS_DATA_SELECTOR (iface), NULL);
 
-	if (GDAUI_DATA_SELECTOR_GET_IFACE (iface)->get_current_selection)
-		return (GDAUI_DATA_SELECTOR_GET_IFACE (iface)->get_current_selection) (iface);
+	if (GDAUI_DATA_SELECTOR_GET_IFACE (iface)->get_data_set)
+		return (GDAUI_DATA_SELECTOR_GET_IFACE (iface)->get_data_set) (iface);
 	return NULL;
 }
diff --git a/libgda-ui/gdaui-data-selector.h b/libgda-ui/gdaui-data-selector.h
index 935d15b..27ebe65 100644
--- a/libgda-ui/gdaui-data-selector.h
+++ b/libgda-ui/gdaui-data-selector.h
@@ -46,7 +46,7 @@ struct _GdauiDataSelectorIface
 	GdaDataModel     *(*get_model)             (GdauiDataSelector *iface);
 	void              (*set_model)             (GdauiDataSelector *iface, GdaDataModel *model);
 	GArray           *(*get_selected_rows)     (GdauiDataSelector *iface);
-	GdaDataModelIter *(*get_current_selection) (GdauiDataSelector *iface);
+	GdaDataModelIter *(*get_data_set)          (GdauiDataSelector *iface);
 	gboolean          (*select_row)            (GdauiDataSelector *iface, gint row);
 	void              (*unselect_row)          (GdauiDataSelector *iface, gint row);
 	void              (*set_column_visible)    (GdauiDataSelector *iface, gint column, gboolean visible);
@@ -60,7 +60,7 @@ GType             gdaui_data_selector_get_type              (void) G_GNUC_CONST;
 GdaDataModel     *gdaui_data_selector_get_model             (GdauiDataSelector *iface);
 void              gdaui_data_selector_set_model             (GdauiDataSelector *iface, GdaDataModel *model);
 GArray           *gdaui_data_selector_get_selected_rows     (GdauiDataSelector *iface);
-GdaDataModelIter *gdaui_data_selector_get_data_set (GdauiDataSelector *iface);
+GdaDataModelIter *gdaui_data_selector_get_data_set          (GdauiDataSelector *iface);
 gboolean          gdaui_data_selector_select_row            (GdauiDataSelector *iface, gint row);
 void              gdaui_data_selector_unselect_row          (GdauiDataSelector *iface, gint row);
 void              gdaui_data_selector_set_column_visible    (GdauiDataSelector *iface, gint column, gboolean visible);
diff --git a/libgda-ui/gdaui-form.c b/libgda-ui/gdaui-form.c
index b5a5ef6..da7c50b 100644
--- a/libgda-ui/gdaui-form.c
+++ b/libgda-ui/gdaui-form.c
@@ -54,7 +54,7 @@ static void              gdaui_form_selector_init (GdauiDataSelectorIface *iface
 static GdaDataModel     *gdaui_form_selector_get_model (GdauiDataSelector *iface);
 static void              gdaui_form_selector_set_model (GdauiDataSelector *iface, GdaDataModel *model);
 static GArray           *gdaui_form_selector_get_selected_rows (GdauiDataSelector *iface);
-static GdaDataModelIter *gdaui_form_selector_get_current_selection (GdauiDataSelector *iface);
+static GdaDataModelIter *gdaui_form_selector_get_data_set (GdauiDataSelector *iface);
 static gboolean          gdaui_form_selector_select_row (GdauiDataSelector *iface, gint row);
 static void              gdaui_form_selector_unselect_row (GdauiDataSelector *iface, gint row);
 static void              gdaui_form_selector_set_column_visible (GdauiDataSelector *iface, gint column, gboolean visible);
@@ -132,7 +132,7 @@ gdaui_form_selector_init (GdauiDataSelectorIface *iface)
 	iface->get_model = gdaui_form_selector_get_model;
 	iface->set_model = gdaui_form_selector_set_model;
 	iface->get_selected_rows = gdaui_form_selector_get_selected_rows;
-	iface->get_current_selection = gdaui_form_selector_get_current_selection;
+	iface->get_data_set = gdaui_form_selector_get_data_set;
 	iface->select_row = gdaui_form_selector_select_row;
 	iface->unselect_row = gdaui_form_selector_unselect_row;
 	iface->set_column_visible = gdaui_form_selector_set_column_visible;
@@ -350,7 +350,7 @@ gdaui_form_selector_get_selected_rows (GdauiDataSelector *iface)
 }
 
 static GdaDataModelIter *
-gdaui_form_selector_get_current_selection (GdauiDataSelector *iface)
+gdaui_form_selector_get_data_set (GdauiDataSelector *iface)
 {
 	return gdaui_data_selector_get_data_set ((GdauiDataSelector*) GDAUI_FORM (iface)->priv->raw_form);
 }
diff --git a/libgda-ui/gdaui-grid.c b/libgda-ui/gdaui-grid.c
index a3bc072..039c79c 100644
--- a/libgda-ui/gdaui-grid.c
+++ b/libgda-ui/gdaui-grid.c
@@ -54,7 +54,7 @@ static void              gdaui_grid_selector_init (GdauiDataSelectorIface *iface
 static GdaDataModel     *gdaui_grid_selector_get_model (GdauiDataSelector *iface);
 static void              gdaui_grid_selector_set_model (GdauiDataSelector *iface, GdaDataModel *model);
 static GArray           *gdaui_grid_selector_get_selected_rows (GdauiDataSelector *iface);
-static GdaDataModelIter *gdaui_grid_selector_get_current_selection (GdauiDataSelector *iface);
+static GdaDataModelIter *gdaui_grid_selector_get_data_set (GdauiDataSelector *iface);
 static gboolean          gdaui_grid_selector_select_row (GdauiDataSelector *iface, gint row);
 static void              gdaui_grid_selector_unselect_row (GdauiDataSelector *iface, gint row);
 static void              gdaui_grid_selector_set_column_visible (GdauiDataSelector *iface, gint column, gboolean visible);
@@ -133,7 +133,7 @@ gdaui_grid_selector_init (GdauiDataSelectorIface *iface)
 	iface->get_model = gdaui_grid_selector_get_model;
 	iface->set_model = gdaui_grid_selector_set_model;
 	iface->get_selected_rows = gdaui_grid_selector_get_selected_rows;
-	iface->get_current_selection = gdaui_grid_selector_get_current_selection;
+	iface->get_data_set = gdaui_grid_selector_get_data_set;
 	iface->select_row = gdaui_grid_selector_select_row;
 	iface->unselect_row = gdaui_grid_selector_unselect_row;
 	iface->set_column_visible = gdaui_grid_selector_set_column_visible;
@@ -351,7 +351,7 @@ gdaui_grid_selector_get_selected_rows (GdauiDataSelector *iface)
 }
 
 static GdaDataModelIter *
-gdaui_grid_selector_get_current_selection (GdauiDataSelector *iface)
+gdaui_grid_selector_get_data_set (GdauiDataSelector *iface)
 {
 	return gdaui_data_selector_get_data_set ((GdauiDataSelector*) GDAUI_GRID (iface)->priv->raw_grid);
 }
diff --git a/libgda-ui/gdaui-raw-form.c b/libgda-ui/gdaui-raw-form.c
index 28a0468..8f764cb 100644
--- a/libgda-ui/gdaui-raw-form.c
+++ b/libgda-ui/gdaui-raw-form.c
@@ -65,7 +65,7 @@ static void              gdaui_raw_form_selector_init (GdauiDataSelectorIface *i
 static GdaDataModel     *gdaui_raw_form_selector_get_model (GdauiDataSelector *iface);
 static void              gdaui_raw_form_selector_set_model (GdauiDataSelector *iface, GdaDataModel *model);
 static GArray           *gdaui_raw_form_selector_get_selected_rows (GdauiDataSelector *iface);
-static GdaDataModelIter *gdaui_raw_form_selector_get_current_selection (GdauiDataSelector *iface);
+static GdaDataModelIter *gdaui_raw_form_selector_get_data_set (GdauiDataSelector *iface);
 static gboolean          gdaui_raw_form_selector_select_row (GdauiDataSelector *iface, gint row);
 static void              gdaui_raw_form_selector_unselect_row (GdauiDataSelector *iface, gint row);
 static void              gdaui_raw_form_selector_set_column_visible (GdauiDataSelector *iface, gint column, gboolean visible);
@@ -151,7 +151,7 @@ gdaui_raw_form_selector_init (GdauiDataSelectorIface *iface)
 	iface->get_model = gdaui_raw_form_selector_get_model;
 	iface->set_model = gdaui_raw_form_selector_set_model;
 	iface->get_selected_rows = gdaui_raw_form_selector_get_selected_rows;
-	iface->get_current_selection = gdaui_raw_form_selector_get_current_selection;
+	iface->get_data_set = gdaui_raw_form_selector_get_data_set;
 	iface->select_row = gdaui_raw_form_selector_select_row;
 	iface->unselect_row = gdaui_raw_form_selector_unselect_row;
 	iface->set_column_visible = gdaui_raw_form_selector_set_column_visible;
@@ -1055,12 +1055,25 @@ gdaui_raw_form_selector_set_model (GdauiDataSelector *iface, GdaDataModel *model
 static GArray *
 gdaui_raw_form_selector_get_selected_rows (GdauiDataSelector *iface)
 {
-	TO_IMPLEMENT;
-	return NULL;
+	GdauiRawForm *form;
+
+	g_return_val_if_fail (GDAUI_IS_RAW_FORM (iface), NULL);
+	form = GDAUI_RAW_FORM (iface);
+
+	if (gda_data_model_iter_is_valid (form->priv->iter)) {
+		GArray *array;
+		gint row;
+		array = g_array_new (FALSE, FALSE, sizeof (gint));
+		row = gda_data_model_iter_get_row (form->priv->iter);
+		g_array_append_val (array, row);
+		return array;
+	}
+	else
+		return NULL;
 }
 
 static GdaDataModelIter *
-gdaui_raw_form_selector_get_current_selection (GdauiDataSelector *iface)
+gdaui_raw_form_selector_get_data_set (GdauiDataSelector *iface)
 {
 	GdauiRawForm *form;
 
@@ -1084,7 +1097,7 @@ gdaui_raw_form_selector_select_row (GdauiDataSelector *iface, gint row)
 static void
 gdaui_raw_form_selector_unselect_row (GdauiDataSelector *iface, gint row)
 {
-	TO_IMPLEMENT;
+	g_warning ("%s() method not supported\n", __FUNCTION__);
 }
 
 static void
diff --git a/libgda-ui/gdaui-raw-grid.c b/libgda-ui/gdaui-raw-grid.c
index c2fd1f2..acb6517 100644
--- a/libgda-ui/gdaui-raw-grid.c
+++ b/libgda-ui/gdaui-raw-grid.c
@@ -71,7 +71,7 @@ static void              gdaui_raw_grid_selector_init (GdauiDataSelectorIface *i
 static GdaDataModel     *gdaui_raw_grid_selector_get_model (GdauiDataSelector *iface);
 static void              gdaui_raw_grid_selector_set_model (GdauiDataSelector *iface, GdaDataModel *model);
 static GArray           *gdaui_raw_grid_selector_get_selected_rows (GdauiDataSelector *iface);
-static GdaDataModelIter *gdaui_raw_grid_selector_get_current_selection (GdauiDataSelector *iface);
+static GdaDataModelIter *gdaui_raw_grid_selector_get_data_set (GdauiDataSelector *iface);
 static gboolean          gdaui_raw_grid_selector_select_row (GdauiDataSelector *iface, gint row);
 static void              gdaui_raw_grid_selector_unselect_row (GdauiDataSelector *iface, gint row);
 static void              gdaui_raw_grid_selector_set_column_visible (GdauiDataSelector *iface, gint column, gboolean visible);
@@ -237,7 +237,7 @@ gdaui_raw_grid_selector_init (GdauiDataSelectorIface *iface)
 	iface->get_model = gdaui_raw_grid_selector_get_model;
 	iface->set_model = gdaui_raw_grid_selector_set_model;
 	iface->get_selected_rows = gdaui_raw_grid_selector_get_selected_rows;
-	iface->get_current_selection = gdaui_raw_grid_selector_get_current_selection;
+	iface->get_data_set = gdaui_raw_grid_selector_get_data_set;
 	iface->select_row = gdaui_raw_grid_selector_select_row;
 	iface->unselect_row = gdaui_raw_grid_selector_unselect_row;
 	iface->set_column_visible = gdaui_raw_grid_selector_set_column_visible;
@@ -3034,7 +3034,7 @@ gdaui_raw_grid_selector_get_selected_rows (GdauiDataSelector *iface)
 }
 
 static GdaDataModelIter *
-gdaui_raw_grid_selector_get_current_selection (GdauiDataSelector *iface)
+gdaui_raw_grid_selector_get_data_set (GdauiDataSelector *iface)
 {
 	GdauiRawGrid *grid;
 
@@ -3048,18 +3048,41 @@ static gboolean
 gdaui_raw_grid_selector_select_row (GdauiDataSelector *iface, gint row)
 {
 	GdauiRawGrid *grid;
+	GtkTreeSelection *selection;
+	GtkTreePath *path;
+	gboolean retval = TRUE;
+	GtkTreeIter iter;
 
 	g_return_val_if_fail (GDAUI_IS_RAW_GRID (iface), FALSE);
-	grid = (GdauiRawGrid*) iface;
+	grid = GDAUI_RAW_GRID (iface);
 
-	TO_IMPLEMENT;
-	return FALSE;
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (grid));
+	path = gtk_tree_path_new_from_indices (row, -1);
+	if (gtk_tree_model_get_iter (GTK_TREE_MODEL (grid->priv->store), &iter, path))
+		gtk_tree_selection_select_path (selection, path);
+	else
+		retval = FALSE;
+	gtk_tree_path_free (path);
+
+	return retval;
 }
 
 static void
 gdaui_raw_grid_selector_unselect_row (GdauiDataSelector *iface, gint row)
 {
-	TO_IMPLEMENT;
+	GdauiRawGrid *grid;
+	GtkTreeSelection *selection;
+	GtkTreePath *path;
+	GtkTreeIter iter;
+
+	g_return_if_fail (GDAUI_IS_RAW_GRID (iface));
+	grid = GDAUI_RAW_GRID (iface);
+
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (grid));
+	path = gtk_tree_path_new_from_indices (row, -1);
+	if (gtk_tree_model_get_iter (GTK_TREE_MODEL (grid->priv->store), &iter, path))
+		gtk_tree_selection_unselect_path (selection, path);
+	gtk_tree_path_free (path);
 }
 
 static void



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