From: Andrea Zagli Date: Sat, 26 Nov 2011 09:31:09 +0000 (+0100) Subject: In GdaExQueryEditor used GtkDateEntry if it is present/usable. X-Git-Tag: 0.5.0~19 X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=02bd733f6bf26492ca5db632892680f229f1c47f;p=libgdaex In GdaExQueryEditor used GtkDateEntry if it is present/usable. --- diff --git a/.anjuta/session/anjuta.session b/.anjuta/session/anjuta.session index 300bb0f..9954397 100644 --- a/.anjuta/session/anjuta.session +++ b/.anjuta/session/anjuta.session @@ -1,14 +1,14 @@ [Anjuta] Maximized=1 -Geometry=1366x716+0+30 +Geometry=1366x745+0+1 [Project Manager] -Shortcut=libgdaex//libgdaex//src//libgdaex.la%%%libgdaex//libgdaex//tests//test_prefix%%%libgdaex//libgdaex//tests//grid%%%libgdaex//libgdaex//tests//query_editor -Expand=libgdaex +Shortcut=libgdaex//libgdaex//src//libgdaex.la%%%libgdaex//libgdaex//tests//grid%%%libgdaex//libgdaex//tests//query_editor%%%libgdaex//libgdaex//tests//select%%%libgdaex//libgdaex//tests//test_prefix +Expand=libgdaex.la%%%libgdaex [File Loader] -Files=file:///home/andreaz/files/c/libgdaex/src/queryeditor.c#15 +Files=file:///home/andreaz/files/c/libgdaex/src/queryeditor.c#668 [Document Manager] bookmarks=\n\n diff --git a/.anjuta/session/dock-layout.xml b/.anjuta/session/dock-layout.xml index d8c025d..17c0817 100644 --- a/.anjuta/session/dock-layout.xml +++ b/.anjuta/session/dock-layout.xml @@ -1,2 +1,2 @@ - + diff --git a/.anjuta_sym_db.db b/.anjuta_sym_db.db index 722ad46..60e368a 100644 Binary files a/.anjuta_sym_db.db and b/.anjuta_sym_db.db differ diff --git a/configure.ac b/configure.ac index 1dde28a..19df4b0 100644 --- a/configure.ac +++ b/configure.ac @@ -40,7 +40,8 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", AM_GLIB_GNU_GETTEXT # Checks for libraries. -PKG_CHECK_MODULES(GDAEX, [libgda-4.0 >= 4 +PKG_CHECK_MODULES(GDAEX, [gmodule-2.0 >= 2 + libgda-4.0 >= 4 gio-2.0 >= 2.24 gtk+-2.0 >= 2.20]) diff --git a/src/queryeditor.c b/src/queryeditor.c index af2191c..44c9182 100644 --- a/src/queryeditor.c +++ b/src/queryeditor.c @@ -159,7 +159,10 @@ static void gdaex_query_editor_on_sel_order_changed (GtkTreeSelection *treeselec #define GDAEX_QUERY_EDITOR_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_GDAEX_QUERY_EDITOR, GdaExQueryEditorPrivate)) -typedef GtkWidget *(* GtkDateEntryNew) (void); +typedef GtkWidget *(* GtkDateEntryNew) (const gchar *format, + const gchar *separator, + gboolean calendar_button_is_visible); +typedef void (* GtkDateEntrySetDateVisible) (gpointer gtkdateentry, gboolean visible); typedef void (* GtkDateEntrySetTimeVisible) (gpointer gtkdateentry, gboolean visible); typedef struct _GdaExQueryEditorPrivate GdaExQueryEditorPrivate; @@ -167,6 +170,11 @@ struct _GdaExQueryEditorPrivate { GdaEx *gdaex; + GModule *gtk_date_entry_module; + GtkDateEntryNew gtk_date_entry_new; + GtkDateEntrySetDateVisible gtk_date_entry_set_date_visible; + GtkDateEntrySetTimeVisible gtk_date_entry_set_time_visible; + GtkBuilder *gtkbuilder; GtkWidget *notebook; @@ -308,6 +316,34 @@ GdaExQueryEditor priv->gdaex = gdaex; + /* test if we can use GtkDateEntry */ + priv->gtk_date_entry_module = NULL; + priv->gtk_date_entry_new = NULL; + priv->gtk_date_entry_set_date_visible = NULL; + priv->gtk_date_entry_set_time_visible = NULL; + if (g_module_supported ()) + { + /* TODO it must be found in a better way */ +#ifdef G_OS_WIN32 + priv->gtk_date_entry_module = g_module_open (g_build_filename (g_win32_get_package_installation_directory_of_module (NULL), "libgtkdateentry-0.dll", NULL), G_MODULE_BIND_LAZY); +#else + priv->gtk_date_entry_module = g_module_open ("/usr/local/lib/libgtkdateentry.la", G_MODULE_BIND_LAZY); +#endif + if (priv->gtk_date_entry_module != NULL) + { + if (!g_module_symbol (priv->gtk_date_entry_module, "gtk_date_entry_new", (gpointer *)&(priv->gtk_date_entry_new)) + || !g_module_symbol (priv->gtk_date_entry_module, "gtk_date_entry_set_date_visible", (gpointer *)&(priv->gtk_date_entry_set_date_visible)) + || !g_module_symbol (priv->gtk_date_entry_module, "gtk_date_entry_set_time_visible", (gpointer *)&(priv->gtk_date_entry_set_time_visible))) + { + g_module_close (priv->gtk_date_entry_module); + priv->gtk_date_entry_module = NULL; + priv->gtk_date_entry_new = NULL; + priv->gtk_date_entry_set_date_visible = NULL; + priv->gtk_date_entry_set_time_visible = NULL; + } + } + } + priv->gtkbuilder = gdaex_get_gtkbuilder (priv->gdaex); error = NULL; @@ -591,34 +627,80 @@ gdaex_query_editor_table_add_field (GdaExQueryEditor *qe, if (!GDAEX_QUERY_EDITOR_IS_IWIDGET (_field->iwidget_from)) { - _field->iwidget_from = GDAEX_QUERY_EDITOR_IWIDGET (gdaex_query_editor_entry_new ()); - if (_field->type == GDAEX_QE_FIELD_TYPE_DATE) - { - gtk_entry_set_max_length (GTK_ENTRY (_field->iwidget_from), 10); - } - else if (_field->type == GDAEX_QE_FIELD_TYPE_DATETIME) + if (priv->gtk_date_entry_module != NULL + && (_field->type == GDAEX_QE_FIELD_TYPE_DATE + || _field->type == GDAEX_QE_FIELD_TYPE_DATETIME + || _field->type == GDAEX_QE_FIELD_TYPE_TIME)) { - gtk_entry_set_max_length (GTK_ENTRY (_field->iwidget_from), 19); + _field->iwidget_from = GDAEX_QUERY_EDITOR_IWIDGET (priv->gtk_date_entry_new (NULL, NULL, TRUE)); + if (_field->type == GDAEX_QE_FIELD_TYPE_DATE) + { + priv->gtk_date_entry_set_date_visible ((gpointer)_field->iwidget_from, TRUE); + priv->gtk_date_entry_set_time_visible ((gpointer)_field->iwidget_from, FALSE); + } + else if (_field->type == GDAEX_QE_FIELD_TYPE_DATETIME) + { + } + else if (_field->type == GDAEX_QE_FIELD_TYPE_TIME) + { + priv->gtk_date_entry_set_date_visible ((gpointer)_field->iwidget_from, FALSE); + priv->gtk_date_entry_set_time_visible ((gpointer)_field->iwidget_from, TRUE); + } } - else if (_field->type == GDAEX_QE_FIELD_TYPE_TIME) + else { - gtk_entry_set_max_length (GTK_ENTRY (_field->iwidget_from), 8); + _field->iwidget_from = GDAEX_QUERY_EDITOR_IWIDGET (gdaex_query_editor_entry_new ()); + if (_field->type == GDAEX_QE_FIELD_TYPE_DATE) + { + gtk_entry_set_max_length (GTK_ENTRY (_field->iwidget_from), 10); + } + else if (_field->type == GDAEX_QE_FIELD_TYPE_DATETIME) + { + gtk_entry_set_max_length (GTK_ENTRY (_field->iwidget_from), 19); + } + else if (_field->type == GDAEX_QE_FIELD_TYPE_TIME) + { + gtk_entry_set_max_length (GTK_ENTRY (_field->iwidget_from), 8); + } } } if (!GDAEX_QUERY_EDITOR_IS_IWIDGET (_field->iwidget_to)) { - _field->iwidget_to = GDAEX_QUERY_EDITOR_IWIDGET (gdaex_query_editor_entry_new ()); - if (_field->type == GDAEX_QE_FIELD_TYPE_DATE) - { - gtk_entry_set_max_length (GTK_ENTRY (_field->iwidget_to), 10); - } - else if (_field->type == GDAEX_QE_FIELD_TYPE_DATETIME) + if (priv->gtk_date_entry_module != NULL + && (_field->type == GDAEX_QE_FIELD_TYPE_DATE + || _field->type == GDAEX_QE_FIELD_TYPE_DATETIME + || _field->type == GDAEX_QE_FIELD_TYPE_TIME)) { - gtk_entry_set_max_length (GTK_ENTRY (_field->iwidget_to), 19); + _field->iwidget_to = GDAEX_QUERY_EDITOR_IWIDGET (priv->gtk_date_entry_new (NULL, NULL, TRUE)); + if (_field->type == GDAEX_QE_FIELD_TYPE_DATE) + { + priv->gtk_date_entry_set_date_visible ((gpointer)_field->iwidget_to, TRUE); + priv->gtk_date_entry_set_time_visible ((gpointer)_field->iwidget_to, FALSE); + } + else if (_field->type == GDAEX_QE_FIELD_TYPE_DATETIME) + { + } + else if (_field->type == GDAEX_QE_FIELD_TYPE_TIME) + { + priv->gtk_date_entry_set_date_visible ((gpointer)_field->iwidget_to, FALSE); + priv->gtk_date_entry_set_time_visible ((gpointer)_field->iwidget_to, TRUE); + } } - else if (_field->type == GDAEX_QE_FIELD_TYPE_TIME) + else { - gtk_entry_set_max_length (GTK_ENTRY (_field->iwidget_to), 8); + _field->iwidget_to = GDAEX_QUERY_EDITOR_IWIDGET (gdaex_query_editor_entry_new ()); + if (_field->type == GDAEX_QE_FIELD_TYPE_DATE) + { + gtk_entry_set_max_length (GTK_ENTRY (_field->iwidget_to), 10); + } + else if (_field->type == GDAEX_QE_FIELD_TYPE_DATETIME) + { + gtk_entry_set_max_length (GTK_ENTRY (_field->iwidget_to), 19); + } + else if (_field->type == GDAEX_QE_FIELD_TYPE_TIME) + { + gtk_entry_set_max_length (GTK_ENTRY (_field->iwidget_to), 8); + } } }