Plugin de Glade y otros cambios
This commit is contained in:
parent
d23042fc1c
commit
7d39316267
1
AUTHORS
1
AUTHORS
|
@ -1,4 +1,3 @@
|
||||||
Alejandro Tomas Colombini Gomez
|
Alejandro Tomas Colombini Gomez
|
||||||
Juan Ferrer Toribio
|
Juan Ferrer Toribio
|
||||||
Javier Gallego Ferris
|
Javier Gallego Ferris
|
||||||
Jordi Cuquerella
|
|
||||||
|
|
|
@ -57,13 +57,13 @@ vn_datadir = $(hedera_datadir)/vn
|
||||||
vn_imagedir = $(vn_datadir)/image
|
vn_imagedir = $(vn_datadir)/image
|
||||||
vn_guidir = $(vn_datadir)/gui
|
vn_guidir = $(vn_datadir)/gui
|
||||||
|
|
||||||
|
module_querydir = $(hedera_datadir)/module/sql
|
||||||
|
|
||||||
if ENABLE_INSTALL
|
if ENABLE_INSTALL
|
||||||
vn_xmldir = $(datadir)/xml/$(PACKAGE)
|
vn_xmldir = $(datadir)/xml/$(PACKAGE)
|
||||||
module_querydir = $(hedera_datadir)/module/sql
|
|
||||||
module_datadir = $(hedera_datadir)/module
|
module_datadir = $(hedera_datadir)/module
|
||||||
else
|
else
|
||||||
vn_xmldir = $(vn_datadir)/schema
|
vn_xmldir = $(vn_datadir)/schema
|
||||||
module_querydir = $(hedera_datadir)/module/sql
|
|
||||||
module_datadir = $(hedera_datadir)/module/data
|
module_datadir = $(hedera_datadir)/module/data
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
dnl
|
||||||
|
dnl Copyright (C) 2012 - Juan Ferrer Toribio
|
||||||
|
dnl
|
||||||
|
dnl This program is free software: you can redistribute it and/or modify
|
||||||
|
dnl it under the terms of the GNU General Public License as published by
|
||||||
|
dnl the Free Software Foundation, either version 3 of the License, or
|
||||||
|
dnl (at your option) any later version.
|
||||||
|
dnl
|
||||||
|
dnl This program is distributed in the hope that it will be useful,
|
||||||
|
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
dnl GNU General Public License for more details.
|
||||||
|
dnl
|
||||||
|
dnl You should have received a copy of the GNU General Public License
|
||||||
|
dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
dnl
|
||||||
|
|
||||||
|
# serial 2 vn-dev
|
||||||
|
|
||||||
|
AC_DEFUN([VN_BUILD_OPTIONS],
|
||||||
|
[
|
||||||
|
case $CFLAGS in
|
||||||
|
*-W*) ;;
|
||||||
|
*)CFLAGS+=" -Wall ";;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Check for debug mode
|
||||||
|
AC_MSG_CHECKING([whether to build with debug information...])
|
||||||
|
AC_ARG_ENABLE([debug],
|
||||||
|
[AS_HELP_STRING([--enable-debug],
|
||||||
|
[Enable debug data generation [default = no]])],
|
||||||
|
[ENABLE_DEBUG="$enableval"],
|
||||||
|
[ENABLE_DEBUG=no])
|
||||||
|
AC_MSG_RESULT([$ENABLE_DEBUG])
|
||||||
|
|
||||||
|
case $CFLAGS in
|
||||||
|
*-g*) ;;
|
||||||
|
*)
|
||||||
|
if test x"$ENABLE_DEBUG" = x"yes"; then
|
||||||
|
CFLAGS+=" -ggdb "
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Check if the package must be configured to be installed
|
||||||
|
AC_MSG_CHECKING([whether to configure to install...])
|
||||||
|
AC_ARG_ENABLE([install],
|
||||||
|
[AS_HELP_STRING([--enable-install],
|
||||||
|
[Enable install configuration [default = yes]])],
|
||||||
|
[ENABLE_INSTALL="$enableval"],
|
||||||
|
[ENABLE_INSTALL=yes])
|
||||||
|
AC_MSG_RESULT([$installit])
|
||||||
|
AM_CONDITIONAL(ENABLE_INSTALL, [test x"$ENABLE_INSTALL" = x"yes"])
|
||||||
|
|
||||||
|
case $CFLAGS in
|
||||||
|
*-O*) ;;
|
||||||
|
*)
|
||||||
|
if test x"$ENABLE_INSTALL" = x"yes"; then
|
||||||
|
CFLAGS+=" -O3"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AC_SUBST([ENABLE_DEBUG])
|
||||||
|
AC_SUBST([ENABLE_INSTALL])
|
||||||
|
AC_SUBST([CFLAGS])
|
||||||
|
])
|
||||||
|
|
67
configure.ac
67
configure.ac
|
@ -1,5 +1,7 @@
|
||||||
|
|
||||||
AC_INIT([hedera], [1.0])
|
AC_INIT([hedera], [1.0])
|
||||||
|
dnl Set compiler flags empty by default
|
||||||
|
: ${CFLAGS=''}
|
||||||
|
|
||||||
AC_CONFIG_AUX_DIR([build])
|
AC_CONFIG_AUX_DIR([build])
|
||||||
AC_CONFIG_MACRO_DIR([build/m4])
|
AC_CONFIG_MACRO_DIR([build/m4])
|
||||||
|
@ -8,17 +10,32 @@ LT_INIT([dlopen])
|
||||||
AC_PREREQ([2.69])
|
AC_PREREQ([2.69])
|
||||||
AM_SILENT_RULES([yes])
|
AM_SILENT_RULES([yes])
|
||||||
|
|
||||||
# Checks for programs
|
# Checks for the C compiler
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
|
|
||||||
|
# Check for additional packages
|
||||||
PKG_CHECK_MODULES([glib], [glib-2.0])
|
PKG_CHECK_MODULES([glib], [glib-2.0])
|
||||||
PKG_CHECK_MODULES([gdome], [gdome2])
|
PKG_CHECK_MODULES([gdome], [gdome2])
|
||||||
PKG_CHECK_MODULES([gtk], [gtk+-3.0])
|
PKG_CHECK_MODULES([gtk], [gtk+-3.0])
|
||||||
PKG_CHECK_MODULES([gladeui], gladeui-2.0)
|
PKG_CHECK_MODULES([gladeui], [gladeui-2.0])
|
||||||
|
PKG_CHECK_MODULES([gtksourceview], [gtksourceview-3.0]
|
||||||
|
,[SOURCEVIEW=yes]
|
||||||
|
,[echo $gtksourceview_PKG_ERRORS])
|
||||||
|
|
||||||
|
AM_CONDITIONAL(HAVE_SOURCEVIEW, [test -n $SOURCEVIEW])
|
||||||
|
|
||||||
GTK_DOC_CHECK([1.14],[--flavour no-tmpl])
|
GTK_DOC_CHECK([1.14],[--flavour no-tmpl])
|
||||||
|
|
||||||
|
# Internationalization
|
||||||
IT_PROG_INTLTOOL([0.40.1], [no-xml])
|
IT_PROG_INTLTOOL([0.40.1], [no-xml])
|
||||||
|
|
||||||
|
GETTEXT_PACKAGE=hedera
|
||||||
|
AC_SUBST([GETTEXT_PACKAGE])
|
||||||
|
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [GETTEXT package name])
|
||||||
|
ALL_LINGUAS="es ca nl"
|
||||||
|
AM_GLIB_GNU_GETTEXT
|
||||||
|
AM_XGETTEXT_OPTION([-k_ -kQ_:1g -kN_ -kC_:1c,2 -kNC_:1c,2])
|
||||||
|
|
||||||
# Checks for Ragel State Machine Compiler
|
# Checks for Ragel State Machine Compiler
|
||||||
AC_PATH_PROG(RAGEL, [ragel], [no])
|
AC_PATH_PROG(RAGEL, [ragel], [no])
|
||||||
if test x"$RAGEL" = x"no" ; then
|
if test x"$RAGEL" = x"no" ; then
|
||||||
|
@ -49,51 +66,11 @@ fi
|
||||||
|
|
||||||
AM_CONDITIONAL(ENABLE_VALA, [test x"$ENABLE_VALA" = x"yes" -a x"$VAPIGEN" != x"no"])
|
AM_CONDITIONAL(ENABLE_VALA, [test x"$ENABLE_VALA" = x"yes" -a x"$VAPIGEN" != x"no"])
|
||||||
|
|
||||||
# Internationalization
|
|
||||||
GETTEXT_PACKAGE=hedera
|
|
||||||
AC_SUBST([GETTEXT_PACKAGE])
|
|
||||||
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [GETTEXT package name])
|
|
||||||
ALL_LINGUAS="es ca nl"
|
|
||||||
AM_GLIB_GNU_GETTEXT
|
|
||||||
AM_XGETTEXT_OPTION([-k_ -kQ_:1g -kN_ -kC_:1c,2 -kNC_:1c,2])
|
|
||||||
|
|
||||||
# GSettings configuration
|
# GSettings configuration
|
||||||
GLIB_GSETTINGS
|
GLIB_GSETTINGS
|
||||||
|
|
||||||
CFLAGS=" -Wall"
|
# Sets the default build options for Vn projects
|
||||||
|
VN_BUILD_OPTIONS
|
||||||
# Check for debug mode
|
|
||||||
AC_MSG_CHECKING([whether to build with debug information...])
|
|
||||||
AC_ARG_ENABLE([debug],
|
|
||||||
[AS_HELP_STRING([--enable-debug],
|
|
||||||
[Enable debug data generation [default = no]])],
|
|
||||||
[ENABLE_DEBUG="$enableval"],
|
|
||||||
[ENABLE_DEBUG=no])
|
|
||||||
AC_MSG_RESULT([$ENABLE_DEBUG])
|
|
||||||
|
|
||||||
if test x"$ENABLE_DEBUG" = x"yes"; then
|
|
||||||
CFLAGS+=" -ggdb"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if it will be installed
|
|
||||||
AC_MSG_CHECKING([whether to configure to install...])
|
|
||||||
AC_ARG_ENABLE([install],
|
|
||||||
[AS_HELP_STRING([--enable-install],
|
|
||||||
[Enable install configuration [default = yes]])],
|
|
||||||
[ENABLE_INSTALL="$enableval"],
|
|
||||||
[ENABLE_INSTALL=yes])
|
|
||||||
AC_MSG_RESULT([$installit])
|
|
||||||
AM_CONDITIONAL(ENABLE_INSTALL, [test x"$ENABLE_INSTALL" = x"yes"])
|
|
||||||
|
|
||||||
if test x"$ENABLE_INSTALL" = x"yes"; then
|
|
||||||
CFLAGS+=" -O3"
|
|
||||||
else
|
|
||||||
CFLAGS+=" -O0"
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST([CPPFLAGS])
|
|
||||||
AC_SUBST([CFLAGS])
|
|
||||||
AC_SUBST([LDFLAGS])
|
|
||||||
|
|
||||||
# Portability check disabled for GTK-DOC (can be changed if needed)
|
# Portability check disabled for GTK-DOC (can be changed if needed)
|
||||||
AM_INIT_AUTOMAKE([-Wno-portability])
|
AM_INIT_AUTOMAKE([-Wno-portability])
|
||||||
|
@ -117,9 +94,9 @@ AC_CONFIG_FILES([
|
||||||
module/Makefile
|
module/Makefile
|
||||||
module/src/Makefile
|
module/src/Makefile
|
||||||
module/data/Makefile
|
module/data/Makefile
|
||||||
module/sql/Makefile
|
|
||||||
main/Makefile
|
main/Makefile
|
||||||
main/vn-hedera.desktop
|
main/vn-hedera.desktop
|
||||||
|
main/vn-hedera-debug.desktop
|
||||||
vapi/Makefile
|
vapi/Makefile
|
||||||
glade/Makefile
|
glade/Makefile
|
||||||
docs/Makefile
|
docs/Makefile
|
||||||
|
|
|
@ -239,7 +239,7 @@ static void db_conn_add_request (DbConn * obj, DbRequest * request)
|
||||||
* @plugin: the plugin name
|
* @plugin: the plugin name
|
||||||
* @err: return address of a #GError or #NULL
|
* @err: return address of a #GError or #NULL
|
||||||
*
|
*
|
||||||
* Tryes to load a plugin.
|
* Tries to load a plugin.
|
||||||
*
|
*
|
||||||
* Return vale: %TRUE if plugin was loaded successfully, %FALSE ortherwise
|
* Return vale: %TRUE if plugin was loaded successfully, %FALSE ortherwise
|
||||||
**/
|
**/
|
||||||
|
@ -895,7 +895,8 @@ SqlString * db_conn_create_stmt_from_file (DbConn * obj, const gchar * query_fil
|
||||||
|
|
||||||
file = g_strconcat (query_file, ".sql", NULL);
|
file = g_strconcat (query_file, ".sql", NULL);
|
||||||
|
|
||||||
for (i = 0; obj->query_dirs &&obj->query_dirs[i] && !stmt; i++)
|
if (obj->query_dirs)
|
||||||
|
for (i = 0; obj->query_dirs[i] && !stmt; i++)
|
||||||
{
|
{
|
||||||
gchar * buffer;
|
gchar * buffer;
|
||||||
gchar * path = g_build_filename (obj->query_dirs[i], file, NULL);
|
gchar * path = g_build_filename (obj->query_dirs[i], file, NULL);
|
||||||
|
@ -910,7 +911,7 @@ SqlString * db_conn_create_stmt_from_file (DbConn * obj, const gchar * query_fil
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!stmt)
|
if (!stmt)
|
||||||
g_warning ("DbConn: Can't create statement from file: %s", query_file);
|
g_warning ("DbConn: Can't create statement from file: %s", file);
|
||||||
|
|
||||||
g_free (file);
|
g_free (file);
|
||||||
return stmt;
|
return stmt;
|
||||||
|
|
|
@ -565,7 +565,7 @@ static void db_file_loader_cancel (DbFileLoader * obj, const gchar * name)
|
||||||
|
|
||||||
g_hash_table_iter_init (&iter, obj->priv->downloading);
|
g_hash_table_iter_init (&iter, obj->priv->downloading);
|
||||||
|
|
||||||
while (g_hash_table_iter_next (&iter, (gpointer*) &file, NULL))
|
while (g_hash_table_iter_next (&iter, (gpointer *) &file, NULL))
|
||||||
if (!name || !g_strcmp0 (file->name, name))
|
if (!name || !g_strcmp0 (file->name, name))
|
||||||
{
|
{
|
||||||
g_cancellable_cancel (file->cancel);
|
g_cancellable_cancel (file->cancel);
|
||||||
|
|
244
db/db-iterator.c
244
db/db-iterator.c
|
@ -16,6 +16,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "db-iterator.h"
|
#include "db-iterator.h"
|
||||||
|
#include "db-model-holder.h"
|
||||||
|
|
||||||
#define IS_READY(obj) (obj->model && db_model_get_status (obj->model) == DB_MODEL_STATUS_READY)
|
#define IS_READY(obj) (obj->model && db_model_get_status (obj->model) == DB_MODEL_STATUS_READY)
|
||||||
|
|
||||||
|
@ -24,29 +25,16 @@
|
||||||
* @short_description: manages a iterator with its events
|
* @short_description: manages a iterator with its events
|
||||||
* @title: DbIterator
|
* @title: DbIterator
|
||||||
*
|
*
|
||||||
* The DbIterator manages a connection with a data base.
|
* The #DbIterator manages a connection with a data base. The function
|
||||||
* There are different ways to create an DbIterator:
|
* db_iterator_new() creates a new #DbIterator.
|
||||||
* <itemizedlist>
|
|
||||||
* <listitem>
|
|
||||||
* <para>
|
|
||||||
* db_iterator_new(): This constructor just needs a #DbModel object
|
|
||||||
* </para>
|
|
||||||
* </listitem>
|
|
||||||
* <listitem>
|
|
||||||
* <para>
|
|
||||||
* db_iterator_new_with_stmt(): This one needs a #DbConn with the connection and
|
|
||||||
* a #SqlStmt object
|
|
||||||
* </para>
|
|
||||||
* </listitem>
|
|
||||||
* <listitem>
|
|
||||||
* <para>
|
|
||||||
* db_iterator_new_with_sql(): This one needs a #DbConn with the connection and
|
|
||||||
* the sql string
|
|
||||||
* </para>
|
|
||||||
* </listitem>
|
|
||||||
*</itemizedlist>
|
|
||||||
*/
|
*/
|
||||||
G_DEFINE_TYPE (DbIterator, db_iterator, G_TYPE_OBJECT);
|
|
||||||
|
static void db_iterator_model_holder_interface_init (DbModelHolderInterface * iface);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_CODE (DbIterator, db_iterator, G_TYPE_OBJECT,
|
||||||
|
G_IMPLEMENT_INTERFACE (DB_TYPE_MODEL_HOLDER,
|
||||||
|
db_iterator_model_holder_interface_init)
|
||||||
|
);
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
ITER_CHANGED
|
ITER_CHANGED
|
||||||
|
@ -72,48 +60,6 @@ DbIterator * db_iterator_new (DbModel * model)
|
||||||
return g_object_new (DB_TYPE_ITERATOR, "model", model, NULL);
|
return g_object_new (DB_TYPE_ITERATOR, "model", model, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* db_iterator_new_with_stmt:
|
|
||||||
* @conn: the connection used to create the model.
|
|
||||||
* @stmt: the #SqlStmt statement used to create the model.
|
|
||||||
*
|
|
||||||
* Creates a new #DbIterator. #SqlStmt must be a #SqlSelect or a #SqlString
|
|
||||||
* object with a valid SELECT statement.
|
|
||||||
*
|
|
||||||
* Return value: a #DbIterator.
|
|
||||||
**/
|
|
||||||
DbIterator * db_iterator_new_with_stmt (DbConn * conn, SqlStmt * stmt)
|
|
||||||
{
|
|
||||||
DbIterator * obj;
|
|
||||||
DbModel * model;
|
|
||||||
|
|
||||||
g_return_val_if_fail (DB_IS_CONN (conn) || !conn, NULL);
|
|
||||||
g_return_val_if_fail (SQL_IS_STMT (stmt) || !stmt, NULL);
|
|
||||||
|
|
||||||
model = db_model_new (conn, stmt);
|
|
||||||
obj = g_object_new (DB_TYPE_ITERATOR, "model", model, NULL);
|
|
||||||
g_object_unref (model);
|
|
||||||
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* db_iterator_new_with_sql:
|
|
||||||
* @conn: the connection used to create the model.
|
|
||||||
* @sql: the sql string used to create the model.
|
|
||||||
*
|
|
||||||
* Creates a new #DbIterator. sql must be a valid SELECT statement.
|
|
||||||
*
|
|
||||||
* Return value: a #DbIterator.
|
|
||||||
**/
|
|
||||||
DbIterator * db_iterator_new_with_sql (DbConn * conn, const gchar * sql)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (sql, NULL);
|
|
||||||
g_return_val_if_fail (DB_IS_CONN (conn) || !conn, NULL);
|
|
||||||
|
|
||||||
return g_object_new (DB_TYPE_ITERATOR, "sql", sql, "conn", conn, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
||||||
|
|
||||||
static void db_iterator_unref_param (DbIterator * obj, DbParam * param)
|
static void db_iterator_unref_param (DbIterator * obj, DbParam * param)
|
||||||
|
@ -296,31 +242,6 @@ static gboolean db_iterator_check_row_selected (DbIterator * obj)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Attempts to create a model, if have enough information, and assigns it to
|
|
||||||
* the iterator.
|
|
||||||
*/
|
|
||||||
static void db_iterator_try_create_model (DbIterator * obj)
|
|
||||||
{
|
|
||||||
DbModel * new_model = NULL;
|
|
||||||
|
|
||||||
if (obj->conn)
|
|
||||||
{
|
|
||||||
if (obj->sql)
|
|
||||||
{
|
|
||||||
if (obj->use_file)
|
|
||||||
new_model = db_model_new_with_file (obj->conn, obj->sql);
|
|
||||||
else
|
|
||||||
new_model = db_model_new_with_sql (obj->conn, obj->sql);
|
|
||||||
}
|
|
||||||
if (obj->stmt)
|
|
||||||
new_model = db_model_new (obj->conn, obj->stmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (new_model)
|
|
||||||
db_iterator_set_model (obj, new_model);
|
|
||||||
}
|
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -356,40 +277,6 @@ DbModel * db_iterator_get_model (DbIterator * obj)
|
||||||
return obj->model;
|
return obj->model;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* db_iterator_get_conn:
|
|
||||||
* @obj: a #DbIterator
|
|
||||||
*
|
|
||||||
* Gets connection used by the @obj model.
|
|
||||||
*
|
|
||||||
* Return value: (transfer none): the #DbConn
|
|
||||||
**/
|
|
||||||
DbConn * db_iterator_get_conn (DbIterator * obj)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (DB_IS_ITERATOR (obj), NULL);
|
|
||||||
|
|
||||||
if (obj->model)
|
|
||||||
db_model_get_conn (obj->model);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* db_iterator_set_conn:
|
|
||||||
* @obj: a #DbIterator
|
|
||||||
* @conn: the #DbConn
|
|
||||||
*
|
|
||||||
* Sets the connection used by the @obj model.
|
|
||||||
**/
|
|
||||||
void db_iterator_set_conn (DbIterator * obj, DbConn * conn)
|
|
||||||
{
|
|
||||||
g_return_if_fail (DB_IS_ITERATOR (obj));
|
|
||||||
g_return_if_fail (DB_IS_CONN (conn));
|
|
||||||
g_return_if_fail (obj->model);
|
|
||||||
|
|
||||||
db_model_set_conn (obj->model, conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* db_iterator_is_ready:
|
* db_iterator_is_ready:
|
||||||
* @obj: a #DbIterator
|
* @obj: a #DbIterator
|
||||||
|
@ -948,10 +835,6 @@ enum
|
||||||
PROP_MODEL = 1
|
PROP_MODEL = 1
|
||||||
,PROP_MODE
|
,PROP_MODE
|
||||||
,PROP_REMEMBER_SELECTION
|
,PROP_REMEMBER_SELECTION
|
||||||
,PROP_CONN
|
|
||||||
,PROP_STMT
|
|
||||||
,PROP_SQL
|
|
||||||
,PROP_USE_FILE
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void db_iterator_set_property (DbIterator * obj, guint id,
|
static void db_iterator_set_property (DbIterator * obj, guint id,
|
||||||
|
@ -968,25 +851,6 @@ static void db_iterator_set_property (DbIterator * obj, guint id,
|
||||||
case PROP_REMEMBER_SELECTION:
|
case PROP_REMEMBER_SELECTION:
|
||||||
obj->remember_selection = g_value_get_boolean (value);
|
obj->remember_selection = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
case PROP_CONN:
|
|
||||||
g_clear_object (&obj->conn);
|
|
||||||
obj->conn = g_value_dup_object (value);
|
|
||||||
db_iterator_try_create_model (obj);
|
|
||||||
break;
|
|
||||||
case PROP_STMT:
|
|
||||||
g_clear_object (&obj->stmt);
|
|
||||||
obj->stmt = g_value_dup_object (value);
|
|
||||||
db_iterator_try_create_model (obj);
|
|
||||||
break;
|
|
||||||
case PROP_SQL:
|
|
||||||
g_free (obj->sql);
|
|
||||||
obj->sql = g_value_dup_string (value);
|
|
||||||
db_iterator_try_create_model (obj);
|
|
||||||
break;
|
|
||||||
case PROP_USE_FILE:
|
|
||||||
obj->use_file = g_value_get_boolean (value);
|
|
||||||
db_iterator_try_create_model (obj);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -1019,10 +883,6 @@ static void db_iterator_init (DbIterator * obj)
|
||||||
obj->params = NULL;
|
obj->params = NULL;
|
||||||
obj->row = 0;
|
obj->row = 0;
|
||||||
obj->row_selected = FALSE;
|
obj->row_selected = FALSE;
|
||||||
obj->conn = NULL;
|
|
||||||
obj->stmt = NULL;
|
|
||||||
obj->sql = NULL;
|
|
||||||
obj->use_file = FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void db_iterator_finalize (DbIterator * obj)
|
static void db_iterator_finalize (DbIterator * obj)
|
||||||
|
@ -1050,10 +910,6 @@ static void db_iterator_finalize (DbIterator * obj)
|
||||||
g_object_unref (obj->model);
|
g_object_unref (obj->model);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_clear_object (&obj->conn);
|
|
||||||
g_clear_object (&obj->stmt);
|
|
||||||
g_free (obj->sql);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (db_iterator_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (db_iterator_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1064,34 +920,66 @@ static void db_iterator_class_init (DbIteratorClass * klass)
|
||||||
k->get_property = (GObjectGetPropertyFunc) db_iterator_get_property;
|
k->get_property = (GObjectGetPropertyFunc) db_iterator_get_property;
|
||||||
k->finalize = (GObjectFinalizeFunc) db_iterator_finalize;
|
k->finalize = (GObjectFinalizeFunc) db_iterator_finalize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DbIterator::iter-changed:
|
||||||
|
* @iterator: the object on which the signal is emitted
|
||||||
|
* @iter: a #DbIter
|
||||||
|
*
|
||||||
|
* This signal is emitted when @iter moves over the @iterator model
|
||||||
|
*/
|
||||||
signals[ITER_CHANGED] = g_signal_new ("iter-changed",
|
signals[ITER_CHANGED] = g_signal_new ("iter-changed",
|
||||||
DB_TYPE_ITERATOR, G_SIGNAL_RUN_FIRST, 0, NULL, NULL,
|
DB_TYPE_ITERATOR, G_SIGNAL_RUN_FIRST, 0, NULL, NULL,
|
||||||
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0
|
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DbIterator::data-changed:
|
||||||
|
* @iterator: the object on which the signal is emitted
|
||||||
|
*
|
||||||
|
* This signal is emitted when the model changes its data
|
||||||
|
*/
|
||||||
signals[DATA_CHANGED] = g_signal_new ("data-changed",
|
signals[DATA_CHANGED] = g_signal_new ("data-changed",
|
||||||
DB_TYPE_ITERATOR, G_SIGNAL_RUN_FIRST, 0, NULL, NULL,
|
DB_TYPE_ITERATOR, G_SIGNAL_RUN_FIRST, 0, NULL, NULL,
|
||||||
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0
|
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DbIterator::row-num-changed:
|
||||||
|
* @iterator: the object on which the signal is emitted
|
||||||
|
*
|
||||||
|
* This signal is emitted when the selected row changes
|
||||||
|
*/
|
||||||
signals[ROW_NUM_CHANGED] = g_signal_new ("row-num-changed",
|
signals[ROW_NUM_CHANGED] = g_signal_new ("row-num-changed",
|
||||||
DB_TYPE_ITERATOR, G_SIGNAL_RUN_FIRST, 0, NULL, NULL,
|
DB_TYPE_ITERATOR, G_SIGNAL_RUN_FIRST, 0, NULL, NULL,
|
||||||
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0
|
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DbIterator::status-changed:
|
||||||
|
* @iterator: the object on which the signal is emitted
|
||||||
|
* @ready: #TRUE if @iterator is ready, #FALSE otherwise
|
||||||
|
*
|
||||||
|
* This signal is emitted when the status of the iterator changes
|
||||||
|
*/
|
||||||
signals[STATUS_CHANGED] = g_signal_new ("status-changed",
|
signals[STATUS_CHANGED] = g_signal_new ("status-changed",
|
||||||
DB_TYPE_ITERATOR, G_SIGNAL_RUN_FIRST, 0, NULL, NULL,
|
DB_TYPE_ITERATOR, G_SIGNAL_RUN_FIRST, 0, NULL, NULL,
|
||||||
g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN
|
g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DbIterator::operations-done:
|
||||||
|
* @iterator: the object on which the signal is emitted
|
||||||
|
*
|
||||||
|
* This signal is emitted when all pending operations are performed over the
|
||||||
|
* model of @iterator
|
||||||
|
*/
|
||||||
signals[OPERATIONS_DONE] = g_signal_new ("operations-done",
|
signals[OPERATIONS_DONE] = g_signal_new ("operations-done",
|
||||||
DB_TYPE_ITERATOR, G_SIGNAL_RUN_FIRST, 0, NULL, NULL,
|
DB_TYPE_ITERATOR, G_SIGNAL_RUN_FIRST, 0, NULL, NULL,
|
||||||
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0
|
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0
|
||||||
);
|
);
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_MODEL,
|
g_object_class_override_property (k, PROP_MODEL, "model");
|
||||||
g_param_spec_object ("model"
|
|
||||||
,_("Model")
|
|
||||||
,_("The DbModel handled by the iterator")
|
|
||||||
,DB_TYPE_MODEL
|
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_MODE,
|
g_object_class_install_property (k, PROP_MODE,
|
||||||
g_param_spec_enum ("mode"
|
g_param_spec_enum ("mode"
|
||||||
,_("Mode")
|
,_("Mode")
|
||||||
|
@ -1107,34 +995,12 @@ static void db_iterator_class_init (DbIteratorClass * klass)
|
||||||
,TRUE
|
,TRUE
|
||||||
,G_PARAM_CONSTRUCT | G_PARAM_READWRITE
|
,G_PARAM_CONSTRUCT | G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_CONN,
|
}
|
||||||
g_param_spec_object ("conn"
|
|
||||||
,_("Connection")
|
static void db_iterator_model_holder_interface_init (DbModelHolderInterface * iface)
|
||||||
,_("The connection used by the model")
|
{
|
||||||
,DB_TYPE_CONN
|
iface->get_model = (DbModelHolderGetModelFunc) db_iterator_get_model;
|
||||||
,G_PARAM_WRITABLE
|
iface->set_model = (DbModelHolderSetModelFunc) db_iterator_set_model;
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_STMT,
|
|
||||||
g_param_spec_object ("stmt"
|
|
||||||
,_("Statement")
|
|
||||||
,_("The statement used to create the model")
|
|
||||||
,SQL_TYPE_STMT
|
|
||||||
,G_PARAM_WRITABLE
|
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_SQL,
|
|
||||||
g_param_spec_string ("sql"
|
|
||||||
,_("SQL")
|
|
||||||
,_("The SQL query used to create the model")
|
|
||||||
, NULL
|
|
||||||
,G_PARAM_WRITABLE
|
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_USE_FILE,
|
|
||||||
g_param_spec_boolean ("use-file"
|
|
||||||
,_("Use file")
|
|
||||||
,_("Wether to interpret the sql property as query file")
|
|
||||||
,FALSE
|
|
||||||
,G_PARAM_CONSTRUCT | G_PARAM_WRITABLE
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GType db_iterator_mode_get_type ()
|
GType db_iterator_mode_get_type ()
|
||||||
|
|
|
@ -81,11 +81,6 @@ struct _DbIterator
|
||||||
gint row;
|
gint row;
|
||||||
gboolean row_selected;
|
gboolean row_selected;
|
||||||
gboolean remember_selection;
|
gboolean remember_selection;
|
||||||
|
|
||||||
DbConn * conn;
|
|
||||||
SqlStmt * stmt;
|
|
||||||
gchar * sql;
|
|
||||||
gboolean use_file;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _DbIteratorClass
|
struct _DbIteratorClass
|
||||||
|
@ -98,11 +93,6 @@ GType db_iterator_get_type ();
|
||||||
GType db_iterator_mode_get_type () G_GNUC_CONST;
|
GType db_iterator_mode_get_type () G_GNUC_CONST;
|
||||||
|
|
||||||
DbIterator * db_iterator_new (DbModel * model);
|
DbIterator * db_iterator_new (DbModel * model);
|
||||||
DbIterator * db_iterator_new_with_stmt (DbConn * conn, SqlStmt * stmt);
|
|
||||||
DbIterator * db_iterator_new_with_sql (DbConn * conn, const gchar * sql);
|
|
||||||
DbModel * db_iterator_get_model (DbIterator * obj);
|
|
||||||
DbConn * db_iterator_get_conn (DbIterator * obj);
|
|
||||||
void db_iterator_set_conn (DbIterator * obj, DbConn * conn);
|
|
||||||
gboolean db_iterator_is_ready (DbIterator * obj);
|
gboolean db_iterator_is_ready (DbIterator * obj);
|
||||||
DbIteratorMode db_iterator_get_mode (DbIterator * obj);
|
DbIteratorMode db_iterator_get_mode (DbIterator * obj);
|
||||||
void db_iterator_set_mode (DbIterator * obj, DbIteratorMode mode);
|
void db_iterator_set_mode (DbIterator * obj, DbIteratorMode mode);
|
||||||
|
|
|
@ -19,15 +19,17 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SECTION: db-model-holder
|
* SECTION: db-model-holder
|
||||||
* @Short_description:
|
* @Short_description: interface for objects that use a model
|
||||||
* @Title: DbModelHolder
|
* @Title: DbModelHolder
|
||||||
* @See_also: #DbModel
|
* @See_also: #DbModel
|
||||||
*
|
*
|
||||||
* This interface should be implemented from any class that uses a #DbModel as
|
* This interface should be implemented from any class that uses a #DbModel as
|
||||||
* datasource.
|
* data source. This interface offers a #DbModel as a virtual property that has
|
||||||
|
* to be overwritten by the classes implementing it, as well as the
|
||||||
|
* db_model_holder_get_model() and db_model_holder_set_model() methods.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
G_DEFINE_INTERFACE (DbModelHolder, db_model_holder, G_TYPE_INTERFACE);
|
G_DEFINE_INTERFACE (DbModelHolder, db_model_holder, G_TYPE_INVALID);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* db_model_holder_get_model:
|
* db_model_holder_get_model:
|
||||||
|
@ -35,7 +37,7 @@ G_DEFINE_INTERFACE (DbModelHolder, db_model_holder, G_TYPE_INTERFACE);
|
||||||
*
|
*
|
||||||
* Gets the model used by holder.
|
* Gets the model used by holder.
|
||||||
*
|
*
|
||||||
* Return value: the #DbModel
|
* Return value:(transfer none): the #DbModel
|
||||||
**/
|
**/
|
||||||
DbModel * db_model_holder_get_model (DbModelHolder * obj)
|
DbModel * db_model_holder_get_model (DbModelHolder * obj)
|
||||||
{
|
{
|
||||||
|
@ -45,7 +47,7 @@ DbModel * db_model_holder_get_model (DbModelHolder * obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* db_model_holder_get_model:
|
* db_model_holder_set_model:
|
||||||
* @obj: a #DbModelHolder
|
* @obj: a #DbModelHolder
|
||||||
* @model: the #DbModel
|
* @model: the #DbModel
|
||||||
*
|
*
|
||||||
|
@ -54,18 +56,19 @@ DbModel * db_model_holder_get_model (DbModelHolder * obj)
|
||||||
void db_model_holder_set_model (DbModelHolder * obj, DbModel * model)
|
void db_model_holder_set_model (DbModelHolder * obj, DbModel * model)
|
||||||
{
|
{
|
||||||
g_return_if_fail (DB_IS_MODEL_HOLDER (obj));
|
g_return_if_fail (DB_IS_MODEL_HOLDER (obj));
|
||||||
|
g_return_if_fail (DB_IS_MODEL (obj));
|
||||||
|
|
||||||
DB_MODEL_HOLDER_GET_INTERFACE (obj)->set_model (obj, model);
|
DB_MODEL_HOLDER_GET_INTERFACE (obj)->set_model (obj, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
||||||
|
|
||||||
static void db_model_holder_default_init (DbModelHolderInterface * klass)
|
static void db_model_holder_default_init (DbModelHolderInterface * iface)
|
||||||
{
|
{
|
||||||
g_object_interface_install_property (klass,
|
g_object_interface_install_property (iface,
|
||||||
g_param_spec_object ("model"
|
g_param_spec_object ("model"
|
||||||
,"Model"
|
,_("Model")
|
||||||
,"The model used by the holder"
|
,_("The model used by the holder")
|
||||||
,DB_TYPE_MODEL
|
,DB_TYPE_MODEL
|
||||||
,G_PARAM_READWRITE
|
,G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
|
|
|
@ -31,7 +31,7 @@ typedef struct _DbModelHolderInterface DbModelHolderInterface;
|
||||||
typedef DbModel * (* DbModelHolderGetModelFunc) (DbModelHolder * obj);
|
typedef DbModel * (* DbModelHolderGetModelFunc) (DbModelHolder * obj);
|
||||||
typedef void (* DbModelHolderSetModelFunc) (DbModelHolder * obj, DbModel * sql);
|
typedef void (* DbModelHolderSetModelFunc) (DbModelHolder * obj, DbModel * sql);
|
||||||
|
|
||||||
struct _DbModelHolder {};
|
struct _DbModelHolder;
|
||||||
|
|
||||||
struct _DbModelHolderInterface
|
struct _DbModelHolderInterface
|
||||||
{
|
{
|
||||||
|
|
783
db/db-model.c
783
db/db-model.c
File diff suppressed because it is too large
Load Diff
|
@ -206,6 +206,7 @@ void db_model_unset_update_flags (DbModel * obj
|
||||||
void db_model_set_mode (DbModel * obj, DbModelMode mode);
|
void db_model_set_mode (DbModel * obj, DbModelMode mode);
|
||||||
DbModelMode db_model_get_mode (DbModel * obj);
|
DbModelMode db_model_get_mode (DbModel * obj);
|
||||||
void db_model_toggle_mode (DbModel * obj);
|
void db_model_toggle_mode (DbModel * obj);
|
||||||
|
void db_model_use_null_row (DbModel * obj, gboolean use);
|
||||||
gboolean db_model_get_last (DbModel * obj, DbIter * iter);
|
gboolean db_model_get_last (DbModel * obj, DbIter * iter);
|
||||||
void db_model_get (DbModel * obj
|
void db_model_get (DbModel * obj
|
||||||
,DbIter * iter
|
,DbIter * iter
|
||||||
|
@ -248,12 +249,11 @@ void db_model_add_join_columns (DbModel * obj
|
||||||
void db_model_set_default_value_from_column (DbModel * obj
|
void db_model_set_default_value_from_column (DbModel * obj
|
||||||
,const gchar * dst_field
|
,const gchar * dst_field
|
||||||
,gint src_column);
|
,gint src_column);
|
||||||
|
|
||||||
void db_model_set_default_value_from_param (DbModel * obj
|
void db_model_set_default_value_from_param (DbModel * obj
|
||||||
,const gchar * dst_field
|
,const gchar * dst_field
|
||||||
,GvnParam * param
|
,GvnParam * param);
|
||||||
,const gchar * id);
|
|
||||||
void db_model_add_param (DbModel * obj
|
void db_model_add_param (DbModel * obj
|
||||||
,const gchar * id
|
|
||||||
,GvnParam * param);
|
,GvnParam * param);
|
||||||
|
|
||||||
//GtkTreeModel-like methods
|
//GtkTreeModel-like methods
|
||||||
|
|
|
@ -17,6 +17,14 @@
|
||||||
|
|
||||||
#include "db-param.h"
|
#include "db-param.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SECTION: db-param
|
||||||
|
* @Short_description: representation of the value of a field
|
||||||
|
* @Title: DbParam
|
||||||
|
*
|
||||||
|
* This class represents the value of a field in a #DbIterator.
|
||||||
|
**/
|
||||||
|
|
||||||
G_DEFINE_TYPE (DbParam, db_param, GVN_TYPE_PARAM);
|
G_DEFINE_TYPE (DbParam, db_param, GVN_TYPE_PARAM);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -30,7 +30,7 @@ typedef struct _DbColumn DbColumn;
|
||||||
* DbResult:
|
* DbResult:
|
||||||
* @nrows: Number of rows.
|
* @nrows: Number of rows.
|
||||||
* @ncols: Number of columns.
|
* @ncols: Number of columns.
|
||||||
* @data: Has a #GList.
|
* @data: (element-type DbRow): Has a #GList.
|
||||||
* @column: Has a #DbColumn.
|
* @column: Has a #DbColumn.
|
||||||
*
|
*
|
||||||
* Has the information of a row.
|
* Has the information of a row.
|
||||||
|
|
1
db/db.h
1
db/db.h
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include <sql/sql.h>
|
#include <sql/sql.h>
|
||||||
#include "db-iter.h"
|
#include "db-iter.h"
|
||||||
|
#include "db-model-holder.h"
|
||||||
#include "db-model.h"
|
#include "db-model.h"
|
||||||
#include "db-request.h"
|
#include "db-request.h"
|
||||||
#include "db-conn.h"
|
#include "db-conn.h"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
libhedera (1.0-1) stable; urgency=low
|
libhedera (1.0-6) stable; urgency=low
|
||||||
|
|
||||||
* Initial Release.
|
* Initial Release.
|
||||||
|
|
||||||
|
|
|
@ -20,23 +20,25 @@ Description: Database access and widget provider library (runtime)
|
||||||
queries.
|
queries.
|
||||||
.
|
.
|
||||||
The library also has a modular system to add and remove the different widgets
|
The library also has a modular system to add and remove the different widgets
|
||||||
in run time.
|
in run time. And includes Glade integration, to design the programs in an
|
||||||
|
easiest, graphical way.
|
||||||
.
|
.
|
||||||
This package contains the executable and data files.
|
This package contains the executable and data files.
|
||||||
|
|
||||||
Package: libhedera-dev
|
Package: libhedera-dev
|
||||||
Section: libdevel
|
Section: libdevel
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, libhedera1 (= ${binary:Version})
|
Depends: ${shlibs:Depends}, ${misc:Depends}, libhedera1 (= ${binary:Version}),
|
||||||
Suggests: libgtk-3-doc, libgtk-3-dbg, devhelp, valac (>= 0.16)
|
libgtk-3-dev
|
||||||
Recommends: glade (>= 3.4), anjuta (>= 3.4)
|
Suggests: libgtk-3-doc, libgtk-3-0-dbg, devhelp, valac (>= 0.16)
|
||||||
|
Recommends: glade (>= 3.4), anjuta (>= 3.4), libgtksourceview-3.0-1
|
||||||
Description: Database access and widget provider library (development)
|
Description: Database access and widget provider library (development)
|
||||||
The hedera library provides and lets you create widgets bound to SQL queries
|
The hedera library provides and lets you create widgets bound to SQL queries
|
||||||
and manages the different operations made over the data retrieved from these
|
and manages the different operations made over the data retrieved from these
|
||||||
queries.
|
queries.
|
||||||
.
|
.
|
||||||
The library also has a modular system to add and remove the different widgets
|
The library also has a modular system to add and remove the different widgets
|
||||||
in run time. And it includes Glade integration, to design the programs in an
|
in run time. And includes Glade integration, to design the programs in an
|
||||||
easiest, graphical way.
|
easiest, graphical way.
|
||||||
.
|
.
|
||||||
This package contains development files to compile C and Vala programs that
|
This package contains development files to compile C and Vala programs that
|
||||||
|
@ -46,14 +48,15 @@ Description: Database access and widget provider library (development)
|
||||||
Package: libhedera1
|
Package: libhedera1
|
||||||
Section: libs
|
Section: libs
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, libgtk-3-0, libgtk-3-dev
|
Depends: ${shlibs:Depends}, ${misc:Depends}, libgtk-3-0
|
||||||
Description: Database access and widget provider library (core)
|
Description: Database access and widget provider library (core)
|
||||||
The hedera library provides and lets you create widgets bound to SQL queries
|
The hedera library provides and lets you create widgets bound to SQL queries
|
||||||
and manages the different operations made over the data retrieved from these
|
and manages the different operations made over the data retrieved from these
|
||||||
queries.
|
queries.
|
||||||
.
|
.
|
||||||
The library also has a modular system to add and remove the different widgets
|
The library also has a modular system to add and remove the different widgets
|
||||||
in run time.
|
in run time. And includes Glade integration, to design the programs in an
|
||||||
|
easiest, graphical way.
|
||||||
.
|
.
|
||||||
This package contains the core of the library. It also provides the plugins to
|
This package contains the core of the library. It also provides the plugins to
|
||||||
connect a PostgreSQL or MySQL database.
|
connect a PostgreSQL or MySQL database.
|
||||||
|
@ -68,6 +71,7 @@ Description: Database access and widget provider library (debug)
|
||||||
queries.
|
queries.
|
||||||
.
|
.
|
||||||
The library also has a modular system to add and remove the different widgets
|
The library also has a modular system to add and remove the different widgets
|
||||||
in run time.
|
in run time. And includes Glade integration, to design the programs in an
|
||||||
|
easiest, graphical way.
|
||||||
.
|
.
|
||||||
This package contains the debugging symbols for hedera.
|
This package contains the debugging symbols for hedera.
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
usr/bin
|
usr/bin
|
||||||
usr/lib/hedera/module
|
usr/lib/hedera/module
|
||||||
usr/share/hedera/vn/image
|
|
||||||
usr/share/hedera/vn
|
usr/share/hedera/vn
|
||||||
|
usr/share/hedera/vn/image
|
||||||
usr/share/hedera/module
|
usr/share/hedera/module
|
||||||
usr/share/hedera/module/sql
|
usr/share/hedera/module/sql
|
||||||
|
usr/share/hedera/module/sql/example
|
||||||
usr/share/applications
|
usr/share/applications
|
||||||
usr/share/ca-certificates/verdnatura.es
|
|
|
@ -1,7 +1,8 @@
|
||||||
usr/bin/*
|
usr/bin/*
|
||||||
usr/lib/hedera/module/*.so
|
usr/lib/hedera/module/*.so
|
||||||
usr/share/hedera/vn/image/*
|
|
||||||
usr/share/hedera/vn/*
|
usr/share/hedera/vn/*
|
||||||
|
usr/share/hedera/vn/image/*
|
||||||
usr/share/hedera/module/*
|
usr/share/hedera/module/*
|
||||||
|
usr/share/hedera/module/sql/*
|
||||||
|
usr/share/hedera/module/sql/example/*
|
||||||
usr/share/applications/*
|
usr/share/applications/*
|
||||||
usr/share/ca-certificates/verdnatura.es/*
|
|
|
@ -7,7 +7,7 @@ usr/include/hedera/vn/field
|
||||||
usr/include/hedera/vn/column
|
usr/include/hedera/vn/column
|
||||||
usr/lib/hedera
|
usr/lib/hedera
|
||||||
usr/lib/glade/modules
|
usr/lib/glade/modules
|
||||||
usr/lib/girepository-1.0
|
#usr/lib/girepository-1.0
|
||||||
usr/share/gir-1.0
|
usr/share/gir-1.0
|
||||||
usr/share/glade/catalogs
|
usr/share/glade/catalogs
|
||||||
usr/share/pkgconfig
|
usr/share/pkgconfig
|
||||||
|
|
|
@ -17,7 +17,7 @@ usr/lib/hedera/libvnfield.so
|
||||||
usr/lib/hedera/libvncolumn.a
|
usr/lib/hedera/libvncolumn.a
|
||||||
usr/lib/hedera/libvncolumn.so
|
usr/lib/hedera/libvncolumn.so
|
||||||
usr/lib/glade/modules/libgladevn.so
|
usr/lib/glade/modules/libgladevn.so
|
||||||
usr/lib/girepository-1.0/*
|
#usr/lib/girepository-1.0/*
|
||||||
usr/share/gir-1.0/*
|
usr/share/gir-1.0/*
|
||||||
usr/share/glade/catalogs/*
|
usr/share/glade/catalogs/*
|
||||||
usr/share/pkgconfig/*
|
usr/share/pkgconfig/*
|
||||||
|
|
|
@ -95,6 +95,7 @@
|
||||||
<title>DbLib</title>
|
<title>DbLib</title>
|
||||||
<xi:include href="xml/db-conn.xml"/>
|
<xi:include href="xml/db-conn.xml"/>
|
||||||
<xi:include href="xml/db-model.xml"/>
|
<xi:include href="xml/db-model.xml"/>
|
||||||
|
<xi:include href="xml/db-model-holder.xml"/>
|
||||||
<xi:include href="xml/db-iterator.xml"/>
|
<xi:include href="xml/db-iterator.xml"/>
|
||||||
<xi:include href="xml/db-iter.xml"/>
|
<xi:include href="xml/db-iter.xml"/>
|
||||||
<xi:include href="xml/db-row.xml"/>
|
<xi:include href="xml/db-row.xml"/>
|
||||||
|
|
|
@ -4,18 +4,29 @@ gladevn_lib_LTLIBRARIES = libgladevn.la
|
||||||
|
|
||||||
AM_CPPFLAGS = \
|
AM_CPPFLAGS = \
|
||||||
-I$(top_srcdir) \
|
-I$(top_srcdir) \
|
||||||
$(gladeui_CFLAGS)
|
$(gladeui_CFLAGS) \
|
||||||
|
$(DEFINES) \
|
||||||
|
$(gtksourceview_CFLAGS)
|
||||||
libgladevn_la_LIBADD = \
|
libgladevn_la_LIBADD = \
|
||||||
$(top_builddir)/vn/libvn.la \
|
$(top_builddir)/vn/libvn.la \
|
||||||
$(gladeui_LIBS)
|
$(gladeui_LIBS) \
|
||||||
|
$(gtksourceview_LIBS)
|
||||||
libgladevn_la_LDFLAGS = -avoid-version
|
libgladevn_la_LDFLAGS = -avoid-version
|
||||||
libgladevn_la_SOURCES = \
|
libgladevn_la_SOURCES = \
|
||||||
glade-vn.h \
|
glade-vn.h \
|
||||||
glade-vn.c \
|
glade-vn.c \
|
||||||
glade-vn-batch.c
|
glade-vn-batch.c \
|
||||||
|
glade-db-sql.c \
|
||||||
|
glade-db-model.c
|
||||||
|
|
||||||
gladevn_data_DATA = vn.xml
|
gladevn_data_DATA = vn.xml
|
||||||
|
|
||||||
|
if HAVE_SOURCEVIEW
|
||||||
|
DEFINES = -D_HAVE_GTKSOURCEVIEW
|
||||||
|
else
|
||||||
|
DEFINES =
|
||||||
|
endif
|
||||||
|
|
||||||
EXTRA_DIST = $(gladevn_data_DATA)
|
EXTRA_DIST = $(gladevn_data_DATA)
|
||||||
|
|
||||||
install-data-hook:
|
install-data-hook:
|
||||||
|
|
|
@ -0,0 +1,364 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2013 - Juan Ferrer Toribio
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "glade-vn.h"
|
||||||
|
|
||||||
|
//+++++++++++++++++++++++++++++++++++++++++++++++++ DbModel GladeEditorProperty
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
GladeEditorProperty parent;
|
||||||
|
|
||||||
|
GtkWidget * button;
|
||||||
|
GtkWidget * entry;
|
||||||
|
gboolean connected;
|
||||||
|
GladeWidget * widget;
|
||||||
|
}
|
||||||
|
GladeEPropModel;
|
||||||
|
|
||||||
|
GLADE_MAKE_EPROP (GladeEPropModel, glade_eprop_model)
|
||||||
|
#define GLADE_TYPE_EPROP_MODEL (glade_eprop_model_get_type())
|
||||||
|
#define GLADE_EPROP_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_EPROP_MODEL, GladeEPropModel))
|
||||||
|
#define GLADE_EPROP_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_EPROP_MODEL, GladeEPropModelClass))
|
||||||
|
#define GLADE_IS_EPROP_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_EPROP_MODEL))
|
||||||
|
#define GLADE_IS_EPROP_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_EPROP_MODEL))
|
||||||
|
#define GLADE_EPROP_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GLADE_EPROP_MODEL, GladeEPropModelClass))
|
||||||
|
|
||||||
|
static void glade_eprop_model_name_changed (GladeProject * project,
|
||||||
|
GladeWidget * widget, GladeEPropModel * obj)
|
||||||
|
{
|
||||||
|
if (widget && obj->widget)
|
||||||
|
{
|
||||||
|
gtk_entry_set_text (GTK_ENTRY (obj->entry),
|
||||||
|
glade_widget_get_name (widget));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static GladeWidget * glade_model_create (GladeProperty * prop)
|
||||||
|
{
|
||||||
|
gboolean use = FALSE;
|
||||||
|
VnBatch * batch;
|
||||||
|
GladeWidget * batch_w;
|
||||||
|
GladeProject * project = glade_widget_get_project (glade_property_get_widget (prop));
|
||||||
|
const GList * l, * n, * objects = glade_project_get_objects (project);
|
||||||
|
|
||||||
|
for (n = objects; n; n = n->next)
|
||||||
|
if (VN_IS_BATCH (n->data))
|
||||||
|
{
|
||||||
|
batch = n->data;
|
||||||
|
use = TRUE;
|
||||||
|
|
||||||
|
for (l = vn_batch_get_objects (batch); l; l = l->next)
|
||||||
|
if (!DB_IS_MODEL (l->data))
|
||||||
|
{
|
||||||
|
use = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (use)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!use)
|
||||||
|
batch_w = glade_command_create
|
||||||
|
(glade_widget_adaptor_get_by_type (VN_TYPE_BATCH), NULL, NULL, project);
|
||||||
|
else
|
||||||
|
batch_w = glade_widget_get_from_gobject (batch);
|
||||||
|
|
||||||
|
return glade_command_create
|
||||||
|
(glade_widget_adaptor_get_by_type (DB_TYPE_MODEL), batch_w, NULL, project);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* glade_eprop_model_show_dialog:
|
||||||
|
* @button:(allow-none): a #GtkButton or @NULL
|
||||||
|
* @object: a #GladeEditorPropery or a #GladeWidget
|
||||||
|
*
|
||||||
|
* Opens a dialog to edit a #DbModel.
|
||||||
|
* Can be called by a #GladeEditorProperty or by the "edit" action of a
|
||||||
|
* #GladeWidgetAdaptor directly (in which case @button is %NULL and @obj is a
|
||||||
|
* #GladeWidget).
|
||||||
|
**/
|
||||||
|
static void glade_eprop_model_show_dialog (GtkButton * button, GObject * object)
|
||||||
|
{
|
||||||
|
gboolean created = FALSE;
|
||||||
|
GObject * o;
|
||||||
|
GtkWidget * box;
|
||||||
|
GtkDialog * dialog;
|
||||||
|
GladeWidget * widget;
|
||||||
|
GladeWidgetAdaptor * adaptor;
|
||||||
|
GladeEditable * editor;
|
||||||
|
GladeProperty * p = NULL;
|
||||||
|
GladeEditorProperty * eprop = NULL;
|
||||||
|
|
||||||
|
if (GLADE_IS_EDITOR_PROPERTY (object))
|
||||||
|
{
|
||||||
|
eprop = GLADE_EDITOR_PROPERTY (object);
|
||||||
|
p = glade_editor_property_get_property (eprop);
|
||||||
|
o = g_value_get_object (glade_property_inline_value (p));
|
||||||
|
|
||||||
|
if (o && DB_IS_MODEL (o))
|
||||||
|
widget = glade_widget_get_from_gobject (o);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GValue val = G_VALUE_INIT;
|
||||||
|
|
||||||
|
glade_command_push_group
|
||||||
|
(_("Create and set a model for a DbModelHolder"));
|
||||||
|
|
||||||
|
widget = glade_model_create (p);
|
||||||
|
created = TRUE;
|
||||||
|
g_value_init (&val, DB_TYPE_MODEL);
|
||||||
|
g_value_set_object (&val, glade_widget_get_object (widget));
|
||||||
|
glade_command_set_property_value (p, &val);
|
||||||
|
g_value_unset (&val);
|
||||||
|
|
||||||
|
glade_command_pop_group ();
|
||||||
|
|
||||||
|
glade_project_selection_set (glade_widget_get_project (widget),
|
||||||
|
glade_widget_get_object (glade_property_get_widget (p)),
|
||||||
|
TRUE);
|
||||||
|
|
||||||
|
if (!GLADE_EPROP_MODEL (eprop)->connected)
|
||||||
|
{
|
||||||
|
g_signal_connect (glade_widget_get_project
|
||||||
|
(glade_property_get_widget (p)), "widget-name-changed",
|
||||||
|
G_CALLBACK (glade_eprop_model_name_changed), eprop);
|
||||||
|
GLADE_EPROP_MODEL (eprop)->connected = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
widget = GLADE_WIDGET (object);
|
||||||
|
|
||||||
|
adaptor = glade_widget_get_adaptor (widget);
|
||||||
|
editor = glade_widget_adaptor_create_editable (adaptor, GLADE_PAGE_GENERAL);
|
||||||
|
glade_editable_load (editor, widget);
|
||||||
|
|
||||||
|
dialog = GTK_DIALOG (gtk_dialog_new_with_buttons
|
||||||
|
(eprop ? _("Model configuration") : _("DbModel properties configuration")
|
||||||
|
,GTK_WINDOW (glade_app_get_window ())
|
||||||
|
,GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT
|
||||||
|
,GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL
|
||||||
|
,GTK_STOCK_CLEAR, GTK_RESPONSE_REJECT
|
||||||
|
,GTK_STOCK_OK, GTK_RESPONSE_OK
|
||||||
|
,NULL
|
||||||
|
));
|
||||||
|
gtk_dialog_set_alternative_button_order (dialog,
|
||||||
|
GTK_RESPONSE_OK, GTK_RESPONSE_REJECT, GTK_RESPONSE_CANCEL, -1);
|
||||||
|
gtk_dialog_set_default_response (dialog, GTK_RESPONSE_OK);
|
||||||
|
gtk_window_set_default_size (GTK_WINDOW (dialog), 400, 300);
|
||||||
|
|
||||||
|
if (!eprop)
|
||||||
|
gtk_widget_hide (gtk_dialog_get_widget_for_response
|
||||||
|
(dialog, GTK_RESPONSE_REJECT));
|
||||||
|
|
||||||
|
box = gtk_alignment_new (0,0,1,1);
|
||||||
|
gtk_alignment_set_padding (GTK_ALIGNMENT (box), 8, 8, 8, 8);
|
||||||
|
gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (editor));
|
||||||
|
gtk_widget_show_all (box);
|
||||||
|
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (dialog)),
|
||||||
|
box, TRUE, TRUE, 0);
|
||||||
|
|
||||||
|
switch (gtk_dialog_run (dialog))
|
||||||
|
{
|
||||||
|
case GTK_RESPONSE_OK:
|
||||||
|
{
|
||||||
|
if (eprop)
|
||||||
|
{
|
||||||
|
gtk_entry_set_text (GTK_ENTRY (GLADE_EPROP_MODEL (eprop)->entry),
|
||||||
|
glade_widget_get_name (widget));
|
||||||
|
GLADE_EPROP_MODEL (eprop)->widget = widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GTK_RESPONSE_REJECT:
|
||||||
|
{
|
||||||
|
if (eprop)
|
||||||
|
{
|
||||||
|
glade_command_set_property (p, NULL);
|
||||||
|
GLADE_EPROP_MODEL (eprop)->widget = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GTK_RESPONSE_CANCEL:
|
||||||
|
{
|
||||||
|
if (created)
|
||||||
|
{
|
||||||
|
GList * list = g_list_append (NULL, widget);
|
||||||
|
GladeWidget * batch = glade_widget_get_parent (widget);
|
||||||
|
|
||||||
|
if (vn_batch_get_length
|
||||||
|
VN_BATCH (glade_widget_get_object (batch)) == 1)
|
||||||
|
list = g_list_prepend (list, batch);
|
||||||
|
|
||||||
|
glade_command_delete (list);
|
||||||
|
g_list_free (list);
|
||||||
|
GLADE_EPROP_MODEL (eprop)->widget = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_widget_destroy (GTK_WIDGET (dialog));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void glade_eprop_model_show_object_dialog (GtkButton * button,
|
||||||
|
GladeEditorProperty * eprop)
|
||||||
|
{
|
||||||
|
GladeProperty * p = glade_editor_property_get_property (eprop);
|
||||||
|
// Widget to which the property belongs (e.g. Model Holder)
|
||||||
|
GladeWidget * widget = glade_property_get_widget (p);
|
||||||
|
GladeProject * project = glade_widget_get_project (widget);
|
||||||
|
GObject * object = g_value_get_object (glade_property_inline_value (p));
|
||||||
|
// Widget representing the property itself (i.e. DbModel)
|
||||||
|
widget = object ? glade_widget_get_from_gobject (object) : NULL;
|
||||||
|
GLADE_EPROP_MODEL (eprop)->widget = widget;
|
||||||
|
|
||||||
|
if (glade_editor_property_show_object_dialog (project,
|
||||||
|
_("Select a DbModel for the property"), NULL,
|
||||||
|
DB_TYPE_MODEL, NULL, &widget))
|
||||||
|
{
|
||||||
|
if (widget)
|
||||||
|
{
|
||||||
|
GValue val = G_VALUE_INIT;
|
||||||
|
g_value_init (&val, DB_TYPE_MODEL);
|
||||||
|
g_value_set_object (&val, glade_widget_get_object (widget));
|
||||||
|
glade_command_set_property_value (p, &val);
|
||||||
|
g_value_unset (&val);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
glade_command_set_property (p, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * glade_eprop_model_create_input (GladeEditorProperty * eprop)
|
||||||
|
{
|
||||||
|
GtkWidget * hbox, * box, * object_button;
|
||||||
|
GladeEPropModel * obj = GLADE_EPROP_MODEL (eprop);
|
||||||
|
|
||||||
|
obj->button = gtk_button_new_with_label (_("New Model"));
|
||||||
|
g_signal_connect (G_OBJECT (obj->button), "clicked",
|
||||||
|
G_CALLBACK (glade_eprop_model_show_dialog), eprop);
|
||||||
|
|
||||||
|
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
|
obj->entry = gtk_entry_new ();
|
||||||
|
gtk_editable_set_editable (GTK_EDITABLE (obj->entry), FALSE);
|
||||||
|
gtk_widget_set_hexpand (obj->entry, TRUE);
|
||||||
|
gtk_container_add (GTK_CONTAINER (hbox), obj->entry);
|
||||||
|
|
||||||
|
object_button = gtk_button_new_with_label ("...");
|
||||||
|
gtk_container_add (GTK_CONTAINER (hbox), object_button);
|
||||||
|
g_signal_connect (G_OBJECT (object_button), "clicked",
|
||||||
|
G_CALLBACK (glade_eprop_model_show_object_dialog), eprop);
|
||||||
|
|
||||||
|
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||||
|
gtk_container_add (GTK_CONTAINER (box), hbox);
|
||||||
|
gtk_container_add (GTK_CONTAINER (box), obj->button);
|
||||||
|
gtk_widget_show_all (box);
|
||||||
|
|
||||||
|
obj->widget = NULL;
|
||||||
|
/* project = glade_widget_get_project (glade_property_get_widget
|
||||||
|
(glade_editor_property_get_property (eprop)));
|
||||||
|
*/
|
||||||
|
|
||||||
|
return box;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void glade_eprop_model_load (GladeEditorProperty * eprop, GladeProperty * property)
|
||||||
|
{
|
||||||
|
gchar * label;
|
||||||
|
const gchar * text;
|
||||||
|
GObject * object;
|
||||||
|
GladeEditorPropertyClass * parent_class =
|
||||||
|
g_type_class_peek_parent (GLADE_EDITOR_PROPERTY_GET_CLASS (eprop));
|
||||||
|
parent_class->load (eprop, property);
|
||||||
|
|
||||||
|
if (property == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((object = g_value_get_object (glade_property_inline_value (property))))
|
||||||
|
{
|
||||||
|
label = _("Edit Model");
|
||||||
|
text = glade_widget_get_name (glade_widget_get_from_gobject (object));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
label = _("New Model");
|
||||||
|
text = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_button_set_label (GTK_BUTTON (GLADE_EPROP_MODEL (eprop)->button), label);
|
||||||
|
gtk_entry_set_text (GTK_ENTRY (GLADE_EPROP_MODEL (eprop)->entry), text);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void glade_eprop_model_finalize (GObject * object)
|
||||||
|
{
|
||||||
|
GObjectClass * parent_class = g_type_class_peek_parent (G_OBJECT_GET_CLASS (object));
|
||||||
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ DbModel Action Callback
|
||||||
|
|
||||||
|
void glade_db_model_action_activate (GladeWidgetAdaptor * adaptor,
|
||||||
|
DbModel * model, const gchar * path)
|
||||||
|
{
|
||||||
|
glade_eprop_model_show_dialog (NULL,
|
||||||
|
(GObject *) glade_widget_get_from_gobject (model));
|
||||||
|
}
|
||||||
|
|
||||||
|
//++++++++++++++++++++++++++++++++++++++++++++ DbModelHolder GladeWidgetAdaptor
|
||||||
|
|
||||||
|
GladeEditorProperty * glade_db_model_holder_create_eprop (GladeWidgetAdaptor * adaptor,
|
||||||
|
GladePropertyClass * klass, gboolean use_command)
|
||||||
|
{
|
||||||
|
GladeEditorProperty * eprop;
|
||||||
|
GParamSpec * pspec = glade_property_class_get_pspec (klass);
|
||||||
|
|
||||||
|
if (pspec->value_type == DB_TYPE_MODEL)
|
||||||
|
{
|
||||||
|
eprop = g_object_new (GLADE_TYPE_EPROP_MODEL,
|
||||||
|
"property-class", klass,
|
||||||
|
"use-command", use_command, NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
eprop = GWA_GET_CLASS (G_TYPE_OBJECT)->create_eprop (adaptor, klass, use_command);
|
||||||
|
|
||||||
|
return eprop;
|
||||||
|
}
|
||||||
|
|
||||||
|
void glade_db_model_write_widget (GladeWidgetAdaptor * adaptor,
|
||||||
|
GladeWidget * widget, GladeXmlContext * context, GladeXmlNode * node)
|
||||||
|
{
|
||||||
|
GladeProperty * prop;
|
||||||
|
|
||||||
|
if (!glade_xml_node_verify (node, GLADE_XML_TAG_WIDGET))
|
||||||
|
return;
|
||||||
|
|
||||||
|
prop = glade_widget_get_property (widget, "use-file");
|
||||||
|
glade_property_write (prop, context, node);
|
||||||
|
|
||||||
|
prop = glade_widget_get_property (widget, "sql");
|
||||||
|
glade_property_write (prop, context, node);
|
||||||
|
|
||||||
|
GWA_GET_CLASS (G_TYPE_OBJECT)->write_widget (adaptor, widget, context, node);
|
||||||
|
}
|
|
@ -0,0 +1,231 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2013 - Juan Ferrer Toribio
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "glade-vn.h"
|
||||||
|
|
||||||
|
#ifdef _HAVE_GTKSOURCEVIEW
|
||||||
|
#include <gtksourceview/gtksourceview.h>
|
||||||
|
#include <gtksourceview/gtksourcebuffer.h>
|
||||||
|
#include <gtksourceview/gtksourcelanguage.h>
|
||||||
|
#include <gtksourceview/gtksourcelanguagemanager.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define NEW_SQL _("New SQL statement")
|
||||||
|
|
||||||
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ GladeEPropSql
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
GladeEditorProperty parent;
|
||||||
|
|
||||||
|
GtkWidget * button;
|
||||||
|
GtkWidget * entry;
|
||||||
|
gint width;
|
||||||
|
gint height;
|
||||||
|
}
|
||||||
|
GladeEPropSql;
|
||||||
|
|
||||||
|
GLADE_MAKE_EPROP (GladeEPropSql, glade_eprop_sql)
|
||||||
|
#define GLADE_TYPE_EPROP_SQL (glade_eprop_sql_get_type())
|
||||||
|
#define GLADE_EPROP_SQL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_EPROP_SQL, GladeEPropSql))
|
||||||
|
#define GLADE_EPROP_SQL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_EPROP_SQL, GladeEPropSqlClass))
|
||||||
|
#define GLADE_IS_EPROP_SQL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_EPROP_SQL))
|
||||||
|
#define GLADE_IS_EPROP_SQL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_EPROP_SQL))
|
||||||
|
#define GLADE_EPROP_SQL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GLADE_EPROP_SQL, GladeEPropSqlClass))
|
||||||
|
|
||||||
|
static void glade_eprop_sql_show_dialog (GtkButton * button, GladeEditorProperty * eprop)
|
||||||
|
{
|
||||||
|
gpointer text, buffer;
|
||||||
|
const gchar * sql;
|
||||||
|
GladeEPropSql * obj = GLADE_EPROP_SQL (eprop);
|
||||||
|
PangoFontDescription * font;
|
||||||
|
GtkWidget * scroll;
|
||||||
|
GladeProperty * p = glade_editor_property_get_property (eprop);
|
||||||
|
GtkDialog * dialog = GTK_DIALOG (gtk_dialog_new_with_buttons
|
||||||
|
(_("SQL Editor")
|
||||||
|
,GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (eprop)))
|
||||||
|
,GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT
|
||||||
|
,GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL
|
||||||
|
,GTK_STOCK_CLEAR, GTK_RESPONSE_REJECT
|
||||||
|
,GTK_STOCK_OK, GTK_RESPONSE_OK
|
||||||
|
,NULL
|
||||||
|
));
|
||||||
|
|
||||||
|
gtk_dialog_set_alternative_button_order (dialog,
|
||||||
|
GTK_RESPONSE_OK, GTK_RESPONSE_REJECT, GTK_RESPONSE_CANCEL, -1);
|
||||||
|
gtk_dialog_set_default_response (dialog, GTK_RESPONSE_OK);
|
||||||
|
gtk_window_set_default_size (GTK_WINDOW (dialog), obj->width, obj->height);
|
||||||
|
|
||||||
|
scroll = gtk_scrolled_window_new (gtk_adjustment_new (0,0,0,0,0,0),
|
||||||
|
gtk_adjustment_new (0,0,0,0,0,0));
|
||||||
|
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN);
|
||||||
|
gtk_widget_set_margin_top (scroll, 6);
|
||||||
|
gtk_widget_set_margin_right (scroll, 6);
|
||||||
|
gtk_widget_set_margin_bottom (scroll, 6);
|
||||||
|
gtk_widget_set_margin_left (scroll, 6);
|
||||||
|
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (dialog)),
|
||||||
|
scroll, TRUE, TRUE, 6);
|
||||||
|
|
||||||
|
#ifdef _HAVE_GTKSOURCEVIEW
|
||||||
|
GtkSourceLanguageManager * lm = gtk_source_language_manager_new ();
|
||||||
|
GtkSourceLanguage * lang = gtk_source_language_manager_get_language (lm, "sql");
|
||||||
|
text = gtk_source_view_new ();
|
||||||
|
gtk_source_view_set_tab_width (text, 4);
|
||||||
|
gtk_source_view_set_show_line_numbers (text, TRUE);
|
||||||
|
gtk_source_view_set_highlight_current_line (text, TRUE);
|
||||||
|
buffer = gtk_text_view_get_buffer (text);
|
||||||
|
gtk_source_buffer_set_language (buffer, lang);
|
||||||
|
gtk_source_buffer_set_highlight_matching_brackets (buffer, TRUE);
|
||||||
|
#else
|
||||||
|
text = gtk_text_view_new ();
|
||||||
|
buffer = gtk_text_view_get_buffer (text);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
font = pango_font_description_from_string ("Monospace");
|
||||||
|
gtk_widget_override_font (text, font);
|
||||||
|
pango_font_description_free (font);
|
||||||
|
|
||||||
|
sql = g_value_get_string (glade_property_inline_value (p));
|
||||||
|
|
||||||
|
if (sql)
|
||||||
|
gtk_text_buffer_set_text (buffer, sql, -1);
|
||||||
|
|
||||||
|
gtk_container_add (GTK_CONTAINER (scroll), text);
|
||||||
|
gtk_widget_show_all (scroll);
|
||||||
|
|
||||||
|
switch (gtk_dialog_run (dialog))
|
||||||
|
{
|
||||||
|
case GTK_RESPONSE_OK:
|
||||||
|
{
|
||||||
|
GValue val = G_VALUE_INIT;
|
||||||
|
GtkTextIter * start = g_new (GtkTextIter, 1),
|
||||||
|
* end = g_new (GtkTextIter, 1);
|
||||||
|
g_value_init (&val, G_TYPE_STRING);
|
||||||
|
gtk_text_buffer_get_bounds (buffer, start, end);
|
||||||
|
|
||||||
|
sql = gtk_text_buffer_get_text (buffer, start, end, TRUE);
|
||||||
|
g_value_set_string (&val, sql);
|
||||||
|
glade_command_set_property_value (p, &val);
|
||||||
|
|
||||||
|
g_value_unset (&val);
|
||||||
|
g_free (start);
|
||||||
|
g_free (end);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GTK_RESPONSE_REJECT:
|
||||||
|
{
|
||||||
|
GValue val = G_VALUE_INIT;
|
||||||
|
g_value_init (&val, G_TYPE_STRING);
|
||||||
|
g_value_set_string (&val, "");
|
||||||
|
glade_command_set_property_value (p, &val);
|
||||||
|
g_value_unset (&val);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GTK_RESPONSE_CANCEL:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
obj->width = gtk_widget_get_allocated_width (GTK_WIDGET (dialog));
|
||||||
|
obj->height = gtk_widget_get_allocated_height (GTK_WIDGET (dialog));
|
||||||
|
gtk_widget_destroy (GTK_WIDGET (dialog));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void glade_eprop_sql_entry_text_changed (GtkEntry * entry,
|
||||||
|
GladeEditorProperty * eprop)
|
||||||
|
{
|
||||||
|
const gchar * text = gtk_entry_get_text (entry);
|
||||||
|
GladeProperty * p = glade_editor_property_get_property (eprop);
|
||||||
|
|
||||||
|
if (text)
|
||||||
|
{
|
||||||
|
GValue val = G_VALUE_INIT;
|
||||||
|
g_value_init (&val, G_TYPE_STRING);
|
||||||
|
g_value_set_string (&val, text);
|
||||||
|
|
||||||
|
glade_command_set_property_value (p, &val);
|
||||||
|
|
||||||
|
g_value_unset (&val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * glade_eprop_sql_create_input (GladeEditorProperty * eprop)
|
||||||
|
{
|
||||||
|
GladeEPropSql * obj = GLADE_EPROP_SQL (eprop);
|
||||||
|
GtkWidget * box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
|
|
||||||
|
obj->entry = gtk_entry_new ();
|
||||||
|
gtk_widget_set_hexpand (obj->entry, TRUE);
|
||||||
|
g_signal_connect (obj->entry, "changed",
|
||||||
|
G_CALLBACK (glade_eprop_sql_entry_text_changed), obj);
|
||||||
|
gtk_container_add (GTK_CONTAINER (box), obj->entry);
|
||||||
|
|
||||||
|
obj->button = gtk_button_new_with_label ("...");
|
||||||
|
g_signal_connect (obj->button, "clicked",
|
||||||
|
G_CALLBACK (glade_eprop_sql_show_dialog), obj);
|
||||||
|
gtk_widget_set_tooltip_text (obj->button, _("Open the SQL Editor"));
|
||||||
|
gtk_container_add (GTK_CONTAINER (box), obj->button);
|
||||||
|
|
||||||
|
gtk_widget_show_all (box);
|
||||||
|
|
||||||
|
obj->width = 750;
|
||||||
|
obj->height = 550;
|
||||||
|
|
||||||
|
return box;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void glade_eprop_sql_load (GladeEditorProperty * eprop, GladeProperty * property)
|
||||||
|
{
|
||||||
|
const gchar * sql;
|
||||||
|
GladeEPropSql * obj = GLADE_EPROP_SQL (eprop);
|
||||||
|
|
||||||
|
GladeEditorPropertyClass * parent_class =
|
||||||
|
g_type_class_peek_parent (GLADE_EDITOR_PROPERTY_GET_CLASS (eprop));
|
||||||
|
parent_class->load (eprop, property);
|
||||||
|
|
||||||
|
if (!property)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((sql = g_value_get_string (glade_property_inline_value (property))))
|
||||||
|
gtk_entry_set_text (GTK_ENTRY (obj->entry), sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void glade_eprop_sql_finalize (GObject * object)
|
||||||
|
{
|
||||||
|
GObjectClass * parent_class = g_type_class_peek_parent (G_OBJECT_GET_CLASS (object));
|
||||||
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
//++++++++++++++++++++++++++++++++++++++++++++++++++ DbModel GladeWidgetAdaptor
|
||||||
|
|
||||||
|
GladeEditorProperty * glade_db_sql_create_eprop (GladeWidgetAdaptor * adaptor,
|
||||||
|
GladePropertyClass * klass, gboolean use_command)
|
||||||
|
{
|
||||||
|
GladeEditorProperty * eprop;
|
||||||
|
GParamSpec * pspec = glade_property_class_get_pspec (klass);
|
||||||
|
|
||||||
|
if (!g_strcmp0 (pspec->name, "sql"))
|
||||||
|
{
|
||||||
|
eprop = g_object_new (GLADE_TYPE_EPROP_SQL,
|
||||||
|
"property-class", klass,
|
||||||
|
"use-command", use_command, NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
eprop = GWA_GET_CLASS (G_TYPE_OBJECT)->create_eprop (adaptor, klass, use_command);
|
||||||
|
|
||||||
|
return eprop;
|
||||||
|
}
|
|
@ -65,5 +65,5 @@ void glade_vn_batch_replace_child (GladeWidgetAdaptor * adaptor,
|
||||||
GList * glade_vn_batch_get_children (GladeWidgetAdaptor * adaptor,
|
GList * glade_vn_batch_get_children (GladeWidgetAdaptor * adaptor,
|
||||||
VnBatch * group)
|
VnBatch * group)
|
||||||
{
|
{
|
||||||
return vn_batch_get_objects (group);
|
return vn_batch_get_objects_list (group);
|
||||||
}
|
}
|
||||||
|
|
70
glade/vn.xml
70
glade/vn.xml
|
@ -16,15 +16,28 @@
|
||||||
<glade-widget-class name="DbModel" generic-name="model" title="Data Model" icon-name="widget-gtk-liststore">
|
<glade-widget-class name="DbModel" generic-name="model" title="Data Model" icon-name="widget-gtk-liststore">
|
||||||
<properties>
|
<properties>
|
||||||
<property id="conn" ignore="True" disabled="True"/>
|
<property id="conn" ignore="True" disabled="True"/>
|
||||||
<property id="sql" ignore="True"/>
|
<property id="stmt" ignore="True" disabled="True"/>
|
||||||
|
<property save="False" weight="1.2" id="use-file" ignore="True"/>
|
||||||
|
<property save="False" weight="1.3" id="sql" ignore="True"/>
|
||||||
</properties>
|
</properties>
|
||||||
|
<actions>
|
||||||
|
<action stock="gtk-edit" important="True" id="launch_editor" name="Edit…"/>
|
||||||
|
</actions>
|
||||||
|
<action-activate-function>glade_db_model_action_activate</action-activate-function>
|
||||||
|
<create-editor-property-function>glade_db_sql_create_eprop</create-editor-property-function>
|
||||||
|
<write-widget-function>glade_db_model_write_widget</write-widget-function>
|
||||||
</glade-widget-class>
|
</glade-widget-class>
|
||||||
|
|
||||||
<glade-widget-class name="DbIterator" generic-name="iterator" title="Iterator" icon-name="widget-gtk-texttagtable">
|
<glade-widget-class name="DbIterator" generic-name="iterator" title="Iterator" icon-name="widget-gtk-texttagtable">
|
||||||
<properties>
|
<properties>
|
||||||
<property id="conn" ignore="True" disabled="True"/>
|
<property id="model" ignore="True">
|
||||||
<property id="sql" ignore="True"/>
|
<parameter-spec>
|
||||||
|
<type>GParamObject</type>
|
||||||
|
<value-type>DbModel</value-type>
|
||||||
|
</parameter-spec>
|
||||||
|
</property>
|
||||||
</properties>
|
</properties>
|
||||||
|
<create-editor-property-function>glade_db_model_holder_create_eprop</create-editor-property-function>
|
||||||
</glade-widget-class>
|
</glade-widget-class>
|
||||||
|
|
||||||
<glade-widget-class name="DbParam" generic-name="param" toplevel="True" title="Iterator Parameter" icon-name="widget-gtk-texttag">
|
<glade-widget-class name="DbParam" generic-name="param" toplevel="True" title="Iterator Parameter" icon-name="widget-gtk-texttag">
|
||||||
|
@ -47,27 +60,32 @@
|
||||||
<glade-widget-class name="VnGrid" generic-name="grid" title="Grid" icon-name="widget-gtk-treeview">
|
<glade-widget-class name="VnGrid" generic-name="grid" title="Grid" icon-name="widget-gtk-treeview">
|
||||||
</glade-widget-class>
|
</glade-widget-class>
|
||||||
|
|
||||||
<glade-widget-class name="VnColumnCheck" generic-name="column-check" title="Column Check" icon-name="widget-gtk-checkbutton"/>
|
<glade-widget-class name="VnColumnCheck" generic-name="column-check" title="Column Check" icon-name="widget-gtk-cellrenderertoggle"/>
|
||||||
<glade-widget-class name="VnColumnEntry" generic-name="column-entry" title="Column Entry" icon-name="widget-gtk-entry"/>
|
<glade-widget-class name="VnColumnEntry" generic-name="column-entry" title="Column Entry" icon-name="widget-gtk-cellrenderertext"/>
|
||||||
|
|
||||||
<glade-widget-class name="VnColumnSpin" generic-name="column-Spin" title="Column Spin" icon-name="widget-gtk-spinbutton">
|
<glade-widget-class name="VnColumnSpin" generic-name="column-Spin" title="Column Spin" icon-name="widget-gtk-cellrendererspin">
|
||||||
<properties>
|
<properties>
|
||||||
<property id="digits" ignore="True" disabled="True"/>
|
<property id="digits" ignore="True" disabled="True"/>
|
||||||
<property id="climb-rate" ignore="True" disabled="True"/>
|
<property id="climb-rate" ignore="True" disabled="True"/>
|
||||||
</properties>
|
</properties>
|
||||||
</glade-widget-class>
|
</glade-widget-class>
|
||||||
|
|
||||||
<glade-widget-class name="VnColumnCombo" generic-name="column-combo" title="Column Combo" icon-name="widget-gtk-combobox">
|
<glade-widget-class name="VnColumnCombo" generic-name="column-combo" title="Column Combo" icon-name="widget-gtk-cellrenderercombo">
|
||||||
<properties>
|
<properties>
|
||||||
<property id="conn" ignore="True" disabled="True"/>
|
<property id="model" ignore="True">
|
||||||
<property id="sql" ignore="True"/>
|
<parameter-spec>
|
||||||
|
<type>GParamObject</type>
|
||||||
|
<value-type>DbModel</value-type>
|
||||||
|
</parameter-spec>
|
||||||
|
</property>
|
||||||
</properties>
|
</properties>
|
||||||
|
<create-editor-property-function>glade_db_model_holder_create_eprop</create-editor-property-function>
|
||||||
</glade-widget-class>
|
</glade-widget-class>
|
||||||
|
|
||||||
<glade-widget-class name="VnColumnImage" generic-name="column-image" title="Column Image" icon-name="widget-gtk-image">
|
<glade-widget-class name="VnColumnImage" generic-name="column-image" title="Column Image" icon-name="widget-gtk-cellrendererpixbuf">
|
||||||
<properties>
|
<properties>
|
||||||
<property id="host" ignore="True" weight="0"/>
|
<property id="host" ignore="True"/>
|
||||||
<property id="path" ignore="True" weight="1"/>
|
<property id="path" ignore="True"/>
|
||||||
</properties>
|
</properties>
|
||||||
</glade-widget-class>
|
</glade-widget-class>
|
||||||
|
|
||||||
|
@ -79,17 +97,31 @@
|
||||||
|
|
||||||
<glade-widget-class name="VnCombo" generic-name="combo" title="Combo Box Field" icon-name="widget-gtk-combobox">
|
<glade-widget-class name="VnCombo" generic-name="combo" title="Combo Box Field" icon-name="widget-gtk-combobox">
|
||||||
<properties>
|
<properties>
|
||||||
<property id="conn" ignore="True" disabled="True"/>
|
<property id="model" ignore="True">
|
||||||
<property id="sql" ignore="True"/>
|
<parameter-spec>
|
||||||
|
<type>GParamObject</type>
|
||||||
|
<value-type>DbModel</value-type>
|
||||||
|
</parameter-spec>
|
||||||
|
</property>
|
||||||
|
<!-- This is used to avoid weird error about this unexisting property -->
|
||||||
|
<property id="accelerator" disabled="True"/>
|
||||||
</properties>
|
</properties>
|
||||||
|
<create-editor-property-function>glade_db_model_holder_create_eprop</create-editor-property-function>
|
||||||
</glade-widget-class>
|
</glade-widget-class>
|
||||||
|
|
||||||
<glade-widget-class name="VnCompletion" generic-name="completion" title="Completion Field" icon-name="widget-gtk-entry">
|
<glade-widget-class name="VnCompletion" generic-name="completion" title="Completion Field" icon-name="widget-gtk-entry">
|
||||||
<properties>
|
<properties>
|
||||||
<property id="conn" ignore="True" disabled="True"/>
|
<property id="model" ignore="True">
|
||||||
<property id="sql" ignore="True"/>
|
<parameter-spec>
|
||||||
|
<type>GParamObject</type>
|
||||||
|
<value-type>DbModel</value-type>
|
||||||
|
</parameter-spec>
|
||||||
|
</property>
|
||||||
<property id="field" ignore="True"/>
|
<property id="field" ignore="True"/>
|
||||||
|
<!-- This is used to avoid weird error about this unexisting property -->
|
||||||
|
<property id="accelerator" disabled="True"/>
|
||||||
</properties>
|
</properties>
|
||||||
|
<create-editor-property-function>glade_db_model_holder_create_eprop</create-editor-property-function>
|
||||||
</glade-widget-class>
|
</glade-widget-class>
|
||||||
|
|
||||||
<glade-widget-class name="VnHttpImage" generic-name="http-image" title="Image retrieved by HTTP" icon-name="widget-gtk-image">
|
<glade-widget-class name="VnHttpImage" generic-name="http-image" title="Image retrieved by HTTP" icon-name="widget-gtk-image">
|
||||||
|
@ -117,7 +149,6 @@
|
||||||
</glade-widget-classes>
|
</glade-widget-classes>
|
||||||
|
|
||||||
<glade-widget-group name="db-toplevels" title="Data Handling">
|
<glade-widget-group name="db-toplevels" title="Data Handling">
|
||||||
<glade-widget-class-ref name="VnBatch"/>
|
|
||||||
<glade-widget-class-ref name="GvnParam"/>
|
<glade-widget-class-ref name="GvnParam"/>
|
||||||
<glade-widget-class-ref name="DbModel"/>
|
<glade-widget-class-ref name="DbModel"/>
|
||||||
<glade-widget-class-ref name="DbIterator"/>
|
<glade-widget-class-ref name="DbIterator"/>
|
||||||
|
@ -125,7 +156,7 @@
|
||||||
<glade-widget-class-ref name="DbFileLoader"/>
|
<glade-widget-class-ref name="DbFileLoader"/>
|
||||||
</glade-widget-group>
|
</glade-widget-group>
|
||||||
|
|
||||||
<glade-widget-group name="vn-toplevels" title="Grid and Columns">
|
<glade-widget-group name="vn-toplevels" title="Grid and Columns" weight="1000">
|
||||||
<glade-widget-class-ref name="VnGrid"/>
|
<glade-widget-class-ref name="VnGrid"/>
|
||||||
<glade-widget-class-ref name="VnColumnCheck"/>
|
<glade-widget-class-ref name="VnColumnCheck"/>
|
||||||
<glade-widget-class-ref name="VnColumnCombo"/>
|
<glade-widget-class-ref name="VnColumnCombo"/>
|
||||||
|
@ -134,7 +165,8 @@
|
||||||
<glade-widget-class-ref name="VnColumnSpin"/>
|
<glade-widget-class-ref name="VnColumnSpin"/>
|
||||||
</glade-widget-group>
|
</glade-widget-group>
|
||||||
|
|
||||||
<glade-widget-group name="vn-toplevels" title="Data Widgets">
|
<glade-widget-group name="vn-toplevels" title="Data Widgets" weight="0">
|
||||||
|
<glade-widget-class-ref name="VnBatch"/>
|
||||||
<glade-widget-class-ref name="VnHandler"/>
|
<glade-widget-class-ref name="VnHandler"/>
|
||||||
<glade-widget-class-ref name="VnEntry"/>
|
<glade-widget-class-ref name="VnEntry"/>
|
||||||
<glade-widget-class-ref name="VnCheck"/>
|
<glade-widget-class-ref name="VnCheck"/>
|
||||||
|
|
|
@ -9,6 +9,7 @@ AM_CPPFLAGS = \
|
||||||
hedera_bin_LDFLAGS = -Wl,--export-dynamic
|
hedera_bin_LDFLAGS = -Wl,--export-dynamic
|
||||||
hedera_bin_SOURCES = main.c
|
hedera_bin_SOURCES = main.c
|
||||||
hedera_bin_LDADD = \
|
hedera_bin_LDADD = \
|
||||||
|
$(gtk_LIBS) \
|
||||||
$(top_builddir)/gvn/libgvn.la \
|
$(top_builddir)/gvn/libgvn.la \
|
||||||
$(top_builddir)/db/libdb.la \
|
$(top_builddir)/db/libdb.la \
|
||||||
$(top_builddir)/vn/libvn.la
|
$(top_builddir)/vn/libvn.la
|
||||||
|
@ -21,12 +22,9 @@ $(hedera_bin_SCRIPTS): $(SCRIPT)
|
||||||
|
|
||||||
pkgconfig_DATA = hedera.pc
|
pkgconfig_DATA = hedera.pc
|
||||||
|
|
||||||
desktop_DATA = vn-hedera.desktop
|
desktop_DATA = \
|
||||||
|
vn-hedera.desktop \
|
||||||
HOST=verdnatura.es
|
vn-hedera-debug.desktop
|
||||||
certdir = $(datadir)/ca-certificates/$(HOST)
|
|
||||||
cert_DATA = cacert.pem
|
|
||||||
syscertdir = $(sysconfdir)/ssl/certs
|
|
||||||
|
|
||||||
man_MANS = hedera.1
|
man_MANS = hedera.1
|
||||||
|
|
||||||
|
@ -37,9 +35,5 @@ EXTRA_DIST = \
|
||||||
DISTCLEANFILES = \
|
DISTCLEANFILES = \
|
||||||
$(hedera_bin_SCRIPTS) \
|
$(hedera_bin_SCRIPTS) \
|
||||||
hedera.pc \
|
hedera.pc \
|
||||||
vn-hedera.desktop
|
vn-hedera.desktop \
|
||||||
|
vn-hedera-debug.desktop
|
||||||
install-data-hook:
|
|
||||||
mkdir -p $(DESTDIR)$(syscertdir)
|
|
||||||
(cd $(DESTDIR)$(syscertdir) && \
|
|
||||||
$(LN_S) -f $(DESTDIR)$(certdir)/$(cert_DATA) $(HOST).pem)
|
|
||||||
|
|
|
@ -7,9 +7,13 @@ hedera \- modular management system
|
||||||
|
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B hedera
|
.B hedera
|
||||||
.\"RI [ options ]
|
.RB [\-\-lib-dir|\-l
|
||||||
|
.IR path \|]
|
||||||
|
.RB [\-\-data-dir|\-l
|
||||||
|
.IR path \|]
|
||||||
|
.RB [\-\-query-dir|\-l
|
||||||
|
.IR path \|]
|
||||||
.br
|
.br
|
||||||
|
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.B hedera
|
.B hedera
|
||||||
is an enterprise management and administration application. It features modular
|
is an enterprise management and administration application. It features modular
|
||||||
|
@ -26,9 +30,12 @@ will look for the modules in /usr/lib/hedera/module and for its corresponding
|
||||||
data (GUI files, configuration...) in /usr/share/hedera/module but more
|
data (GUI files, configuration...) in /usr/share/hedera/module but more
|
||||||
directories can be added by setting
|
directories can be added by setting
|
||||||
.B VN_MODULE_LIB_PATH
|
.B VN_MODULE_LIB_PATH
|
||||||
(for the binaries) and
|
(for the binaries),
|
||||||
.B VN_MODULE_DATA_PATH
|
.B VN_MODULE_DATA_PATH
|
||||||
(for the additional data). These environment variables are intended for testing
|
(for the additional data) and
|
||||||
|
.B VN_MODULE_QUERY_PATH
|
||||||
|
(for SQL query files) that can also be set automatically passing the
|
||||||
|
corresponding options. These environment variables are intended for testing
|
||||||
during the developement and the expected is to use the modules installed.
|
during the developement and the expected is to use the modules installed.
|
||||||
.PP
|
.PP
|
||||||
The format for the configuration files for the modules and some information on
|
The format for the configuration files for the modules and some information on
|
||||||
|
@ -37,7 +44,25 @@ for
|
||||||
.B hedera.
|
.B hedera.
|
||||||
|
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
|
.TP
|
||||||
|
.BI \-l\ path ,\ \-\-lib-dir\ path
|
||||||
|
Sets the value of the
|
||||||
|
.B VN_MODULE_LIB_PATH
|
||||||
|
variable. This option can be used mutiple times to specify more than one search
|
||||||
|
path for the module libraries.
|
||||||
|
.TP
|
||||||
|
.BI \-d\ path ,\ \-\-data-dir\ path
|
||||||
|
Sets the value of the
|
||||||
|
.B VN_MODULE_DATA_PATH
|
||||||
|
variable. This option can be used mutiple times to specify more than one search
|
||||||
|
path for the module data files.
|
||||||
|
.TP
|
||||||
|
.BI \-q\ path ,\ \-\-query-dir\ path
|
||||||
|
Sets the value of the
|
||||||
|
.B VN_MODULE_QUERY_PATH
|
||||||
|
variable. This option can be used mutiple times to specify more than one search
|
||||||
|
path for the module query files.
|
||||||
|
.br
|
||||||
.SH EXAMPLE
|
.SH EXAMPLE
|
||||||
Given a module project in the home directory,
|
Given a module project in the home directory,
|
||||||
.B hedera
|
.B hedera
|
||||||
|
|
|
@ -1,10 +1,26 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if [ -x @bindir@/vn-updater-gui ]
|
UPDATE=1
|
||||||
|
|
||||||
|
while getopts ":u" OPTION
|
||||||
|
do
|
||||||
|
case $OPTION in
|
||||||
|
u)
|
||||||
|
UPDATE=0
|
||||||
|
;;
|
||||||
|
\?|:)
|
||||||
|
echo "Usage: $0 [-u]"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$UPDATE" -eq "1" -a -x @bindir@/vn-updater-gui ]
|
||||||
then
|
then
|
||||||
echo "Running updater..."
|
echo "Running updater..."
|
||||||
@bindir@/vn-updater-gui
|
@bindir@/vn-updater-gui
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
|
export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
|
||||||
exec @bindir@/hedera-bin
|
|
||||||
|
exec hedera-bin
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Hedera (Development)
|
||||||
|
GenericName=Office Tool
|
||||||
|
Comment=Runtime for the Hedera system (Development)
|
||||||
|
Exec=hedera -u
|
||||||
|
Icon=@prefix@/share/@PACKAGE@/vn/image/icon-debug.svg
|
||||||
|
Terminal=true
|
||||||
|
Type=Application
|
||||||
|
Categories=GNOME;GTK;Development;
|
||||||
|
StartupNotify=true
|
||||||
|
Version=@VERSION@
|
|
@ -3,7 +3,7 @@ Name=Hedera
|
||||||
GenericName=Office Tool
|
GenericName=Office Tool
|
||||||
Comment=Runtime for the Hedera system
|
Comment=Runtime for the Hedera system
|
||||||
Exec=hedera
|
Exec=hedera
|
||||||
Icon=@prefix@/share/hedera/vn/image/icon.svg
|
Icon=@prefix@/share/@PACKAGE@/vn/image/icon.svg
|
||||||
Terminal=false
|
Terminal=false
|
||||||
Type=Application
|
Type=Application
|
||||||
Categories=GNOME;GTK;Office;
|
Categories=GNOME;GTK;Office;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
include $(top_srcdir)/Makefile.decl
|
||||||
|
|
||||||
SUBDIRS = \
|
SUBDIRS = \
|
||||||
src \
|
src \
|
||||||
data \
|
data
|
||||||
sql
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<!-- interface-requires gtk+ 3.0 -->
|
|
||||||
<!-- interface-requires vn 0.0 -->
|
<!-- interface-requires vn 0.0 -->
|
||||||
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-local-resource-path ../image -->
|
<!-- interface-local-resource-path ../image -->
|
||||||
<object class="GtkActionGroup" id="actions">
|
<object class="GtkActionGroup" id="actions">
|
||||||
<child>
|
<child>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<!-- interface-requires gtk+ 3.0 -->
|
|
||||||
<!-- interface-requires vn 0.0 -->
|
<!-- interface-requires vn 0.0 -->
|
||||||
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-local-resource-path ../image -->
|
<!-- interface-local-resource-path ../image -->
|
||||||
<object class="DbIterator" id="homes">
|
<object class="DbIterator" id="homes">
|
||||||
<property name="sql">SELECT id, street, pc, city, province, ok FROM user_address WHERE #p ORDER BY id</property>
|
<property name="sql">SELECT id, street, pc, city, province, ok FROM user_address WHERE #p ORDER BY id</property>
|
||||||
|
@ -19,7 +19,6 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="label_xalign">0</property>
|
<property name="label_xalign">0</property>
|
||||||
<property name="shadow_type">none</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox" id="box1">
|
<object class="GtkBox" id="box1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -308,7 +307,6 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="label_xalign">0</property>
|
<property name="label_xalign">0</property>
|
||||||
<property name="shadow_type">none</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox" id="box2">
|
<object class="GtkBox" id="box2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
|
|
@ -1,13 +1,30 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<!-- interface-requires vn 0.0 -->
|
|
||||||
<!-- interface-requires gtk+ 3.0 -->
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<object class="DbIterator" id="account">
|
<!-- interface-requires vn 0.0 -->
|
||||||
<property name="sql">SELECT user_id, group_id, uid, last_change, expire FROM account WHERE #p</property>
|
<object class="VnBatch" id="iterators">
|
||||||
<property name="mode">on-iter</property>
|
<child>
|
||||||
</object>
|
<object class="DbIterator" id="account">
|
||||||
<object class="DbIterator" id="alias">
|
<property name="model">account-model</property>
|
||||||
<property name="sql">SELECT mail_alias_id, user_id FROM mail_alias_account WHERE #p</property>
|
<property name="mode">on-iter</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="DbIterator" id="alias">
|
||||||
|
<property name="model">alias-model</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="DbIterator" id="sip">
|
||||||
|
<property name="model">sip-model</property>
|
||||||
|
<property name="mode">on-iter</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="DbIterator" id="users">
|
||||||
|
<property name="model">users-model</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkBox" id="main">
|
<object class="GtkBox" id="main">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -15,66 +32,6 @@
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
|
||||||
<object class="GtkFrame" id="frame1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="label_xalign">0</property>
|
|
||||||
<property name="shadow_type">none</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="left_padding">30</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkBox" id="box1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="spacing">6</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label2">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">1</property>
|
|
||||||
<property name="label" translatable="yes">User name:</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="VnEntry" id="entry-search">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="param">search-user</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child type="label">
|
|
||||||
<object class="GtkLabel" id="label1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="label" translatable="yes"><b>Search</b></property>
|
|
||||||
<property name="use_markup">True</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -277,9 +234,9 @@
|
||||||
<object class="VnCombo" id="combo1">
|
<object class="VnCombo" id="combo1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
<property name="model">user-combo-model</property>
|
||||||
<property name="iterator">users</property>
|
<property name="iterator">users</property>
|
||||||
<property name="column_name">mysql_user_id</property>
|
<property name="column_name">mysql_user_id</property>
|
||||||
<property name="sql">SELECT id, user FROM mysql_user</property>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
|
@ -344,9 +301,9 @@
|
||||||
<object class="VnCombo" id="combo2">
|
<object class="VnCombo" id="combo2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
<property name="model">account-combo-model</property>
|
||||||
<property name="iterator">account</property>
|
<property name="iterator">account</property>
|
||||||
<property name="column_name">group_id</property>
|
<property name="column_name">group_id</property>
|
||||||
<property name="sql">SELECT id, name FROM `group`</property>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
|
@ -518,9 +475,9 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="VnColumnCombo" id="column-combo1">
|
<object class="VnColumnCombo" id="column-combo1">
|
||||||
<property name="title" translatable="yes">Alias</property>
|
<property name="title" translatable="yes">Alias</property>
|
||||||
|
<property name="model">alias-combo-model</property>
|
||||||
<property name="column_name">mail_alias_id</property>
|
<property name="column_name">mail_alias_id</property>
|
||||||
<property name="editable">True</property>
|
<property name="editable">True</property>
|
||||||
<property name="sql">SELECT id, alias FROM mail_alias</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -739,6 +696,54 @@
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="VnBatch" id="models">
|
||||||
|
<child>
|
||||||
|
<object class="DbModel" id="users-model">
|
||||||
|
<property name="sql">SELECT u.id, u.name, u.mysql_user_id, m.user, u.active
|
||||||
|
FROM `user` u
|
||||||
|
JOIN mysql_user m ON u.mysql_user_id = m.id</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="DbModel" id="sip-model">
|
||||||
|
<property name="sql">SELECT user_id, extension, secret, callerid, callgroup
|
||||||
|
FROM account_sip
|
||||||
|
WHERE #p</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="DbModel" id="alias-combo-model">
|
||||||
|
<property name="sql">SELECT id, alias FROM mail_alias</property>
|
||||||
|
<property name="update_flags"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="DbModel" id="user-combo-model">
|
||||||
|
<property name="sql">SELECT id, user FROM mysql_user</property>
|
||||||
|
<property name="update_flags"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="DbModel" id="alias-model">
|
||||||
|
<property name="sql">SELECT mail_alias_id, user_id
|
||||||
|
FROM mail_alias_account
|
||||||
|
WHERE #p</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="DbModel" id="account-model">
|
||||||
|
<property name="sql">SELECT user_id, group_id, uid, last_change, expire
|
||||||
|
FROM account
|
||||||
|
WHERE #p</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="DbModel" id="account-combo-model">
|
||||||
|
<property name="sql">SELECT id, name FROM `group`</property>
|
||||||
|
<property name="update_flags"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
<object class="GtkDialog" id="password-dialog">
|
<object class="GtkDialog" id="password-dialog">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">5</property>
|
<property name="border_width">5</property>
|
||||||
|
@ -898,11 +903,4 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<object class="DbParam" id="search-user"/>
|
<object class="DbParam" id="search-user"/>
|
||||||
<object class="DbIterator" id="sip">
|
|
||||||
<property name="sql">SELECT user_id, extension, secret, callerid, callgroup FROM account_sip WHERE #p</property>
|
|
||||||
<property name="mode">on-iter</property>
|
|
||||||
</object>
|
|
||||||
<object class="DbIterator" id="users">
|
|
||||||
<property name="sql">SELECT u.id, u.name, u.mysql_user_id, m.user, u.active FROM `user` u JOIN mysql_user m ON u.mysql_user_id = m.id</property>
|
|
||||||
</object>
|
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
10
|
||||||
|
|
||||||
|
dir
|
||||||
|
309
|
||||||
|
svn://www.verdnatura.es/hedera/trunk/module/sql
|
||||||
|
svn://www.verdnatura.es/hedera
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
2013-07-05T08:50:39.387803Z
|
||||||
|
307
|
||||||
|
juan
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
d9127786-647a-4bcf-81f6-65b2d4e6f3ab
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
SELECT name, color, id FROM item;
|
|
@ -5,7 +5,8 @@ example_lib_LTLIBRARIES = libexample.la
|
||||||
|
|
||||||
AM_CPPFLAGS = \
|
AM_CPPFLAGS = \
|
||||||
-I$(top_srcdir) \
|
-I$(top_srcdir) \
|
||||||
$(gtk_CFLAGS)
|
$(gtk_CFLAGS) \
|
||||||
|
$(DEFINES)
|
||||||
libexample_la_LDFLAGS = -avoid-version
|
libexample_la_LDFLAGS = -avoid-version
|
||||||
libexample_la_LIBADD = $(top_builddir)/vn/libvn.la
|
libexample_la_LIBADD = $(top_builddir)/vn/libvn.la
|
||||||
libexample_la_SOURCES = \
|
libexample_la_SOURCES = \
|
||||||
|
@ -16,6 +17,11 @@ libexample_la_SOURCES = \
|
||||||
vn-customer.h \
|
vn-customer.h \
|
||||||
vn-customer.c
|
vn-customer.c
|
||||||
|
|
||||||
|
example_querydir = $(module_querydir)/example
|
||||||
|
example_query_DATA = ../sql/example/consulter.sql
|
||||||
|
|
||||||
|
DEFINES = -D_QUERY_PATH=\"$(module_querydir)\"
|
||||||
|
|
||||||
install-data-hook:
|
install-data-hook:
|
||||||
rm -f $(DESTDIR)$(module_libdir)/libexample.la
|
rm -f $(DESTDIR)$(module_libdir)/libexample.la
|
||||||
rm -f $(DESTDIR)$(module_libdir)/libexample.a
|
rm -f $(DESTDIR)$(module_libdir)/libexample.a
|
|
@ -20,6 +20,8 @@
|
||||||
|
|
||||||
G_DEFINE_TYPE (VnConsulter, vn_consulter, VN_TYPE_FORM);
|
G_DEFINE_TYPE (VnConsulter, vn_consulter, VN_TYPE_FORM);
|
||||||
|
|
||||||
|
#define FILE_KW "sql://"
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
||||||
|
|
||||||
void vn_consulter_clean_clicked (GtkButton * button, VnConsulter * obj)
|
void vn_consulter_clean_clicked (GtkButton * button, VnConsulter * obj)
|
||||||
|
@ -63,11 +65,14 @@ static void vn_consulter_model_status_changed (DbModel * model,
|
||||||
DbModelStatus status, VnConsulter * obj)
|
DbModelStatus status, VnConsulter * obj)
|
||||||
{
|
{
|
||||||
GList * n;
|
GList * n;
|
||||||
GtkTreeView * tv = GTK_TREE_VIEW (obj->tree);
|
GtkTreeView * tv = GTK_TREE_VIEW (obj->grid);
|
||||||
GList * cols = gtk_tree_view_get_columns (tv);
|
GList * cols = gtk_tree_view_get_columns (tv);
|
||||||
|
|
||||||
for (n = cols; n; n = n->next)
|
for (n = cols; n; n = n->next)
|
||||||
gtk_tree_view_remove_column (tv, n->data);
|
{
|
||||||
|
GtkTreeViewColumn * col = n->data;
|
||||||
|
gtk_tree_view_remove_column (tv, col);
|
||||||
|
}
|
||||||
|
|
||||||
g_list_free (cols);
|
g_list_free (cols);
|
||||||
|
|
||||||
|
@ -76,9 +81,8 @@ static void vn_consulter_model_status_changed (DbModel * model,
|
||||||
case DB_MODEL_STATUS_READY:
|
case DB_MODEL_STATUS_READY:
|
||||||
{
|
{
|
||||||
gint i;
|
gint i;
|
||||||
gint cols = db_model_get_ncols (model);
|
|
||||||
|
|
||||||
for (i = 0; i < cols; i++)
|
for (i = 0; i < db_model_get_ncols (model); i++)
|
||||||
{
|
{
|
||||||
VnColumn * column;
|
VnColumn * column;
|
||||||
GType col_type, type = db_model_get_column_type (model, i);
|
GType col_type, type = db_model_get_column_type (model, i);
|
||||||
|
@ -92,7 +96,7 @@ static void vn_consulter_model_status_changed (DbModel * model,
|
||||||
|
|
||||||
if (i == 7) col_type = VN_TYPE_COLUMN_IMAGE;
|
if (i == 7) col_type = VN_TYPE_COLUMN_IMAGE;
|
||||||
|
|
||||||
column = vn_grid_append_column (obj->tree, i
|
column = vn_grid_append_column (obj->grid, i
|
||||||
,db_model_get_column_name (model, i)
|
,db_model_get_column_name (model, i)
|
||||||
,col_type
|
,col_type
|
||||||
,TRUE, FALSE
|
,TRUE, FALSE
|
||||||
|
@ -135,14 +139,23 @@ void vn_consulter_send (GtkButton * button, VnConsulter * obj)
|
||||||
|
|
||||||
vn_consulter_set_message (obj, sql);
|
vn_consulter_set_message (obj, sql);
|
||||||
|
|
||||||
model = db_model_new_with_sql (VN_FORM (obj)->conn, sql);
|
if (g_str_has_prefix (sql, FILE_KW))
|
||||||
|
{
|
||||||
|
const gchar * filename = sql + g_utf8_strlen (FILE_KW, -1);
|
||||||
|
db_conn_set_query_path (VN_FORM (obj)->conn, _QUERY_PATH);
|
||||||
|
model = db_model_new_with_file (VN_FORM (obj)->conn, filename);
|
||||||
|
g_message ("VnConsulter: query loaded from \"%s/%s.sql\"", _QUERY_PATH, filename);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
model = db_model_new_with_sql (VN_FORM (obj)->conn, sql);
|
||||||
|
|
||||||
g_signal_connect (model, "status-changed",
|
g_signal_connect (model, "status-changed",
|
||||||
G_CALLBACK (vn_consulter_model_status_changed), obj);
|
G_CALLBACK (vn_consulter_model_status_changed), obj);
|
||||||
|
|
||||||
iterator = db_iterator_new (model);
|
iterator = db_iterator_new (model);
|
||||||
iterator->mode = DB_ITERATOR_MODE_ON_DEMAND;
|
iterator->mode = DB_ITERATOR_MODE_ON_DEMAND;
|
||||||
vn_handler_set_iterator (obj->handler, iterator);
|
vn_handler_set_iterator (obj->handler, iterator);
|
||||||
vn_grid_set_iterator (obj->tree, iterator);
|
vn_grid_set_iterator (obj->grid, iterator);
|
||||||
|
|
||||||
vn_consulter_mode_toggled (GTK_TOGGLE_BUTTON (obj->mode), obj);
|
vn_consulter_mode_toggled (GTK_TOGGLE_BUTTON (obj->mode), obj);
|
||||||
|
|
||||||
|
@ -159,7 +172,7 @@ static void vn_consulter_open (VnConsulter * obj)
|
||||||
gchar * queries[] =
|
gchar * queries[] =
|
||||||
{
|
{
|
||||||
//MySQL (kk schema)
|
//MySQL (kk schema)
|
||||||
"/*my*/SELECT id, name, item_id, item_id2, amount, item.price "
|
"/*my*/SELECT id, name, item_id, item_id2, amount, item.price "
|
||||||
"FROM movement JOIN item USING (item_id, item_id2)"
|
"FROM movement JOIN item USING (item_id, item_id2)"
|
||||||
,"/*my*/SELECT item_id,item_id2, i.name, m.id, m.amount, m.price "
|
,"/*my*/SELECT item_id,item_id2, i.name, m.id, m.amount, m.price "
|
||||||
"FROM item i LEFT JOIN movement m USING (item_id, item_id2)"
|
"FROM item i LEFT JOIN movement m USING (item_id, item_id2)"
|
||||||
|
@ -170,7 +183,7 @@ static void vn_consulter_open (VnConsulter * obj)
|
||||||
"FROM item i LEFT JOIN movement m ON i.id = m.item_id"
|
"FROM item i LEFT JOIN movement m ON i.id = m.item_id"
|
||||||
,"/*pg*/SELECT m.id, amount, item_id, name, color "
|
,"/*pg*/SELECT m.id, amount, item_id, name, color "
|
||||||
"FROM movement m JOIN item ON m.item_id = item.id"
|
"FROM movement m JOIN item ON m.item_id = item.id"
|
||||||
,"/*pg*/SELECT * FROM item"
|
,FILE_KW"example/consulter"
|
||||||
,"/*pg*/ SELECT id1, id2, name, ok, date, number, floating, image "
|
,"/*pg*/ SELECT id1, id2, name, ok, date, number, floating, image "
|
||||||
"FROM prueben"
|
"FROM prueben"
|
||||||
,NULL
|
,NULL
|
||||||
|
@ -180,10 +193,10 @@ static void vn_consulter_open (VnConsulter * obj)
|
||||||
obj->combo = vn_form_get (form, "query");
|
obj->combo = vn_form_get (form, "query");
|
||||||
obj->tv = vn_form_get (form, "treeview");
|
obj->tv = vn_form_get (form, "treeview");
|
||||||
obj->mode = vn_form_get (form, "mode");
|
obj->mode = vn_form_get (form, "mode");
|
||||||
obj->tree = vn_form_get (form, "consulter");
|
obj->grid = vn_form_get (form, "consulter");
|
||||||
obj->handler = vn_form_get (form, "handler");
|
obj->handler = vn_form_get (form, "handler");
|
||||||
gtk_entry_set_placeholder_text (vn_form_get (form, "combo-entry"),
|
gtk_entry_set_placeholder_text (vn_form_get (form, "combo-entry"),
|
||||||
_("Write your query here or select one from the list"));
|
_("Type or select a query"));
|
||||||
|
|
||||||
gtk_tree_view_insert_column_with_attributes (obj->tv, -1, "Mensaje",
|
gtk_tree_view_insert_column_with_attributes (obj->tv, -1, "Mensaje",
|
||||||
gtk_cell_renderer_text_new (), "text", 0, NULL);
|
gtk_cell_renderer_text_new (), "text", 0, NULL);
|
||||||
|
|
|
@ -30,13 +30,11 @@ typedef struct _VnConsulterClass VnConsulterClass;
|
||||||
struct _VnConsulter
|
struct _VnConsulter
|
||||||
{
|
{
|
||||||
VnForm parent;
|
VnForm parent;
|
||||||
GtkButton * connect;
|
|
||||||
GtkListStore * model;
|
GtkListStore * model;
|
||||||
GtkCheckButton * mode;
|
GtkCheckButton * mode;
|
||||||
GtkComboBoxText * combo;
|
GtkComboBoxText * combo;
|
||||||
GtkTreeView * tv;
|
GtkTreeView * tv;
|
||||||
GtkContainer * box;
|
VnGrid * grid;
|
||||||
VnGrid * tree;
|
|
||||||
VnHandler * handler;
|
VnHandler * handler;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ static void vn_users_on_password_changed (DbRequest * request, VnUsers * obj)
|
||||||
if (g_value_get_int (&value) != -1)
|
if (g_value_get_int (&value) != -1)
|
||||||
gtk_widget_hide (GTK_WIDGET (obj->password_dialog));
|
gtk_widget_hide (GTK_WIDGET (obj->password_dialog));
|
||||||
else
|
else
|
||||||
vn_users_reset_dialog (obj, _("The password is too week."));
|
vn_users_reset_dialog (obj, _("The password is too weak."));
|
||||||
|
|
||||||
g_value_unset (&value);
|
g_value_unset (&value);
|
||||||
}
|
}
|
||||||
|
@ -79,11 +79,9 @@ void vn_users_on_dialog_response (GtkDialog * dialog, gint response_id, VnUsers
|
||||||
{
|
{
|
||||||
SqlString * query;
|
SqlString * query;
|
||||||
|
|
||||||
query = sql_string_new ("SELECT user_set_password (#user, #password)"
|
query = sql_string_new ("SELECT user_set_password (#p, #p)");
|
||||||
,"user", GVN_TYPE_PARAM, obj->user_id
|
sql_string_add_param (query, obj->user_id);
|
||||||
,"password", G_TYPE_STRING, password
|
sql_string_add_value (query, G_TYPE_STRING, password);
|
||||||
,NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
db_conn_query_with_stmt_async (VN_FORM (obj)->conn
|
db_conn_query_with_stmt_async (VN_FORM (obj)->conn
|
||||||
,SQL_STMT (query)
|
,SQL_STMT (query)
|
||||||
|
|
|
@ -16,7 +16,16 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <libpq-fe.h>
|
#include <libpq-fe.h>
|
||||||
#include <postgres_fe.h>
|
//#include <postgres_fe.h>
|
||||||
|
|
||||||
|
// Replaces postgres_fe.h until it gets fixed
|
||||||
|
#ifndef FRONTEND
|
||||||
|
#define FRONTEND 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "c.h"
|
||||||
|
// end of the "fix"
|
||||||
|
|
||||||
#include <catalog/pg_type.h>
|
#include <catalog/pg_type.h>
|
||||||
// Macros to avoid redefinition warnings for constants
|
// Macros to avoid redefinition warnings for constants
|
||||||
#undef PACKAGE_BUGREPORT
|
#undef PACKAGE_BUGREPORT
|
||||||
|
@ -332,6 +341,7 @@ static DbResultSet * __db_pg_query
|
||||||
switch (PQresultStatus (res))
|
switch (PQresultStatus (res))
|
||||||
{
|
{
|
||||||
case PGRES_COMMAND_OK:
|
case PGRES_COMMAND_OK:
|
||||||
|
case PGRES_SINGLE_TUPLE:
|
||||||
case PGRES_TUPLES_OK:
|
case PGRES_TUPLES_OK:
|
||||||
{
|
{
|
||||||
gchar ** q_t = NULL;
|
gchar ** q_t = NULL;
|
||||||
|
@ -674,9 +684,9 @@ static DbResultSet * __db_pg_query
|
||||||
{// Serial fields
|
{// Serial fields
|
||||||
GValue * v = g_new0 (GValue, 1);
|
GValue * v = g_new0 (GValue, 1);
|
||||||
gchar ** split = g_strsplit_set (pg_val, "(':)", G_MAXINT8);
|
gchar ** split = g_strsplit_set (pg_val, "(':)", G_MAXINT8);
|
||||||
SqlObject * function = sql_function_new ("currval", NULL);
|
SqlFunction * function = sql_function_new ("currval", NULL);
|
||||||
g_value_set_string (g_value_init (v, G_TYPE_STRING), split[2]);
|
g_value_set_string (g_value_init (v, G_TYPE_STRING), split[2]);
|
||||||
sql_object_add_child (function, "params", sql_value_new_with_value (v));
|
sql_function_add_param (function, sql_value_new_with_value (v));
|
||||||
g_value_unset (v);
|
g_value_unset (v);
|
||||||
g_free (v);
|
g_free (v);
|
||||||
g_value_take_object (g_value_init (&def[j], SQL_TYPE_FUNCTION),
|
g_value_take_object (g_value_init (&def[j], SQL_TYPE_FUNCTION),
|
||||||
|
|
|
@ -13,6 +13,7 @@ plugin/pg/db-pg.c
|
||||||
|
|
||||||
db/db-iterator.c
|
db/db-iterator.c
|
||||||
db/db-model.c
|
db/db-model.c
|
||||||
|
db/db-model-holder.c
|
||||||
db/db-calc.c
|
db/db-calc.c
|
||||||
db/db-param.c
|
db/db-param.c
|
||||||
db/db-conn.c
|
db/db-conn.c
|
||||||
|
@ -44,4 +45,11 @@ vn/gui/main.glade
|
||||||
vn/gui/child-window.glade
|
vn/gui/child-window.glade
|
||||||
vn/gui/actions.glade
|
vn/gui/actions.glade
|
||||||
|
|
||||||
|
glade/glade-db-model.c
|
||||||
|
glade/glade-db-sql.c
|
||||||
|
|
||||||
|
module/data/example.xml
|
||||||
module/data/users.glade
|
module/data/users.glade
|
||||||
|
module/src/vn-users.c
|
||||||
|
module/data/consulter.glade
|
||||||
|
module/src/vn-consulter.c
|
|
@ -1,11 +1,9 @@
|
||||||
module/data/example.xml
|
|
||||||
module/data/consulter.glade
|
module/data/consulter.glade
|
||||||
module/data/customer.glade
|
module/data/customer.glade
|
||||||
module/data/signer.glade
|
module/data/signer.glade
|
||||||
module/src/vn-consulter.c
|
module/src/vn-consulter.c
|
||||||
module/src/vn-customer.c
|
module/src/vn-customer.c
|
||||||
module/src/vn-signer.c
|
module/src/vn-signer.c
|
||||||
module/src/vn-users.c
|
|
||||||
|
|
||||||
template/lib-object.c
|
template/lib-object.c
|
||||||
|
|
||||||
|
|
378
po/ca.po
378
po/ca.po
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: hedera 1.0\n"
|
"Project-Id-Version: hedera 1.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2013-07-10 11:56+0200\n"
|
"POT-Creation-Date: 2013-10-08 09:59+0200\n"
|
||||||
"PO-Revision-Date: 2013-06-04 13:38+0200\n"
|
"PO-Revision-Date: 2013-06-04 13:38+0200\n"
|
||||||
"Last-Translator: Alejandro T. Colombini Gómez <atcolombini@verdnatura.es>\n"
|
"Last-Translator: Alejandro T. Colombini Gómez <atcolombini@verdnatura.es>\n"
|
||||||
"Language-Team: Catalan\n"
|
"Language-Team: Catalan\n"
|
||||||
|
@ -132,7 +132,7 @@ msgstr ""
|
||||||
msgid "The master GvnParam of this parameter"
|
msgid "The master GvnParam of this parameter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gvn/gvn-param.c:457 ../db/db-iterator.c:1070
|
#: ../gvn/gvn-param.c:457 ../db/db-iterator.c:985
|
||||||
msgid "Mode"
|
msgid "Mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -164,7 +164,7 @@ msgstr ""
|
||||||
msgid "The type of the value"
|
msgid "The type of the value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gvn/gvn-param.c:485 ../vn/vn-field.c:553 ../vn/vn-column.c:354
|
#: ../gvn/gvn-param.c:485 ../vn/vn-field.c:553 ../vn/vn-column.c:401
|
||||||
msgid "Editable"
|
msgid "Editable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ msgstr ""
|
||||||
msgid "Whether the param value can be modified"
|
msgid "Whether the param value can be modified"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gvn/gvn-param.c:492 ../vn/vn-field.c:560
|
#: ../gvn/gvn-param.c:492 ../vn/vn-field.c:560 ../vn/vn-column.c:408
|
||||||
msgid "Null"
|
msgid "Null"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -213,9 +213,7 @@ msgstr ""
|
||||||
msgid "The value"
|
msgid "The value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../sql/sql-string.c:198 ../db/db-iterator.c:1063 ../db/db-model.c:3411
|
#: ../sql/sql-string.c:198 ../db/db-model.c:3459 ../db/db-request.c:461
|
||||||
#: ../db/db-request.c:466 ../vn/field/vn-combo.c:356
|
|
||||||
#: ../vn/field/vn-completion.c:315 ../vn/column/vn-column-combo.c:297
|
|
||||||
msgid "SQL"
|
msgid "SQL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -223,111 +221,91 @@ msgstr ""
|
||||||
msgid "An arbitrary SQL string"
|
msgid "An arbitrary SQL string"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../plugin/mysql/db-mysql.c:68 ../plugin/pg/db-pg.c:76
|
#: ../plugin/mysql/db-mysql.c:68 ../plugin/pg/db-pg.c:85
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't allocate the needed memory"
|
msgid "Can't allocate the needed memory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-iterator.c:284
|
#: ../db/db-iterator.c:986
|
||||||
msgid "DbIterator: Can't reassign the 'model' property"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:942
|
|
||||||
msgid "DbIterator: Can't set the 'conn' property because model isn't set"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1049 ../db/db-calc.c:329 ../vn/field/vn-combo.c:342
|
|
||||||
#: ../vn/column/vn-column-combo.c:283
|
|
||||||
msgid "Model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1050
|
|
||||||
msgid "The DbModel handled by the iterator"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1056 ../db/db-model.c:3395 ../db/db-request.c:459
|
|
||||||
#: ../vn/vn-gui.c:1531 ../vn/vn-form.c:241 ../vn/field/vn-combo.c:349
|
|
||||||
#: ../vn/field/vn-completion.c:308 ../vn/column/vn-column-combo.c:290
|
|
||||||
msgid "Connection"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1057 ../vn/field/vn-combo.c:350
|
|
||||||
#: ../vn/field/vn-completion.c:309 ../vn/column/vn-column-combo.c:291
|
|
||||||
msgid "The connection used by the model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1064 ../vn/field/vn-combo.c:357
|
|
||||||
#: ../vn/field/vn-completion.c:316 ../vn/column/vn-column-combo.c:298
|
|
||||||
msgid "The SQL query used to create the model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1071
|
|
||||||
msgid "The mode in which the iterator is working"
|
msgid "The mode in which the iterator is working"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1078
|
#: ../db/db-iterator.c:993
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Remember selection"
|
msgid "Remember selection"
|
||||||
msgstr "Recordar"
|
msgstr "Recordar"
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1079
|
#: ../db/db-iterator.c:994
|
||||||
msgid "Wether to rememeber the selection when model is refreshed"
|
msgid "Wether to rememeber the selection when model is refreshed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3396
|
#: ../db/db-model.c:3443 ../db/db-request.c:454 ../vn/vn-gui.c:1531
|
||||||
|
#: ../vn/vn-form.c:235
|
||||||
|
msgid "Connection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../db/db-model.c:3444
|
||||||
msgid "The DbConn that manages the connection to the database"
|
msgid "The DbConn that manages the connection to the database"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3403 ../db/db-request.c:473
|
#: ../db/db-model.c:3451 ../db/db-request.c:468
|
||||||
msgid "Statement"
|
msgid "Statement"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3404
|
#: ../db/db-model.c:3452
|
||||||
msgid "The statement which retrieves the data"
|
msgid "The statement which retrieves the data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3412
|
#: ../db/db-model.c:3460
|
||||||
msgid ""
|
msgid ""
|
||||||
"Depending on the \"use-file\" property this will be the path to a file with "
|
"Depending on the \"use-file\" property this will be the path to a file with "
|
||||||
"queries for the model or a SQL string"
|
"queries for the model or a SQL string"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3421
|
#: ../db/db-model.c:3469
|
||||||
msgid "Use file"
|
msgid "Use file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3422
|
#: ../db/db-model.c:3470
|
||||||
msgid ""
|
msgid ""
|
||||||
"If this is set to TRUE, the \"sql\" property will hold the name of a file "
|
"If this is set to TRUE, the \"sql\" property will hold the name of a file "
|
||||||
"containing a query, if set to FALSE, \"sql\" is used as an SQL string"
|
"containing a query, if set to FALSE, \"sql\" is used as an SQL string"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3431
|
#: ../db/db-model.c:3479
|
||||||
msgid "Main Table"
|
msgid "Main Table"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3432
|
#: ../db/db-model.c:3480
|
||||||
msgid "The main table of the model"
|
msgid "The main table of the model"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3439
|
#: ../db/db-model.c:3487
|
||||||
msgid "Update flags"
|
msgid "Update flags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3440
|
#: ../db/db-model.c:3488
|
||||||
msgid "The flags that indicate how a model can be modified"
|
msgid "The flags that indicate how a model can be modified"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3448
|
#: ../db/db-model.c:3496
|
||||||
msgid "Result position"
|
msgid "Result position"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3449
|
#: ../db/db-model.c:3497
|
||||||
msgid ""
|
msgid ""
|
||||||
"The position where the query that will fill the model will be placed in a "
|
"The position where the query that will fill the model will be placed in a "
|
||||||
"multi-query"
|
"multi-query"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../db/db-model-holder.c:70 ../db/db-calc.c:329
|
||||||
|
msgid "Model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../db/db-model-holder.c:71
|
||||||
|
msgid "The model used by the holder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-calc.c:330
|
#: ../db/db-calc.c:330
|
||||||
msgid "The model where the operations will be applied"
|
msgid "The model where the operations will be applied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -364,121 +342,121 @@ msgstr ""
|
||||||
msgid "A column to apply the operations over it"
|
msgid "A column to apply the operations over it"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-param.c:243 ../vn/vn-grid.c:349 ../vn/vn-field.c:532
|
#: ../db/db-param.c:251 ../vn/vn-grid.c:357 ../vn/vn-field.c:532
|
||||||
msgid "Iterator"
|
msgid "Iterator"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-param.c:244
|
#: ../db/db-param.c:252
|
||||||
msgid "The iterator owner of param"
|
msgid "The iterator owner of param"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-param.c:250 ../vn/vn-column.c:340
|
#: ../db/db-param.c:258 ../vn/vn-column.c:387
|
||||||
msgid "Column index"
|
msgid "Column index"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-param.c:251
|
#: ../db/db-param.c:259
|
||||||
msgid "The referenced column index"
|
msgid "The referenced column index"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-param.c:257 ../vn/vn-field.c:539 ../vn/vn-column.c:347
|
#: ../db/db-param.c:265 ../vn/vn-field.c:539 ../vn/vn-column.c:394
|
||||||
msgid "Column name"
|
msgid "Column name"
|
||||||
msgstr "Nom de la columna"
|
msgstr "Nom de la columna"
|
||||||
|
|
||||||
#: ../db/db-param.c:258 ../vn/vn-column.c:348
|
#: ../db/db-param.c:266 ../vn/vn-column.c:395
|
||||||
msgid "The referenced column name"
|
msgid "The referenced column name"
|
||||||
msgstr "Nom de la columna referenciada"
|
msgstr "Nom de la columna referenciada"
|
||||||
|
|
||||||
#: ../db/db-conn.c:279 ../db/db-conn.c:284
|
#: ../db/db-conn.c:282 ../db/db-conn.c:287
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't load DbPlugin '%s': %s"
|
msgid "Can't load DbPlugin '%s': %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:297
|
#: ../db/db-conn.c:300
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Plugin can't be loaded"
|
msgid "Plugin can't be loaded"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:413
|
#: ../db/db-conn.c:416
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't open a new connection, it's already open."
|
msgid "Can't open a new connection, it's already open."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:555
|
#: ../db/db-conn.c:558
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The query is empty."
|
msgid "The query is empty."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1060
|
#: ../db/db-conn.c:1037
|
||||||
msgid "Plugin"
|
msgid "Plugin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1061
|
#: ../db/db-conn.c:1038
|
||||||
msgid "The name of the plugin"
|
msgid "The name of the plugin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1067
|
#: ../db/db-conn.c:1044
|
||||||
msgid "Query path"
|
msgid "Query path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1068
|
#: ../db/db-conn.c:1045
|
||||||
msgid "The path where query files are located"
|
msgid "The path where query files are located"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1074 ../db/db-file-loader.c:724
|
#: ../db/db-conn.c:1051 ../db/db-file-loader.c:724
|
||||||
#: ../vn/column/vn-column-image.c:475
|
#: ../vn/column/vn-column-image.c:477
|
||||||
msgid "Host"
|
msgid "Host"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1075
|
#: ../db/db-conn.c:1052
|
||||||
msgid "The host name to connect to"
|
msgid "The host name to connect to"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1081 ../module/data/users.glade.h:4
|
#: ../db/db-conn.c:1058 ../module/data/users.glade.h:2
|
||||||
msgid "User"
|
msgid "User"
|
||||||
msgstr "Usuari"
|
msgstr "Usuari"
|
||||||
|
|
||||||
#: ../db/db-conn.c:1082
|
#: ../db/db-conn.c:1059
|
||||||
msgid "The user name"
|
msgid "The user name"
|
||||||
msgstr "Nom d'usuari"
|
msgstr "Nom d'usuari"
|
||||||
|
|
||||||
#: ../db/db-conn.c:1088
|
#: ../db/db-conn.c:1065
|
||||||
msgid "DB name"
|
msgid "DB name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1089
|
#: ../db/db-conn.c:1066
|
||||||
msgid "The default schema"
|
msgid "The default schema"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:315
|
#: ../db/db-request.c:311
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The request was canceled"
|
msgid "The request was canceled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:460
|
#: ../db/db-request.c:455
|
||||||
msgid "The connection used to render and execute the query"
|
msgid "The connection used to render and execute the query"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:467
|
#: ../db/db-request.c:462
|
||||||
msgid "The SQL query to execute"
|
msgid "The SQL query to execute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:474
|
#: ../db/db-request.c:469
|
||||||
msgid "The statement to execute"
|
msgid "The statement to execute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:480
|
#: ../db/db-request.c:475
|
||||||
msgid "Result"
|
msgid "Result"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:481
|
#: ../db/db-request.c:476
|
||||||
msgid "The result data of the query"
|
msgid "The result data of the query"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:487
|
#: ../db/db-request.c:482
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:488
|
#: ../db/db-request.c:483
|
||||||
msgid "The GError, if an error ocurred"
|
msgid "The GError, if an error ocurred"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -492,11 +470,11 @@ msgstr ""
|
||||||
msgid "Unknown content length of file %s"
|
msgid "Unknown content length of file %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-file-loader.c:725 ../vn/column/vn-column-image.c:476
|
#: ../db/db-file-loader.c:725 ../vn/column/vn-column-image.c:478
|
||||||
msgid "The host web server name to get the images"
|
msgid "The host web server name to get the images"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-file-loader.c:732 ../vn/column/vn-column-image.c:483
|
#: ../db/db-file-loader.c:732 ../vn/column/vn-column-image.c:485
|
||||||
msgid "Path"
|
msgid "Path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -558,7 +536,7 @@ msgstr ""
|
||||||
msgid "Connection closed"
|
msgid "Connection closed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-gui.c:987 ../vn/field/vn-http-image.c:118
|
#: ../vn/vn-gui.c:987 ../vn/field/vn-http-image.c:116
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -578,17 +556,17 @@ msgstr ""
|
||||||
msgid "The application handler for the entire program"
|
msgid "The application handler for the entire program"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-model.c:303
|
#: ../vn/vn-model.c:317
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Function vn_model_set_sort_func not implemented"
|
msgid "Function vn_model_set_sort_func not implemented"
|
||||||
msgstr "Funció vn_model_set_sort_func no implementada"
|
msgstr "Funció vn_model_set_sort_func no implementada"
|
||||||
|
|
||||||
#: ../vn/vn-model.c:310
|
#: ../vn/vn-model.c:324
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Function vn_model_set_default_sort_func not implemented"
|
msgid "Function vn_model_set_default_sort_func not implemented"
|
||||||
msgstr "Funció vn_model_set_default_sort_func no implementada"
|
msgstr "Funció vn_model_set_default_sort_func no implementada"
|
||||||
|
|
||||||
#: ../vn/vn-grid.c:350
|
#: ../vn/vn-grid.c:358
|
||||||
msgid "The iterator used by VnGrid"
|
msgid "The iterator used by VnGrid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -652,48 +630,48 @@ msgstr ""
|
||||||
msgid "Sets if it is used to handle a iterator with a single record"
|
msgid "Sets if it is used to handle a iterator with a single record"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:227
|
#: ../vn/vn-form.c:221
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:228
|
#: ../vn/vn-form.c:222
|
||||||
msgid "The form name"
|
msgid "The form name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:234
|
#: ../vn/vn-form.c:228
|
||||||
msgid "Gui"
|
msgid "Gui"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:235
|
#: ../vn/vn-form.c:229
|
||||||
msgid "The Gui object"
|
msgid "The Gui object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:242
|
#: ../vn/vn-form.c:236
|
||||||
msgid "The connection used by the module"
|
msgid "The connection used by the module"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:248
|
#: ../vn/vn-form.c:242
|
||||||
msgid "Module"
|
msgid "Module"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:249
|
#: ../vn/vn-form.c:243
|
||||||
msgid "The module"
|
msgid "The module"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-login.c:276 ../vn/vn-login.c:278
|
#: ../vn/vn-login.c:290 ../vn/vn-login.c:292
|
||||||
msgid "Login error"
|
msgid "Login error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-login.c:336
|
#: ../vn/vn-login.c:348
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Bad connection settings, please check it."
|
msgid "Bad connection settings, please check it."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-login.c:457
|
#: ../vn/vn-login.c:477
|
||||||
msgid "Application id"
|
msgid "Application id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-login.c:458
|
#: ../vn/vn-login.c:478
|
||||||
msgid "The application identifier"
|
msgid "The application identifier"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -721,7 +699,7 @@ msgstr ""
|
||||||
msgid "Whether the field value is user editable"
|
msgid "Whether the field value is user editable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-field.c:561
|
#: ../vn/vn-field.c:561 ../vn/vn-column.c:409
|
||||||
msgid "Whether the field value can be of type GVN_TYPE_NULL"
|
msgid "Whether the field value can be of type GVN_TYPE_NULL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -735,31 +713,27 @@ msgstr ""
|
||||||
msgid "The number of decimal places to display."
|
msgid "The number of decimal places to display."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:328 ../vn/column/vn-column-combo.c:269
|
#: ../vn/field/vn-combo.c:286 ../vn/column/vn-column-combo.c:300
|
||||||
msgid "Index column"
|
msgid "Index column"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:329 ../vn/column/vn-column-combo.c:270
|
#: ../vn/field/vn-combo.c:287 ../vn/column/vn-column-combo.c:301
|
||||||
msgid "The column index of the model"
|
msgid "The column index of the model"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:335 ../vn/column/vn-column-combo.c:276
|
#: ../vn/field/vn-combo.c:293 ../vn/column/vn-column-combo.c:307
|
||||||
msgid "Show column"
|
msgid "Show column"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:336 ../vn/column/vn-column-combo.c:277
|
#: ../vn/field/vn-combo.c:294 ../vn/column/vn-column-combo.c:308
|
||||||
msgid "The column of the model shown by combo"
|
msgid "The column of the model shown by combo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:343 ../vn/column/vn-column-combo.c:284
|
#: ../vn/field/vn-completion.c:325
|
||||||
msgid "The model from which the combo takes the values shown in the list"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../vn/field/vn-completion.c:322
|
|
||||||
msgid "Field"
|
msgid "Field"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-completion.c:323
|
#: ../vn/field/vn-completion.c:326
|
||||||
msgid "The name of the field used for the search"
|
msgid "The name of the field used for the search"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -776,49 +750,49 @@ msgstr ""
|
||||||
msgid "Select the image"
|
msgid "Select the image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:69
|
#: ../vn/field/vn-http-image.c:70
|
||||||
msgid "Undefined error"
|
msgid "Undefined error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:145
|
#: ../vn/field/vn-http-image.c:142
|
||||||
msgid "File loader already set"
|
msgid "File loader already set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Se usará para subir imagenes y cambiar nombres, o abrir un menu contextual
|
#. Se usará para subir imagenes y cambiar nombres, o abrir un menu contextual
|
||||||
#. g_signal_connect (obj, "event", G_CALLBACK (vn_http_image_cb_event), obj);
|
#. g_signal_connect (obj, "event", G_CALLBACK (vn_http_image_cb_event), obj);
|
||||||
#: ../vn/field/vn-http-image.c:184
|
#: ../vn/field/vn-http-image.c:181
|
||||||
msgid "No image set"
|
msgid "No image set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:210
|
#: ../vn/field/vn-http-image.c:207
|
||||||
msgid "File loader"
|
msgid "File loader"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:211
|
#: ../vn/field/vn-http-image.c:208
|
||||||
msgid "A DbFileLoader, used to download the files"
|
msgid "A DbFileLoader, used to download the files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:218
|
#: ../vn/field/vn-http-image.c:215
|
||||||
msgid "File path"
|
msgid "File path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:219
|
#: ../vn/field/vn-http-image.c:216
|
||||||
msgid "The relative path to the image from file loader path"
|
msgid "The relative path to the image from file loader path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:226
|
#: ../vn/field/vn-http-image.c:223
|
||||||
msgid "Image bytes"
|
msgid "Image bytes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:227
|
#: ../vn/field/vn-http-image.c:224
|
||||||
msgid "A GBytes structure with the image data"
|
msgid "A GBytes structure with the image data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-column.c:341
|
#: ../vn/vn-column.c:388
|
||||||
msgid "The column index in the model"
|
msgid "The column index in the model"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-column.c:355
|
#: ../vn/vn-column.c:402
|
||||||
msgid "Whether the column values are editable"
|
msgid "Whether the column values are editable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -830,25 +804,25 @@ msgstr ""
|
||||||
msgid "The acceleration rate when you hold down a button."
|
msgid "The acceleration rate when you hold down a button."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:484
|
#: ../vn/column/vn-column-image.c:486
|
||||||
msgid "Base path from the host where the images will be downloaded"
|
msgid "Base path from the host where the images will be downloaded"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:491
|
#: ../vn/column/vn-column-image.c:493
|
||||||
msgid "Tooltip path"
|
msgid "Tooltip path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:492
|
#: ../vn/column/vn-column-image.c:494
|
||||||
msgid ""
|
msgid ""
|
||||||
"Prefix for the path of the images to be shown in the tooltip. Starting after "
|
"Prefix for the path of the images to be shown in the tooltip. Starting after "
|
||||||
"the path of the column and appending the name on each cell"
|
"the path of the column and appending the name on each cell"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:501
|
#: ../vn/column/vn-column-image.c:503
|
||||||
msgid "Tooltip size"
|
msgid "Tooltip size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:502
|
#: ../vn/column/vn-column-image.c:504
|
||||||
msgid ""
|
msgid ""
|
||||||
"Size of the bigger side of the tooltip images, the another side will be "
|
"Size of the bigger side of the tooltip images, the another side will be "
|
||||||
"scaled accordingly and smaller images won't be scaled"
|
"scaled accordingly and smaller images won't be scaled"
|
||||||
|
@ -889,7 +863,7 @@ msgstr "Accés"
|
||||||
msgid "User:"
|
msgid "User:"
|
||||||
msgstr "Usuari:"
|
msgstr "Usuari:"
|
||||||
|
|
||||||
#: ../vn/gui/login.glade.h:9 ../module/data/users.glade.h:8
|
#: ../vn/gui/login.glade.h:9 ../module/data/users.glade.h:6
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr "Contrasenya:"
|
msgstr "Contrasenya:"
|
||||||
|
|
||||||
|
@ -989,87 +963,179 @@ msgctxt "View menu option"
|
||||||
msgid "Tool_bar"
|
msgid "Tool_bar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:1
|
#: ../glade/glade-db-model.c:121
|
||||||
#, fuzzy
|
msgid "Create and set a model for a DbModelHolder"
|
||||||
msgid "User name:"
|
|
||||||
msgstr "Nom d'usuari"
|
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:2
|
|
||||||
msgid "<b>Search</b>"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:3
|
#: ../glade/glade-db-model.c:153
|
||||||
|
msgid "Model configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:153
|
||||||
|
msgid "DbModel properties configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:238
|
||||||
|
msgid "Select a DbModel for the property"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:259 ../glade/glade-db-model.c:306
|
||||||
|
msgid "New Model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:301
|
||||||
|
msgid "Edit Model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-sql.c:27
|
||||||
|
msgid "New SQL statement"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-sql.c:59
|
||||||
|
msgid "SQL Editor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-sql.c:174
|
||||||
|
msgid "Open the SQL Editor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/users.glade.h:1
|
||||||
msgid "Identifier"
|
msgid "Identifier"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:5
|
#: ../module/data/users.glade.h:3
|
||||||
msgid "MySQL User"
|
msgid "MySQL User"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:6
|
#: ../module/data/users.glade.h:4
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:7
|
#: ../module/data/users.glade.h:5
|
||||||
msgid "Name:"
|
msgid "Name:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:9
|
#: ../module/data/users.glade.h:7
|
||||||
msgid "MySQL user:"
|
msgid "MySQL user:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:10
|
#: ../module/data/users.glade.h:8
|
||||||
msgid "Enabled:"
|
msgid "Enabled:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:11
|
#: ../module/data/users.glade.h:9
|
||||||
msgid "Identifier:"
|
msgid "Identifier:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:12
|
#: ../module/data/users.glade.h:10
|
||||||
msgid "UID:"
|
msgid "UID:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:13
|
#: ../module/data/users.glade.h:11
|
||||||
msgid "Main group:"
|
msgid "Main group:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:14
|
#: ../module/data/users.glade.h:12
|
||||||
msgid "Last change:"
|
msgid "Last change:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:15
|
#: ../module/data/users.glade.h:13
|
||||||
msgid "Expires:"
|
msgid "Expires:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:16
|
#: ../module/data/users.glade.h:14
|
||||||
msgid "Account"
|
msgid "Account"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:17
|
#: ../module/data/users.glade.h:15
|
||||||
msgid "Alias"
|
msgid "Alias"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:18
|
#: ../module/data/users.glade.h:16
|
||||||
msgid "Mail alias"
|
msgid "Mail alias"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:19
|
#: ../module/data/users.glade.h:17
|
||||||
msgid "Extension:"
|
msgid "Extension:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:20
|
#: ../module/data/users.glade.h:18
|
||||||
msgid "Secret:"
|
msgid "Secret:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:21
|
#: ../module/data/users.glade.h:19
|
||||||
msgid "Call group:"
|
msgid "Call group:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:22
|
#: ../module/data/users.glade.h:20
|
||||||
msgid "SIP"
|
msgid "SIP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:23
|
#: ../module/data/users.glade.h:21
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Change password"
|
||||||
|
msgstr "Repetir contrasenya:"
|
||||||
|
|
||||||
|
#: ../module/data/users.glade.h:22
|
||||||
msgid "Repeat password:"
|
msgid "Repeat password:"
|
||||||
msgstr "Repetir contrasenya:"
|
msgstr "Repetir contrasenya:"
|
||||||
|
|
||||||
|
#: ../module/src/vn-users.c:60
|
||||||
|
msgid "The password is too weak."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/src/vn-users.c:75
|
||||||
|
msgid "The password can't be empty."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/src/vn-users.c:77
|
||||||
|
msgid "Passwords do not match."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:1
|
||||||
|
msgid "Send"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:2
|
||||||
|
msgid "Send the current query"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:3
|
||||||
|
msgid "Clean"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:4
|
||||||
|
msgid "Clean the messages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:5
|
||||||
|
msgid "_Consulter"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:6
|
||||||
|
msgid "Query:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:7
|
||||||
|
msgid "Immediate changes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:8
|
||||||
|
msgid "Start"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:9
|
||||||
|
msgid "Commit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:10
|
||||||
|
msgid "Rollback"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/src/vn-consulter.c:199
|
||||||
|
msgid "Type or select a query"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "User name:"
|
||||||
|
#~ msgstr "Nom d'usuari"
|
||||||
|
|
394
po/es.po
394
po/es.po
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: hedera 1.0\n"
|
"Project-Id-Version: hedera 1.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2013-07-10 11:56+0200\n"
|
"POT-Creation-Date: 2013-10-08 09:59+0200\n"
|
||||||
"PO-Revision-Date: 2013-06-04 13:36+0200\n"
|
"PO-Revision-Date: 2013-06-04 13:36+0200\n"
|
||||||
"Last-Translator: Alejandro T. Colombini Gómez <atcolombini@verdnatura.es>\n"
|
"Last-Translator: Alejandro T. Colombini Gómez <atcolombini@verdnatura.es>\n"
|
||||||
"Language-Team: Spanish\n"
|
"Language-Team: Spanish\n"
|
||||||
|
@ -134,7 +134,7 @@ msgstr "Maestro"
|
||||||
msgid "The master GvnParam of this parameter"
|
msgid "The master GvnParam of this parameter"
|
||||||
msgstr "El GvnParam maestro de este parámetro"
|
msgstr "El GvnParam maestro de este parámetro"
|
||||||
|
|
||||||
#: ../gvn/gvn-param.c:457 ../db/db-iterator.c:1070
|
#: ../gvn/gvn-param.c:457 ../db/db-iterator.c:985
|
||||||
msgid "Mode"
|
msgid "Mode"
|
||||||
msgstr "Modo"
|
msgstr "Modo"
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ msgstr "Tipo Glib"
|
||||||
msgid "The type of the value"
|
msgid "The type of the value"
|
||||||
msgstr "El tipo del valor"
|
msgstr "El tipo del valor"
|
||||||
|
|
||||||
#: ../gvn/gvn-param.c:485 ../vn/vn-field.c:553 ../vn/vn-column.c:354
|
#: ../gvn/gvn-param.c:485 ../vn/vn-field.c:553 ../vn/vn-column.c:401
|
||||||
msgid "Editable"
|
msgid "Editable"
|
||||||
msgstr "Editable"
|
msgstr "Editable"
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ msgstr "Editable"
|
||||||
msgid "Whether the param value can be modified"
|
msgid "Whether the param value can be modified"
|
||||||
msgstr "Indica si el parámetro puede modificarse"
|
msgstr "Indica si el parámetro puede modificarse"
|
||||||
|
|
||||||
#: ../gvn/gvn-param.c:492 ../vn/vn-field.c:560
|
#: ../gvn/gvn-param.c:492 ../vn/vn-field.c:560 ../vn/vn-column.c:408
|
||||||
msgid "Null"
|
msgid "Null"
|
||||||
msgstr "Nulo"
|
msgstr "Nulo"
|
||||||
|
|
||||||
|
@ -215,9 +215,7 @@ msgstr "El parametro al cual está vinculado"
|
||||||
msgid "The value"
|
msgid "The value"
|
||||||
msgstr "Valor"
|
msgstr "Valor"
|
||||||
|
|
||||||
#: ../sql/sql-string.c:198 ../db/db-iterator.c:1063 ../db/db-model.c:3411
|
#: ../sql/sql-string.c:198 ../db/db-model.c:3459 ../db/db-request.c:461
|
||||||
#: ../db/db-request.c:466 ../vn/field/vn-combo.c:356
|
|
||||||
#: ../vn/field/vn-completion.c:315 ../vn/column/vn-column-combo.c:297
|
|
||||||
msgid "SQL"
|
msgid "SQL"
|
||||||
msgstr "SQL"
|
msgstr "SQL"
|
||||||
|
|
||||||
|
@ -225,72 +223,42 @@ msgstr "SQL"
|
||||||
msgid "An arbitrary SQL string"
|
msgid "An arbitrary SQL string"
|
||||||
msgstr "Una cadena SQL arbitraria"
|
msgstr "Una cadena SQL arbitraria"
|
||||||
|
|
||||||
#: ../plugin/mysql/db-mysql.c:68 ../plugin/pg/db-pg.c:76
|
#: ../plugin/mysql/db-mysql.c:68 ../plugin/pg/db-pg.c:85
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't allocate the needed memory"
|
msgid "Can't allocate the needed memory"
|
||||||
msgstr "No es posible asignar la memoria necesaria"
|
msgstr "No es posible asignar la memoria necesaria"
|
||||||
|
|
||||||
#: ../db/db-iterator.c:284
|
#: ../db/db-iterator.c:986
|
||||||
msgid "DbIterator: Can't reassign the 'model' property"
|
|
||||||
msgstr "DbIterator: No puedo reasignarse la propiedad 'model'"
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:942
|
|
||||||
msgid "DbIterator: Can't set the 'conn' property because model isn't set"
|
|
||||||
msgstr ""
|
|
||||||
"DbIterator: No se pudo configurar la propiedad porque 'model' no está "
|
|
||||||
"configurado"
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1049 ../db/db-calc.c:329 ../vn/field/vn-combo.c:342
|
|
||||||
#: ../vn/column/vn-column-combo.c:283
|
|
||||||
msgid "Model"
|
|
||||||
msgstr "Modelo"
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1050
|
|
||||||
msgid "The DbModel handled by the iterator"
|
|
||||||
msgstr "El DbModel manejado por el iterador"
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1056 ../db/db-model.c:3395 ../db/db-request.c:459
|
|
||||||
#: ../vn/vn-gui.c:1531 ../vn/vn-form.c:241 ../vn/field/vn-combo.c:349
|
|
||||||
#: ../vn/field/vn-completion.c:308 ../vn/column/vn-column-combo.c:290
|
|
||||||
msgid "Connection"
|
|
||||||
msgstr "Conexión"
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1057 ../vn/field/vn-combo.c:350
|
|
||||||
#: ../vn/field/vn-completion.c:309 ../vn/column/vn-column-combo.c:291
|
|
||||||
msgid "The connection used by the model"
|
|
||||||
msgstr "La conexión empleada por el modelo"
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1064 ../vn/field/vn-combo.c:357
|
|
||||||
#: ../vn/field/vn-completion.c:316 ../vn/column/vn-column-combo.c:298
|
|
||||||
msgid "The SQL query used to create the model"
|
|
||||||
msgstr "La consulta SQL usada para crear el modelo"
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1071
|
|
||||||
msgid "The mode in which the iterator is working"
|
msgid "The mode in which the iterator is working"
|
||||||
msgstr "El modo en el que está trabajando el iterador"
|
msgstr "El modo en el que está trabajando el Iterator"
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1078
|
#: ../db/db-iterator.c:993
|
||||||
msgid "Remember selection"
|
msgid "Remember selection"
|
||||||
msgstr "Recordar fila seleccionada"
|
msgstr "Recordar fila seleccionada"
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1079
|
#: ../db/db-iterator.c:994
|
||||||
msgid "Wether to rememeber the selection when model is refreshed"
|
msgid "Wether to rememeber the selection when model is refreshed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si se recordará o no la fila seleccionado cuando se refresque el modelo"
|
"Si se recordará o no la fila seleccionado cuando se refresque el modelo"
|
||||||
|
|
||||||
#: ../db/db-model.c:3396
|
#: ../db/db-model.c:3443 ../db/db-request.c:454 ../vn/vn-gui.c:1531
|
||||||
|
#: ../vn/vn-form.c:235
|
||||||
|
msgid "Connection"
|
||||||
|
msgstr "Conexión"
|
||||||
|
|
||||||
|
#: ../db/db-model.c:3444
|
||||||
msgid "The DbConn that manages the connection to the database"
|
msgid "The DbConn that manages the connection to the database"
|
||||||
msgstr "La DbConn que controla la conexión a la base de datos"
|
msgstr "La DbConn que controla la conexión a la base de datos"
|
||||||
|
|
||||||
#: ../db/db-model.c:3403 ../db/db-request.c:473
|
#: ../db/db-model.c:3451 ../db/db-request.c:468
|
||||||
msgid "Statement"
|
msgid "Statement"
|
||||||
msgstr "Consulta"
|
msgstr "Consulta"
|
||||||
|
|
||||||
#: ../db/db-model.c:3404
|
#: ../db/db-model.c:3452
|
||||||
msgid "The statement which retrieves the data"
|
msgid "The statement which retrieves the data"
|
||||||
msgstr "La consulta que recupera los datos"
|
msgstr "La consulta que recupera los datos"
|
||||||
|
|
||||||
#: ../db/db-model.c:3412
|
#: ../db/db-model.c:3460
|
||||||
msgid ""
|
msgid ""
|
||||||
"Depending on the \"use-file\" property this will be the path to a file with "
|
"Depending on the \"use-file\" property this will be the path to a file with "
|
||||||
"queries for the model or a SQL string"
|
"queries for the model or a SQL string"
|
||||||
|
@ -298,39 +266,39 @@ msgstr ""
|
||||||
"Dependiendo de la propiedad \"use-file\", esta propiedad será la ruta a un "
|
"Dependiendo de la propiedad \"use-file\", esta propiedad será la ruta a un "
|
||||||
"fichero con consultas para el modelo o una cadena SQL"
|
"fichero con consultas para el modelo o una cadena SQL"
|
||||||
|
|
||||||
#: ../db/db-model.c:3421
|
#: ../db/db-model.c:3469
|
||||||
msgid "Use file"
|
msgid "Use file"
|
||||||
msgstr "Usa fichero"
|
msgstr "Usa fichero"
|
||||||
|
|
||||||
#: ../db/db-model.c:3422
|
#: ../db/db-model.c:3470
|
||||||
msgid ""
|
msgid ""
|
||||||
"If this is set to TRUE, the \"sql\" property will hold the name of a file "
|
"If this is set to TRUE, the \"sql\" property will hold the name of a file "
|
||||||
"containing a query, if set to FALSE, \"sql\" is used as an SQL string"
|
"containing a query, if set to FALSE, \"sql\" is used as an SQL string"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si está puesto a TRUE, la propiedad \"sql\" contiene el nombre de un "
|
"Si es TRUE, la propiedad \"sql\" contiene el nombre de un archivo, si es "
|
||||||
"archivo, si es falso, \"sql\" se usa como una cadena SQL"
|
"falso, \"sql\" se usa como una cadena SQL"
|
||||||
|
|
||||||
#: ../db/db-model.c:3431
|
#: ../db/db-model.c:3479
|
||||||
msgid "Main Table"
|
msgid "Main Table"
|
||||||
msgstr "Tabla principal"
|
msgstr "Tabla principal"
|
||||||
|
|
||||||
#: ../db/db-model.c:3432
|
#: ../db/db-model.c:3480
|
||||||
msgid "The main table of the model"
|
msgid "The main table of the model"
|
||||||
msgstr "La tabla principal del modelo"
|
msgstr "La tabla principal del modelo"
|
||||||
|
|
||||||
#: ../db/db-model.c:3439
|
#: ../db/db-model.c:3487
|
||||||
msgid "Update flags"
|
msgid "Update flags"
|
||||||
msgstr "Flags de actualización"
|
msgstr "Flags de actualización"
|
||||||
|
|
||||||
#: ../db/db-model.c:3440
|
#: ../db/db-model.c:3488
|
||||||
msgid "The flags that indicate how a model can be modified"
|
msgid "The flags that indicate how a model can be modified"
|
||||||
msgstr "Indican como se puede modificar el modelo"
|
msgstr "Indican como se puede modificar el modelo"
|
||||||
|
|
||||||
#: ../db/db-model.c:3448
|
#: ../db/db-model.c:3496
|
||||||
msgid "Result position"
|
msgid "Result position"
|
||||||
msgstr "Posición del resultado"
|
msgstr "Posición del resultado"
|
||||||
|
|
||||||
#: ../db/db-model.c:3449
|
#: ../db/db-model.c:3497
|
||||||
msgid ""
|
msgid ""
|
||||||
"The position where the query that will fill the model will be placed in a "
|
"The position where the query that will fill the model will be placed in a "
|
||||||
"multi-query"
|
"multi-query"
|
||||||
|
@ -338,6 +306,14 @@ msgstr ""
|
||||||
"La posición en la que se situa la consulta que pone datos en el modelo en "
|
"La posición en la que se situa la consulta que pone datos en el modelo en "
|
||||||
"una consulta múltiple"
|
"una consulta múltiple"
|
||||||
|
|
||||||
|
#: ../db/db-model-holder.c:70 ../db/db-calc.c:329
|
||||||
|
msgid "Model"
|
||||||
|
msgstr "Modelo"
|
||||||
|
|
||||||
|
#: ../db/db-model-holder.c:71
|
||||||
|
msgid "The model used by the holder"
|
||||||
|
msgstr "La conexión empleada por el objeto"
|
||||||
|
|
||||||
#: ../db/db-calc.c:330
|
#: ../db/db-calc.c:330
|
||||||
msgid "The model where the operations will be applied"
|
msgid "The model where the operations will be applied"
|
||||||
msgstr "El modelo en el que se aplicarán las operaciones"
|
msgstr "El modelo en el que se aplicarán las operaciones"
|
||||||
|
@ -374,123 +350,123 @@ msgstr "Columna"
|
||||||
msgid "A column to apply the operations over it"
|
msgid "A column to apply the operations over it"
|
||||||
msgstr "Una columna sobre la que se aplicarán las operaciones"
|
msgstr "Una columna sobre la que se aplicarán las operaciones"
|
||||||
|
|
||||||
#: ../db/db-param.c:243 ../vn/vn-grid.c:349 ../vn/vn-field.c:532
|
#: ../db/db-param.c:251 ../vn/vn-grid.c:357 ../vn/vn-field.c:532
|
||||||
msgid "Iterator"
|
msgid "Iterator"
|
||||||
msgstr "Iterator"
|
msgstr "Iterator"
|
||||||
|
|
||||||
#: ../db/db-param.c:244
|
#: ../db/db-param.c:252
|
||||||
msgid "The iterator owner of param"
|
msgid "The iterator owner of param"
|
||||||
msgstr "El iterador dueño del parámetro"
|
msgstr "El Iterator dueño del parámetro"
|
||||||
|
|
||||||
#: ../db/db-param.c:250 ../vn/vn-column.c:340
|
#: ../db/db-param.c:258 ../vn/vn-column.c:387
|
||||||
msgid "Column index"
|
msgid "Column index"
|
||||||
msgstr "Columna usada como índice"
|
msgstr "Posición"
|
||||||
|
|
||||||
#: ../db/db-param.c:251
|
#: ../db/db-param.c:259
|
||||||
msgid "The referenced column index"
|
msgid "The referenced column index"
|
||||||
msgstr "El índice de la columna referenciada"
|
msgstr "La posición de la columna en el Grid"
|
||||||
|
|
||||||
#: ../db/db-param.c:257 ../vn/vn-field.c:539 ../vn/vn-column.c:347
|
#: ../db/db-param.c:265 ../vn/vn-field.c:539 ../vn/vn-column.c:394
|
||||||
msgid "Column name"
|
msgid "Column name"
|
||||||
msgstr "Nombre de la columna"
|
msgstr "Nombre de la columna"
|
||||||
|
|
||||||
#: ../db/db-param.c:258 ../vn/vn-column.c:348
|
#: ../db/db-param.c:266 ../vn/vn-column.c:395
|
||||||
msgid "The referenced column name"
|
msgid "The referenced column name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"El nombre del campo en el Iterator vinculado al Grid al que pretenece la "
|
"El nombre del campo en el Iterator vinculado al Grid al que pretenece la "
|
||||||
"columna"
|
"columna"
|
||||||
|
|
||||||
#: ../db/db-conn.c:279 ../db/db-conn.c:284
|
#: ../db/db-conn.c:282 ../db/db-conn.c:287
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't load DbPlugin '%s': %s"
|
msgid "Can't load DbPlugin '%s': %s"
|
||||||
msgstr "No se puede cargar el DbPlugin '%s': %s"
|
msgstr "No se puede cargar el DbPlugin '%s': %s"
|
||||||
|
|
||||||
#: ../db/db-conn.c:297
|
#: ../db/db-conn.c:300
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Plugin can't be loaded"
|
msgid "Plugin can't be loaded"
|
||||||
msgstr "No se puede cargar el plug-in"
|
msgstr "No se puede cargar el plug-in"
|
||||||
|
|
||||||
#: ../db/db-conn.c:413
|
#: ../db/db-conn.c:416
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't open a new connection, it's already open."
|
msgid "Can't open a new connection, it's already open."
|
||||||
msgstr "No se puede abrir una nueva conexión, ya está abierta"
|
msgstr "No se puede abrir una nueva conexión, ya está abierta"
|
||||||
|
|
||||||
#: ../db/db-conn.c:555
|
#: ../db/db-conn.c:558
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The query is empty."
|
msgid "The query is empty."
|
||||||
msgstr "La consulta está vacía."
|
msgstr "La consulta está vacía."
|
||||||
|
|
||||||
#: ../db/db-conn.c:1060
|
#: ../db/db-conn.c:1037
|
||||||
msgid "Plugin"
|
msgid "Plugin"
|
||||||
msgstr "Plugin"
|
msgstr "Plugin"
|
||||||
|
|
||||||
#: ../db/db-conn.c:1061
|
#: ../db/db-conn.c:1038
|
||||||
msgid "The name of the plugin"
|
msgid "The name of the plugin"
|
||||||
msgstr "El nombre del plugin"
|
msgstr "El nombre del plugin"
|
||||||
|
|
||||||
#: ../db/db-conn.c:1067
|
#: ../db/db-conn.c:1044
|
||||||
msgid "Query path"
|
msgid "Query path"
|
||||||
msgstr "Ruta de consultas"
|
msgstr "Ruta de consultas"
|
||||||
|
|
||||||
#: ../db/db-conn.c:1068
|
#: ../db/db-conn.c:1045
|
||||||
msgid "The path where query files are located"
|
msgid "The path where query files are located"
|
||||||
msgstr "La ruta donde se encuentran los archivos de consultas"
|
msgstr "La ruta donde se encuentran los archivos de consultas"
|
||||||
|
|
||||||
#: ../db/db-conn.c:1074 ../db/db-file-loader.c:724
|
#: ../db/db-conn.c:1051 ../db/db-file-loader.c:724
|
||||||
#: ../vn/column/vn-column-image.c:475
|
#: ../vn/column/vn-column-image.c:477
|
||||||
msgid "Host"
|
msgid "Host"
|
||||||
msgstr "Host"
|
msgstr "Host"
|
||||||
|
|
||||||
#: ../db/db-conn.c:1075
|
#: ../db/db-conn.c:1052
|
||||||
msgid "The host name to connect to"
|
msgid "The host name to connect to"
|
||||||
msgstr "El nombre del host al que se conectará"
|
msgstr "El nombre del host al que se conectará"
|
||||||
|
|
||||||
#: ../db/db-conn.c:1081 ../module/data/users.glade.h:4
|
#: ../db/db-conn.c:1058 ../module/data/users.glade.h:2
|
||||||
msgid "User"
|
msgid "User"
|
||||||
msgstr "Usuario"
|
msgstr "Usuario"
|
||||||
|
|
||||||
#: ../db/db-conn.c:1082
|
#: ../db/db-conn.c:1059
|
||||||
msgid "The user name"
|
msgid "The user name"
|
||||||
msgstr "El nombre de usuario"
|
msgstr "El nombre de usuario"
|
||||||
|
|
||||||
#: ../db/db-conn.c:1088
|
#: ../db/db-conn.c:1065
|
||||||
msgid "DB name"
|
msgid "DB name"
|
||||||
msgstr "Nombre de la BD"
|
msgstr "Nombre de la BD"
|
||||||
|
|
||||||
#: ../db/db-conn.c:1089
|
#: ../db/db-conn.c:1066
|
||||||
msgid "The default schema"
|
msgid "The default schema"
|
||||||
msgstr "El esquema por defecto"
|
msgstr "El esquema por defecto"
|
||||||
|
|
||||||
#: ../db/db-request.c:315
|
#: ../db/db-request.c:311
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The request was canceled"
|
msgid "The request was canceled"
|
||||||
msgstr "Se ha cancelado la petición"
|
msgstr "Se ha cancelado la petición"
|
||||||
|
|
||||||
#: ../db/db-request.c:460
|
#: ../db/db-request.c:455
|
||||||
msgid "The connection used to render and execute the query"
|
msgid "The connection used to render and execute the query"
|
||||||
msgstr "La conexión empleada por el módulo"
|
msgstr "La conexión empleada por el módulo"
|
||||||
|
|
||||||
#: ../db/db-request.c:467
|
#: ../db/db-request.c:462
|
||||||
msgid "The SQL query to execute"
|
msgid "The SQL query to execute"
|
||||||
msgstr "La consulta SQL a ejecutar"
|
msgstr "La consulta SQL a ejecutar"
|
||||||
|
|
||||||
#: ../db/db-request.c:474
|
#: ../db/db-request.c:469
|
||||||
msgid "The statement to execute"
|
msgid "The statement to execute"
|
||||||
msgstr "La instrucción a ejecutar"
|
msgstr "La instrucción a ejecutar"
|
||||||
|
|
||||||
#: ../db/db-request.c:480
|
#: ../db/db-request.c:475
|
||||||
msgid "Result"
|
msgid "Result"
|
||||||
msgstr "Result"
|
msgstr "Result"
|
||||||
|
|
||||||
#: ../db/db-request.c:481
|
#: ../db/db-request.c:476
|
||||||
msgid "The result data of the query"
|
msgid "The result data of the query"
|
||||||
msgstr "Los datos resultantes de la consulta"
|
msgstr "Los datos resultantes de la consulta"
|
||||||
|
|
||||||
#: ../db/db-request.c:487
|
#: ../db/db-request.c:482
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Error"
|
msgstr "Error"
|
||||||
|
|
||||||
#: ../db/db-request.c:488
|
#: ../db/db-request.c:483
|
||||||
msgid "The GError, if an error ocurred"
|
msgid "The GError, if an error ocurred"
|
||||||
msgstr "El GError, si ha habido algún error"
|
msgstr "El GError, si ha habido algún error"
|
||||||
|
|
||||||
|
@ -504,11 +480,11 @@ msgstr "No se ha guardado %s en la cache"
|
||||||
msgid "Unknown content length of file %s"
|
msgid "Unknown content length of file %s"
|
||||||
msgstr "Longitud del contenido del archivo %s desconocida"
|
msgstr "Longitud del contenido del archivo %s desconocida"
|
||||||
|
|
||||||
#: ../db/db-file-loader.c:725 ../vn/column/vn-column-image.c:476
|
#: ../db/db-file-loader.c:725 ../vn/column/vn-column-image.c:478
|
||||||
msgid "The host web server name to get the images"
|
msgid "The host web server name to get the images"
|
||||||
msgstr "El nombre del servidor web al que se conectará"
|
msgstr "El nombre del servidor web al que se conectará"
|
||||||
|
|
||||||
#: ../db/db-file-loader.c:732 ../vn/column/vn-column-image.c:483
|
#: ../db/db-file-loader.c:732 ../vn/column/vn-column-image.c:485
|
||||||
msgid "Path"
|
msgid "Path"
|
||||||
msgstr "Ruta"
|
msgstr "Ruta"
|
||||||
|
|
||||||
|
@ -572,7 +548,7 @@ msgstr "Conexión perdida"
|
||||||
msgid "Connection closed"
|
msgid "Connection closed"
|
||||||
msgstr "Conexión cerrada"
|
msgstr "Conexión cerrada"
|
||||||
|
|
||||||
#: ../vn/vn-gui.c:987 ../vn/field/vn-http-image.c:118
|
#: ../vn/vn-gui.c:987 ../vn/field/vn-http-image.c:116
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Cargando"
|
msgstr "Cargando"
|
||||||
|
|
||||||
|
@ -592,19 +568,19 @@ msgstr "Aplicación"
|
||||||
msgid "The application handler for the entire program"
|
msgid "The application handler for the entire program"
|
||||||
msgstr "El manejador de la aplicación para todo el programa"
|
msgstr "El manejador de la aplicación para todo el programa"
|
||||||
|
|
||||||
#: ../vn/vn-model.c:303
|
#: ../vn/vn-model.c:317
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Function vn_model_set_sort_func not implemented"
|
msgid "Function vn_model_set_sort_func not implemented"
|
||||||
msgstr "Función vn_model_set_sort_func no implementada"
|
msgstr "Función vn_model_set_sort_func no implementada"
|
||||||
|
|
||||||
#: ../vn/vn-model.c:310
|
#: ../vn/vn-model.c:324
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Function vn_model_set_default_sort_func not implemented"
|
msgid "Function vn_model_set_default_sort_func not implemented"
|
||||||
msgstr "Función vn_model_set_default_sort_func no implementada"
|
msgstr "Función vn_model_set_default_sort_func no implementada"
|
||||||
|
|
||||||
#: ../vn/vn-grid.c:350
|
#: ../vn/vn-grid.c:358
|
||||||
msgid "The iterator used by VnGrid"
|
msgid "The iterator used by VnGrid"
|
||||||
msgstr "El iterador empleado por VnGrid"
|
msgstr "El Iterator empleado por VnGrid"
|
||||||
|
|
||||||
#: ../vn/vn-handler.c:65
|
#: ../vn/vn-handler.c:65
|
||||||
msgid "Are you sure you want to delete the selected record?"
|
msgid "Are you sure you want to delete the selected record?"
|
||||||
|
@ -666,48 +642,48 @@ msgstr "Registro simple"
|
||||||
msgid "Sets if it is used to handle a iterator with a single record"
|
msgid "Sets if it is used to handle a iterator with a single record"
|
||||||
msgstr "Indica si se utiliza para manejar solo un registro"
|
msgstr "Indica si se utiliza para manejar solo un registro"
|
||||||
|
|
||||||
#: ../vn/vn-form.c:227
|
#: ../vn/vn-form.c:221
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Nombre"
|
msgstr "Nombre"
|
||||||
|
|
||||||
#: ../vn/vn-form.c:228
|
#: ../vn/vn-form.c:222
|
||||||
msgid "The form name"
|
msgid "The form name"
|
||||||
msgstr "El nombre del form"
|
msgstr "El nombre del form"
|
||||||
|
|
||||||
#: ../vn/vn-form.c:234
|
#: ../vn/vn-form.c:228
|
||||||
msgid "Gui"
|
msgid "Gui"
|
||||||
msgstr "Gui"
|
msgstr "Gui"
|
||||||
|
|
||||||
#: ../vn/vn-form.c:235
|
#: ../vn/vn-form.c:229
|
||||||
msgid "The Gui object"
|
msgid "The Gui object"
|
||||||
msgstr "El objeto Gui"
|
msgstr "El objeto Gui"
|
||||||
|
|
||||||
#: ../vn/vn-form.c:242
|
#: ../vn/vn-form.c:236
|
||||||
msgid "The connection used by the module"
|
msgid "The connection used by the module"
|
||||||
msgstr "La conexión empleada por el módulo"
|
msgstr "La conexión empleada por el módulo"
|
||||||
|
|
||||||
#: ../vn/vn-form.c:248
|
#: ../vn/vn-form.c:242
|
||||||
msgid "Module"
|
msgid "Module"
|
||||||
msgstr "Módulo"
|
msgstr "Módulo"
|
||||||
|
|
||||||
#: ../vn/vn-form.c:249
|
#: ../vn/vn-form.c:243
|
||||||
msgid "The module"
|
msgid "The module"
|
||||||
msgstr "El módulo"
|
msgstr "El módulo"
|
||||||
|
|
||||||
#: ../vn/vn-login.c:276 ../vn/vn-login.c:278
|
#: ../vn/vn-login.c:290 ../vn/vn-login.c:292
|
||||||
msgid "Login error"
|
msgid "Login error"
|
||||||
msgstr "Error de identificación"
|
msgstr "Error de identificación"
|
||||||
|
|
||||||
#: ../vn/vn-login.c:336
|
#: ../vn/vn-login.c:348
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Bad connection settings, please check it."
|
msgid "Bad connection settings, please check it."
|
||||||
msgstr "Conexión mal configurado, compruébelo por favor"
|
msgstr "Conexión mal configurado, compruébelo por favor"
|
||||||
|
|
||||||
#: ../vn/vn-login.c:457
|
#: ../vn/vn-login.c:477
|
||||||
msgid "Application id"
|
msgid "Application id"
|
||||||
msgstr "Id de la aplicación"
|
msgstr "Id de la aplicación"
|
||||||
|
|
||||||
#: ../vn/vn-login.c:458
|
#: ../vn/vn-login.c:478
|
||||||
msgid "The application identifier"
|
msgid "The application identifier"
|
||||||
msgstr "El identificador de la aplicación"
|
msgstr "El identificador de la aplicación"
|
||||||
|
|
||||||
|
@ -725,17 +701,17 @@ msgstr "El parámetro en el que el campo escribe/lee su valor"
|
||||||
|
|
||||||
#: ../vn/vn-field.c:533
|
#: ../vn/vn-field.c:533
|
||||||
msgid "The iterator used to get the field param"
|
msgid "The iterator used to get the field param"
|
||||||
msgstr "El iterador con el que se obtiene el parámetro"
|
msgstr "El Iterator con el que se obtiene el parámetro"
|
||||||
|
|
||||||
#: ../vn/vn-field.c:540
|
#: ../vn/vn-field.c:540
|
||||||
msgid "The column name on the iterator"
|
msgid "The column name on the iterator"
|
||||||
msgstr "El nombre de la columna en el iterador"
|
msgstr "El nombre de la columna en el Iterator"
|
||||||
|
|
||||||
#: ../vn/vn-field.c:554
|
#: ../vn/vn-field.c:554
|
||||||
msgid "Whether the field value is user editable"
|
msgid "Whether the field value is user editable"
|
||||||
msgstr "Si el valor de campo puede ser editado por el usuario"
|
msgstr "Si el valor de campo puede ser editado por el usuario"
|
||||||
|
|
||||||
#: ../vn/vn-field.c:561
|
#: ../vn/vn-field.c:561 ../vn/vn-column.c:409
|
||||||
msgid "Whether the field value can be of type GVN_TYPE_NULL"
|
msgid "Whether the field value can be of type GVN_TYPE_NULL"
|
||||||
msgstr "Si el campo puede ser del tipo GVN_TYPE_NULL"
|
msgstr "Si el campo puede ser del tipo GVN_TYPE_NULL"
|
||||||
|
|
||||||
|
@ -749,31 +725,27 @@ msgstr "Dígitos"
|
||||||
msgid "The number of decimal places to display."
|
msgid "The number of decimal places to display."
|
||||||
msgstr "El número de posiciones decimales que se muestran"
|
msgstr "El número de posiciones decimales que se muestran"
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:328 ../vn/column/vn-column-combo.c:269
|
#: ../vn/field/vn-combo.c:286 ../vn/column/vn-column-combo.c:300
|
||||||
msgid "Index column"
|
msgid "Index column"
|
||||||
msgstr "Columna índice"
|
msgstr "Columna índice"
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:329 ../vn/column/vn-column-combo.c:270
|
#: ../vn/field/vn-combo.c:287 ../vn/column/vn-column-combo.c:301
|
||||||
msgid "The column index of the model"
|
msgid "The column index of the model"
|
||||||
msgstr "El índice de columna del modelo"
|
msgstr "El índice de columna del modelo"
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:335 ../vn/column/vn-column-combo.c:276
|
#: ../vn/field/vn-combo.c:293 ../vn/column/vn-column-combo.c:307
|
||||||
msgid "Show column"
|
msgid "Show column"
|
||||||
msgstr "Mostrar columna"
|
msgstr "Mostrar columna"
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:336 ../vn/column/vn-column-combo.c:277
|
#: ../vn/field/vn-combo.c:294 ../vn/column/vn-column-combo.c:308
|
||||||
msgid "The column of the model shown by combo"
|
msgid "The column of the model shown by combo"
|
||||||
msgstr "La columna del modelo que se mostrará en el combo"
|
msgstr "La columna del modelo que se mostrará en el combo"
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:343 ../vn/column/vn-column-combo.c:284
|
#: ../vn/field/vn-completion.c:325
|
||||||
msgid "The model from which the combo takes the values shown in the list"
|
|
||||||
msgstr "El modelo del cual el combo tomará los valores mostrados en la lista"
|
|
||||||
|
|
||||||
#: ../vn/field/vn-completion.c:322
|
|
||||||
msgid "Field"
|
msgid "Field"
|
||||||
msgstr "Campo"
|
msgstr "Campo"
|
||||||
|
|
||||||
#: ../vn/field/vn-completion.c:323
|
#: ../vn/field/vn-completion.c:326
|
||||||
msgid "The name of the field used for the search"
|
msgid "The name of the field used for the search"
|
||||||
msgstr "El nombre del campo usado para la búsqueda"
|
msgstr "El nombre del campo usado para la búsqueda"
|
||||||
|
|
||||||
|
@ -790,49 +762,49 @@ msgstr "Cambiar fecha"
|
||||||
msgid "Select the image"
|
msgid "Select the image"
|
||||||
msgstr "Selecciona la imagen"
|
msgstr "Selecciona la imagen"
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:69
|
#: ../vn/field/vn-http-image.c:70
|
||||||
msgid "Undefined error"
|
msgid "Undefined error"
|
||||||
msgstr "Error indefinido"
|
msgstr "Error indefinido"
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:145
|
#: ../vn/field/vn-http-image.c:142
|
||||||
msgid "File loader already set"
|
msgid "File loader already set"
|
||||||
msgstr "Ya se ha especificado un cargador de archivos"
|
msgstr "Ya se ha especificado un cargador de archivos"
|
||||||
|
|
||||||
#. Se usará para subir imagenes y cambiar nombres, o abrir un menu contextual
|
#. Se usará para subir imagenes y cambiar nombres, o abrir un menu contextual
|
||||||
#. g_signal_connect (obj, "event", G_CALLBACK (vn_http_image_cb_event), obj);
|
#. g_signal_connect (obj, "event", G_CALLBACK (vn_http_image_cb_event), obj);
|
||||||
#: ../vn/field/vn-http-image.c:184
|
#: ../vn/field/vn-http-image.c:181
|
||||||
msgid "No image set"
|
msgid "No image set"
|
||||||
msgstr "Sin imagen"
|
msgstr "Sin imagen"
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:210
|
#: ../vn/field/vn-http-image.c:207
|
||||||
msgid "File loader"
|
msgid "File loader"
|
||||||
msgstr "Cargador de archivos"
|
msgstr "Cargador de archivos"
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:211
|
#: ../vn/field/vn-http-image.c:208
|
||||||
msgid "A DbFileLoader, used to download the files"
|
msgid "A DbFileLoader, used to download the files"
|
||||||
msgstr "Un DbFileLoader que se usará para descargar los archivos"
|
msgstr "Un DbFileLoader que se usará para descargar los archivos"
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:218
|
#: ../vn/field/vn-http-image.c:215
|
||||||
msgid "File path"
|
msgid "File path"
|
||||||
msgstr "Ruta del archivo"
|
msgstr "Ruta del archivo"
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:219
|
#: ../vn/field/vn-http-image.c:216
|
||||||
msgid "The relative path to the image from file loader path"
|
msgid "The relative path to the image from file loader path"
|
||||||
msgstr "La ruta relativa a la imagen desde la del cargador de archivos"
|
msgstr "La ruta relativa a la imagen desde la del cargador de archivos"
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:226
|
#: ../vn/field/vn-http-image.c:223
|
||||||
msgid "Image bytes"
|
msgid "Image bytes"
|
||||||
msgstr "Bytes"
|
msgstr "Bytes"
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:227
|
#: ../vn/field/vn-http-image.c:224
|
||||||
msgid "A GBytes structure with the image data"
|
msgid "A GBytes structure with the image data"
|
||||||
msgstr "Una estructura GBytes con los datos de la imágen"
|
msgstr "Una estructura GBytes con los datos de la imágen"
|
||||||
|
|
||||||
#: ../vn/vn-column.c:341
|
#: ../vn/vn-column.c:388
|
||||||
msgid "The column index in the model"
|
msgid "The column index in the model"
|
||||||
msgstr "El índice de la columna en el modelo"
|
msgstr "El índice de la columna en el modelo"
|
||||||
|
|
||||||
#: ../vn/vn-column.c:355
|
#: ../vn/vn-column.c:402
|
||||||
msgid "Whether the column values are editable"
|
msgid "Whether the column values are editable"
|
||||||
msgstr "Si el valor de campo puede ser editado por el usuario"
|
msgstr "Si el valor de campo puede ser editado por el usuario"
|
||||||
|
|
||||||
|
@ -844,15 +816,15 @@ msgstr "Tasa de subida"
|
||||||
msgid "The acceleration rate when you hold down a button."
|
msgid "The acceleration rate when you hold down a button."
|
||||||
msgstr "La tasa de aceleración cuando se mantiene apretado el botón."
|
msgstr "La tasa de aceleración cuando se mantiene apretado el botón."
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:484
|
#: ../vn/column/vn-column-image.c:486
|
||||||
msgid "Base path from the host where the images will be downloaded"
|
msgid "Base path from the host where the images will be downloaded"
|
||||||
msgstr "La ruta base del servidor desde donde se descargarán las imágenes."
|
msgstr "La ruta base del servidor desde donde se descargarán las imágenes."
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:491
|
#: ../vn/column/vn-column-image.c:493
|
||||||
msgid "Tooltip path"
|
msgid "Tooltip path"
|
||||||
msgstr "Ruta del tooltip"
|
msgstr "Ruta del tooltip"
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:492
|
#: ../vn/column/vn-column-image.c:494
|
||||||
msgid ""
|
msgid ""
|
||||||
"Prefix for the path of the images to be shown in the tooltip. Starting after "
|
"Prefix for the path of the images to be shown in the tooltip. Starting after "
|
||||||
"the path of the column and appending the name on each cell"
|
"the path of the column and appending the name on each cell"
|
||||||
|
@ -861,11 +833,11 @@ msgstr ""
|
||||||
"Empezando desde la ruta de la columna y añadiendo después el nombre de cada "
|
"Empezando desde la ruta de la columna y añadiendo después el nombre de cada "
|
||||||
"celda"
|
"celda"
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:501
|
#: ../vn/column/vn-column-image.c:503
|
||||||
msgid "Tooltip size"
|
msgid "Tooltip size"
|
||||||
msgstr "Tamaño del tooltip"
|
msgstr "Tamaño del tooltip"
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:502
|
#: ../vn/column/vn-column-image.c:504
|
||||||
msgid ""
|
msgid ""
|
||||||
"Size of the bigger side of the tooltip images, the another side will be "
|
"Size of the bigger side of the tooltip images, the another side will be "
|
||||||
"scaled accordingly and smaller images won't be scaled"
|
"scaled accordingly and smaller images won't be scaled"
|
||||||
|
@ -908,7 +880,7 @@ msgstr "Acceso"
|
||||||
msgid "User:"
|
msgid "User:"
|
||||||
msgstr "Usuario:"
|
msgstr "Usuario:"
|
||||||
|
|
||||||
#: ../vn/gui/login.glade.h:9 ../module/data/users.glade.h:8
|
#: ../vn/gui/login.glade.h:9 ../module/data/users.glade.h:6
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr "Clave:"
|
msgstr "Clave:"
|
||||||
|
|
||||||
|
@ -1022,86 +994,174 @@ msgctxt "View menu option"
|
||||||
msgid "Tool_bar"
|
msgid "Tool_bar"
|
||||||
msgstr "_Barra de herramientas"
|
msgstr "_Barra de herramientas"
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:121
|
||||||
|
msgid "Create and set a model for a DbModelHolder"
|
||||||
|
msgstr "Crear y configurar un modelo para un DbModelHolder"
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:153
|
||||||
|
msgid "Model configuration"
|
||||||
|
msgstr "Configuración del Model"
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:153
|
||||||
|
msgid "DbModel properties configuration"
|
||||||
|
msgstr "Configuración de propiedades de DbModelo"
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:238
|
||||||
|
msgid "Select a DbModel for the property"
|
||||||
|
msgstr "Selecciona un DbModel para la propiedad"
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:259 ../glade/glade-db-model.c:306
|
||||||
|
msgid "New Model"
|
||||||
|
msgstr "Nuevo Modelo"
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:301
|
||||||
|
msgid "Edit Model"
|
||||||
|
msgstr "Editar Modelo"
|
||||||
|
|
||||||
|
#: ../glade/glade-db-sql.c:27
|
||||||
|
msgid "New SQL statement"
|
||||||
|
msgstr "Nueva consulta SQL"
|
||||||
|
|
||||||
|
#: ../glade/glade-db-sql.c:59
|
||||||
|
msgid "SQL Editor"
|
||||||
|
msgstr "Editor SQL"
|
||||||
|
|
||||||
|
#: ../glade/glade-db-sql.c:174
|
||||||
|
msgid "Open the SQL Editor"
|
||||||
|
msgstr "Abrir el Editor SQL"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:1
|
#: ../module/data/users.glade.h:1
|
||||||
msgid "User name:"
|
|
||||||
msgstr "Nombre de usuario:"
|
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:2
|
|
||||||
msgid "<b>Search</b>"
|
|
||||||
msgstr "<b>Buscar</b>"
|
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:3
|
|
||||||
msgid "Identifier"
|
msgid "Identifier"
|
||||||
msgstr "Identificador"
|
msgstr "Identificador"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:5
|
#: ../module/data/users.glade.h:3
|
||||||
msgid "MySQL User"
|
msgid "MySQL User"
|
||||||
msgstr "Usuario MySQL"
|
msgstr "Usuario MySQL"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:6
|
#: ../module/data/users.glade.h:4
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Habilitado"
|
msgstr "Habilitado"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:7
|
#: ../module/data/users.glade.h:5
|
||||||
msgid "Name:"
|
msgid "Name:"
|
||||||
msgstr "Nombre:"
|
msgstr "Nombre:"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:9
|
#: ../module/data/users.glade.h:7
|
||||||
msgid "MySQL user:"
|
msgid "MySQL user:"
|
||||||
msgstr "Usuario MySQL:"
|
msgstr "Usuario MySQL:"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:10
|
#: ../module/data/users.glade.h:8
|
||||||
msgid "Enabled:"
|
msgid "Enabled:"
|
||||||
msgstr "Habilitado:"
|
msgstr "Habilitado:"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:11
|
#: ../module/data/users.glade.h:9
|
||||||
msgid "Identifier:"
|
msgid "Identifier:"
|
||||||
msgstr "Identificador:"
|
msgstr "Identificador:"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:12
|
#: ../module/data/users.glade.h:10
|
||||||
msgid "UID:"
|
msgid "UID:"
|
||||||
msgstr "UID:"
|
msgstr "UID:"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:13
|
#: ../module/data/users.glade.h:11
|
||||||
msgid "Main group:"
|
msgid "Main group:"
|
||||||
msgstr "Grupo principal:"
|
msgstr "Grupo principal:"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:14
|
#: ../module/data/users.glade.h:12
|
||||||
msgid "Last change:"
|
msgid "Last change:"
|
||||||
msgstr "Último cambio:"
|
msgstr "Último cambio:"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:15
|
#: ../module/data/users.glade.h:13
|
||||||
msgid "Expires:"
|
msgid "Expires:"
|
||||||
msgstr "Expira:"
|
msgstr "Expira:"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:16
|
#: ../module/data/users.glade.h:14
|
||||||
msgid "Account"
|
msgid "Account"
|
||||||
msgstr "Cuenta"
|
msgstr "Cuenta"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:17
|
#: ../module/data/users.glade.h:15
|
||||||
msgid "Alias"
|
msgid "Alias"
|
||||||
msgstr "Alias"
|
msgstr "Alias"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:18
|
#: ../module/data/users.glade.h:16
|
||||||
msgid "Mail alias"
|
msgid "Mail alias"
|
||||||
msgstr "Alias de correo"
|
msgstr "Alias de correo"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:19
|
#: ../module/data/users.glade.h:17
|
||||||
msgid "Extension:"
|
msgid "Extension:"
|
||||||
msgstr "Extensión:"
|
msgstr "Extensión:"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:20
|
#: ../module/data/users.glade.h:18
|
||||||
msgid "Secret:"
|
msgid "Secret:"
|
||||||
msgstr "Clave:"
|
msgstr "Clave:"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:21
|
#: ../module/data/users.glade.h:19
|
||||||
msgid "Call group:"
|
msgid "Call group:"
|
||||||
msgstr "Call group:"
|
msgstr "Call group:"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:22
|
#: ../module/data/users.glade.h:20
|
||||||
msgid "SIP"
|
msgid "SIP"
|
||||||
msgstr "SIP"
|
msgstr "SIP"
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:23
|
#: ../module/data/users.glade.h:21
|
||||||
|
msgid "Change password"
|
||||||
|
msgstr "Cambiar contraseña"
|
||||||
|
|
||||||
|
#: ../module/data/users.glade.h:22
|
||||||
msgid "Repeat password:"
|
msgid "Repeat password:"
|
||||||
msgstr "Repetir contraseña:"
|
msgstr "Repetir contraseña:"
|
||||||
|
|
||||||
|
#: ../module/src/vn-users.c:60
|
||||||
|
msgid "The password is too weak."
|
||||||
|
msgstr "La contraseña es demasiado débil."
|
||||||
|
|
||||||
|
#: ../module/src/vn-users.c:75
|
||||||
|
msgid "The password can't be empty."
|
||||||
|
msgstr "La contraseña no puede estar vacía."
|
||||||
|
|
||||||
|
#: ../module/src/vn-users.c:77
|
||||||
|
msgid "Passwords do not match."
|
||||||
|
msgstr "Las contraseñas no coinciden."
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:1
|
||||||
|
msgid "Send"
|
||||||
|
msgstr "Enviar"
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:2
|
||||||
|
msgid "Send the current query"
|
||||||
|
msgstr "Enviar la consulta actual"
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:3
|
||||||
|
msgid "Clean"
|
||||||
|
msgstr "Limpiar"
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:4
|
||||||
|
msgid "Clean the messages"
|
||||||
|
msgstr "Limpia los mensajes"
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:5
|
||||||
|
msgid "_Consulter"
|
||||||
|
msgstr "_Consultor"
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:6
|
||||||
|
msgid "Query:"
|
||||||
|
msgstr "Consulta:"
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:7
|
||||||
|
msgid "Immediate changes"
|
||||||
|
msgstr "Cambios inmediatos"
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:8
|
||||||
|
msgid "Start"
|
||||||
|
msgstr "Empezar"
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:9
|
||||||
|
msgid "Commit"
|
||||||
|
msgstr "Efectuar"
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:10
|
||||||
|
msgid "Rollback"
|
||||||
|
msgstr "Deshacer"
|
||||||
|
|
||||||
|
#: ../module/src/vn-consulter.c:199
|
||||||
|
msgid "Type or select a query"
|
||||||
|
msgstr "Escribe o selecciona la consulta"
|
||||||
|
|
374
po/nl.po
374
po/nl.po
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: hedera 1.0\n"
|
"Project-Id-Version: hedera 1.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2013-07-10 11:56+0200\n"
|
"POT-Creation-Date: 2013-10-08 09:59+0200\n"
|
||||||
"PO-Revision-Date: 2012-10-09 11:38+0200\n"
|
"PO-Revision-Date: 2012-10-09 11:38+0200\n"
|
||||||
"Last-Translator: Alejandro T. Colombini Gómez <atcolombini@verdnatura.es>\n"
|
"Last-Translator: Alejandro T. Colombini Gómez <atcolombini@verdnatura.es>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
|
@ -134,7 +134,7 @@ msgstr ""
|
||||||
msgid "The master GvnParam of this parameter"
|
msgid "The master GvnParam of this parameter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gvn/gvn-param.c:457 ../db/db-iterator.c:1070
|
#: ../gvn/gvn-param.c:457 ../db/db-iterator.c:985
|
||||||
msgid "Mode"
|
msgid "Mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ msgstr ""
|
||||||
msgid "The type of the value"
|
msgid "The type of the value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gvn/gvn-param.c:485 ../vn/vn-field.c:553 ../vn/vn-column.c:354
|
#: ../gvn/gvn-param.c:485 ../vn/vn-field.c:553 ../vn/vn-column.c:401
|
||||||
msgid "Editable"
|
msgid "Editable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ msgstr ""
|
||||||
msgid "Whether the param value can be modified"
|
msgid "Whether the param value can be modified"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gvn/gvn-param.c:492 ../vn/vn-field.c:560
|
#: ../gvn/gvn-param.c:492 ../vn/vn-field.c:560 ../vn/vn-column.c:408
|
||||||
msgid "Null"
|
msgid "Null"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -215,9 +215,7 @@ msgstr ""
|
||||||
msgid "The value"
|
msgid "The value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../sql/sql-string.c:198 ../db/db-iterator.c:1063 ../db/db-model.c:3411
|
#: ../sql/sql-string.c:198 ../db/db-model.c:3459 ../db/db-request.c:461
|
||||||
#: ../db/db-request.c:466 ../vn/field/vn-combo.c:356
|
|
||||||
#: ../vn/field/vn-completion.c:315 ../vn/column/vn-column-combo.c:297
|
|
||||||
msgid "SQL"
|
msgid "SQL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -225,110 +223,90 @@ msgstr ""
|
||||||
msgid "An arbitrary SQL string"
|
msgid "An arbitrary SQL string"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../plugin/mysql/db-mysql.c:68 ../plugin/pg/db-pg.c:76
|
#: ../plugin/mysql/db-mysql.c:68 ../plugin/pg/db-pg.c:85
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't allocate the needed memory"
|
msgid "Can't allocate the needed memory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-iterator.c:284
|
#: ../db/db-iterator.c:986
|
||||||
msgid "DbIterator: Can't reassign the 'model' property"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:942
|
|
||||||
msgid "DbIterator: Can't set the 'conn' property because model isn't set"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1049 ../db/db-calc.c:329 ../vn/field/vn-combo.c:342
|
|
||||||
#: ../vn/column/vn-column-combo.c:283
|
|
||||||
msgid "Model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1050
|
|
||||||
msgid "The DbModel handled by the iterator"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1056 ../db/db-model.c:3395 ../db/db-request.c:459
|
|
||||||
#: ../vn/vn-gui.c:1531 ../vn/vn-form.c:241 ../vn/field/vn-combo.c:349
|
|
||||||
#: ../vn/field/vn-completion.c:308 ../vn/column/vn-column-combo.c:290
|
|
||||||
msgid "Connection"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1057 ../vn/field/vn-combo.c:350
|
|
||||||
#: ../vn/field/vn-completion.c:309 ../vn/column/vn-column-combo.c:291
|
|
||||||
msgid "The connection used by the model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1064 ../vn/field/vn-combo.c:357
|
|
||||||
#: ../vn/field/vn-completion.c:316 ../vn/column/vn-column-combo.c:298
|
|
||||||
msgid "The SQL query used to create the model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1071
|
|
||||||
msgid "The mode in which the iterator is working"
|
msgid "The mode in which the iterator is working"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1078
|
#: ../db/db-iterator.c:993
|
||||||
msgid "Remember selection"
|
msgid "Remember selection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-iterator.c:1079
|
#: ../db/db-iterator.c:994
|
||||||
msgid "Wether to rememeber the selection when model is refreshed"
|
msgid "Wether to rememeber the selection when model is refreshed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3396
|
#: ../db/db-model.c:3443 ../db/db-request.c:454 ../vn/vn-gui.c:1531
|
||||||
|
#: ../vn/vn-form.c:235
|
||||||
|
msgid "Connection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../db/db-model.c:3444
|
||||||
msgid "The DbConn that manages the connection to the database"
|
msgid "The DbConn that manages the connection to the database"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3403 ../db/db-request.c:473
|
#: ../db/db-model.c:3451 ../db/db-request.c:468
|
||||||
msgid "Statement"
|
msgid "Statement"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3404
|
#: ../db/db-model.c:3452
|
||||||
msgid "The statement which retrieves the data"
|
msgid "The statement which retrieves the data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3412
|
#: ../db/db-model.c:3460
|
||||||
msgid ""
|
msgid ""
|
||||||
"Depending on the \"use-file\" property this will be the path to a file with "
|
"Depending on the \"use-file\" property this will be the path to a file with "
|
||||||
"queries for the model or a SQL string"
|
"queries for the model or a SQL string"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3421
|
#: ../db/db-model.c:3469
|
||||||
msgid "Use file"
|
msgid "Use file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3422
|
#: ../db/db-model.c:3470
|
||||||
msgid ""
|
msgid ""
|
||||||
"If this is set to TRUE, the \"sql\" property will hold the name of a file "
|
"If this is set to TRUE, the \"sql\" property will hold the name of a file "
|
||||||
"containing a query, if set to FALSE, \"sql\" is used as an SQL string"
|
"containing a query, if set to FALSE, \"sql\" is used as an SQL string"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3431
|
#: ../db/db-model.c:3479
|
||||||
msgid "Main Table"
|
msgid "Main Table"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3432
|
#: ../db/db-model.c:3480
|
||||||
msgid "The main table of the model"
|
msgid "The main table of the model"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3439
|
#: ../db/db-model.c:3487
|
||||||
msgid "Update flags"
|
msgid "Update flags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3440
|
#: ../db/db-model.c:3488
|
||||||
msgid "The flags that indicate how a model can be modified"
|
msgid "The flags that indicate how a model can be modified"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3448
|
#: ../db/db-model.c:3496
|
||||||
msgid "Result position"
|
msgid "Result position"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-model.c:3449
|
#: ../db/db-model.c:3497
|
||||||
msgid ""
|
msgid ""
|
||||||
"The position where the query that will fill the model will be placed in a "
|
"The position where the query that will fill the model will be placed in a "
|
||||||
"multi-query"
|
"multi-query"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../db/db-model-holder.c:70 ../db/db-calc.c:329
|
||||||
|
msgid "Model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../db/db-model-holder.c:71
|
||||||
|
msgid "The model used by the holder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-calc.c:330
|
#: ../db/db-calc.c:330
|
||||||
msgid "The model where the operations will be applied"
|
msgid "The model where the operations will be applied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -365,121 +343,121 @@ msgstr ""
|
||||||
msgid "A column to apply the operations over it"
|
msgid "A column to apply the operations over it"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-param.c:243 ../vn/vn-grid.c:349 ../vn/vn-field.c:532
|
#: ../db/db-param.c:251 ../vn/vn-grid.c:357 ../vn/vn-field.c:532
|
||||||
msgid "Iterator"
|
msgid "Iterator"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-param.c:244
|
#: ../db/db-param.c:252
|
||||||
msgid "The iterator owner of param"
|
msgid "The iterator owner of param"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-param.c:250 ../vn/vn-column.c:340
|
#: ../db/db-param.c:258 ../vn/vn-column.c:387
|
||||||
msgid "Column index"
|
msgid "Column index"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-param.c:251
|
#: ../db/db-param.c:259
|
||||||
msgid "The referenced column index"
|
msgid "The referenced column index"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-param.c:257 ../vn/vn-field.c:539 ../vn/vn-column.c:347
|
#: ../db/db-param.c:265 ../vn/vn-field.c:539 ../vn/vn-column.c:394
|
||||||
msgid "Column name"
|
msgid "Column name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-param.c:258 ../vn/vn-column.c:348
|
#: ../db/db-param.c:266 ../vn/vn-column.c:395
|
||||||
msgid "The referenced column name"
|
msgid "The referenced column name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:279 ../db/db-conn.c:284
|
#: ../db/db-conn.c:282 ../db/db-conn.c:287
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't load DbPlugin '%s': %s"
|
msgid "Can't load DbPlugin '%s': %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:297
|
#: ../db/db-conn.c:300
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Plugin can't be loaded"
|
msgid "Plugin can't be loaded"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:413
|
#: ../db/db-conn.c:416
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't open a new connection, it's already open."
|
msgid "Can't open a new connection, it's already open."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:555
|
#: ../db/db-conn.c:558
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The query is empty."
|
msgid "The query is empty."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1060
|
#: ../db/db-conn.c:1037
|
||||||
msgid "Plugin"
|
msgid "Plugin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1061
|
#: ../db/db-conn.c:1038
|
||||||
msgid "The name of the plugin"
|
msgid "The name of the plugin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1067
|
#: ../db/db-conn.c:1044
|
||||||
msgid "Query path"
|
msgid "Query path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1068
|
#: ../db/db-conn.c:1045
|
||||||
msgid "The path where query files are located"
|
msgid "The path where query files are located"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1074 ../db/db-file-loader.c:724
|
#: ../db/db-conn.c:1051 ../db/db-file-loader.c:724
|
||||||
#: ../vn/column/vn-column-image.c:475
|
#: ../vn/column/vn-column-image.c:477
|
||||||
msgid "Host"
|
msgid "Host"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1075
|
#: ../db/db-conn.c:1052
|
||||||
msgid "The host name to connect to"
|
msgid "The host name to connect to"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1081 ../module/data/users.glade.h:4
|
#: ../db/db-conn.c:1058 ../module/data/users.glade.h:2
|
||||||
msgid "User"
|
msgid "User"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1082
|
#: ../db/db-conn.c:1059
|
||||||
msgid "The user name"
|
msgid "The user name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1088
|
#: ../db/db-conn.c:1065
|
||||||
msgid "DB name"
|
msgid "DB name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-conn.c:1089
|
#: ../db/db-conn.c:1066
|
||||||
msgid "The default schema"
|
msgid "The default schema"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:315
|
#: ../db/db-request.c:311
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The request was canceled"
|
msgid "The request was canceled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:460
|
#: ../db/db-request.c:455
|
||||||
msgid "The connection used to render and execute the query"
|
msgid "The connection used to render and execute the query"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:467
|
#: ../db/db-request.c:462
|
||||||
msgid "The SQL query to execute"
|
msgid "The SQL query to execute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:474
|
#: ../db/db-request.c:469
|
||||||
msgid "The statement to execute"
|
msgid "The statement to execute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:480
|
#: ../db/db-request.c:475
|
||||||
msgid "Result"
|
msgid "Result"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:481
|
#: ../db/db-request.c:476
|
||||||
msgid "The result data of the query"
|
msgid "The result data of the query"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:487
|
#: ../db/db-request.c:482
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-request.c:488
|
#: ../db/db-request.c:483
|
||||||
msgid "The GError, if an error ocurred"
|
msgid "The GError, if an error ocurred"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -493,11 +471,11 @@ msgstr ""
|
||||||
msgid "Unknown content length of file %s"
|
msgid "Unknown content length of file %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-file-loader.c:725 ../vn/column/vn-column-image.c:476
|
#: ../db/db-file-loader.c:725 ../vn/column/vn-column-image.c:478
|
||||||
msgid "The host web server name to get the images"
|
msgid "The host web server name to get the images"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../db/db-file-loader.c:732 ../vn/column/vn-column-image.c:483
|
#: ../db/db-file-loader.c:732 ../vn/column/vn-column-image.c:485
|
||||||
msgid "Path"
|
msgid "Path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -559,7 +537,7 @@ msgstr ""
|
||||||
msgid "Connection closed"
|
msgid "Connection closed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-gui.c:987 ../vn/field/vn-http-image.c:118
|
#: ../vn/vn-gui.c:987 ../vn/field/vn-http-image.c:116
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -579,17 +557,17 @@ msgstr ""
|
||||||
msgid "The application handler for the entire program"
|
msgid "The application handler for the entire program"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-model.c:303
|
#: ../vn/vn-model.c:317
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Function vn_model_set_sort_func not implemented"
|
msgid "Function vn_model_set_sort_func not implemented"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-model.c:310
|
#: ../vn/vn-model.c:324
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Function vn_model_set_default_sort_func not implemented"
|
msgid "Function vn_model_set_default_sort_func not implemented"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-grid.c:350
|
#: ../vn/vn-grid.c:358
|
||||||
msgid "The iterator used by VnGrid"
|
msgid "The iterator used by VnGrid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -653,48 +631,48 @@ msgstr ""
|
||||||
msgid "Sets if it is used to handle a iterator with a single record"
|
msgid "Sets if it is used to handle a iterator with a single record"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:227
|
#: ../vn/vn-form.c:221
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:228
|
#: ../vn/vn-form.c:222
|
||||||
msgid "The form name"
|
msgid "The form name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:234
|
#: ../vn/vn-form.c:228
|
||||||
msgid "Gui"
|
msgid "Gui"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:235
|
#: ../vn/vn-form.c:229
|
||||||
msgid "The Gui object"
|
msgid "The Gui object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:242
|
#: ../vn/vn-form.c:236
|
||||||
msgid "The connection used by the module"
|
msgid "The connection used by the module"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:248
|
#: ../vn/vn-form.c:242
|
||||||
msgid "Module"
|
msgid "Module"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-form.c:249
|
#: ../vn/vn-form.c:243
|
||||||
msgid "The module"
|
msgid "The module"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-login.c:276 ../vn/vn-login.c:278
|
#: ../vn/vn-login.c:290 ../vn/vn-login.c:292
|
||||||
msgid "Login error"
|
msgid "Login error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-login.c:336
|
#: ../vn/vn-login.c:348
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Bad connection settings, please check it."
|
msgid "Bad connection settings, please check it."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-login.c:457
|
#: ../vn/vn-login.c:477
|
||||||
msgid "Application id"
|
msgid "Application id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-login.c:458
|
#: ../vn/vn-login.c:478
|
||||||
msgid "The application identifier"
|
msgid "The application identifier"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -722,7 +700,7 @@ msgstr ""
|
||||||
msgid "Whether the field value is user editable"
|
msgid "Whether the field value is user editable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-field.c:561
|
#: ../vn/vn-field.c:561 ../vn/vn-column.c:409
|
||||||
msgid "Whether the field value can be of type GVN_TYPE_NULL"
|
msgid "Whether the field value can be of type GVN_TYPE_NULL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -736,31 +714,27 @@ msgstr ""
|
||||||
msgid "The number of decimal places to display."
|
msgid "The number of decimal places to display."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:328 ../vn/column/vn-column-combo.c:269
|
#: ../vn/field/vn-combo.c:286 ../vn/column/vn-column-combo.c:300
|
||||||
msgid "Index column"
|
msgid "Index column"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:329 ../vn/column/vn-column-combo.c:270
|
#: ../vn/field/vn-combo.c:287 ../vn/column/vn-column-combo.c:301
|
||||||
msgid "The column index of the model"
|
msgid "The column index of the model"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:335 ../vn/column/vn-column-combo.c:276
|
#: ../vn/field/vn-combo.c:293 ../vn/column/vn-column-combo.c:307
|
||||||
msgid "Show column"
|
msgid "Show column"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:336 ../vn/column/vn-column-combo.c:277
|
#: ../vn/field/vn-combo.c:294 ../vn/column/vn-column-combo.c:308
|
||||||
msgid "The column of the model shown by combo"
|
msgid "The column of the model shown by combo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-combo.c:343 ../vn/column/vn-column-combo.c:284
|
#: ../vn/field/vn-completion.c:325
|
||||||
msgid "The model from which the combo takes the values shown in the list"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../vn/field/vn-completion.c:322
|
|
||||||
msgid "Field"
|
msgid "Field"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-completion.c:323
|
#: ../vn/field/vn-completion.c:326
|
||||||
msgid "The name of the field used for the search"
|
msgid "The name of the field used for the search"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -777,49 +751,49 @@ msgstr ""
|
||||||
msgid "Select the image"
|
msgid "Select the image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:69
|
#: ../vn/field/vn-http-image.c:70
|
||||||
msgid "Undefined error"
|
msgid "Undefined error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:145
|
#: ../vn/field/vn-http-image.c:142
|
||||||
msgid "File loader already set"
|
msgid "File loader already set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Se usará para subir imagenes y cambiar nombres, o abrir un menu contextual
|
#. Se usará para subir imagenes y cambiar nombres, o abrir un menu contextual
|
||||||
#. g_signal_connect (obj, "event", G_CALLBACK (vn_http_image_cb_event), obj);
|
#. g_signal_connect (obj, "event", G_CALLBACK (vn_http_image_cb_event), obj);
|
||||||
#: ../vn/field/vn-http-image.c:184
|
#: ../vn/field/vn-http-image.c:181
|
||||||
msgid "No image set"
|
msgid "No image set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:210
|
#: ../vn/field/vn-http-image.c:207
|
||||||
msgid "File loader"
|
msgid "File loader"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:211
|
#: ../vn/field/vn-http-image.c:208
|
||||||
msgid "A DbFileLoader, used to download the files"
|
msgid "A DbFileLoader, used to download the files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:218
|
#: ../vn/field/vn-http-image.c:215
|
||||||
msgid "File path"
|
msgid "File path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:219
|
#: ../vn/field/vn-http-image.c:216
|
||||||
msgid "The relative path to the image from file loader path"
|
msgid "The relative path to the image from file loader path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:226
|
#: ../vn/field/vn-http-image.c:223
|
||||||
msgid "Image bytes"
|
msgid "Image bytes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/field/vn-http-image.c:227
|
#: ../vn/field/vn-http-image.c:224
|
||||||
msgid "A GBytes structure with the image data"
|
msgid "A GBytes structure with the image data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-column.c:341
|
#: ../vn/vn-column.c:388
|
||||||
msgid "The column index in the model"
|
msgid "The column index in the model"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/vn-column.c:355
|
#: ../vn/vn-column.c:402
|
||||||
msgid "Whether the column values are editable"
|
msgid "Whether the column values are editable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -831,25 +805,25 @@ msgstr ""
|
||||||
msgid "The acceleration rate when you hold down a button."
|
msgid "The acceleration rate when you hold down a button."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:484
|
#: ../vn/column/vn-column-image.c:486
|
||||||
msgid "Base path from the host where the images will be downloaded"
|
msgid "Base path from the host where the images will be downloaded"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:491
|
#: ../vn/column/vn-column-image.c:493
|
||||||
msgid "Tooltip path"
|
msgid "Tooltip path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:492
|
#: ../vn/column/vn-column-image.c:494
|
||||||
msgid ""
|
msgid ""
|
||||||
"Prefix for the path of the images to be shown in the tooltip. Starting after "
|
"Prefix for the path of the images to be shown in the tooltip. Starting after "
|
||||||
"the path of the column and appending the name on each cell"
|
"the path of the column and appending the name on each cell"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:501
|
#: ../vn/column/vn-column-image.c:503
|
||||||
msgid "Tooltip size"
|
msgid "Tooltip size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/column/vn-column-image.c:502
|
#: ../vn/column/vn-column-image.c:504
|
||||||
msgid ""
|
msgid ""
|
||||||
"Size of the bigger side of the tooltip images, the another side will be "
|
"Size of the bigger side of the tooltip images, the another side will be "
|
||||||
"scaled accordingly and smaller images won't be scaled"
|
"scaled accordingly and smaller images won't be scaled"
|
||||||
|
@ -889,7 +863,7 @@ msgstr ""
|
||||||
msgid "User:"
|
msgid "User:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../vn/gui/login.glade.h:9 ../module/data/users.glade.h:8
|
#: ../vn/gui/login.glade.h:9 ../module/data/users.glade.h:6
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -989,86 +963,174 @@ msgctxt "View menu option"
|
||||||
msgid "Tool_bar"
|
msgid "Tool_bar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:121
|
||||||
|
msgid "Create and set a model for a DbModelHolder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:153
|
||||||
|
msgid "Model configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:153
|
||||||
|
msgid "DbModel properties configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:238
|
||||||
|
msgid "Select a DbModel for the property"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:259 ../glade/glade-db-model.c:306
|
||||||
|
msgid "New Model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-model.c:301
|
||||||
|
msgid "Edit Model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-sql.c:27
|
||||||
|
msgid "New SQL statement"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-sql.c:59
|
||||||
|
msgid "SQL Editor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../glade/glade-db-sql.c:174
|
||||||
|
msgid "Open the SQL Editor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:1
|
#: ../module/data/users.glade.h:1
|
||||||
msgid "User name:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:2
|
|
||||||
msgid "<b>Search</b>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:3
|
|
||||||
msgid "Identifier"
|
msgid "Identifier"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:5
|
#: ../module/data/users.glade.h:3
|
||||||
msgid "MySQL User"
|
msgid "MySQL User"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:6
|
#: ../module/data/users.glade.h:4
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:7
|
#: ../module/data/users.glade.h:5
|
||||||
msgid "Name:"
|
msgid "Name:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:9
|
#: ../module/data/users.glade.h:7
|
||||||
msgid "MySQL user:"
|
msgid "MySQL user:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:10
|
#: ../module/data/users.glade.h:8
|
||||||
msgid "Enabled:"
|
msgid "Enabled:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:11
|
#: ../module/data/users.glade.h:9
|
||||||
msgid "Identifier:"
|
msgid "Identifier:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:12
|
#: ../module/data/users.glade.h:10
|
||||||
msgid "UID:"
|
msgid "UID:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:13
|
#: ../module/data/users.glade.h:11
|
||||||
msgid "Main group:"
|
msgid "Main group:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:14
|
#: ../module/data/users.glade.h:12
|
||||||
msgid "Last change:"
|
msgid "Last change:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:15
|
#: ../module/data/users.glade.h:13
|
||||||
msgid "Expires:"
|
msgid "Expires:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:16
|
#: ../module/data/users.glade.h:14
|
||||||
msgid "Account"
|
msgid "Account"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:17
|
#: ../module/data/users.glade.h:15
|
||||||
msgid "Alias"
|
msgid "Alias"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:18
|
#: ../module/data/users.glade.h:16
|
||||||
msgid "Mail alias"
|
msgid "Mail alias"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:19
|
#: ../module/data/users.glade.h:17
|
||||||
msgid "Extension:"
|
msgid "Extension:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:20
|
#: ../module/data/users.glade.h:18
|
||||||
msgid "Secret:"
|
msgid "Secret:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:21
|
#: ../module/data/users.glade.h:19
|
||||||
msgid "Call group:"
|
msgid "Call group:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:22
|
#: ../module/data/users.glade.h:20
|
||||||
msgid "SIP"
|
msgid "SIP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../module/data/users.glade.h:23
|
#: ../module/data/users.glade.h:21
|
||||||
|
msgid "Change password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/users.glade.h:22
|
||||||
msgid "Repeat password:"
|
msgid "Repeat password:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/src/vn-users.c:60
|
||||||
|
msgid "The password is too weak."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/src/vn-users.c:75
|
||||||
|
msgid "The password can't be empty."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/src/vn-users.c:77
|
||||||
|
msgid "Passwords do not match."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:1
|
||||||
|
msgid "Send"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:2
|
||||||
|
msgid "Send the current query"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:3
|
||||||
|
msgid "Clean"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:4
|
||||||
|
msgid "Clean the messages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:5
|
||||||
|
msgid "_Consulter"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:6
|
||||||
|
msgid "Query:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:7
|
||||||
|
msgid "Immediate changes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:8
|
||||||
|
msgid "Start"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:9
|
||||||
|
msgid "Commit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/data/consulter.glade.h:10
|
||||||
|
msgid "Rollback"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../module/src/vn-consulter.c:199
|
||||||
|
msgid "Type or select a query"
|
||||||
|
msgstr ""
|
||||||
|
|
|
@ -5,23 +5,15 @@ SUBDIRS = parser
|
||||||
sql_lib_LTLIBRARIES = libsql.la
|
sql_lib_LTLIBRARIES = libsql.la
|
||||||
sql_include_HEADERS = \
|
sql_include_HEADERS = \
|
||||||
sql.h \
|
sql.h \
|
||||||
sql-object.h \
|
|
||||||
sql-param-object.h \
|
|
||||||
sql-param-list.h \
|
|
||||||
sql-holder.h \
|
|
||||||
sql-list.h \
|
|
||||||
sql-set.h \
|
|
||||||
sql-multi-stmt.h \
|
sql-multi-stmt.h \
|
||||||
sql-string.h \
|
sql-string.h \
|
||||||
sql-target.h \
|
sql-target.h \
|
||||||
sql-expr.h \
|
sql-expr.h \
|
||||||
sql-insert.h \
|
sql-insert.h \
|
||||||
|
sql-object.h \
|
||||||
sql-select.h \
|
sql-select.h \
|
||||||
sql-select-field.h \
|
|
||||||
sql-select-order.h \
|
|
||||||
sql-subquery.h \
|
sql-subquery.h \
|
||||||
sql-update.h \
|
sql-update.h \
|
||||||
sql-update-set.h \
|
|
||||||
sql-delete.h \
|
sql-delete.h \
|
||||||
sql-field.h \
|
sql-field.h \
|
||||||
sql-join.h \
|
sql-join.h \
|
||||||
|
@ -42,20 +34,12 @@ libsql_la_LIBADD = \
|
||||||
$(top_builddir)/gvn/libgvn.la
|
$(top_builddir)/gvn/libgvn.la
|
||||||
libsql_la_SOURCES = \
|
libsql_la_SOURCES = \
|
||||||
$(sql_include_HEADERS) \
|
$(sql_include_HEADERS) \
|
||||||
sql-object.c \
|
|
||||||
sql-param-object.c \
|
|
||||||
sql-param-list.c \
|
|
||||||
sql-holder.c \
|
|
||||||
sql-list.c \
|
|
||||||
sql-set.c \
|
|
||||||
sql-expr.c \
|
sql-expr.c \
|
||||||
sql-insert.c \
|
sql-insert.c \
|
||||||
|
sql-object.c \
|
||||||
sql-select.c \
|
sql-select.c \
|
||||||
sql-select-field.c \
|
|
||||||
sql-select-order.c \
|
|
||||||
sql-subquery.c \
|
sql-subquery.c \
|
||||||
sql-update.c \
|
sql-update.c \
|
||||||
sql-update-set.c \
|
|
||||||
sql-delete.c \
|
sql-delete.c \
|
||||||
sql-field.c \
|
sql-field.c \
|
||||||
sql-join.c \
|
sql-join.c \
|
||||||
|
@ -69,7 +53,7 @@ libsql_la_SOURCES = \
|
||||||
sql-string.c \
|
sql-string.c \
|
||||||
sql-target.c \
|
sql-target.c \
|
||||||
sql-render.c \
|
sql-render.c \
|
||||||
$(top_builddir)/sql/sql-parser.c
|
$(top_srcdir)/sql/sql-parser.c
|
||||||
|
|
||||||
pkgconfig_DATA = sql.pc
|
pkgconfig_DATA = sql.pc
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
include $(top_srcdir)/Makefile.decl
|
include $(top_srcdir)/Makefile.decl
|
||||||
|
|
||||||
PARSER = $(top_builddir)/sql/sql-parser.c
|
PARSER = $(top_srcdir)/sql/sql-parser.c
|
||||||
|
|
||||||
DIR = $(top_srcdir)/sql/parser
|
DIR = $(top_srcdir)/sql/parser
|
||||||
TMPL = $(DIR)/lempar-tmpl.c
|
TMPL = $(DIR)/lempar-tmpl.c
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -251,7 +251,7 @@ SqlObject * sql_parser_parse (gchar * sql)
|
||||||
if (state->error)
|
if (state->error)
|
||||||
{
|
{
|
||||||
if (state->object && G_IS_OBJECT (state->object))
|
if (state->object && G_IS_OBJECT (state->object))
|
||||||
g_object_unref (g_object_ref_sink (state->object));
|
g_object_unref (state->object);
|
||||||
object = NULL;
|
object = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
**/
|
**/
|
||||||
G_DEFINE_TYPE (SqlDelete, sql_delete, SQL_TYPE_DML);
|
G_DEFINE_TYPE (SqlDelete, sql_delete, SQL_TYPE_DML);
|
||||||
|
|
||||||
SqlObject * sql_delete_new ()
|
SqlDelete * sql_delete_new ()
|
||||||
{
|
{
|
||||||
return g_object_new (SQL_TYPE_DELETE, NULL);
|
return g_object_new (SQL_TYPE_DELETE, NULL);
|
||||||
}
|
}
|
||||||
|
@ -36,75 +36,40 @@ SqlObject * sql_delete_new ()
|
||||||
static void sql_delete_render (SqlDelete * obj, SqlRender * render)
|
static void sql_delete_render (SqlDelete * obj, SqlRender * render)
|
||||||
{
|
{
|
||||||
sql_render_add_token (render, "DELETE");
|
sql_render_add_token (render, "DELETE");
|
||||||
sql_render_add_list (render, TRUE, NULL, obj->tables, ",");
|
sql_render_add_object (render, obj->table);
|
||||||
|
|
||||||
if (SQL_DML (obj)->targets)
|
if (SQL_DML (obj)->target)
|
||||||
{
|
{
|
||||||
sql_render_add_list (render, TRUE, "FROM", SQL_DML (obj)->targets, ",");
|
sql_render_add_list (render, T, "FROM", SQL_DML (obj)->target, ",");
|
||||||
sql_render_add_item (render, FALSE, "WHERE", SQL_DML (obj)->where);
|
sql_render_add_item (render, F, "WHERE", SQL_DML (obj)->where);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
|
||||||
enum
|
void sql_delete_add_table (SqlDelete * obj, SqlTable * table)
|
||||||
{
|
{
|
||||||
PROP_TABLES = 1
|
g_return_if_fail (SQL_IS_DELETE (obj));
|
||||||
};
|
g_return_if_fail (SQL_IS_TABLE (table));
|
||||||
|
|
||||||
static void sql_delete_set_property (SqlDelete * obj, guint id,
|
obj->table = g_slist_append (obj->table, g_object_ref_sink (table));
|
||||||
const GValue * value, GParamSpec * pspec)
|
|
||||||
{
|
|
||||||
switch (id)
|
|
||||||
{
|
|
||||||
case PROP_TABLES:
|
|
||||||
sql_object_remove (obj, obj->tables);
|
|
||||||
obj->tables = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sql_delete_get_property (SqlDelete * obj, guint id,
|
|
||||||
GValue * value, GParamSpec * pspec)
|
|
||||||
{
|
|
||||||
switch (id)
|
|
||||||
{
|
|
||||||
case PROP_TABLES:
|
|
||||||
g_value_set_object (value, obj->tables);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
||||||
|
|
||||||
static void sql_delete_init (SqlDelete * obj)
|
static void sql_delete_init (SqlDelete * obj)
|
||||||
{
|
{
|
||||||
obj->tables = NULL;
|
obj->table = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_delete_finalize (SqlDelete * obj)
|
static void sql_delete_finalize (SqlDelete * obj)
|
||||||
{
|
{
|
||||||
sql_object_remove (obj, obj->tables);
|
g_slist_free_full (obj->table, g_object_unref);
|
||||||
G_OBJECT_CLASS (sql_delete_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_delete_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_delete_class_init (SqlDeleteClass * klass)
|
static void sql_delete_class_init (SqlDeleteClass * klass)
|
||||||
{
|
{
|
||||||
GObjectClass * k = G_OBJECT_CLASS (klass);
|
G_OBJECT_CLASS (klass)->finalize = (GObjectFinalizeFunc) sql_delete_finalize;
|
||||||
k->finalize = (GObjectFinalizeFunc) sql_delete_finalize;
|
|
||||||
k->set_property = (GObjectSetPropertyFunc) sql_delete_set_property;
|
|
||||||
k->get_property = (GObjectGetPropertyFunc) sql_delete_get_property;
|
|
||||||
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_delete_render;
|
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_delete_render;
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_TABLES,
|
|
||||||
sql_param_list ("tables"
|
|
||||||
,"Tables"
|
|
||||||
,"A list of tables"
|
|
||||||
,SQL_TYPE_TABLE
|
|
||||||
,G_PARAM_READWRITE | G_PARAM_CONSTRUCT
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ typedef struct _SqlDeleteClass SqlDeleteClass;
|
||||||
struct _SqlDelete
|
struct _SqlDelete
|
||||||
{
|
{
|
||||||
SqlDml parent;
|
SqlDml parent;
|
||||||
SqlList * tables;
|
GSList * table;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _SqlDeleteClass
|
struct _SqlDeleteClass
|
||||||
|
@ -45,6 +45,7 @@ struct _SqlDeleteClass
|
||||||
};
|
};
|
||||||
|
|
||||||
GType sql_delete_get_type ();
|
GType sql_delete_get_type ();
|
||||||
SqlObject * sql_delete_new ();
|
SqlDelete * sql_delete_new ();
|
||||||
|
void sql_delete_add_table (SqlDelete * obj, SqlTable * table);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -28,21 +28,42 @@ G_DEFINE_ABSTRACT_TYPE (SqlDml, sql_dml, SQL_TYPE_STMT);
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sql_dml_add_target:
|
||||||
|
* @obj: a #SqlDml
|
||||||
|
* @target: a #SqlTarget
|
||||||
|
*
|
||||||
|
* Add a target to the DML statement.
|
||||||
|
**/
|
||||||
|
void sql_dml_add_target (SqlDml * obj, SqlTarget * target)
|
||||||
|
{
|
||||||
|
g_return_if_fail (SQL_IS_DML (obj));
|
||||||
|
g_return_if_fail (SQL_IS_TARGET (target));
|
||||||
|
|
||||||
|
obj->target = g_slist_append (obj->target, g_object_ref_sink (target));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sql_dml_set_where:
|
||||||
|
* @obj: a #SqlDml
|
||||||
|
* @expr: a #SqlExpr
|
||||||
|
*
|
||||||
|
* Sets the where expression of an DML statement.
|
||||||
|
**/
|
||||||
void sql_dml_set_where (SqlDml * obj, SqlExpr * where)
|
void sql_dml_set_where (SqlDml * obj, SqlExpr * where)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_DML (obj));
|
g_return_if_fail (SQL_IS_DML (obj));
|
||||||
g_return_if_fail (SQL_IS_EXPR (where) || SQL_IS_HOLDER (where) || !where);
|
g_return_if_fail (SQL_IS_EXPR (where));
|
||||||
|
|
||||||
sql_object_remove (obj, obj->where);
|
g_clear_object (&obj->where);
|
||||||
obj->where = sql_object_add (obj, where);
|
obj->where = g_object_ref_sink (where);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_TARGETS = 1
|
PROP_WHERE = 1
|
||||||
,PROP_WHERE
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void sql_dml_set_property (SqlDml * obj, guint id,
|
static void sql_dml_set_property (SqlDml * obj, guint id,
|
||||||
|
@ -50,10 +71,6 @@ static void sql_dml_set_property (SqlDml * obj, guint id,
|
||||||
{
|
{
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
case PROP_TARGETS:
|
|
||||||
sql_object_remove (obj, obj->targets);
|
|
||||||
obj->targets = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
case PROP_WHERE:
|
case PROP_WHERE:
|
||||||
sql_dml_set_where (obj, g_value_get_object (value));
|
sql_dml_set_where (obj, g_value_get_object (value));
|
||||||
break;
|
break;
|
||||||
|
@ -67,9 +84,6 @@ static void sql_dml_get_property (SqlDml * obj, guint id,
|
||||||
{
|
{
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
case PROP_TARGETS:
|
|
||||||
g_value_set_object (value, obj->targets);
|
|
||||||
break;
|
|
||||||
case PROP_WHERE:
|
case PROP_WHERE:
|
||||||
g_value_set_object (value, obj->where);
|
g_value_set_object (value, obj->where);
|
||||||
break;
|
break;
|
||||||
|
@ -80,37 +94,30 @@ static void sql_dml_get_property (SqlDml * obj, guint id,
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
||||||
|
|
||||||
static void sql_dml_init (SqlDml * obj)
|
|
||||||
{
|
|
||||||
obj->targets = NULL;
|
|
||||||
obj->where = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sql_dml_finalize (SqlDml * obj)
|
static void sql_dml_finalize (SqlDml * obj)
|
||||||
{
|
{
|
||||||
sql_object_remove (obj, obj->targets);
|
g_clear_object (&obj->where);
|
||||||
sql_object_remove (obj, obj->where);
|
g_slist_free_full (obj->target, g_object_unref);
|
||||||
G_OBJECT_CLASS (sql_dml_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_dml_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_dml_class_init (SqlDmlClass * klass)
|
static void sql_dml_init (SqlDml * obj)
|
||||||
{
|
{
|
||||||
GObjectClass * k = G_OBJECT_CLASS (klass);
|
obj->target = NULL;
|
||||||
k->finalize = (GObjectFinalizeFunc) sql_dml_finalize;
|
obj->where = NULL;
|
||||||
k->set_property = (GObjectSetPropertyFunc) sql_dml_set_property;
|
}
|
||||||
k->get_property = (GObjectGetPropertyFunc) sql_dml_get_property;
|
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_TARGETS,
|
static void sql_dml_class_init (SqlDmlClass * k)
|
||||||
sql_param_list ("targets"
|
{
|
||||||
,"Targets"
|
GObjectClass * klass = G_OBJECT_CLASS (k);
|
||||||
,"A list of targets"
|
klass->finalize = (GObjectFinalizeFunc) sql_dml_finalize;
|
||||||
,SQL_TYPE_TARGET
|
klass->set_property = (GObjectSetPropertyFunc) sql_dml_set_property;
|
||||||
,G_PARAM_READWRITE | G_PARAM_CONSTRUCT
|
klass->get_property = (GObjectGetPropertyFunc) sql_dml_get_property;
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_WHERE,
|
g_object_class_install_property (klass, PROP_WHERE,
|
||||||
sql_param_object ("where"
|
g_param_spec_object ("where"
|
||||||
,"Where"
|
,"Where"
|
||||||
,"The WHERE section of an statement"
|
,"The expression used to filter rows, it's the WHERE section of an statement"
|
||||||
,SQL_TYPE_EXPR
|
,SQL_TYPE_EXPR
|
||||||
,G_PARAM_READWRITE
|
,G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
|
|
|
@ -37,7 +37,7 @@ typedef struct _SqlDmlClass SqlDmlClass;
|
||||||
struct _SqlDml
|
struct _SqlDml
|
||||||
{
|
{
|
||||||
SqlStmt parent;
|
SqlStmt parent;
|
||||||
SqlList * targets;
|
GSList * target;
|
||||||
SqlExpr * where;
|
SqlExpr * where;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@ struct _SqlDmlClass
|
||||||
};
|
};
|
||||||
|
|
||||||
GType sql_dml_get_type ();
|
GType sql_dml_get_type ();
|
||||||
|
void sql_dml_add_target (SqlDml * obj, SqlTarget * target);
|
||||||
void sql_dml_set_where (SqlDml * obj, SqlExpr * expr);
|
void sql_dml_set_where (SqlDml * obj, SqlExpr * expr);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -28,6 +28,11 @@
|
||||||
**/
|
**/
|
||||||
G_DEFINE_ABSTRACT_TYPE (SqlExpr, sql_expr, SQL_TYPE_OBJECT);
|
G_DEFINE_ABSTRACT_TYPE (SqlExpr, sql_expr, SQL_TYPE_OBJECT);
|
||||||
|
|
||||||
|
SqlExpr * sql_expr_new ()
|
||||||
|
{
|
||||||
|
return g_object_new (SQL_TYPE_EXPR, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
||||||
|
|
||||||
static void sql_expr_init (SqlExpr * obj) {}
|
static void sql_expr_init (SqlExpr * obj) {}
|
||||||
|
|
|
@ -36,14 +36,13 @@ G_DEFINE_TYPE (SqlField, sql_field, SQL_TYPE_EXPR);
|
||||||
*
|
*
|
||||||
* Return value: an #SqlExpr
|
* Return value: an #SqlExpr
|
||||||
*/
|
*/
|
||||||
SqlObject * sql_field_new (const gchar * name, const gchar * target, const gchar * schema)
|
SqlExpr * sql_field_new (const gchar * name, const gchar * target, const gchar * schema)
|
||||||
{
|
{
|
||||||
return g_object_new (SQL_TYPE_FIELD
|
return g_object_new (SQL_TYPE_FIELD
|
||||||
,"name", name
|
,"name", name
|
||||||
,"target", target
|
,"target", target
|
||||||
,"schema", schema
|
,"schema", schema
|
||||||
,NULL
|
,NULL);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
||||||
|
@ -97,7 +96,8 @@ static void sql_field_set_property (SqlField * obj, guint id,
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
case PROP_NAME:
|
case PROP_NAME:
|
||||||
sql_field_set_name (obj, g_value_get_string (value));
|
g_free (obj->name);
|
||||||
|
obj->name = g_value_dup_string (value);
|
||||||
break;
|
break;
|
||||||
case PROP_TARGET:
|
case PROP_TARGET:
|
||||||
g_free (obj->target);
|
g_free (obj->target);
|
||||||
|
@ -145,6 +145,7 @@ static void sql_field_finalize (SqlField * obj)
|
||||||
g_free (obj->name);
|
g_free (obj->name);
|
||||||
g_free (obj->target);
|
g_free (obj->target);
|
||||||
g_free (obj->schema);
|
g_free (obj->schema);
|
||||||
|
|
||||||
G_OBJECT_CLASS (sql_field_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_field_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ struct _SqlFieldClass
|
||||||
};
|
};
|
||||||
|
|
||||||
GType sql_field_get_type ();
|
GType sql_field_get_type ();
|
||||||
SqlObject * sql_field_new (const gchar * name
|
SqlExpr * sql_field_new (const gchar * name
|
||||||
,const gchar * target
|
,const gchar * target
|
||||||
,const gchar * schema);
|
,const gchar * schema);
|
||||||
void sql_field_set_name (SqlField * obj, const gchar * name);
|
void sql_field_set_name (SqlField * obj, const gchar * name);
|
||||||
|
|
|
@ -46,18 +46,27 @@ static void sql_function_render (SqlFunction * obj, SqlRender * render)
|
||||||
if (obj->name)
|
if (obj->name)
|
||||||
{
|
{
|
||||||
sql_render_append (render, "(");
|
sql_render_append (render, "(");
|
||||||
sql_render_add_list (render, FALSE, NULL, obj->params, ",");
|
sql_render_add_list (render, F, NULL, obj->param, ",");
|
||||||
sql_render_append (render, ")");
|
sql_render_append (render, ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
|
||||||
|
void sql_function_add_param (SqlFunction * obj, SqlExpr * param)
|
||||||
|
{
|
||||||
|
g_return_if_fail (SQL_IS_FUNCTION (obj));
|
||||||
|
g_return_if_fail (SQL_IS_EXPR (param));
|
||||||
|
|
||||||
|
obj->param = g_slist_append (obj->param, g_object_ref_sink (param));
|
||||||
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_NAME = 1
|
PROP_NAME = 1
|
||||||
,PROP_SCHEMA
|
,PROP_SCHEMA
|
||||||
,PROP_PARAMS
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void sql_function_set_property (SqlFunction * obj, guint id,
|
static void sql_function_set_property (SqlFunction * obj, guint id,
|
||||||
|
@ -73,10 +82,6 @@ static void sql_function_set_property (SqlFunction * obj, guint id,
|
||||||
g_free (obj->schema);
|
g_free (obj->schema);
|
||||||
obj->schema = g_value_dup_string (value);
|
obj->schema = g_value_dup_string (value);
|
||||||
break;
|
break;
|
||||||
case PROP_PARAMS:
|
|
||||||
sql_object_remove (obj, obj->params);
|
|
||||||
obj->params = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -93,9 +98,6 @@ static void sql_function_get_property (SqlFunction * obj, guint id,
|
||||||
case PROP_SCHEMA:
|
case PROP_SCHEMA:
|
||||||
g_value_set_string (value, obj->schema);
|
g_value_set_string (value, obj->schema);
|
||||||
break;
|
break;
|
||||||
case PROP_PARAMS:
|
|
||||||
g_value_set_object (value, obj->params);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -107,14 +109,14 @@ static void sql_function_init (SqlFunction * obj)
|
||||||
{
|
{
|
||||||
obj->name = NULL;
|
obj->name = NULL;
|
||||||
obj->schema = NULL;
|
obj->schema = NULL;
|
||||||
obj->params = NULL;
|
obj->param = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_function_finalize (SqlFunction * obj)
|
static void sql_function_finalize (SqlFunction * obj)
|
||||||
{
|
{
|
||||||
g_free (obj->name);
|
g_free (obj->name);
|
||||||
g_free (obj->schema);
|
g_free (obj->schema);
|
||||||
sql_object_remove (obj, obj->params);
|
g_slist_free_full (obj->param, g_object_unref);
|
||||||
G_OBJECT_CLASS (sql_function_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_function_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,6 +135,7 @@ static void sql_function_class_init (SqlFunctionClass * klass)
|
||||||
,NULL
|
,NULL
|
||||||
,G_PARAM_READWRITE
|
,G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_SCHEMA,
|
g_object_class_install_property (k, PROP_SCHEMA,
|
||||||
g_param_spec_string ("schema"
|
g_param_spec_string ("schema"
|
||||||
,"Schema"
|
,"Schema"
|
||||||
|
@ -140,11 +143,4 @@ static void sql_function_class_init (SqlFunctionClass * klass)
|
||||||
,NULL
|
,NULL
|
||||||
,G_PARAM_READWRITE
|
,G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_PARAMS,
|
|
||||||
sql_param_list ("params"
|
|
||||||
,"Parameters"
|
|
||||||
,"The function parameters"
|
|
||||||
,SQL_TYPE_EXPR
|
|
||||||
,G_PARAM_READWRITE | G_PARAM_CONSTRUCT
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ struct _SqlFunction
|
||||||
SqlExpr parent;
|
SqlExpr parent;
|
||||||
gchar * schema;
|
gchar * schema;
|
||||||
gchar * name;
|
gchar * name;
|
||||||
SqlList * params; // List of SqlExpr
|
GSList * param; // Parameters for the function, list of SqlExpr
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _SqlFunctionClass
|
struct _SqlFunctionClass
|
||||||
|
@ -48,5 +48,6 @@ struct _SqlFunctionClass
|
||||||
|
|
||||||
GType sql_function_get_type ();
|
GType sql_function_get_type ();
|
||||||
SqlFunction * sql_function_new (const gchar * name, const gchar * schema);
|
SqlFunction * sql_function_new (const gchar * name, const gchar * schema);
|
||||||
|
void sql_function_add_param (SqlFunction * obj, SqlExpr * param);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
124
sql/sql-insert.c
124
sql/sql-insert.c
|
@ -26,27 +26,51 @@
|
||||||
**/
|
**/
|
||||||
G_DEFINE_TYPE (SqlInsert, sql_insert, SQL_TYPE_STMT);
|
G_DEFINE_TYPE (SqlInsert, sql_insert, SQL_TYPE_STMT);
|
||||||
|
|
||||||
SqlObject * sql_insert_new ()
|
SqlInsert * sql_insert_new ()
|
||||||
{
|
{
|
||||||
return g_object_new (SQL_TYPE_INSERT, NULL);
|
return g_object_new (SQL_TYPE_INSERT, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
||||||
|
|
||||||
|
static void sql_insert_expr_free (SqlExpr * expr)
|
||||||
|
{
|
||||||
|
if (expr)
|
||||||
|
g_object_unref (expr);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sql_insert_render_expr (SqlExpr * obj, SqlRender * render)
|
||||||
|
{
|
||||||
|
if (obj)
|
||||||
|
sql_render_add_object (render, obj);
|
||||||
|
else
|
||||||
|
sql_render_add_token (render, "DEFAULT");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sql_insert_render_row (GSList * obj, SqlRender * render)
|
||||||
|
{
|
||||||
|
sql_render_add_espace (render);
|
||||||
|
sql_render_append (render, "(");
|
||||||
|
sql_render_add_list_with_func (render, T, NULL, obj, ",",
|
||||||
|
(SqlRenderFunc) sql_insert_render_expr);
|
||||||
|
sql_render_append (render, ")");
|
||||||
|
}
|
||||||
|
|
||||||
static void sql_insert_render (SqlInsert * obj, SqlRender * render)
|
static void sql_insert_render (SqlInsert * obj, SqlRender * render)
|
||||||
{
|
{
|
||||||
sql_render_add_item (render, TRUE, "INSERT INTO", obj->table);
|
sql_render_add_item (render, T, "INSERT INTO", obj->table);
|
||||||
|
|
||||||
if (obj->table)
|
if (obj->table)
|
||||||
{
|
{
|
||||||
if (obj->values)
|
if (obj->expr)
|
||||||
{
|
{
|
||||||
sql_render_add_espace (render);
|
sql_render_add_espace (render);
|
||||||
sql_render_append (render, "(");
|
sql_render_append (render, "(");
|
||||||
sql_render_add_list (render, FALSE, NULL, obj->fields, ",");
|
sql_render_add_list (render, F, NULL, obj->field, ",");
|
||||||
sql_render_append (render, ")");
|
sql_render_append (render, ")");
|
||||||
sql_render_add_token (render, "VALUES");
|
sql_render_add_token (render, "VALUES");
|
||||||
sql_render_add_list (render, FALSE, NULL, obj->values, ",");
|
sql_render_add_list_with_func (render, F, NULL, obj->expr, ",",
|
||||||
|
(SqlRenderFunc) sql_insert_render_row);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
sql_render_add_token (render, "DEFAULT VALUES");
|
sql_render_add_token (render, "DEFAULT VALUES");
|
||||||
|
@ -55,19 +79,56 @@ static void sql_insert_render (SqlInsert * obj, SqlRender * render)
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
|
||||||
void sql_insert_set_table_from_name (SqlInsert * obj, const gchar * table)
|
void sql_insert_set_table (SqlInsert * obj, SqlTable * table)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_INSERT (obj));
|
g_return_if_fail (SQL_IS_INSERT (obj));
|
||||||
g_return_if_fail (table);
|
g_return_if_fail (SQL_IS_TABLE (table));
|
||||||
|
|
||||||
sql_object_remove (obj, obj->table);
|
g_clear_object (&obj->table);
|
||||||
obj->table = sql_object_add (obj, sql_table_new (table));
|
obj->table = g_object_ref_sink (table);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sql_insert_add_row (SqlInsert * obj)
|
||||||
|
{
|
||||||
|
g_return_if_fail (SQL_IS_INSERT (obj));
|
||||||
|
|
||||||
|
obj->iter = g_slist_alloc ();
|
||||||
|
obj->expr = g_slist_concat (obj->expr, obj->iter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sql_insert_add_field (SqlInsert * obj, SqlField * field)
|
||||||
|
{
|
||||||
|
g_return_if_fail (SQL_IS_INSERT (obj));
|
||||||
|
g_return_if_fail (SQL_IS_FIELD (field));
|
||||||
|
|
||||||
|
obj->field = g_slist_append (obj->field, g_object_ref_sink (field));
|
||||||
}
|
}
|
||||||
|
|
||||||
void sql_insert_add_expr (SqlInsert * obj, SqlExpr * expr)
|
void sql_insert_add_expr (SqlInsert * obj, SqlExpr * expr)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_INSERT (obj));
|
g_return_if_fail (SQL_IS_INSERT (obj));
|
||||||
g_return_if_fail (SQL_IS_EXPR (expr) || !expr);
|
g_return_if_fail (SQL_IS_EXPR (expr) || !expr);
|
||||||
|
|
||||||
|
if (!obj->iter)
|
||||||
|
sql_insert_add_row (obj);
|
||||||
|
if (expr)
|
||||||
|
g_object_ref_sink (expr);
|
||||||
|
|
||||||
|
obj->iter->data = g_slist_append (obj->iter->data, expr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sql_insert_clean (SqlInsert * obj)
|
||||||
|
{
|
||||||
|
GSList * n;
|
||||||
|
|
||||||
|
g_return_if_fail (SQL_IS_INSERT (obj));
|
||||||
|
|
||||||
|
g_slist_free_full (obj->field, g_object_unref);
|
||||||
|
|
||||||
|
for (n = obj->expr; n; n = n->next)
|
||||||
|
g_slist_free_full (n->data, (GDestroyNotify) sql_insert_expr_free);
|
||||||
|
|
||||||
|
g_slist_free (obj->expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
||||||
|
@ -75,8 +136,6 @@ void sql_insert_add_expr (SqlInsert * obj, SqlExpr * expr)
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_TABLE = 1
|
PROP_TABLE = 1
|
||||||
,PROP_FIELDS
|
|
||||||
,PROP_VALUES
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void sql_insert_set_property (SqlInsert * obj, guint id,
|
static void sql_insert_set_property (SqlInsert * obj, guint id,
|
||||||
|
@ -85,16 +144,7 @@ static void sql_insert_set_property (SqlInsert * obj, guint id,
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
case PROP_TABLE:
|
case PROP_TABLE:
|
||||||
sql_object_remove (obj, obj->table);
|
sql_insert_set_table (obj, g_value_get_object (value));
|
||||||
obj->table = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
case PROP_FIELDS:
|
|
||||||
sql_object_remove (obj, obj->fields);
|
|
||||||
obj->fields = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
case PROP_VALUES:
|
|
||||||
sql_object_remove (obj, obj->values);
|
|
||||||
obj->values = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
|
@ -109,12 +159,6 @@ static void sql_insert_get_property (SqlInsert * obj, guint id,
|
||||||
case PROP_TABLE:
|
case PROP_TABLE:
|
||||||
g_value_set_object (value, obj->table);
|
g_value_set_object (value, obj->table);
|
||||||
break;
|
break;
|
||||||
case PROP_FIELDS:
|
|
||||||
g_value_set_object (value, obj->fields);
|
|
||||||
break;
|
|
||||||
case PROP_VALUES:
|
|
||||||
g_value_set_object (value, obj->values);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -125,15 +169,15 @@ static void sql_insert_get_property (SqlInsert * obj, guint id,
|
||||||
static void sql_insert_init (SqlInsert * obj)
|
static void sql_insert_init (SqlInsert * obj)
|
||||||
{
|
{
|
||||||
obj->table = NULL;
|
obj->table = NULL;
|
||||||
obj->fields = NULL;
|
obj->field = NULL;
|
||||||
obj->values = NULL;
|
obj->expr = NULL;
|
||||||
|
obj->iter = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_insert_finalize (SqlInsert * obj)
|
static void sql_insert_finalize (SqlInsert * obj)
|
||||||
{
|
{
|
||||||
sql_object_remove (obj, obj->table);
|
sql_insert_clean (obj);
|
||||||
sql_object_remove (obj, obj->fields);
|
g_clear_object (&obj->table);
|
||||||
sql_object_remove (obj, obj->values);
|
|
||||||
G_OBJECT_CLASS (sql_insert_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_insert_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,24 +190,10 @@ static void sql_insert_class_init (SqlInsertClass * klass)
|
||||||
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_insert_render;
|
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_insert_render;
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_TABLE,
|
g_object_class_install_property (k, PROP_TABLE,
|
||||||
sql_param_object ("table"
|
g_param_spec_object ("table"
|
||||||
,"Table"
|
,"Table"
|
||||||
,"The table where the row is inserted"
|
,"The table where the row is inserted"
|
||||||
,SQL_TYPE_TABLE
|
,SQL_TYPE_TABLE
|
||||||
,G_PARAM_READWRITE
|
,G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_FIELDS,
|
|
||||||
sql_param_list ("fields"
|
|
||||||
,"Fields"
|
|
||||||
,"The list of fields"
|
|
||||||
,SQL_TYPE_FIELD
|
|
||||||
,G_PARAM_READWRITE | G_PARAM_CONSTRUCT
|
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_VALUES,
|
|
||||||
sql_param_list ("values"
|
|
||||||
,"Values"
|
|
||||||
,"The list of values"
|
|
||||||
,SQL_TYPE_SET
|
|
||||||
,G_PARAM_READWRITE | G_PARAM_CONSTRUCT
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,15 +18,14 @@
|
||||||
#ifndef SQL_INSERT_H
|
#ifndef SQL_INSERT_H
|
||||||
#define SQL_INSERT_H
|
#define SQL_INSERT_H
|
||||||
|
|
||||||
#define SQL_TYPE_INSERT (sql_insert_get_type ())
|
#define SQL_TYPE_INSERT (sql_insert_get_type ())
|
||||||
#define SQL_INSERT(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, SQL_TYPE_INSERT, SqlInsert))
|
#define SQL_INSERT(object) (G_TYPE_CHECK_INSTANCE_CAST (object, SQL_TYPE_INSERT, SqlInsert))
|
||||||
#define SQL_IS_INSERT(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, SQL_TYPE_INSERT))
|
#define SQL_IS_INSERT(object) (G_TYPE_CHECK_INSTANCE_TYPE (object, SQL_TYPE_INSERT))
|
||||||
|
|
||||||
#include "sql-stmt.h"
|
#include "sql-stmt.h"
|
||||||
#include "sql-field.h"
|
#include "sql-field.h"
|
||||||
#include "sql-value.h"
|
#include "sql-value.h"
|
||||||
#include "sql-table.h"
|
#include "sql-table.h"
|
||||||
#include "sql-set.h"
|
|
||||||
|
|
||||||
typedef struct _SqlInsert SqlInsert;
|
typedef struct _SqlInsert SqlInsert;
|
||||||
typedef struct _SqlInsertClass SqlInsertClass;
|
typedef struct _SqlInsertClass SqlInsertClass;
|
||||||
|
@ -41,8 +40,9 @@ struct _SqlInsert
|
||||||
{
|
{
|
||||||
SqlStmt parent;
|
SqlStmt parent;
|
||||||
SqlTable * table;
|
SqlTable * table;
|
||||||
SqlList * fields; // List of SqlField
|
GSList * field; // List of SqlField
|
||||||
SqlList * values; // List of SqlSet
|
GSList * expr; // List of GSList of SqlExpr
|
||||||
|
GSList * iter;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _SqlInsertClass
|
struct _SqlInsertClass
|
||||||
|
@ -51,8 +51,12 @@ struct _SqlInsertClass
|
||||||
SqlStmtClass parent;
|
SqlStmtClass parent;
|
||||||
};
|
};
|
||||||
|
|
||||||
GType sql_insert_get_type ();
|
GType sql_insert_get_type ();
|
||||||
SqlObject * sql_insert_new ();
|
SqlInsert * sql_insert_new ();
|
||||||
void sql_insert_set_table_from_name (SqlInsert * obj, const gchar * table);
|
void sql_insert_set_table (SqlInsert * obj, SqlTable * table);
|
||||||
|
void sql_insert_add_row (SqlInsert * obj);
|
||||||
|
void sql_insert_add_field (SqlInsert * obj, SqlField * field);
|
||||||
|
void sql_insert_add_expr (SqlInsert * obj, SqlExpr * expr);
|
||||||
|
void sql_insert_clean (SqlInsert * obj);
|
||||||
|
|
||||||
#endif
|
#endif
|
107
sql/sql-join.c
107
sql/sql-join.c
|
@ -16,7 +16,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "sql-join.h"
|
#include "sql-join.h"
|
||||||
#include "sql-field.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SECTION: sql-join
|
* SECTION: sql-join
|
||||||
|
@ -48,20 +47,11 @@ static const gchar * SQL_JOIN_TYPE[] =
|
||||||
|
|
||||||
static void sql_join_render (SqlJoin * obj, SqlRender * render)
|
static void sql_join_render (SqlJoin * obj, SqlRender * render)
|
||||||
{
|
{
|
||||||
sql_render_add_item (render, TRUE, NULL, obj->target_left);
|
sql_render_add_item (render, T, NULL, obj->target_left);
|
||||||
sql_render_add_token (render, SQL_JOIN_TYPE[obj->type]);
|
sql_render_add_token (render, SQL_JOIN_TYPE[obj->type]);
|
||||||
sql_render_add_token (render, "JOIN");
|
sql_render_add_token (render, "JOIN");
|
||||||
sql_render_add_item (render, TRUE, NULL, obj->target_right);
|
sql_render_add_item (render, T, NULL, obj->target_right);
|
||||||
|
sql_render_add_item (render, F, "ON", obj->condition);
|
||||||
if (obj->has_using)
|
|
||||||
{
|
|
||||||
sql_render_add_token (render, "USING");
|
|
||||||
sql_render_append (render, "(");
|
|
||||||
sql_render_add_list (render, TRUE, NULL, obj->using_fields, ",");
|
|
||||||
sql_render_append (render, ")");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
sql_render_add_item (render, FALSE, "ON", obj->condition);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
@ -69,28 +59,28 @@ static void sql_join_render (SqlJoin * obj, SqlRender * render)
|
||||||
void sql_join_set_target_left (SqlJoin * obj, SqlTarget * target)
|
void sql_join_set_target_left (SqlJoin * obj, SqlTarget * target)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_JOIN (obj));
|
g_return_if_fail (SQL_IS_JOIN (obj));
|
||||||
g_return_if_fail (SQL_IS_TARGET (target) || SQL_IS_HOLDER (target) || !target);
|
g_return_if_fail (SQL_IS_TARGET (target));
|
||||||
|
|
||||||
sql_object_remove (obj, obj->target_left);
|
g_clear_object (&obj->target_left);
|
||||||
obj->target_left = sql_object_add (obj, target);
|
obj->target_left = g_object_ref_sink (target);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sql_join_set_target_right (SqlJoin * obj, SqlTarget * target)
|
void sql_join_set_target_right (SqlJoin * obj, SqlTarget * target)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_JOIN (obj));
|
g_return_if_fail (SQL_IS_JOIN (obj));
|
||||||
g_return_if_fail (SQL_IS_TARGET (target) || SQL_IS_HOLDER (target) || !target);
|
g_return_if_fail (SQL_IS_TARGET (target));
|
||||||
|
|
||||||
sql_object_remove (obj, obj->target_right);
|
g_clear_object (&obj->target_right);
|
||||||
obj->target_right = sql_object_add (obj, target);
|
obj->target_right = g_object_ref_sink (target);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sql_join_set_condition (SqlJoin * obj, SqlExpr * condition)
|
void sql_join_set_condition (SqlJoin * obj, SqlExpr * condition)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_JOIN (obj));
|
g_return_if_fail (SQL_IS_JOIN (obj));
|
||||||
g_return_if_fail (SQL_IS_EXPR (condition) || SQL_IS_HOLDER (condition) || !condition);
|
g_return_if_fail (SQL_IS_EXPR (condition));
|
||||||
|
|
||||||
sql_object_remove (obj, obj->condition);
|
g_clear_object (&obj->condition);
|
||||||
obj->condition = sql_object_add (obj, condition);
|
obj->condition = g_object_ref_sink (condition);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
||||||
|
@ -101,8 +91,6 @@ enum
|
||||||
,PROP_TARGET_RIGHT
|
,PROP_TARGET_RIGHT
|
||||||
,PROP_TYPE
|
,PROP_TYPE
|
||||||
,PROP_CONDITION
|
,PROP_CONDITION
|
||||||
,PROP_HAS_USING
|
|
||||||
,PROP_USING_FIELDS
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void sql_join_set_property (SqlJoin * obj, guint id,
|
static void sql_join_set_property (SqlJoin * obj, guint id,
|
||||||
|
@ -117,18 +105,11 @@ static void sql_join_set_property (SqlJoin * obj, guint id,
|
||||||
sql_join_set_target_right (obj, g_value_get_object (value));
|
sql_join_set_target_right (obj, g_value_get_object (value));
|
||||||
break;
|
break;
|
||||||
case PROP_TYPE:
|
case PROP_TYPE:
|
||||||
obj->type = g_value_get_enum (value);
|
obj->type = g_value_get_int (value);
|
||||||
break;
|
break;
|
||||||
case PROP_CONDITION:
|
case PROP_CONDITION:
|
||||||
sql_join_set_condition (obj, g_value_get_object (value));
|
sql_join_set_condition (obj, g_value_get_object (value));
|
||||||
break;
|
break;
|
||||||
case PROP_HAS_USING:
|
|
||||||
obj->has_using = g_value_get_boolean (value);
|
|
||||||
break;
|
|
||||||
case PROP_USING_FIELDS:
|
|
||||||
sql_object_remove (obj, obj->using_fields);
|
|
||||||
obj->using_fields = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -146,17 +127,11 @@ static void sql_join_get_property (SqlJoin * obj, guint id,
|
||||||
g_value_set_object (value, obj->target_right);
|
g_value_set_object (value, obj->target_right);
|
||||||
break;
|
break;
|
||||||
case PROP_TYPE:
|
case PROP_TYPE:
|
||||||
g_value_set_enum (value, obj->type);
|
g_value_set_int (value, obj->type);
|
||||||
break;
|
break;
|
||||||
case PROP_CONDITION:
|
case PROP_CONDITION:
|
||||||
g_value_set_object (value, obj->condition);
|
g_value_set_object (value, obj->condition);
|
||||||
break;
|
break;
|
||||||
case PROP_HAS_USING:
|
|
||||||
g_value_set_boolean (value, obj->has_using);
|
|
||||||
break;
|
|
||||||
case PROP_USING_FIELDS:
|
|
||||||
g_value_set_object (value, obj->using_fields);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -169,15 +144,13 @@ static void sql_join_init (SqlJoin * obj)
|
||||||
obj->target_left = NULL;
|
obj->target_left = NULL;
|
||||||
obj->target_right = NULL;
|
obj->target_right = NULL;
|
||||||
obj->condition = NULL;
|
obj->condition = NULL;
|
||||||
obj->using_fields = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_join_finalize (SqlJoin * obj)
|
static void sql_join_finalize (SqlJoin * obj)
|
||||||
{
|
{
|
||||||
sql_object_remove (obj, obj->target_left);
|
g_clear_object (&obj->target_left);
|
||||||
sql_object_remove (obj, obj->target_right);
|
g_clear_object (&obj->target_right);
|
||||||
sql_object_remove (obj, obj->condition);
|
g_clear_object (&obj->condition);
|
||||||
sql_object_remove (obj, obj->using_fields);
|
|
||||||
G_OBJECT_CLASS (sql_join_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_join_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,67 +163,31 @@ static void sql_join_class_init (SqlJoinClass * klass)
|
||||||
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_join_render;
|
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_join_render;
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_TARGET_LEFT,
|
g_object_class_install_property (k, PROP_TARGET_LEFT,
|
||||||
sql_param_list ("target-left"
|
g_param_spec_object ("target-left"
|
||||||
,"Left target"
|
,"Left target"
|
||||||
,"The left target in the join"
|
,"The left target in the join"
|
||||||
,SQL_TYPE_TARGET
|
,SQL_TYPE_TARGET
|
||||||
,G_PARAM_READWRITE
|
,G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_TARGET_RIGHT,
|
g_object_class_install_property (k, PROP_TARGET_RIGHT,
|
||||||
sql_param_list ("target-right"
|
g_param_spec_object ("target-right"
|
||||||
,"Right target"
|
,"Right target"
|
||||||
,"The right target in the join"
|
,"The right target in the join"
|
||||||
,SQL_TYPE_TARGET
|
,SQL_TYPE_TARGET
|
||||||
,G_PARAM_READWRITE
|
,G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_TYPE,
|
g_object_class_install_property (k, PROP_TYPE,
|
||||||
g_param_spec_enum ("join-type"
|
g_param_spec_int ("join-type"
|
||||||
,"Type"
|
,"Type"
|
||||||
,"The type of join"
|
,"The type of join"
|
||||||
,SQL_TYPE_JOIN_TYPE
|
,0, SQL_JOIN_TYPE_COUNT - 1, SQL_JOIN_TYPE_INNER
|
||||||
,SQL_JOIN_TYPE_INNER
|
|
||||||
,G_PARAM_READWRITE
|
,G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_CONDITION,
|
g_object_class_install_property (k, PROP_CONDITION,
|
||||||
sql_param_list ("condition"
|
g_param_spec_object ("condition"
|
||||||
,"Condition"
|
,"Condition"
|
||||||
,"The condition used for the join"
|
,"The condition used for the join"
|
||||||
,SQL_TYPE_EXPR
|
,SQL_TYPE_EXPR
|
||||||
,G_PARAM_READWRITE
|
,G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_HAS_USING,
|
|
||||||
g_param_spec_boolean ("has-using"
|
|
||||||
,"Has using"
|
|
||||||
,"Wether the condition is a USING"
|
|
||||||
,FALSE
|
|
||||||
,G_PARAM_READWRITE | G_PARAM_CONSTRUCT
|
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_CONDITION,
|
|
||||||
sql_param_list ("using-fields"
|
|
||||||
,"Using fields"
|
|
||||||
,"The list of fields of the USING"
|
|
||||||
,SQL_TYPE_FIELD
|
|
||||||
,G_PARAM_READWRITE | G_PARAM_CONSTRUCT
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
GType sql_join_type_get_type ()
|
|
||||||
{
|
|
||||||
static GType type = 0;
|
|
||||||
|
|
||||||
if (type == 0)
|
|
||||||
{
|
|
||||||
static const GEnumValue values[] =
|
|
||||||
{
|
|
||||||
{SQL_JOIN_TYPE_INNER ,"SQL_JOIN_TYPE_INNER" ,"inner"
|
|
||||||
},{SQL_JOIN_TYPE_LEFT ,"SQL_JOIN_TYPE_LEFT" ,"left"
|
|
||||||
},{SQL_JOIN_TYPE_RIGHT ,"SQL_JOIN_TYPE_RIGHT" ,"right"
|
|
||||||
},{0, NULL, NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
type = g_enum_register_static
|
|
||||||
(g_intern_static_string ("SqlJoinType"), values);
|
|
||||||
}
|
|
||||||
|
|
||||||
return type;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,10 +22,8 @@
|
||||||
#include "sql-expr.h"
|
#include "sql-expr.h"
|
||||||
|
|
||||||
#define SQL_TYPE_JOIN (sql_join_get_type ())
|
#define SQL_TYPE_JOIN (sql_join_get_type ())
|
||||||
#define SQL_IS_JOIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, SQL_TYPE_JOIN))
|
#define SQL_IS_JOIN(object) (G_TYPE_CHECK_INSTANCE_TYPE (object, SQL_TYPE_JOIN))
|
||||||
#define SQL_JOIN(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, SQL_TYPE_JOIN, SqlJoin))
|
#define SQL_JOIN(object) (G_TYPE_CHECK_INSTANCE_CAST (object, SQL_TYPE_JOIN, SqlJoin))
|
||||||
|
|
||||||
#define SQL_TYPE_JOIN_TYPE (sql_join_type_get_type ())
|
|
||||||
|
|
||||||
typedef struct _SqlJoin SqlJoin;
|
typedef struct _SqlJoin SqlJoin;
|
||||||
typedef struct _SqlJoinClass SqlJoinClass;
|
typedef struct _SqlJoinClass SqlJoinClass;
|
||||||
|
@ -46,8 +44,6 @@ struct _SqlJoin
|
||||||
SqlTarget * target_right;
|
SqlTarget * target_right;
|
||||||
SqlJoinType type;
|
SqlJoinType type;
|
||||||
SqlExpr * condition;
|
SqlExpr * condition;
|
||||||
gboolean has_using;
|
|
||||||
SqlList * using_fields;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _SqlJoinClass
|
struct _SqlJoinClass
|
||||||
|
@ -57,8 +53,6 @@ struct _SqlJoinClass
|
||||||
};
|
};
|
||||||
|
|
||||||
GType sql_join_get_type ();
|
GType sql_join_get_type ();
|
||||||
GType sql_join_type_get_type ();
|
|
||||||
|
|
||||||
SqlTarget * sql_join_new (SqlTarget * left, SqlTarget * right, SqlJoinType type);
|
SqlTarget * sql_join_new (SqlTarget * left, SqlTarget * right, SqlJoinType type);
|
||||||
void sql_join_set_condition (SqlJoin * obj, SqlExpr * condition);
|
void sql_join_set_condition (SqlJoin * obj, SqlExpr * condition);
|
||||||
void sql_join_set_target_right (SqlJoin * obj, SqlTarget * target);
|
void sql_join_set_target_right (SqlJoin * obj, SqlTarget * target);
|
||||||
|
|
|
@ -35,69 +35,34 @@ SqlMultiStmt * sql_multi_stmt_new ()
|
||||||
|
|
||||||
static void sql_multi_stmt_render (SqlMultiStmt * obj, SqlRender * render)
|
static void sql_multi_stmt_render (SqlMultiStmt * obj, SqlRender * render)
|
||||||
{
|
{
|
||||||
sql_render_add_list (render, TRUE, NULL, obj->stmts, ";");
|
sql_render_add_list (render, T, NULL, obj->stmt, ";");
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
|
||||||
enum
|
void sql_multi_stmt_add_stmt (SqlMultiStmt * obj, SqlStmt * stmt)
|
||||||
{
|
{
|
||||||
PROP_STMTS = 1
|
g_return_if_fail (SQL_IS_MULTI_STMT (obj));
|
||||||
};
|
g_return_if_fail (SQL_IS_STMT (stmt));
|
||||||
|
|
||||||
static void sql_mutli_stmt_set_property (SqlMultiStmt * obj, guint id,
|
obj->stmt = g_slist_append (obj->stmt, g_object_ref_sink (stmt));
|
||||||
const GValue * value, GParamSpec * pspec)
|
|
||||||
{
|
|
||||||
switch (id)
|
|
||||||
{
|
|
||||||
case PROP_STMTS:
|
|
||||||
sql_object_remove (obj, obj->stmts);
|
|
||||||
obj->stmts = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sql_mutli_stmt_get_property (SqlMultiStmt * obj, guint id,
|
|
||||||
GValue * value, GParamSpec * pspec)
|
|
||||||
{
|
|
||||||
switch (id)
|
|
||||||
{
|
|
||||||
case PROP_STMTS:
|
|
||||||
g_value_set_object (value, obj->stmts);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
||||||
|
|
||||||
static void sql_multi_stmt_init (SqlMultiStmt * obj)
|
static void sql_multi_stmt_init (SqlMultiStmt * obj)
|
||||||
{
|
{
|
||||||
obj->stmts = NULL;
|
obj->stmt = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_multi_stmt_finalize (SqlMultiStmt * obj)
|
static void sql_multi_stmt_finalize (SqlMultiStmt * obj)
|
||||||
{
|
{
|
||||||
sql_object_remove (obj, obj->stmts);
|
g_slist_free_full (obj->stmt, g_object_unref);
|
||||||
G_OBJECT_CLASS (sql_multi_stmt_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_multi_stmt_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_multi_stmt_class_init (SqlMultiStmtClass * klass)
|
static void sql_multi_stmt_class_init (SqlMultiStmtClass * klass)
|
||||||
{
|
{
|
||||||
GObjectClass * k = G_OBJECT_CLASS (klass);
|
G_OBJECT_CLASS (klass)->finalize = (GObjectFinalizeFunc) sql_multi_stmt_finalize;
|
||||||
k->finalize = (GObjectFinalizeFunc) sql_multi_stmt_finalize;
|
|
||||||
k->set_property = (GObjectSetPropertyFunc) sql_mutli_stmt_set_property;
|
|
||||||
k->get_property = (GObjectGetPropertyFunc) sql_mutli_stmt_get_property;
|
|
||||||
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_multi_stmt_render;
|
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_multi_stmt_render;
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_STMTS,
|
|
||||||
sql_param_list ("stmts"
|
|
||||||
,"Statements"
|
|
||||||
,"The list of statements"
|
|
||||||
,SQL_TYPE_STMT
|
|
||||||
,G_PARAM_READWRITE | G_PARAM_CONSTRUCT
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
#define SQL_TYPE_MULTI_STMT (sql_multi_stmt_get_type ())
|
#define SQL_TYPE_MULTI_STMT (sql_multi_stmt_get_type ())
|
||||||
#define SQL_MULTI_STMT(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, SQL_TYPE_MULTI_STMT, SqlMultiStmt))
|
#define SQL_MULTI_STMT(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, SQL_TYPE_MULTI_STMT, SqlMultiStmt))
|
||||||
#define SQL_IS_MULTI_STMT(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, SQL_TYPE_MULTI_STMT))
|
#define SQL_IS_MULTI_STMT(object) (G_TYPE_CHECK_INSTANCE_TYPE (object, SQL_TYPE_MULTI_STMT))
|
||||||
|
|
||||||
typedef struct _SqlMultiStmt SqlMultiStmt;
|
typedef struct _SqlMultiStmt SqlMultiStmt;
|
||||||
typedef struct _SqlMultiStmtClass SqlMultiStmtClass;
|
typedef struct _SqlMultiStmtClass SqlMultiStmtClass;
|
||||||
|
@ -34,7 +34,7 @@ typedef struct _SqlMultiStmtClass SqlMultiStmtClass;
|
||||||
struct _SqlMultiStmt
|
struct _SqlMultiStmt
|
||||||
{
|
{
|
||||||
SqlStmt parent;
|
SqlStmt parent;
|
||||||
SqlList * stmts;
|
GSList * stmt;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _SqlMultiStmtClass
|
struct _SqlMultiStmtClass
|
||||||
|
@ -45,5 +45,6 @@ struct _SqlMultiStmtClass
|
||||||
|
|
||||||
GType sql_multi_stmt_get_type ();
|
GType sql_multi_stmt_get_type ();
|
||||||
SqlMultiStmt * sql_multi_stmt_new ();
|
SqlMultiStmt * sql_multi_stmt_new ();
|
||||||
|
void sql_multi_stmt_add_stmt (SqlMultiStmt * obj, SqlStmt * stmt);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
208
sql/sql-object.c
208
sql/sql-object.c
|
@ -35,49 +35,65 @@ static guint signals[LAST_SIGNAL] = {0};
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
||||||
|
|
||||||
static void sql_object_child_changed (SqlObject * child, SqlObject * obj)
|
static void sql_object_list_changed (SqlObject * sub, SqlObject * obj)
|
||||||
{
|
{
|
||||||
sql_object_changed (obj);
|
g_signal_emit (obj, signals[CHANGED], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean sql_object_is_ready_default (SqlObject * obj)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Protected
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Protected
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sql_object_add:
|
* sql_object_list_add:
|
||||||
* @obj: #SqlObject where the new item will be added
|
* @obj: #SqlObject where the new item will be appended
|
||||||
* @child: #SqlObject the object is added
|
* @list: (element-type Sql.Object): #GSList where @sub is appened
|
||||||
|
* @sub: #SqlObject the object is appended
|
||||||
|
*
|
||||||
|
* Appends an item into a list of @obj. This function was created to perform an
|
||||||
|
* action very common in all objects that inherit from this class.
|
||||||
*
|
*
|
||||||
* Note that this function is considered a protected method and should only
|
* Note that this function is considered a protected method and should only
|
||||||
* be used in classes that inherit from #SqlObjectClass.
|
* be used in classes that inherit from #SqlObjectClass. Only this function
|
||||||
|
* should be able to modify @list. To release the list you can use
|
||||||
|
* sql_object_list_free().
|
||||||
**/
|
**/
|
||||||
gpointer sql_object_add (gpointer obj, gpointer child)
|
void sql_object_list_add (SqlObject * obj, GSList ** list, SqlObject * sub)
|
||||||
{
|
{
|
||||||
if (child)
|
*list = g_slist_append (*list, g_object_ref_sink (sub));
|
||||||
{
|
g_signal_connect (sub, "changed",
|
||||||
g_object_ref_sink (child);
|
G_CALLBACK (sql_object_list_changed), obj
|
||||||
g_signal_connect (child, "changed",
|
);
|
||||||
G_CALLBACK (sql_object_child_changed), obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
return child;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sql_object_remove:
|
* sql_object_list_free:
|
||||||
* @obj: #SqlObject where the new item will be added
|
* @obj: #SqlObject where the item will be removed
|
||||||
* @child: #SqlObject the object is added
|
* @list: (element-type Sql.Object): #GSList to release
|
||||||
|
*
|
||||||
|
* Releases a list of items, also disconnects its changed handler
|
||||||
|
* and calls g_object_unref() on every item.
|
||||||
*
|
*
|
||||||
* Note that this function is considered a protected method and should only
|
* Note that this function is considered a protected method and should only
|
||||||
* be used in classes that inherit from #SqlObjectClass.
|
* be used in classes that inherit from #SqlObjectClass and whose list has only
|
||||||
|
* been handled by the function sql_object_list_add().
|
||||||
**/
|
**/
|
||||||
void sql_object_remove (gpointer obj, gpointer child)
|
void sql_object_list_free (SqlObject * obj, GSList * list)
|
||||||
{
|
{
|
||||||
if (child)
|
GSList * n;
|
||||||
|
|
||||||
|
for (n = list; n; n = n->next)
|
||||||
{
|
{
|
||||||
g_signal_handlers_disconnect_by_func (child,
|
g_signal_handlers_disconnect_by_func (n->data,
|
||||||
sql_object_child_changed, obj);
|
G_CALLBACK (sql_object_list_changed), obj
|
||||||
g_object_unref (child);
|
);
|
||||||
|
g_object_unref (n->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_slist_free (list);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
@ -94,7 +110,7 @@ void sql_object_render (SqlObject * obj, SqlRender * render)
|
||||||
g_return_if_fail (SQL_IS_OBJECT (obj));
|
g_return_if_fail (SQL_IS_OBJECT (obj));
|
||||||
g_return_if_fail (SQL_IS_RENDER (render));
|
g_return_if_fail (SQL_IS_RENDER (render));
|
||||||
|
|
||||||
// SQL_OBJECT_GET_CLASS (obj)->render (obj, render);
|
return SQL_OBJECT_GET_CLASS (obj)->render (obj, render);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -107,156 +123,28 @@ void sql_object_render (SqlObject * obj, SqlRender * render)
|
||||||
**/
|
**/
|
||||||
gboolean sql_object_is_ready (SqlObject * obj)
|
gboolean sql_object_is_ready (SqlObject * obj)
|
||||||
{
|
{
|
||||||
SqlObjectClass * klass = SQL_OBJECT_GET_CLASS (obj);
|
|
||||||
|
|
||||||
g_return_val_if_fail (SQL_IS_OBJECT (obj), FALSE);
|
g_return_val_if_fail (SQL_IS_OBJECT (obj), FALSE);
|
||||||
|
|
||||||
if (obj->held_objects)
|
return SQL_OBJECT_GET_CLASS (obj)->is_ready (obj);
|
||||||
{
|
|
||||||
GList * i;
|
|
||||||
GList * held_objects = g_hash_table_get_values (obj->held_objects);
|
|
||||||
gboolean is_ready = TRUE;
|
|
||||||
|
|
||||||
for (i = held_objects; i; i = i->next)
|
|
||||||
if (!sql_object_is_ready (i->data))
|
|
||||||
{
|
|
||||||
is_ready = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_list_free (held_objects);
|
|
||||||
|
|
||||||
if (!is_ready)
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (klass->is_ready)
|
|
||||||
return klass->is_ready (obj);
|
|
||||||
else
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void sql_object_set (SqlObject * obj, const gchar * property, SqlObject * value)
|
|
||||||
{
|
|
||||||
g_return_if_fail (SQL_IS_OBJECT (obj));
|
|
||||||
g_return_if_fail (SQL_IS_OBJECT (value));
|
|
||||||
|
|
||||||
g_object_set (obj, property, value, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SqlObject * sql_object_get (SqlObject * obj, const gchar * property)
|
|
||||||
{
|
|
||||||
SqlObject * value;
|
|
||||||
|
|
||||||
g_return_val_if_fail (SQL_IS_OBJECT (obj), NULL);
|
|
||||||
|
|
||||||
g_object_get (obj, property, &value, NULL);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void sql_object_add_child (SqlObject * obj, const gchar * property, SqlObject * child)
|
|
||||||
{
|
|
||||||
SqlList * list;
|
|
||||||
|
|
||||||
g_return_if_fail (SQL_IS_OBJECT (obj));
|
|
||||||
g_return_if_fail (SQL_IS_OBJECT (child));
|
|
||||||
|
|
||||||
g_object_get (obj, property, &list, NULL);
|
|
||||||
sql_list_add (list, child);
|
|
||||||
}
|
|
||||||
|
|
||||||
void sql_object_remove_child (SqlObject * obj, const gchar * property, guint n)
|
|
||||||
{
|
|
||||||
SqlList * list;
|
|
||||||
|
|
||||||
g_return_if_fail (SQL_IS_OBJECT (obj));
|
|
||||||
|
|
||||||
g_object_get (obj, property, &list, NULL);
|
|
||||||
sql_list_remove (list, n);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sql_object_add_held_object:
|
|
||||||
* @obj: a #SqlObject
|
|
||||||
* @id: the id of the #SqlHolder
|
|
||||||
* @held_object: the held object
|
|
||||||
*
|
|
||||||
* Adds a held object.
|
|
||||||
**/
|
|
||||||
void sql_object_add_held_object (SqlObject * obj, const gchar * id, SqlObject * held_object)
|
|
||||||
{
|
|
||||||
g_return_if_fail (SQL_IS_OBJECT (obj));
|
|
||||||
g_return_if_fail (id);
|
|
||||||
|
|
||||||
if (!obj->held_objects)
|
|
||||||
obj->held_objects = g_hash_table_new_full (
|
|
||||||
g_str_hash
|
|
||||||
,g_str_equal
|
|
||||||
,g_free
|
|
||||||
,g_object_unref
|
|
||||||
);
|
|
||||||
|
|
||||||
g_signal_connect (held_object, "changed",
|
|
||||||
G_CALLBACK (sql_object_child_changed), obj
|
|
||||||
);
|
|
||||||
g_hash_table_replace (obj->held_objects,
|
|
||||||
g_strdup (id), g_object_ref_sink (held_object));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sql_object_get_held_object:
|
|
||||||
* @obj: a #SqlObject
|
|
||||||
* @id: the id of the #SqlHolder
|
|
||||||
*
|
|
||||||
* Gets a held object by its id.
|
|
||||||
*
|
|
||||||
* Return value: the #SqlObject if an object with that id exists, %NULL otherwise
|
|
||||||
**/
|
|
||||||
SqlObject * sql_object_get_held_object (SqlObject * obj, const gchar * id)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (SQL_IS_OBJECT (obj), NULL);
|
|
||||||
g_return_val_if_fail (id, NULL);
|
|
||||||
|
|
||||||
if (obj->held_objects)
|
|
||||||
return g_hash_table_lookup (obj->held_objects, id);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sql_object_changed:
|
|
||||||
* @obj: a #SqlObject
|
|
||||||
*
|
|
||||||
* Emits the changed signal on #SqlObject.
|
|
||||||
**/
|
|
||||||
void sql_object_changed (SqlObject * obj)
|
|
||||||
{
|
|
||||||
g_signal_emit (obj, signals[CHANGED], 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
||||||
|
|
||||||
static void sql_object_init (SqlObject * obj)
|
static void sql_object_init (SqlObject * obj)
|
||||||
{
|
{
|
||||||
obj->child_groups = NULL;
|
obj->sql = NULL;
|
||||||
obj->held_objects = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_object_finalize (SqlObject * obj)
|
static void sql_object_finalize (GObject * obj)
|
||||||
{
|
{
|
||||||
if (obj->child_groups)
|
g_free (SQL_OBJECT (obj)->sql);
|
||||||
g_hash_table_destroy (obj->child_groups);
|
G_OBJECT_CLASS (sql_object_parent_class)->finalize (obj);
|
||||||
if (obj->held_objects)
|
|
||||||
g_hash_table_destroy (obj->held_objects);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (sql_object_parent_class)->finalize (G_OBJECT (obj));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_object_class_init (SqlObjectClass * klass)
|
static void sql_object_class_init (SqlObjectClass * klass)
|
||||||
{
|
{
|
||||||
G_OBJECT_CLASS (klass)->finalize = (GObjectFinalizeFunc) sql_object_finalize;
|
G_OBJECT_CLASS (klass)->finalize = sql_object_finalize;
|
||||||
klass->is_ready = NULL;
|
klass->is_ready = sql_object_is_ready_default;
|
||||||
klass->render = NULL;
|
klass->render = NULL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -19,8 +19,6 @@
|
||||||
#define SQL_OBJECT_H
|
#define SQL_OBJECT_H
|
||||||
|
|
||||||
#include <gvn/gvn.h>
|
#include <gvn/gvn.h>
|
||||||
#include "sql-param-object.h"
|
|
||||||
#include "sql-param-list.h"
|
|
||||||
|
|
||||||
#define SQL_TYPE_OBJECT (sql_object_get_type ())
|
#define SQL_TYPE_OBJECT (sql_object_get_type ())
|
||||||
#define SQL_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, SQL_TYPE_OBJECT, SqlObject))
|
#define SQL_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, SQL_TYPE_OBJECT, SqlObject))
|
||||||
|
@ -31,41 +29,28 @@
|
||||||
typedef struct _SqlObject SqlObject;
|
typedef struct _SqlObject SqlObject;
|
||||||
typedef struct _SqlObjectClass SqlObjectClass;
|
typedef struct _SqlObjectClass SqlObjectClass;
|
||||||
|
|
||||||
|
#include "sql-render.h"
|
||||||
|
|
||||||
typedef gboolean (* SqlObjectIsReadyFunc) (SqlObject * obj);
|
typedef gboolean (* SqlObjectIsReadyFunc) (SqlObject * obj);
|
||||||
|
|
||||||
struct _SqlObject
|
struct _SqlObject
|
||||||
{
|
{
|
||||||
GInitiallyUnowned parent;
|
GInitiallyUnowned parent;
|
||||||
GHashTable * child_groups;
|
gchar * sql;
|
||||||
GHashTable * held_objects;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _SqlObjectClass
|
struct _SqlObjectClass
|
||||||
{
|
{
|
||||||
/* <private> */
|
/* <private> */
|
||||||
GInitiallyUnownedClass parent;
|
GInitiallyUnownedClass parent;
|
||||||
gpointer /* SqlRenderFunc */ render;
|
SqlRenderFunc render;
|
||||||
SqlObjectIsReadyFunc is_ready;
|
SqlObjectIsReadyFunc is_ready;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "sql-holder.h"
|
GType sql_object_get_type ();
|
||||||
#include "sql-list.h"
|
void sql_object_render (SqlObject * obj, SqlRender * render);
|
||||||
#include "sql-render.h"
|
gboolean sql_object_is_ready (SqlObject * obj);
|
||||||
|
void sql_object_list_add (SqlObject * obj, GSList ** list, SqlObject * sub);
|
||||||
GType sql_object_get_type ();
|
void sql_object_list_free (SqlObject * obj, GSList * list);
|
||||||
void sql_object_render (SqlObject * obj, SqlRender * render);
|
|
||||||
gboolean sql_object_is_ready (SqlObject * obj);
|
|
||||||
|
|
||||||
void sql_object_set (SqlObject * obj, const gchar * property, SqlObject * set);
|
|
||||||
SqlObject * sql_object_get (SqlObject * obj, const gchar * property);
|
|
||||||
void sql_object_add_child (SqlObject * obj, const gchar * property, SqlObject * child);
|
|
||||||
void sql_object_remove_child (SqlObject * obj, const gchar * property, guint n);
|
|
||||||
|
|
||||||
void sql_object_add_held_object (SqlObject * obj, const gchar * id, SqlObject * held_object);
|
|
||||||
SqlObject * sql_object_get_held_object (SqlObject * obj, const gchar * id);
|
|
||||||
void sql_object_changed (SqlObject * obj);
|
|
||||||
|
|
||||||
gpointer sql_object_add (gpointer obj, gpointer child);
|
|
||||||
void sql_object_remove (gpointer obj, gpointer child);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
**/
|
**/
|
||||||
G_DEFINE_TYPE (SqlOperation, sql_operation, SQL_TYPE_EXPR);
|
G_DEFINE_TYPE (SqlOperation, sql_operation, SQL_TYPE_EXPR);
|
||||||
|
|
||||||
SqlObject * sql_operation_new (SqlOperationType type)
|
SqlOperation * sql_operation_new (SqlOperationType type)
|
||||||
{
|
{
|
||||||
return g_object_new (SQL_TYPE_OPERATION, "type", type, NULL);
|
return g_object_new (SQL_TYPE_OPERATION, "type", type, NULL);
|
||||||
}
|
}
|
||||||
|
@ -38,14 +38,11 @@ SqlObject * sql_operation_new (SqlOperationType type)
|
||||||
|
|
||||||
static const gchar * SQL_OPERATION_TYPE[] =
|
static const gchar * SQL_OPERATION_TYPE[] =
|
||||||
{
|
{
|
||||||
"NOT"
|
"*"
|
||||||
,"-"
|
|
||||||
,"+"
|
|
||||||
|
|
||||||
,"*"
|
|
||||||
,"/"
|
,"/"
|
||||||
,"+"
|
,"+"
|
||||||
,"-"
|
,"-"
|
||||||
|
,"NOT"
|
||||||
,"IS"
|
,"IS"
|
||||||
,"="
|
,"="
|
||||||
,"!="
|
,"!="
|
||||||
|
@ -57,25 +54,51 @@ static const gchar * SQL_OPERATION_TYPE[] =
|
||||||
,"AND"
|
,"AND"
|
||||||
,"OR"
|
,"OR"
|
||||||
,"XOR"
|
,"XOR"
|
||||||
,"%"
|
|
||||||
,"IN"
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void sql_operation_render (SqlOperation * obj, SqlRender * render)
|
static void sql_operation_render (SqlOperation * obj, SqlRender * render)
|
||||||
{
|
{
|
||||||
sql_render_add_espace (render);
|
sql_render_add_espace (render);
|
||||||
sql_render_append (render, "(");
|
sql_render_append (render, "(");
|
||||||
sql_render_add_list (render, TRUE, NULL, obj->operators,
|
sql_render_add_list (render, T, NULL, obj->expr,
|
||||||
SQL_OPERATION_TYPE[obj->type]);
|
SQL_OPERATION_TYPE[obj->type]);
|
||||||
sql_render_append (render, ")");
|
sql_render_append (render, ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean sql_operation_is_ready (SqlOperation * obj)
|
||||||
|
{
|
||||||
|
GSList * n;
|
||||||
|
|
||||||
|
for (n = obj->expr; n; n = n->next)
|
||||||
|
if (!sql_object_is_ready (n->data))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sql_operation_add_expr:
|
||||||
|
* @obj: an #SqlOperation.
|
||||||
|
* @expr: an #SqlExpr.
|
||||||
|
*
|
||||||
|
* Adds an expression to an existing operation.
|
||||||
|
**/
|
||||||
|
void sql_operation_add_expr (SqlOperation * obj, SqlExpr * expr)
|
||||||
|
{
|
||||||
|
g_return_if_fail (SQL_IS_OPERATION (obj));
|
||||||
|
g_return_if_fail (SQL_IS_EXPR (expr));
|
||||||
|
|
||||||
|
sql_object_list_add (SQL_OBJECT (obj), &obj->expr, SQL_OBJECT (expr));
|
||||||
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_TYPE = 1
|
PROP_TYPE = 1
|
||||||
,PROP_OPERATORS
|
,PROP_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
static void sql_operation_set_property (SqlOperation * obj, guint id,
|
static void sql_operation_set_property (SqlOperation * obj, guint id,
|
||||||
|
@ -84,11 +107,7 @@ static void sql_operation_set_property (SqlOperation * obj, guint id,
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
case PROP_TYPE:
|
case PROP_TYPE:
|
||||||
obj->type = g_value_get_enum (value);
|
obj->type = g_value_get_int (value);
|
||||||
break;
|
|
||||||
case PROP_OPERATORS:
|
|
||||||
sql_object_remove (obj, obj->operators);
|
|
||||||
obj->operators = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
|
@ -101,10 +120,7 @@ static void sql_operation_get_property (SqlOperation * obj, guint id,
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
case PROP_TYPE:
|
case PROP_TYPE:
|
||||||
g_value_set_enum (value, obj->type);
|
g_value_set_int (value, obj->type);
|
||||||
break;
|
|
||||||
case PROP_OPERATORS:
|
|
||||||
g_value_set_object (value, obj->operators);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
|
@ -115,12 +131,12 @@ static void sql_operation_get_property (SqlOperation * obj, guint id,
|
||||||
|
|
||||||
static void sql_operation_init (SqlOperation * obj)
|
static void sql_operation_init (SqlOperation * obj)
|
||||||
{
|
{
|
||||||
obj->operators = NULL;
|
obj->expr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_operation_finalize (SqlOperation * obj)
|
static void sql_operation_finalize (SqlOperation * obj)
|
||||||
{
|
{
|
||||||
sql_object_remove (obj, obj->operators);
|
sql_object_list_free (SQL_OBJECT (obj), obj->expr);
|
||||||
G_OBJECT_CLASS (sql_operation_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_operation_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,58 +147,13 @@ static void sql_operation_class_init (SqlOperationClass * klass)
|
||||||
k->set_property = (GObjectSetPropertyFunc) sql_operation_set_property;
|
k->set_property = (GObjectSetPropertyFunc) sql_operation_set_property;
|
||||||
k->get_property = (GObjectGetPropertyFunc) sql_operation_get_property;
|
k->get_property = (GObjectGetPropertyFunc) sql_operation_get_property;
|
||||||
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_operation_render;
|
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_operation_render;
|
||||||
|
SQL_OBJECT_CLASS (klass)->is_ready = (SqlObjectIsReadyFunc) sql_operation_is_ready;
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_TYPE,
|
g_object_class_install_property (k, PROP_TYPE,
|
||||||
g_param_spec_enum ("type"
|
g_param_spec_int ("type"
|
||||||
,"Type"
|
,"Type"
|
||||||
,"The type of the operation"
|
,"The type of the operation"
|
||||||
,SQL_TYPE_OPERATION_TYPE
|
,0, SQL_OPERATION_TYPE_COUNT, 0
|
||||||
,SQL_OPERATION_TYPE_AND
|
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_OPERATORS,
|
|
||||||
sql_param_list ("operators"
|
|
||||||
,"Operators"
|
|
||||||
,"The list of operators"
|
|
||||||
,SQL_TYPE_EXPR
|
|
||||||
,G_PARAM_READWRITE
|
,G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
GType sql_operation_type_get_type ()
|
|
||||||
{
|
|
||||||
static GType type = 0;
|
|
||||||
|
|
||||||
if (type == 0)
|
|
||||||
{
|
|
||||||
static const GEnumValue values[] =
|
|
||||||
{
|
|
||||||
{SQL_OPERATION_TYPE_NOT ,"SQL_OPERATION_TYPE_NOT" ,"not"
|
|
||||||
},{SQL_OPERATION_TYPE_MINUS ,"SQL_OPERATION_TYPE_MINUS" ,"minus"
|
|
||||||
},{SQL_OPERATION_TYPE_PLUS ,"SQL_OPERATION_TYPE_PLUS" ,"plus"
|
|
||||||
},{SQL_OPERATION_TYPE_MULTIPLICATION ,"SQL_OPERATION_TYPE_MULTIPLICATION" ,"multiplication"
|
|
||||||
},{SQL_OPERATION_TYPE_DIVISION ,"SQL_OPERATION_TYPE_DIVISION" ,"division"
|
|
||||||
},{SQL_OPERATION_TYPE_SUM ,"SQL_OPERATION_TYPE_SUM" ,"sum"
|
|
||||||
},{SQL_OPERATION_TYPE_SUBTRACTION ,"SQL_OPERATION_TYPE_SUBTRACTION" ,"subtraction"
|
|
||||||
},{SQL_OPERATION_TYPE_IS ,"SQL_OPERATION_TYPE_IS" ,"is"
|
|
||||||
},{SQL_OPERATION_TYPE_EQUAL ,"SQL_OPERATION_TYPE_EQUAL" ,"equal"
|
|
||||||
},{SQL_OPERATION_TYPE_NOT_EQUAL ,"SQL_OPERATION_TYPE_NOT_EQUAL" ,"not-equal"
|
|
||||||
},{SQL_OPERATION_TYPE_GREATER_EQUAL ,"SQL_OPERATION_TYPE_GREATER_EQUAL" ,"greater-equal"
|
|
||||||
},{SQL_OPERATION_TYPE_GREATER ,"SQL_OPERATION_TYPE_GREATER" ,"greater"
|
|
||||||
},{SQL_OPERATION_TYPE_LOWER_EQUAL ,"SQL_OPERATION_TYPE_LOWER_EQUAL" ,"lower-equal"
|
|
||||||
},{SQL_OPERATION_TYPE_LOWER ,"SQL_OPERATION_TYPE_LOWER" ,"lower"
|
|
||||||
},{SQL_OPERATION_TYPE_LIKE ,"SQL_OPERATION_TYPE_LIKE" ,"like"
|
|
||||||
},{SQL_OPERATION_TYPE_AND ,"SQL_OPERATION_TYPE_AND" ,"and"
|
|
||||||
},{SQL_OPERATION_TYPE_OR ,"SQL_OPERATION_TYPE_OR" ,"or"
|
|
||||||
},{SQL_OPERATION_TYPE_XOR ,"SQL_OPERATION_TYPE_XOR" ,"xor"
|
|
||||||
},{SQL_OPERATION_TYPE_MOD ,"SQL_OPERATION_TYPE_MOD" ,"mod"
|
|
||||||
},{SQL_OPERATION_TYPE_IN ,"SQL_OPERATION_TYPE_IN" ,"in"
|
|
||||||
},{0, NULL, NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
type = g_enum_register_static
|
|
||||||
(g_intern_static_string ("SqlOperationType"), values);
|
|
||||||
}
|
|
||||||
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
|
@ -24,23 +24,16 @@
|
||||||
#define SQL_OPERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, SQL_TYPE_OPERATION, SqlOperation))
|
#define SQL_OPERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, SQL_TYPE_OPERATION, SqlOperation))
|
||||||
#define SQL_IS_OPERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, SQL_TYPE_OPERATION))
|
#define SQL_IS_OPERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, SQL_TYPE_OPERATION))
|
||||||
|
|
||||||
#define SQL_TYPE_OPERATION_TYPE (sql_operation_type_get_type ())
|
|
||||||
|
|
||||||
typedef struct _SqlOperation SqlOperation;
|
typedef struct _SqlOperation SqlOperation;
|
||||||
typedef struct _SqlOperationClass SqlOperationClass;
|
typedef struct _SqlOperationClass SqlOperationClass;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
// Unary
|
SQL_OPERATION_TYPE_MULTIPLICATION
|
||||||
SQL_OPERATION_TYPE_NOT
|
|
||||||
,SQL_OPERATION_TYPE_MINUS
|
|
||||||
,SQL_OPERATION_TYPE_PLUS
|
|
||||||
|
|
||||||
// Binary
|
|
||||||
,SQL_OPERATION_TYPE_MULTIPLICATION
|
|
||||||
,SQL_OPERATION_TYPE_DIVISION
|
,SQL_OPERATION_TYPE_DIVISION
|
||||||
,SQL_OPERATION_TYPE_SUM
|
,SQL_OPERATION_TYPE_SUM
|
||||||
,SQL_OPERATION_TYPE_SUBTRACTION
|
,SQL_OPERATION_TYPE_REST
|
||||||
|
,SQL_OPERATION_TYPE_NOT
|
||||||
,SQL_OPERATION_TYPE_IS
|
,SQL_OPERATION_TYPE_IS
|
||||||
,SQL_OPERATION_TYPE_EQUAL
|
,SQL_OPERATION_TYPE_EQUAL
|
||||||
,SQL_OPERATION_TYPE_NOT_EQUAL
|
,SQL_OPERATION_TYPE_NOT_EQUAL
|
||||||
|
@ -52,8 +45,6 @@ typedef enum
|
||||||
,SQL_OPERATION_TYPE_AND
|
,SQL_OPERATION_TYPE_AND
|
||||||
,SQL_OPERATION_TYPE_OR
|
,SQL_OPERATION_TYPE_OR
|
||||||
,SQL_OPERATION_TYPE_XOR
|
,SQL_OPERATION_TYPE_XOR
|
||||||
,SQL_OPERATION_TYPE_MOD
|
|
||||||
,SQL_OPERATION_TYPE_IN
|
|
||||||
,SQL_OPERATION_TYPE_COUNT
|
,SQL_OPERATION_TYPE_COUNT
|
||||||
}
|
}
|
||||||
SqlOperationType;
|
SqlOperationType;
|
||||||
|
@ -66,7 +57,7 @@ SqlOperationType;
|
||||||
struct _SqlOperation
|
struct _SqlOperation
|
||||||
{
|
{
|
||||||
SqlExpr parent;
|
SqlExpr parent;
|
||||||
SqlList * operators; // List of SqlExpr
|
GSList * expr; // List of SqlExpr pointers
|
||||||
SqlOperationType type;
|
SqlOperationType type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -76,9 +67,8 @@ struct _SqlOperationClass
|
||||||
SqlExprClass parent;
|
SqlExprClass parent;
|
||||||
};
|
};
|
||||||
|
|
||||||
GType sql_operation_get_type ();
|
GType sql_operation_get_type ();
|
||||||
GType sql_operation_type_get_type ();
|
SqlOperation * sql_operation_new (SqlOperationType type);
|
||||||
|
void sql_operation_add_expr (SqlOperation * obj, SqlExpr * expr);
|
||||||
SqlObject * sql_operation_new (SqlOperationType type);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -66,7 +66,6 @@ gchar * sql_render_get_string (SqlRender * obj, gpointer object, gpointer data,
|
||||||
obj->data = data;
|
obj->data = data;
|
||||||
obj->object = g_object_ref (object);
|
obj->object = g_object_ref (object);
|
||||||
obj->buffer = g_string_sized_new (SQL_BUFFER_SIZE);
|
obj->buffer = g_string_sized_new (SQL_BUFFER_SIZE);
|
||||||
obj->ancestors = NULL;
|
|
||||||
|
|
||||||
sql_render_add_object (obj, object);
|
sql_render_add_object (obj, object);
|
||||||
|
|
||||||
|
@ -84,8 +83,6 @@ gchar * sql_render_get_string (SqlRender * obj, gpointer object, gpointer data,
|
||||||
sql = g_string_free (obj->buffer, FALSE);
|
sql = g_string_free (obj->buffer, FALSE);
|
||||||
|
|
||||||
g_clear_object (&obj->object);
|
g_clear_object (&obj->object);
|
||||||
g_slist_free (obj->ancestors);
|
|
||||||
obj->ancestors = NULL;
|
|
||||||
obj->buffer = NULL;
|
obj->buffer = NULL;
|
||||||
obj->data = NULL;
|
obj->data = NULL;
|
||||||
return sql;
|
return sql;
|
||||||
|
@ -104,23 +101,7 @@ void sql_render_register_function (SqlRender * obj, GType type, SqlRenderFunc fu
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_RENDER (obj));
|
g_return_if_fail (SQL_IS_RENDER (obj));
|
||||||
|
|
||||||
g_hash_table_insert (obj->custom_renderers, GUINT_TO_POINTER (type), function);
|
g_hash_table_insert (obj->symbol_table, GUINT_TO_POINTER (type), function);
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sql_render_get_ancestors:
|
|
||||||
* @obj: the #SqlRender
|
|
||||||
*
|
|
||||||
* Obtains a list of parents of the currently rendered object, including it.
|
|
||||||
*
|
|
||||||
* Return value: (transfer none): the #GSList with the parents, the list should
|
|
||||||
* not be edited or freed.
|
|
||||||
**/
|
|
||||||
GSList * sql_render_get_ancestors (SqlRender * obj)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (SQL_IS_RENDER (obj), NULL);
|
|
||||||
|
|
||||||
return obj->ancestors;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -139,16 +120,13 @@ void sql_render_add_object (SqlRender * obj, gpointer object)
|
||||||
|
|
||||||
if (object)
|
if (object)
|
||||||
{
|
{
|
||||||
function = g_hash_table_lookup (obj->custom_renderers,
|
function = g_hash_table_lookup (obj->symbol_table,
|
||||||
GUINT_TO_POINTER (G_OBJECT_TYPE (object)));
|
GUINT_TO_POINTER (G_OBJECT_TYPE (object)));
|
||||||
obj->ancestors = g_slist_prepend (obj->ancestors, object);
|
|
||||||
|
|
||||||
if (function)
|
if (function)
|
||||||
function (object, obj);
|
function (object, obj);
|
||||||
else
|
else
|
||||||
sql_object_render (object, obj);
|
sql_object_render (object, obj);
|
||||||
|
|
||||||
obj->ancestors = g_slist_delete_link (obj->ancestors, obj->ancestors);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -302,17 +280,16 @@ void sql_render_add_item (SqlRender * obj, gboolean required, const gchar * toke
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
void sql_render_add_list (SqlRender * obj, gboolean required, const gchar * token,
|
void sql_render_add_list (SqlRender * obj, gboolean required, const gchar * token,
|
||||||
SqlList * list, const gchar * separator)
|
GSList * list, const gchar * separator)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_RENDER (obj));
|
g_return_if_fail (SQL_IS_RENDER (obj));
|
||||||
g_return_if_fail (SQL_IS_LIST (list));
|
|
||||||
|
|
||||||
if (list)
|
if (list)
|
||||||
{
|
{
|
||||||
GList * n;
|
GSList * n;
|
||||||
sql_render_add_token (obj, token);
|
sql_render_add_token (obj, token);
|
||||||
|
|
||||||
for (n = sql_list_get_items (list); n; n = n->next)
|
for (n = list; n; n = n->next)
|
||||||
{
|
{
|
||||||
sql_render_add_object (obj, n->data);
|
sql_render_add_object (obj, n->data);
|
||||||
|
|
||||||
|
@ -336,17 +313,16 @@ void sql_render_add_list (SqlRender * obj, gboolean required, const gchar * toke
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
void sql_render_add_list_with_func (SqlRender * obj, gboolean required, const gchar * token,
|
void sql_render_add_list_with_func (SqlRender * obj, gboolean required, const gchar * token,
|
||||||
SqlList * list, const gchar * separator, SqlRenderFunc function)
|
GSList * list, const gchar * separator, SqlRenderFunc function)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_RENDER (obj));
|
g_return_if_fail (SQL_IS_RENDER (obj));
|
||||||
g_return_if_fail (SQL_IS_LIST (list));
|
|
||||||
|
|
||||||
if (list)
|
if (list)
|
||||||
{
|
{
|
||||||
GList * n;
|
GSList * n;
|
||||||
sql_render_add_token (obj, token);
|
sql_render_add_token (obj, token);
|
||||||
|
|
||||||
for (n = sql_list_get_items (list); n; n = n->next)
|
for (n = list; n; n = n->next)
|
||||||
{
|
{
|
||||||
function (n->data, obj);
|
function (n->data, obj);
|
||||||
|
|
||||||
|
@ -413,7 +389,7 @@ static void sql_render_init (SqlRender * obj)
|
||||||
{
|
{
|
||||||
obj->buffer = NULL;
|
obj->buffer = NULL;
|
||||||
obj->error = NULL;
|
obj->error = NULL;
|
||||||
obj->custom_renderers = g_hash_table_new (
|
obj->symbol_table = g_hash_table_new (
|
||||||
g_direct_hash
|
g_direct_hash
|
||||||
,g_direct_equal
|
,g_direct_equal
|
||||||
);
|
);
|
||||||
|
@ -421,7 +397,7 @@ static void sql_render_init (SqlRender * obj)
|
||||||
|
|
||||||
static void sql_render_finalize (SqlRender * obj)
|
static void sql_render_finalize (SqlRender * obj)
|
||||||
{
|
{
|
||||||
g_hash_table_unref (obj->custom_renderers);
|
g_hash_table_unref (obj->symbol_table);
|
||||||
G_OBJECT_CLASS (sql_render_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_render_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#define SQL_RENDER(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, SQL_TYPE_RENDER, SqlRender))
|
#define SQL_RENDER(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, SQL_TYPE_RENDER, SqlRender))
|
||||||
#define SQL_IS_RENDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, SQL_TYPE_RENDER))
|
#define SQL_IS_RENDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, SQL_TYPE_RENDER))
|
||||||
|
|
||||||
|
#define T TRUE
|
||||||
|
#define F FALSE
|
||||||
#define SQL_BUFFER_SIZE 500
|
#define SQL_BUFFER_SIZE 500
|
||||||
|
|
||||||
typedef struct _SqlRender SqlRender;
|
typedef struct _SqlRender SqlRender;
|
||||||
|
@ -37,7 +39,7 @@ typedef void (* SqlRenderFunc) (gpointer obj, SqlRender * render);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SqlRender:
|
* SqlRender:
|
||||||
* @custom_renderers: (element-type GType Sql.RenderFunc):
|
* @symbol_table: (element-type GType Sql.RenderFunc):
|
||||||
**/
|
**/
|
||||||
struct _SqlRender
|
struct _SqlRender
|
||||||
{
|
{
|
||||||
|
@ -45,9 +47,8 @@ struct _SqlRender
|
||||||
GError * error;
|
GError * error;
|
||||||
GString * buffer;
|
GString * buffer;
|
||||||
gpointer object;
|
gpointer object;
|
||||||
GSList * ancestors;
|
|
||||||
gpointer data;
|
gpointer data;
|
||||||
GHashTable * custom_renderers;
|
GHashTable * symbol_table;
|
||||||
gint8 delimiter;
|
gint8 delimiter;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -73,7 +74,6 @@ GType sql_render_get_type ();
|
||||||
SqlRender * sql_render_new (gchar delimiter);
|
SqlRender * sql_render_new (gchar delimiter);
|
||||||
gchar * sql_render_get_string (SqlRender * obj, gpointer object, gpointer data, GError ** err);
|
gchar * sql_render_get_string (SqlRender * obj, gpointer object, gpointer data, GError ** err);
|
||||||
void sql_render_register_function (SqlRender * obj, GType type, SqlRenderFunc function);
|
void sql_render_register_function (SqlRender * obj, GType type, SqlRenderFunc function);
|
||||||
GSList * sql_render_get_ancestors (SqlRender * obj);
|
|
||||||
void sql_render_add_espace (SqlRender * obj);
|
void sql_render_add_espace (SqlRender * obj);
|
||||||
void sql_render_printf (SqlRender * obj, const gchar * string, ...);
|
void sql_render_printf (SqlRender * obj, const gchar * string, ...);
|
||||||
void sql_render_append (SqlRender * obj, const gchar * string);
|
void sql_render_append (SqlRender * obj, const gchar * string);
|
||||||
|
@ -82,8 +82,8 @@ void sql_render_add_token (SqlRender * obj, const gchar * token);
|
||||||
void sql_render_add_identifier (SqlRender * obj, const gchar * identifier);
|
void sql_render_add_identifier (SqlRender * obj, const gchar * identifier);
|
||||||
void sql_render_add_object (SqlRender * obj, gpointer object);
|
void sql_render_add_object (SqlRender * obj, gpointer object);
|
||||||
void sql_render_add_item (SqlRender * obj, gboolean required, const gchar * token, gpointer item);
|
void sql_render_add_item (SqlRender * obj, gboolean required, const gchar * token, gpointer item);
|
||||||
void sql_render_add_list (SqlRender * obj, gboolean required, const gchar * token, SqlList * list, const gchar * separator);
|
void sql_render_add_list (SqlRender * obj, gboolean required, const gchar * token, GSList * list, const gchar * separator);
|
||||||
void sql_render_add_list_with_func (SqlRender * obj, gboolean required, const gchar * token, SqlList * list, const gchar * separator, SqlRenderFunc function);
|
void sql_render_add_list_with_func (SqlRender * obj, gboolean required, const gchar * token, GSList * list, const gchar * separator, SqlRenderFunc function);
|
||||||
void sql_render_set_error (SqlRender * obj);
|
void sql_render_set_error (SqlRender * obj);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
285
sql/sql-select.c
285
sql/sql-select.c
|
@ -24,35 +24,84 @@
|
||||||
*
|
*
|
||||||
* This object represents a SELECT SQL statement
|
* This object represents a SELECT SQL statement
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
SqlExpr * expr;
|
||||||
|
gchar * alias;
|
||||||
|
}
|
||||||
|
SqlSelectAlias;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
SqlExpr * expr;
|
||||||
|
SqlOrderWay way;
|
||||||
|
}
|
||||||
|
SqlOrder;
|
||||||
|
|
||||||
G_DEFINE_TYPE (SqlSelect, sql_select, SQL_TYPE_DML);
|
G_DEFINE_TYPE (SqlSelect, sql_select, SQL_TYPE_DML);
|
||||||
|
|
||||||
SqlObject * sql_select_new ()
|
SqlSelect * sql_select_new ()
|
||||||
{
|
{
|
||||||
return g_object_new (SQL_TYPE_SELECT, NULL);
|
return g_object_new (SQL_TYPE_SELECT, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
||||||
|
/*
|
||||||
static const char * SQL_SELECT_TYPE[] =
|
static const char * SQL_SELECT_TYPE[] =
|
||||||
{
|
{
|
||||||
""
|
NULL
|
||||||
,"UNION ALL"
|
,"UNION ALL"
|
||||||
,"UNION ANY"
|
,"UNION ANY"
|
||||||
,"INTERSECT"
|
,"INTERSECT"
|
||||||
,"EXCEPT"
|
,"EXCEPT"
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
|
static void sql_select_render_order (SqlOrder * order, SqlRender * render)
|
||||||
|
{
|
||||||
|
sql_render_add_object (render, order->expr);
|
||||||
|
|
||||||
|
if (order->way == SQL_ORDER_DESC)
|
||||||
|
sql_render_add_token (render, "DESC");
|
||||||
|
}
|
||||||
|
|
||||||
static void sql_select_render (SqlSelect * obj, SqlRender * render)
|
static void sql_select_render (SqlSelect * obj, SqlRender * render)
|
||||||
{
|
{
|
||||||
sql_render_add_list (render, TRUE, "SELECT", obj->fields, ",");
|
if (obj->alias)
|
||||||
sql_render_add_list (render, FALSE, "FROM", SQL_DML (obj)->targets, ",");
|
|
||||||
|
|
||||||
if (SQL_DML (obj)->targets)
|
|
||||||
{
|
{
|
||||||
sql_render_add_item (render, FALSE, "WHERE", SQL_DML (obj)->where);
|
GSList * n;
|
||||||
sql_render_add_list (render, FALSE, "GROUP BY", obj->group, ",");
|
|
||||||
sql_render_add_item (render, FALSE, "HAVING", obj->having);
|
sql_render_add_token (render, "SELECT");
|
||||||
sql_render_add_list (render, FALSE, "ORDER", obj->order, ",");
|
|
||||||
|
for (n = obj->expr; n; n = n->next)
|
||||||
|
{
|
||||||
|
GSList * l;
|
||||||
|
|
||||||
|
sql_render_add_object (render, n->data);
|
||||||
|
|
||||||
|
for (l = obj->alias; l; l = l->next)
|
||||||
|
if (((SqlSelectAlias *) l->data)->expr == n->data)
|
||||||
|
{
|
||||||
|
sql_render_add_identifier (render,
|
||||||
|
((SqlSelectAlias *) l->data)->alias);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (n->next)
|
||||||
|
sql_render_append (render, " ,");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sql_render_add_list (render, T, "SELECT", obj->expr, ",");
|
||||||
|
|
||||||
|
sql_render_add_list (render, F, "FROM", SQL_DML (obj)->target, ",");
|
||||||
|
|
||||||
|
if (SQL_DML (obj)->target)
|
||||||
|
{
|
||||||
|
sql_render_add_item (render, F, "WHERE", SQL_DML (obj)->where);
|
||||||
|
sql_render_add_list (render, F, "GROUP BY", obj->group, ",");
|
||||||
|
sql_render_add_item (render, F, "HAVING", obj->having);
|
||||||
|
sql_render_add_list_with_func (render, F, "ORDER", obj->order, ",",
|
||||||
|
(SqlRenderFunc) sql_select_render_order);
|
||||||
|
|
||||||
if (obj->limit_count)
|
if (obj->limit_count)
|
||||||
sql_render_printf (render, "LIMIT %u OFFSET %u"
|
sql_render_printf (render, "LIMIT %u OFFSET %u"
|
||||||
|
@ -60,9 +109,18 @@ static void sql_select_render (SqlSelect * obj, SqlRender * render)
|
||||||
,obj->limit_offset
|
,obj->limit_offset
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (obj->next)
|
static void sql_order_free (SqlOrder * obj)
|
||||||
sql_render_add_item (render, FALSE, SQL_SELECT_TYPE[obj->type], obj->next);
|
{
|
||||||
|
g_object_unref (obj->expr);
|
||||||
|
g_free (obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sql_select_alias_free (SqlSelectAlias * obj)
|
||||||
|
{
|
||||||
|
g_free (obj->alias);
|
||||||
|
g_free (obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
@ -71,27 +129,54 @@ void sql_select_add_expr (SqlSelect * obj, SqlExpr * expr)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_SELECT (obj));
|
g_return_if_fail (SQL_IS_SELECT (obj));
|
||||||
g_return_if_fail (SQL_IS_EXPR (expr));
|
g_return_if_fail (SQL_IS_EXPR (expr));
|
||||||
|
|
||||||
|
obj->expr = g_slist_append (obj->expr, g_object_ref_sink (expr));
|
||||||
|
}
|
||||||
|
|
||||||
|
void sql_select_set_alias (SqlSelect * obj, SqlExpr * expr, const gchar * alias)
|
||||||
|
{
|
||||||
|
GSList * list;
|
||||||
|
|
||||||
|
g_return_if_fail (SQL_IS_SELECT (obj));
|
||||||
|
|
||||||
|
list = g_slist_find (obj->expr, expr);
|
||||||
|
|
||||||
|
if (list)
|
||||||
|
{
|
||||||
|
SqlSelectAlias * as = g_new (SqlSelectAlias, 1);
|
||||||
|
as->alias = g_strdup (alias);
|
||||||
|
as->expr = expr;
|
||||||
|
obj->alias = g_slist_append (obj->alias, as);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sql_select_add_group (SqlSelect * obj, SqlExpr * expr)
|
void sql_select_add_group (SqlSelect * obj, SqlExpr * expr)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_SELECT (obj));
|
g_return_if_fail (SQL_IS_SELECT (obj));
|
||||||
g_return_if_fail (SQL_IS_EXPR (expr));
|
g_return_if_fail (SQL_IS_EXPR (expr));
|
||||||
|
|
||||||
|
obj->group = g_slist_append (obj->group, g_object_ref_sink (expr));
|
||||||
}
|
}
|
||||||
|
|
||||||
void sql_select_set_having (SqlSelect * obj, SqlExpr * having)
|
void sql_select_set_having (SqlSelect * obj, SqlExpr * expr)
|
||||||
{
|
|
||||||
g_return_if_fail (SQL_IS_SELECT (obj));
|
|
||||||
g_return_if_fail (SQL_IS_EXPR (having) || having);
|
|
||||||
|
|
||||||
sql_object_remove (obj, obj->having);
|
|
||||||
obj->having = sql_object_add (obj, having);
|
|
||||||
}
|
|
||||||
|
|
||||||
void sql_select_add_order (SqlSelect * obj, SqlExpr * expr, SqlSelectOrderWay way)
|
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_SELECT (obj));
|
g_return_if_fail (SQL_IS_SELECT (obj));
|
||||||
g_return_if_fail (SQL_IS_EXPR (expr));
|
g_return_if_fail (SQL_IS_EXPR (expr));
|
||||||
|
|
||||||
|
g_clear_object (&obj->having);
|
||||||
|
obj->having = g_object_ref_sink (expr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sql_select_add_order (SqlSelect * obj, SqlExpr * expr, SqlOrderWay way)
|
||||||
|
{
|
||||||
|
g_return_if_fail (SQL_IS_SELECT (obj));
|
||||||
|
g_return_if_fail (SQL_IS_EXPR (expr));
|
||||||
|
|
||||||
|
SqlOrder * order = g_new (SqlOrder, 1);
|
||||||
|
order->expr = g_object_ref_sink (expr);
|
||||||
|
order->way = way;
|
||||||
|
|
||||||
|
obj->order = g_slist_append (obj->order, order);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sql_select_set_distinct (SqlSelect * obj, gboolean distinct)
|
void sql_select_set_distinct (SqlSelect * obj, gboolean distinct)
|
||||||
|
@ -114,9 +199,15 @@ void sql_select_set_next (SqlSelect * obj, SqlSelect * next, SqlSelectType type)
|
||||||
g_return_if_fail (SQL_IS_SELECT (obj));
|
g_return_if_fail (SQL_IS_SELECT (obj));
|
||||||
g_return_if_fail (SQL_IS_SELECT (next) || !next);
|
g_return_if_fail (SQL_IS_SELECT (next) || !next);
|
||||||
|
|
||||||
sql_object_remove (obj, obj->next);
|
g_clear_object (&obj->next);
|
||||||
obj->next = sql_object_add (obj, next);
|
|
||||||
obj->type = next ? type : SQL_SELECT_NONE;
|
if (next)
|
||||||
|
{
|
||||||
|
obj->next = g_object_ref (next);
|
||||||
|
obj->type = type;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
obj->type = SQL_SELECT_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
||||||
|
@ -124,12 +215,9 @@ void sql_select_set_next (SqlSelect * obj, SqlSelect * next, SqlSelectType type)
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_DISTINCT = 1
|
PROP_DISTINCT = 1
|
||||||
,PROP_FIELDS
|
|
||||||
,PROP_GROUP
|
|
||||||
,PROP_HAVING
|
|
||||||
,PROP_ORDER
|
|
||||||
,PROP_LIMIT_COUNT
|
,PROP_LIMIT_COUNT
|
||||||
,PROP_LIMIT_OFFSET
|
,PROP_LIMIT_OFFSET
|
||||||
|
,PROP_HAVING
|
||||||
,PROP_TYPE
|
,PROP_TYPE
|
||||||
,PROP_NEXT
|
,PROP_NEXT
|
||||||
};
|
};
|
||||||
|
@ -142,33 +230,21 @@ static void sql_select_set_property (SqlSelect * obj, guint id,
|
||||||
case PROP_DISTINCT:
|
case PROP_DISTINCT:
|
||||||
obj->distinct = g_value_get_boolean (value);
|
obj->distinct = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
case PROP_FIELDS:
|
|
||||||
sql_object_remove (obj, obj->fields);
|
|
||||||
obj->fields = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
case PROP_GROUP:
|
|
||||||
sql_object_remove (obj, obj->group);
|
|
||||||
obj->group = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
case PROP_HAVING:
|
|
||||||
sql_select_set_having (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
case PROP_ORDER:
|
|
||||||
sql_object_remove (obj, obj->order);
|
|
||||||
obj->order = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
case PROP_LIMIT_COUNT:
|
case PROP_LIMIT_COUNT:
|
||||||
obj->limit_count = g_value_get_uint (value);
|
obj->limit_count = g_value_get_uint (value);
|
||||||
break;
|
break;
|
||||||
case PROP_LIMIT_OFFSET:
|
case PROP_LIMIT_OFFSET:
|
||||||
obj->limit_offset = g_value_get_uint (value);
|
obj->limit_offset = g_value_get_uint (value);
|
||||||
break;
|
break;
|
||||||
case PROP_NEXT:
|
case PROP_HAVING:
|
||||||
sql_select_set_next (obj, g_value_get_object (value), obj->type);
|
sql_select_set_having (obj, g_value_get_object (value));
|
||||||
break;
|
break;
|
||||||
case PROP_TYPE:
|
case PROP_TYPE:
|
||||||
obj->type = g_value_get_int (value);
|
obj->type = g_value_get_int (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_NEXT:
|
||||||
|
sql_select_set_next (obj, g_value_get_object (value), obj->type);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -182,30 +258,21 @@ static void sql_select_get_property (SqlSelect * obj, guint id,
|
||||||
case PROP_DISTINCT:
|
case PROP_DISTINCT:
|
||||||
g_value_set_boolean (value, obj->distinct);
|
g_value_set_boolean (value, obj->distinct);
|
||||||
break;
|
break;
|
||||||
case PROP_FIELDS:
|
|
||||||
g_value_set_object (value, obj->fields);
|
|
||||||
break;
|
|
||||||
case PROP_GROUP:
|
|
||||||
g_value_set_object (value, obj->group);
|
|
||||||
break;
|
|
||||||
case PROP_HAVING:
|
|
||||||
g_value_set_object (value, obj->having);
|
|
||||||
break;
|
|
||||||
case PROP_ORDER:
|
|
||||||
g_value_set_object (value, obj->order);
|
|
||||||
break;
|
|
||||||
case PROP_LIMIT_COUNT:
|
case PROP_LIMIT_COUNT:
|
||||||
g_value_set_uint (value, obj->limit_count);
|
g_value_set_uint (value, obj->limit_count);
|
||||||
break;
|
break;
|
||||||
case PROP_LIMIT_OFFSET:
|
case PROP_LIMIT_OFFSET:
|
||||||
g_value_set_uint (value, obj->limit_offset);
|
g_value_set_uint (value, obj->limit_offset);
|
||||||
break;
|
break;
|
||||||
case PROP_NEXT:
|
case PROP_HAVING:
|
||||||
g_value_set_object (value, obj->next);
|
g_value_set_object (value, obj->having);
|
||||||
break;
|
break;
|
||||||
case PROP_TYPE:
|
case PROP_TYPE:
|
||||||
g_value_set_int (value, obj->type);
|
g_value_set_int (value, obj->type);
|
||||||
break;
|
break;
|
||||||
|
case PROP_NEXT:
|
||||||
|
g_value_set_object (value, obj->next);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -216,7 +283,8 @@ static void sql_select_get_property (SqlSelect * obj, guint id,
|
||||||
static void sql_select_init (SqlSelect * obj)
|
static void sql_select_init (SqlSelect * obj)
|
||||||
{
|
{
|
||||||
obj->distinct = FALSE;
|
obj->distinct = FALSE;
|
||||||
obj->fields = NULL;
|
obj->expr = NULL;
|
||||||
|
obj->alias = NULL;
|
||||||
obj->group = NULL;
|
obj->group = NULL;
|
||||||
obj->having = NULL;
|
obj->having = NULL;
|
||||||
obj->order = NULL;
|
obj->order = NULL;
|
||||||
|
@ -226,83 +294,62 @@ static void sql_select_init (SqlSelect * obj)
|
||||||
|
|
||||||
static void sql_select_finalize (SqlSelect * obj)
|
static void sql_select_finalize (SqlSelect * obj)
|
||||||
{
|
{
|
||||||
g_object_unref (obj->group);
|
g_clear_object (&obj->having);
|
||||||
g_object_unref (obj->order);
|
g_clear_object (&obj->next);
|
||||||
sql_object_remove (obj, obj->fields);
|
g_slist_free_full (obj->expr, g_object_unref);
|
||||||
sql_object_remove (obj, obj->having);
|
g_slist_free_full (obj->group, g_object_unref);
|
||||||
sql_object_remove (obj, obj->next);
|
g_slist_free_full (obj->alias, (GFreeFunc) sql_select_alias_free);
|
||||||
|
g_slist_free_full (obj->order, (GFreeFunc) sql_order_free);
|
||||||
G_OBJECT_CLASS (sql_select_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_select_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_select_class_init (SqlSelectClass * klass)
|
static void sql_select_class_init (SqlSelectClass * k)
|
||||||
{
|
{
|
||||||
GObjectClass * k = G_OBJECT_CLASS (klass);
|
GObjectClass * klass = G_OBJECT_CLASS (k);
|
||||||
k->finalize = (GObjectFinalizeFunc) sql_select_finalize;
|
klass->finalize = (GObjectFinalizeFunc) sql_select_finalize;
|
||||||
k->set_property = (GObjectSetPropertyFunc) sql_select_set_property;
|
klass->set_property = (GObjectSetPropertyFunc) sql_select_set_property;
|
||||||
k->get_property = (GObjectGetPropertyFunc) sql_select_get_property;
|
klass->get_property = (GObjectGetPropertyFunc) sql_select_get_property;
|
||||||
SQL_OBJECT_CLASS (k)->render = (SqlRenderFunc) sql_select_render;
|
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_select_render;
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_LIMIT_COUNT,
|
g_object_class_install_property (klass, PROP_LIMIT_COUNT,
|
||||||
g_param_spec_boolean ("distinct"
|
g_param_spec_boolean ("distinct"
|
||||||
,"Distinct"
|
,"Distinct"
|
||||||
,"Determines if the #SqlSelect uses the DISTINCT clause"
|
,"Determines if the #SqlSelect uses the DISTINCT clause"
|
||||||
,FALSE
|
,FALSE, G_PARAM_READWRITE
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_FIELDS,
|
|
||||||
sql_param_list ("fields"
|
g_object_class_install_property (klass, PROP_LIMIT_COUNT,
|
||||||
,"Fields"
|
|
||||||
,"The list of fields"
|
|
||||||
,SQL_TYPE_EXPR
|
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_GROUP,
|
|
||||||
sql_param_object ("group"
|
|
||||||
,"Group"
|
|
||||||
,"The GROUP BY section"
|
|
||||||
,SQL_TYPE_EXPR
|
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_HAVING,
|
|
||||||
sql_param_object ("having"
|
|
||||||
,"Having"
|
|
||||||
,"The HAVING clause"
|
|
||||||
,SQL_TYPE_EXPR
|
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_ORDER,
|
|
||||||
sql_param_list ("order"
|
|
||||||
,"Order"
|
|
||||||
,"The ORDER BY section"
|
|
||||||
,SQL_TYPE_SELECT_ORDER
|
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_LIMIT_COUNT,
|
|
||||||
g_param_spec_uint ("limit-count"
|
g_param_spec_uint ("limit-count"
|
||||||
,"Limit count"
|
,"Limit count"
|
||||||
,"The COUNT field of the LIMIT clause"
|
,"The COUNT field of the LIMIT clause"
|
||||||
,0, G_MAXUINT, 0
|
,0, G_MAXUINT, 0, G_PARAM_READWRITE
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_LIMIT_OFFSET,
|
|
||||||
|
g_object_class_install_property (klass, PROP_LIMIT_OFFSET,
|
||||||
g_param_spec_uint ("limit-offset"
|
g_param_spec_uint ("limit-offset"
|
||||||
,"Limit offset"
|
,"Limit offset"
|
||||||
,"The OFFSET field of the LIMIT clause"
|
,"The OFFSET field of the LIMIT clause"
|
||||||
,0, G_MAXUINT, 0
|
,0, G_MAXUINT, 0, G_PARAM_READWRITE
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_NEXT,
|
|
||||||
sql_param_object ("next"
|
g_object_class_install_property (klass, PROP_HAVING,
|
||||||
,"Next"
|
g_param_spec_object ("having"
|
||||||
,"The next #SqlSelect in case of a statement with more than one"
|
,"Having"
|
||||||
,SQL_TYPE_SELECT
|
,"The HAVING clause"
|
||||||
,G_PARAM_READWRITE
|
,SQL_TYPE_EXPR, G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_TYPE,
|
|
||||||
|
g_object_class_install_property (klass, PROP_TYPE,
|
||||||
g_param_spec_int ("type"
|
g_param_spec_int ("type"
|
||||||
,"Type"
|
,"Type"
|
||||||
,"One of the possible options of #SqlSelectType"
|
,"One of the possible options of #SqlSelectType"
|
||||||
,0, SQL_SELECT_COUNT - 1, 0
|
,0, SQL_SELECT_COUNT - 1, 0, G_PARAM_READWRITE
|
||||||
,G_PARAM_READWRITE
|
));
|
||||||
|
|
||||||
|
g_object_class_install_property (klass, PROP_NEXT,
|
||||||
|
g_param_spec_object ("next"
|
||||||
|
,"Next"
|
||||||
|
,"The next #SqlSelect in case of a statement with more than one"
|
||||||
|
,SQL_TYPE_SELECT, G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,8 +19,6 @@
|
||||||
#define SQL_SELECT_H
|
#define SQL_SELECT_H
|
||||||
|
|
||||||
#include "sql-dml.h"
|
#include "sql-dml.h"
|
||||||
#include "sql-select-field.h"
|
|
||||||
#include "sql-select-order.h"
|
|
||||||
|
|
||||||
#define SQL_TYPE_SELECT (sql_select_get_type ())
|
#define SQL_TYPE_SELECT (sql_select_get_type ())
|
||||||
#define SQL_SELECT(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, SQL_TYPE_SELECT, SqlSelect))
|
#define SQL_SELECT(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, SQL_TYPE_SELECT, SqlSelect))
|
||||||
|
@ -40,6 +38,18 @@ typedef enum
|
||||||
}
|
}
|
||||||
SqlSelectType;
|
SqlSelectType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SqlOrderWay:
|
||||||
|
* @SQL_ORDER_ASC: ascendent order
|
||||||
|
* @SQL_ORDER_DESC: descendent order
|
||||||
|
**/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
SQL_ORDER_ASC
|
||||||
|
,SQL_ORDER_DESC
|
||||||
|
}
|
||||||
|
SqlOrderWay;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SqlSelect:
|
* SqlSelect:
|
||||||
* @expr: (element-type Sql.Expr):
|
* @expr: (element-type Sql.Expr):
|
||||||
|
@ -50,15 +60,16 @@ struct _SqlSelect
|
||||||
{
|
{
|
||||||
SqlDml parent;
|
SqlDml parent;
|
||||||
gboolean distinct;
|
gboolean distinct;
|
||||||
SqlList * fields;
|
GSList * expr;
|
||||||
SqlList * group;
|
GSList * alias; // List of Sql.SelectAlias
|
||||||
|
GSList * group;
|
||||||
SqlExpr * having;
|
SqlExpr * having;
|
||||||
SqlList * order;
|
GSList * order;
|
||||||
guint limit_offset;
|
guint limit_offset;
|
||||||
guint limit_count;
|
guint limit_count;
|
||||||
|
|
||||||
SqlSelect * next;
|
|
||||||
SqlSelectType type;
|
SqlSelectType type;
|
||||||
|
SqlSelect * next;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _SqlSelectClass
|
struct _SqlSelectClass
|
||||||
|
@ -68,13 +79,13 @@ struct _SqlSelectClass
|
||||||
};
|
};
|
||||||
|
|
||||||
GType sql_select_get_type ();
|
GType sql_select_get_type ();
|
||||||
SqlObject * sql_select_new ();
|
SqlSelect * sql_select_new ();
|
||||||
void sql_select_set_distinct (SqlSelect * obj, gboolean distinct);
|
void sql_select_set_distinct (SqlSelect * obj, gboolean distinct);
|
||||||
void sql_select_add_expr (SqlSelect * obj, SqlExpr * expr);
|
void sql_select_add_expr (SqlSelect * obj, SqlExpr * expr);
|
||||||
void sql_select_set_alias (SqlSelect * obj, SqlExpr * expr, const gchar * alias);
|
void sql_select_set_alias (SqlSelect * obj, SqlExpr * expr, const gchar * alias);
|
||||||
void sql_select_add_group (SqlSelect * obj, SqlExpr * expr);
|
void sql_select_add_group (SqlSelect * obj, SqlExpr * expr);
|
||||||
void sql_select_set_having (SqlSelect * obj, SqlExpr * expr);
|
void sql_select_set_having (SqlSelect * obj, SqlExpr * expr);
|
||||||
void sql_select_add_order (SqlSelect * obj, SqlExpr * expr, SqlSelectOrderWay way);
|
void sql_select_add_order (SqlSelect * obj, SqlExpr * expr, SqlOrderWay way);
|
||||||
void sql_select_set_limit (SqlSelect * obj, guint count, guint offset);
|
void sql_select_set_limit (SqlSelect * obj, guint count, guint offset);
|
||||||
void sql_select_set_next (SqlSelect * obj, SqlSelect * next, SqlSelectType type);
|
void sql_select_set_next (SqlSelect * obj, SqlSelect * next, SqlSelectType type);
|
||||||
|
|
||||||
|
|
|
@ -41,5 +41,6 @@ struct _SqlStmtClass
|
||||||
};
|
};
|
||||||
|
|
||||||
GType sql_stmt_get_type ();
|
GType sql_stmt_get_type ();
|
||||||
|
gboolean sql_stmt_is_ready (SqlStmt * obj);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
147
sql/sql-string.c
147
sql/sql-string.c
|
@ -16,15 +16,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "sql-string.h"
|
#include "sql-string.h"
|
||||||
#include "sql-holder.h"
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
gchar * start;
|
|
||||||
gchar * end;
|
|
||||||
SqlHolder * holder;
|
|
||||||
}
|
|
||||||
HolderData;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SECTION: sql-string
|
* SECTION: sql-string
|
||||||
|
@ -44,71 +35,81 @@ SqlString * sql_string_new (const gchar * sql)
|
||||||
|
|
||||||
static void sql_string_render (SqlString * obj, SqlRender * render)
|
static void sql_string_render (SqlString * obj, SqlRender * render)
|
||||||
{
|
{
|
||||||
GSList * i;
|
guint n;
|
||||||
gchar * ptr = obj->sql;
|
gsize pos;
|
||||||
|
gchar * i = obj->sql;
|
||||||
|
GSList * p = obj->params;
|
||||||
|
|
||||||
for (i = obj->holders; i; i = i->next)
|
for (n = 0; n < obj->positions->len && p; n++)
|
||||||
{
|
{
|
||||||
HolderData * holder_data = i->data;
|
pos = g_array_index (obj->positions, gsize, n);
|
||||||
g_string_append_len (render->buffer, ptr, holder_data->start - ptr - 1);
|
g_string_append_len (render->buffer, i, (obj->sql + pos) - i);
|
||||||
ptr = holder_data->end;
|
i = obj->sql + pos + 2;
|
||||||
|
|
||||||
sql_render_add_object (render, holder_data->holder);
|
sql_render_add_object (render, p->data);
|
||||||
|
p = p->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
sql_render_append (render, ptr);
|
sql_render_append (render, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_string_free_holder_data (HolderData * holder_data)
|
static gboolean sql_string_is_ready (SqlString * obj)
|
||||||
{
|
{
|
||||||
g_object_unref (holder_data->holder);
|
guint n;
|
||||||
g_free (holder_data);
|
GSList * p = obj->params;
|
||||||
|
|
||||||
|
for (n = 0; n < obj->positions->len && p; n++)
|
||||||
|
{
|
||||||
|
if (!sql_object_is_ready (p->data))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
p = p->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return n == obj->positions->len;
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
|
||||||
/**
|
void sql_string_add_expr (SqlString * obj, SqlExpr * expr)
|
||||||
* sql_string_add_param:
|
{
|
||||||
* @obj: the #SqlString
|
g_return_if_fail (SQL_IS_STRING (obj));
|
||||||
* @id: the id assigned to the item
|
g_return_if_fail (SQL_IS_EXPR (expr));
|
||||||
**/
|
|
||||||
void sql_string_add_param (SqlString * obj, const gchar * id, GvnParam * param)
|
sql_object_list_add (SQL_OBJECT (obj), &obj->params, SQL_OBJECT (expr));
|
||||||
|
}
|
||||||
|
|
||||||
|
void sql_string_add_param (SqlString * obj, GvnParam * param)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_STRING (obj));
|
g_return_if_fail (SQL_IS_STRING (obj));
|
||||||
g_return_if_fail (GVN_IS_PARAM (param));
|
g_return_if_fail (GVN_IS_PARAM (param));
|
||||||
|
|
||||||
SqlExpr * value = sql_value_new ();
|
SqlExpr * value = sql_value_new ();
|
||||||
sql_value_set_param (SQL_VALUE (value), param);
|
sql_value_set_param (SQL_VALUE (value), param);
|
||||||
sql_object_add_held_object (SQL_OBJECT (obj), id, SQL_OBJECT (value));
|
sql_object_list_add (SQL_OBJECT (obj), &obj->params, SQL_OBJECT (value));
|
||||||
g_object_unref (value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
void sql_string_add_value (SqlString * obj, GType type, gconstpointer content)
|
||||||
* sql_string_add_value:
|
|
||||||
* @obj: the #SqlString
|
|
||||||
* @id: the id assigned to the item
|
|
||||||
**/
|
|
||||||
void sql_string_add_value (SqlString * obj, const gchar * id, GType type, gpointer content)
|
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_STRING (obj));
|
g_return_if_fail (SQL_IS_STRING (obj));
|
||||||
|
|
||||||
GValue gvalue = {0};
|
GValue value = {0};
|
||||||
SqlExpr * value;
|
SqlExpr * expr;
|
||||||
|
|
||||||
gvn_value_new_with_content (&gvalue, type, content);
|
gvn_value_new_with_content (&value, type, content);
|
||||||
value = sql_value_new ();
|
expr = sql_value_new ();
|
||||||
sql_value_set_value (SQL_VALUE (value), &gvalue);
|
sql_value_set_value (SQL_VALUE (expr), &value);
|
||||||
sql_object_add_held_object (SQL_OBJECT (obj), id, SQL_OBJECT (value));
|
sql_object_list_add (SQL_OBJECT (obj), &obj->params, SQL_OBJECT (expr));
|
||||||
g_object_unref (value);
|
g_value_unset (&value);
|
||||||
g_value_unset (&gvalue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
||||||
|
|
||||||
enum
|
typedef enum
|
||||||
{
|
{
|
||||||
PROP_SQL = 1
|
PROP_SQL = 1
|
||||||
};
|
}
|
||||||
|
SqlStringProp;
|
||||||
|
|
||||||
static void sql_string_set_property (SqlString * obj, guint id,
|
static void sql_string_set_property (SqlString * obj, guint id,
|
||||||
const GValue * value, GParamSpec * pspec)
|
const GValue * value, GParamSpec * pspec)
|
||||||
|
@ -117,54 +118,35 @@ static void sql_string_set_property (SqlString * obj, guint id,
|
||||||
{
|
{
|
||||||
case PROP_SQL:
|
case PROP_SQL:
|
||||||
{
|
{
|
||||||
gchar * i;
|
gchar * n;
|
||||||
|
|
||||||
obj->sql = g_value_dup_string (value);
|
obj->sql = g_value_dup_string (value);
|
||||||
|
n = obj->sql;
|
||||||
|
|
||||||
if (obj->sql)
|
for (; n && *n != '\0'; n++)
|
||||||
for (i = obj->sql; ; i++)
|
|
||||||
{
|
{
|
||||||
switch (*i)
|
switch (*n)
|
||||||
{
|
{
|
||||||
case '#':
|
case '#':
|
||||||
{
|
if (*(n+1) == 'p')
|
||||||
gchar * ptr = ++i;
|
{
|
||||||
gchar * holder_id;
|
gsize pos = n - obj->sql;
|
||||||
HolderData * holder_data;
|
g_array_append_val (obj->positions, pos);
|
||||||
|
n++;
|
||||||
while (g_ascii_isalpha (*i))
|
}
|
||||||
i++;
|
|
||||||
|
|
||||||
holder_data = g_new (HolderData, 1);
|
|
||||||
holder_data->start = ptr;
|
|
||||||
holder_data->end = i;
|
|
||||||
obj->holders = g_slist_prepend (obj->holders, holder_data);
|
|
||||||
|
|
||||||
holder_id = g_strndup (ptr, i - ptr);
|
|
||||||
holder_data->holder = sql_holder_new (holder_id);
|
|
||||||
g_free (holder_id);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case '\'':
|
case '\'':
|
||||||
case '"':
|
do {
|
||||||
case '`':
|
n = g_strstr_len (++n, -1, "'");
|
||||||
{
|
}
|
||||||
gchar delimiter = *i;
|
while (n && *(n-1) == '\\');
|
||||||
|
|
||||||
while (*(++i) != delimiter)
|
|
||||||
if (*i == '\\')
|
|
||||||
i++;
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*i == '\0')
|
if (!n || *n == '\0')
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
obj->holders = g_slist_reverse (obj->holders);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -189,14 +171,16 @@ static void sql_string_get_property (SqlString * obj, guint id,
|
||||||
|
|
||||||
static void sql_string_init (SqlString * obj)
|
static void sql_string_init (SqlString * obj)
|
||||||
{
|
{
|
||||||
obj->holders = NULL;
|
obj->sql = NULL;
|
||||||
|
obj->params = NULL;
|
||||||
|
obj->positions = g_array_sized_new (FALSE, FALSE, sizeof (gsize), 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_string_finalize (SqlString * obj)
|
static void sql_string_finalize (SqlString * obj)
|
||||||
{
|
{
|
||||||
g_free (obj->sql);
|
g_free (obj->sql);
|
||||||
g_slist_free_full (obj->holders,
|
g_array_free (obj->positions, TRUE);
|
||||||
(GDestroyNotify) sql_string_free_holder_data);
|
g_slist_free_full (obj->params, (GDestroyNotify) g_object_unref);
|
||||||
G_OBJECT_CLASS (sql_string_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_string_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,6 +191,7 @@ static void sql_string_class_init (SqlStringClass * k)
|
||||||
klass->set_property = (GObjectSetPropertyFunc) sql_string_set_property;
|
klass->set_property = (GObjectSetPropertyFunc) sql_string_set_property;
|
||||||
klass->get_property = (GObjectGetPropertyFunc) sql_string_get_property;
|
klass->get_property = (GObjectGetPropertyFunc) sql_string_get_property;
|
||||||
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_string_render;
|
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_string_render;
|
||||||
|
SQL_OBJECT_CLASS (klass)->is_ready = (SqlObjectIsReadyFunc) sql_string_is_ready;
|
||||||
|
|
||||||
g_object_class_install_property (klass, PROP_SQL,
|
g_object_class_install_property (klass, PROP_SQL,
|
||||||
g_param_spec_string ("sql"
|
g_param_spec_string ("sql"
|
||||||
|
|
|
@ -32,13 +32,15 @@ typedef struct _SqlStringClass SqlStringClass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SqlString:
|
* SqlString:
|
||||||
* @expr: (element-type Sql.Expr):
|
* @params: (element-type GvnParam):
|
||||||
|
* @positions: (element-type gsize):
|
||||||
**/
|
**/
|
||||||
struct _SqlString
|
struct _SqlString
|
||||||
{
|
{
|
||||||
SqlStmt parent;
|
SqlStmt parent;
|
||||||
gchar * sql;
|
gchar * sql;
|
||||||
GSList * holders;
|
GSList * params;
|
||||||
|
GArray * positions;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _SqlStringClass
|
struct _SqlStringClass
|
||||||
|
@ -49,7 +51,8 @@ struct _SqlStringClass
|
||||||
|
|
||||||
GType sql_string_get_type ();
|
GType sql_string_get_type ();
|
||||||
SqlString * sql_string_new (const gchar * sql);
|
SqlString * sql_string_new (const gchar * sql);
|
||||||
void sql_string_add_param (SqlString * obj, const gchar * id, GvnParam * param);
|
void sql_string_add_expr (SqlString * obj, SqlExpr * expr);
|
||||||
void sql_string_add_value (SqlString * obj, const gchar * id, GType type, gpointer content);
|
void sql_string_add_param (SqlString * obj, GvnParam * param);
|
||||||
|
void sql_string_add_value (SqlString * obj, GType type, gconstpointer content);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -39,7 +39,7 @@ static void sql_subquery_render (SqlSubquery * obj, SqlRender * render)
|
||||||
if (obj->select)
|
if (obj->select)
|
||||||
{
|
{
|
||||||
sql_render_append (render, "(");
|
sql_render_append (render, "(");
|
||||||
sql_render_add_item (render, TRUE, NULL, obj->select);
|
sql_render_add_item (render, T, NULL, obj->select);
|
||||||
sql_render_append (render, ")");
|
sql_render_append (render, ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,10 +49,10 @@ static void sql_subquery_render (SqlSubquery * obj, SqlRender * render)
|
||||||
void sql_subquery_set_select (SqlSubquery * obj, SqlSelect * select)
|
void sql_subquery_set_select (SqlSubquery * obj, SqlSelect * select)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_SUBQUERY (obj));
|
g_return_if_fail (SQL_IS_SUBQUERY (obj));
|
||||||
g_return_if_fail (SQL_IS_SELECT (select) || !select);
|
g_return_if_fail (SQL_IS_SELECT (select));
|
||||||
|
|
||||||
sql_object_remove (obj, obj->select);
|
g_clear_object (&obj->select);
|
||||||
obj->select = sql_object_add (obj, select);
|
obj->select = g_object_ref_sink (select);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
||||||
|
@ -97,7 +97,7 @@ static void sql_subquery_init (SqlSubquery * obj)
|
||||||
|
|
||||||
static void sql_subquery_finalize (SqlSubquery * obj)
|
static void sql_subquery_finalize (SqlSubquery * obj)
|
||||||
{
|
{
|
||||||
sql_object_remove (obj, obj->select);
|
g_clear_object (&obj->select);
|
||||||
G_OBJECT_CLASS (sql_subquery_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_subquery_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,10 +110,9 @@ static void sql_subquery_class_init (SqlSubqueryClass * klass)
|
||||||
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_subquery_render;
|
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_subquery_render;
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_SELECT,
|
g_object_class_install_property (k, PROP_SELECT,
|
||||||
sql_param_object ("select"
|
g_param_spec_object ("select"
|
||||||
,"Select"
|
, "Select"
|
||||||
,"The SELECT statement"
|
, "An #SqlSelect"
|
||||||
,SQL_TYPE_SELECT
|
, SQL_TYPE_SELECT, G_PARAM_READWRITE
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
**/
|
**/
|
||||||
G_DEFINE_TYPE (SqlTable, sql_table, SQL_TYPE_TARGET);
|
G_DEFINE_TYPE (SqlTable, sql_table, SQL_TYPE_TARGET);
|
||||||
|
|
||||||
SqlObject * sql_table_new (const gchar * name)
|
SqlTarget * sql_table_new (const gchar * name)
|
||||||
{
|
{
|
||||||
return g_object_new (SQL_TYPE_TABLE, "name", name, NULL);
|
return g_object_new (SQL_TYPE_TABLE, "name", name, NULL);
|
||||||
}
|
}
|
||||||
|
@ -101,25 +101,27 @@ static void sql_table_finalize (SqlTable * obj)
|
||||||
{
|
{
|
||||||
g_free (obj->name);
|
g_free (obj->name);
|
||||||
g_free (obj->schema);
|
g_free (obj->schema);
|
||||||
|
obj->name = NULL;
|
||||||
|
obj->schema = NULL;
|
||||||
G_OBJECT_CLASS (sql_table_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_table_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_table_class_init (SqlTableClass * klass)
|
static void sql_table_class_init (SqlTableClass * k)
|
||||||
{
|
{
|
||||||
GObjectClass * k = G_OBJECT_CLASS (klass);
|
GObjectClass * klass = G_OBJECT_CLASS (k);
|
||||||
k->finalize = (GObjectFinalizeFunc) sql_table_finalize;
|
klass->finalize = (GObjectFinalizeFunc) sql_table_finalize;
|
||||||
k->set_property = (GObjectSetPropertyFunc) sql_table_set_property;
|
klass->set_property = (GObjectSetPropertyFunc) sql_table_set_property;
|
||||||
k->get_property = (GObjectGetPropertyFunc) sql_table_get_property;
|
klass->get_property = (GObjectGetPropertyFunc) sql_table_get_property;
|
||||||
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_table_render;
|
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_table_render;
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_NAME,
|
g_object_class_install_property (klass, PROP_NAME,
|
||||||
g_param_spec_string ("name"
|
g_param_spec_string ("name"
|
||||||
, "Name"
|
, "Name"
|
||||||
, "The table name"
|
, "The table name"
|
||||||
, NULL, G_PARAM_READWRITE
|
, NULL, G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_SCHEMA,
|
g_object_class_install_property (klass, PROP_SCHEMA,
|
||||||
g_param_spec_string ("schema"
|
g_param_spec_string ("schema"
|
||||||
,"Schema"
|
,"Schema"
|
||||||
,"The schema where the table is"
|
,"The schema where the table is"
|
||||||
|
|
|
@ -41,6 +41,6 @@ struct _SqlTableClass
|
||||||
};
|
};
|
||||||
|
|
||||||
GType sql_table_get_type ();
|
GType sql_table_get_type ();
|
||||||
SqlObject * sql_table_new (const gchar * name);
|
SqlTarget * sql_table_new (const gchar * name);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -34,7 +34,9 @@ void sql_target_set_alias (SqlTarget * obj, const gchar * alias)
|
||||||
g_return_if_fail (SQL_IS_TARGET (obj));
|
g_return_if_fail (SQL_IS_TARGET (obj));
|
||||||
|
|
||||||
g_free (obj->alias);
|
g_free (obj->alias);
|
||||||
obj->alias = g_strdup (alias);
|
|
||||||
|
if (alias)
|
||||||
|
obj->alias = g_strdup (alias);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
||||||
|
@ -72,17 +74,18 @@ static void sql_target_get_property (SqlTarget * obj, guint id,
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
||||||
|
|
||||||
static void sql_target_init (SqlTarget * obj)
|
|
||||||
{
|
|
||||||
obj->alias = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sql_target_finalize (SqlTarget * obj)
|
static void sql_target_finalize (SqlTarget * obj)
|
||||||
{
|
{
|
||||||
g_free (obj->alias);
|
g_free (obj->alias);
|
||||||
|
obj->alias = NULL;
|
||||||
G_OBJECT_CLASS (sql_target_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_target_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void sql_target_init (SqlTarget * obj)
|
||||||
|
{
|
||||||
|
obj->alias = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static void sql_target_class_init (SqlTargetClass * k)
|
static void sql_target_class_init (SqlTargetClass * k)
|
||||||
{
|
{
|
||||||
GObjectClass * klass = G_OBJECT_CLASS (k);
|
GObjectClass * klass = G_OBJECT_CLASS (k);
|
||||||
|
@ -92,9 +95,8 @@ static void sql_target_class_init (SqlTargetClass * k)
|
||||||
|
|
||||||
g_object_class_install_property (klass, PROP_ALIAS,
|
g_object_class_install_property (klass, PROP_ALIAS,
|
||||||
g_param_spec_string ("alias"
|
g_param_spec_string ("alias"
|
||||||
,"Alias"
|
, "Alias"
|
||||||
,"The alias for the target"
|
, "The alias for the target"
|
||||||
,NULL
|
, NULL, G_PARAM_READWRITE
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,92 +26,67 @@
|
||||||
**/
|
**/
|
||||||
G_DEFINE_TYPE (SqlUpdate, sql_update, SQL_TYPE_DML);
|
G_DEFINE_TYPE (SqlUpdate, sql_update, SQL_TYPE_DML);
|
||||||
|
|
||||||
SqlObject * sql_update_new ()
|
SqlUpdate * sql_update_new ()
|
||||||
{
|
{
|
||||||
return g_object_new (SQL_TYPE_UPDATE, NULL);
|
return g_object_new (SQL_TYPE_UPDATE, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
||||||
|
|
||||||
|
static void sql_update_render_set (SqlUpdateSet * set, SqlRender * render)
|
||||||
|
{
|
||||||
|
sql_render_add_object (render, set->field);
|
||||||
|
sql_render_add_token (render, "=");
|
||||||
|
sql_render_add_object (render, set->expr);
|
||||||
|
}
|
||||||
|
|
||||||
static void sql_update_render (SqlUpdate * obj, SqlRender * render)
|
static void sql_update_render (SqlUpdate * obj, SqlRender * render)
|
||||||
{
|
{
|
||||||
sql_render_add_list (render, TRUE, "UPDATE", SQL_DML (obj)->targets, ",");
|
sql_render_add_list (render, T, "UPDATE", SQL_DML (obj)->target, ",");
|
||||||
|
|
||||||
if (SQL_DML (obj)->targets)
|
if (SQL_DML (obj)->target)
|
||||||
{
|
{
|
||||||
sql_render_add_list (render, TRUE, "SET", obj->sets, ",");
|
sql_render_add_list_with_func (render, T, "SET", obj->set, ",",
|
||||||
sql_render_add_item (render, FALSE, "WHERE", SQL_DML (obj)->where);
|
(SqlRenderFunc) sql_update_render_set);
|
||||||
|
sql_render_add_item (render, F, "WHERE", SQL_DML (obj)->where);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void sql_update_set_free (SqlUpdateSet * obj)
|
||||||
|
{
|
||||||
|
g_object_unref (obj->field);
|
||||||
|
g_object_unref (obj->expr);
|
||||||
|
g_free (obj);
|
||||||
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
|
||||||
void sql_update_add_set (SqlUpdate * obj, SqlField * field, SqlExpr * expr)
|
void sql_update_add_set (SqlUpdate * obj, SqlField * field, SqlExpr * expr)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SQL_IS_UPDATE (obj));
|
g_return_if_fail (SQL_IS_UPDATE (obj));
|
||||||
g_return_if_fail (SQL_IS_FIELD (field) && SQL_IS_EXPR (expr));
|
g_return_if_fail (SQL_IS_FIELD (field) && SQL_IS_EXPR (expr));
|
||||||
}
|
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
SqlUpdateSet * set = g_new (SqlUpdateSet, 1);
|
||||||
|
set->field = g_object_ref_sink (field);
|
||||||
enum
|
set->expr = g_object_ref_sink (expr);
|
||||||
{
|
obj->set = g_slist_append (obj->set, set);
|
||||||
PROP_SETS = 1
|
|
||||||
};
|
|
||||||
|
|
||||||
static void sql_update_set_property (SqlUpdate * obj, guint id,
|
|
||||||
const GValue * value, GParamSpec * pspec)
|
|
||||||
{
|
|
||||||
switch (id)
|
|
||||||
{
|
|
||||||
case PROP_SETS:
|
|
||||||
sql_object_remove (obj, obj->sets);
|
|
||||||
obj->sets = sql_object_add (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sql_update_get_property (SqlUpdate * obj, guint id,
|
|
||||||
GValue * value, GParamSpec * pspec)
|
|
||||||
{
|
|
||||||
switch (id)
|
|
||||||
{
|
|
||||||
case PROP_SETS:
|
|
||||||
g_value_set_object (value, obj->sets);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
||||||
|
|
||||||
static void sql_update_init (SqlUpdate * obj)
|
static void sql_update_init (SqlUpdate * obj)
|
||||||
{
|
{
|
||||||
obj->sets = NULL;
|
obj->set = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_update_finalize (SqlUpdate * obj)
|
static void sql_update_finalize (SqlUpdate * obj)
|
||||||
{
|
{
|
||||||
sql_object_remove (obj, obj->sets);
|
g_slist_free_full (obj->set, (GFreeFunc) sql_update_set_free);
|
||||||
G_OBJECT_CLASS (sql_update_parent_class)->finalize (G_OBJECT (obj));
|
G_OBJECT_CLASS (sql_update_parent_class)->finalize (G_OBJECT (obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sql_update_class_init (SqlUpdateClass * klass)
|
static void sql_update_class_init (SqlUpdateClass * klass)
|
||||||
{
|
{
|
||||||
GObjectClass * k = G_OBJECT_CLASS (klass);
|
G_OBJECT_CLASS (klass)->finalize = (GObjectFinalizeFunc) sql_update_finalize;
|
||||||
k->finalize = (GObjectFinalizeFunc) sql_update_finalize;
|
|
||||||
k->set_property = (GObjectSetPropertyFunc) sql_update_set_property;
|
|
||||||
k->get_property = (GObjectGetPropertyFunc) sql_update_get_property;
|
|
||||||
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_update_render;
|
SQL_OBJECT_CLASS (klass)->render = (SqlRenderFunc) sql_update_render;
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_SETS,
|
|
||||||
sql_param_list ("sets"
|
|
||||||
,"Sets"
|
|
||||||
,"A list of sets"
|
|
||||||
,SQL_TYPE_UPDATE_SET
|
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
|
|
||||||
#include "sql-dml.h"
|
#include "sql-dml.h"
|
||||||
#include "sql-field.h"
|
#include "sql-field.h"
|
||||||
#include "sql-update-set.h"
|
|
||||||
|
|
||||||
#define SQL_TYPE_UPDATE (sql_update_get_type ())
|
#define SQL_TYPE_UPDATE (sql_update_get_type ())
|
||||||
#define SQL_UPDATE(object) (G_TYPE_CHECK_INSTANCE_CAST (object, SQL_TYPE_UPDATE, SqlUpdate))
|
#define SQL_UPDATE(object) (G_TYPE_CHECK_INSTANCE_CAST (object, SQL_TYPE_UPDATE, SqlUpdate))
|
||||||
|
@ -29,13 +28,29 @@
|
||||||
typedef struct _SqlUpdate SqlUpdate;
|
typedef struct _SqlUpdate SqlUpdate;
|
||||||
typedef struct _SqlUpdateClass SqlUpdateClass;
|
typedef struct _SqlUpdateClass SqlUpdateClass;
|
||||||
|
|
||||||
|
typedef struct _SqlUpdateSet SqlUpdateSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SqlUpdateSet:
|
||||||
|
* @field: an #SqlField
|
||||||
|
* @expr: an #SqlExpr
|
||||||
|
*
|
||||||
|
* Defines a field for the SET clause for an #SqlUpdate.
|
||||||
|
**/
|
||||||
|
struct _SqlUpdateSet
|
||||||
|
{
|
||||||
|
SqlField * field;
|
||||||
|
SqlExpr * expr;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SqlUpdate:
|
* SqlUpdate:
|
||||||
|
* @set: (element-type Sql.UpdateSet):
|
||||||
**/
|
**/
|
||||||
struct _SqlUpdate
|
struct _SqlUpdate
|
||||||
{
|
{
|
||||||
SqlDml parent;
|
SqlDml parent;
|
||||||
SqlList * sets; // List of SqlUpdateSet
|
GSList * set; // List of SqlUpdateSet
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _SqlUpdateClass
|
struct _SqlUpdateClass
|
||||||
|
@ -46,7 +61,7 @@ struct _SqlUpdateClass
|
||||||
|
|
||||||
|
|
||||||
GType sql_update_get_type ();
|
GType sql_update_get_type ();
|
||||||
SqlObject * sql_update_new ();
|
SqlUpdate * sql_update_new ();
|
||||||
void sql_update_add_set (SqlUpdate * obj, SqlField * field, SqlExpr * expr);
|
void sql_update_add_set (SqlUpdate * obj, SqlField * field, SqlExpr * expr);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -28,12 +28,12 @@
|
||||||
**/
|
**/
|
||||||
G_DEFINE_TYPE (SqlValue, sql_value, SQL_TYPE_EXPR);
|
G_DEFINE_TYPE (SqlValue, sql_value, SQL_TYPE_EXPR);
|
||||||
|
|
||||||
SqlObject * sql_value_new ()
|
SqlExpr * sql_value_new ()
|
||||||
{
|
{
|
||||||
return g_object_new (SQL_TYPE_VALUE, NULL);
|
return g_object_new (SQL_TYPE_VALUE, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
SqlObject * sql_value_new_with_value (const GValue * value)
|
SqlExpr * sql_value_new_with_value (const GValue * value)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (value, NULL);
|
g_return_val_if_fail (value, NULL);
|
||||||
g_return_val_if_fail (G_IS_VALUE (value), NULL);
|
g_return_val_if_fail (G_IS_VALUE (value), NULL);
|
||||||
|
|
|
@ -42,8 +42,8 @@ struct _SqlValueClass
|
||||||
};
|
};
|
||||||
|
|
||||||
GType sql_value_get_type ();
|
GType sql_value_get_type ();
|
||||||
SqlObject * sql_value_new ();
|
SqlExpr * sql_value_new ();
|
||||||
SqlObject * sql_value_new_with_value (const GValue * value);
|
SqlExpr * sql_value_new_with_value (const GValue * value);
|
||||||
const GValue * sql_value_get_value (SqlValue * obj);
|
const GValue * sql_value_get_value (SqlValue * obj);
|
||||||
void sql_value_set_value (SqlValue * obj, const GValue * value);
|
void sql_value_set_value (SqlValue * obj, const GValue * value);
|
||||||
void sql_value_set_param (SqlValue * obj, GvnParam * param);
|
void sql_value_set_param (SqlValue * obj, GvnParam * param);
|
||||||
|
|
|
@ -20,17 +20,11 @@
|
||||||
|
|
||||||
#include <gvn/gvn.h>
|
#include <gvn/gvn.h>
|
||||||
#include "sql-object.h"
|
#include "sql-object.h"
|
||||||
#include "sql-holder.h"
|
|
||||||
#include "sql-list.h"
|
|
||||||
#include "sql-set.h"
|
|
||||||
#include "sql-string.h"
|
#include "sql-string.h"
|
||||||
#include "sql-stmt.h"
|
#include "sql-stmt.h"
|
||||||
#include "sql-multi-stmt.h"
|
#include "sql-multi-stmt.h"
|
||||||
#include "sql-select.h"
|
#include "sql-select.h"
|
||||||
#include "sql-select-field.h"
|
|
||||||
#include "sql-select-order.h"
|
|
||||||
#include "sql-update.h"
|
#include "sql-update.h"
|
||||||
#include "sql-update-set.h"
|
|
||||||
#include "sql-insert.h"
|
#include "sql-insert.h"
|
||||||
#include "sql-delete.h"
|
#include "sql-delete.h"
|
||||||
#include "sql-expr.h"
|
#include "sql-expr.h"
|
||||||
|
|
|
@ -1,10 +1,20 @@
|
||||||
Db cheader_filename="db/db.h"
|
Db cheader_filename="db/db.h"
|
||||||
|
|
||||||
|
Calc.function#property type="Db.CalcFunc"
|
||||||
|
|
||||||
|
Conn.render.object#parameter type="GLib.Object"
|
||||||
|
|
||||||
|
Iterator.params type="Db.Param"
|
||||||
|
|
||||||
|
Model.get skip=false name="get_values"
|
||||||
|
Model.set skip=false name="set_values"
|
||||||
|
Model.search skip=false
|
||||||
|
// This is to overwrite the property in a custom vala file
|
||||||
|
// Model.main_table skip
|
||||||
|
|
||||||
|
Plugin.render.object#parameter type="GLib.Object"
|
||||||
|
|
||||||
Iter struct
|
Iter struct
|
||||||
Iter.*#method skip
|
Iter.*#method skip
|
||||||
|
|
||||||
Row struct
|
Row struct
|
||||||
|
|
||||||
Model.get skip=false
|
|
||||||
Model.set skip=false
|
|
||||||
Model.search skip=false
|
|
|
@ -6,4 +6,4 @@ value_get_valist skip=false
|
||||||
Param.value_changed#method name="emit_value_changed"
|
Param.value_changed#method name="emit_value_changed"
|
||||||
|
|
||||||
//FIXME
|
//FIXME
|
||||||
ParamSpec struct
|
//ParamSpec struct
|
|
@ -1 +1,8 @@
|
||||||
Sql cheader_filename="sql/sql.h"
|
Sql cheader_filename="sql/sql.h"
|
||||||
|
|
||||||
|
Render.object type="GLib.Object"
|
||||||
|
Render.add_object.object#parameter type="GLib.Object"
|
||||||
|
Render.get_string.object#parameter type="GLib.Object"
|
||||||
|
RenderFunc.obj#parameter type="GLib.Object"
|
||||||
|
|
||||||
|
parser_parse name="parse"
|
|
@ -5,4 +5,4 @@ Builder.bind_columns skip=false
|
||||||
|
|
||||||
Grid.append_columns skip=false
|
Grid.append_columns skip=false
|
||||||
|
|
||||||
Batch.objects skip
|
Form.@get type="unowned GLib.Object"
|
||||||
|
|
|
@ -54,6 +54,7 @@ vn_image_DATA = \
|
||||||
image/hedera16x16.xpm \
|
image/hedera16x16.xpm \
|
||||||
image/hedera32x32.xpm \
|
image/hedera32x32.xpm \
|
||||||
image/icon.svg \
|
image/icon.svg \
|
||||||
|
image/icon-debug.svg \
|
||||||
image/logo.svg \
|
image/logo.svg \
|
||||||
image/load.gif
|
image/load.gif
|
||||||
vn_gui_DATA = \
|
vn_gui_DATA = \
|
||||||
|
@ -68,9 +69,9 @@ gsettings_SCHEMAS = $(top_srcdir)/vn/schema/$(PACKAGE).gschema.xml
|
||||||
|
|
||||||
DEFINES = \
|
DEFINES = \
|
||||||
-D_GUI_DIR=\"$(vn_guidir)\" \
|
-D_GUI_DIR=\"$(vn_guidir)\" \
|
||||||
-D_VN_MODULE_QUERY_DIR=\"$(module_querydir)/sql\" \
|
|
||||||
-D_VN_MODULE_LIB_DIR=\"$(module_libdir)\" \
|
-D_VN_MODULE_LIB_DIR=\"$(module_libdir)\" \
|
||||||
-D_VN_MODULE_DATA_DIR=\"$(module_datadir)\" \
|
-D_VN_MODULE_DATA_DIR=\"$(module_datadir)\" \
|
||||||
|
-D_VN_MODULE_QUERY_DIR=\"$(module_querydir)\" \
|
||||||
-D_HEDERA_LOCALE_DIR=\"$(datadir)/locale\" \
|
-D_HEDERA_LOCALE_DIR=\"$(datadir)/locale\" \
|
||||||
-D_DTD_DIR=\"$(vn_xmldir)\"
|
-D_DTD_DIR=\"$(vn_xmldir)\"
|
||||||
|
|
||||||
|
|
|
@ -18,15 +18,29 @@
|
||||||
#include "vn-column-combo.h"
|
#include "vn-column-combo.h"
|
||||||
#include "../vn-model.h"
|
#include "../vn-model.h"
|
||||||
|
|
||||||
G_DEFINE_TYPE (VnColumnCombo, vn_column_combo, VN_TYPE_COLUMN);
|
static void vn_column_combo_model_holder_interface_init (DbModelHolderInterface * iface);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_CODE (VnColumnCombo, vn_column_combo, VN_TYPE_COLUMN,
|
||||||
|
G_IMPLEMENT_INTERFACE (DB_TYPE_MODEL_HOLDER,
|
||||||
|
vn_column_combo_model_holder_interface_init)
|
||||||
|
);
|
||||||
|
|
||||||
static void vn_column_combo_on_status_changed (DbModel * model,
|
static void vn_column_combo_on_status_changed (DbModel * model,
|
||||||
DbModelStatus status, VnColumn * obj)
|
DbModelStatus status, VnColumnCombo * obj)
|
||||||
{
|
{
|
||||||
if (status == DB_MODEL_STATUS_READY)
|
if (status == DB_MODEL_STATUS_READY)
|
||||||
g_object_set (obj->cell, "model", VN_COLUMN_COMBO (obj)->tree_model, NULL);
|
{
|
||||||
|
g_object_set (VN_COLUMN (obj)->cell, "model", obj->tree_model, NULL);
|
||||||
|
|
||||||
|
db_model_use_null_row (obj->model, VN_COLUMN (obj)->null);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
g_object_set (obj->cell, "model", NULL, NULL);
|
g_object_set (VN_COLUMN (obj)->cell, "model", NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static DbModel * vn_column_combo_get_model (VnColumnCombo * obj)
|
||||||
|
{
|
||||||
|
return obj->model;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vn_column_combo_set_model (VnColumnCombo * obj, DbModel * model)
|
static void vn_column_combo_set_model (VnColumnCombo * obj, DbModel * model)
|
||||||
|
@ -55,18 +69,13 @@ static void vn_column_combo_set_value (VnColumnCombo * obj, GtkTreeModel * model
|
||||||
{
|
{
|
||||||
if (obj->model && db_model_get_status (obj->model) == DB_MODEL_STATUS_READY)
|
if (obj->model && db_model_get_status (obj->model) == DB_MODEL_STATUS_READY)
|
||||||
{
|
{
|
||||||
if (gvn_value_is_null (value))
|
DbIter iter;
|
||||||
{
|
|
||||||
g_object_set_property (cell, "text", value);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DbIter iter;
|
|
||||||
|
|
||||||
if (db_model_search_value (obj->model, obj->index_column, &iter, value))
|
if (gvn_value_is_null (value))
|
||||||
g_object_set_property (cell, "text",
|
g_object_set_property (cell, "text", value);
|
||||||
db_model_get_value (obj->model, &iter, obj->show_column, NULL));
|
else if (db_model_search_value (obj->model, obj->index_column, &iter, value))
|
||||||
}
|
g_object_set_property (cell, "text",
|
||||||
|
db_model_get_value (obj->model, &iter, obj->show_column, NULL));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,31 +88,54 @@ static void vn_column_combo_restore_focus (VnColumnCombo * obj)
|
||||||
(gtk_tree_view_column_get_tree_view (GTK_TREE_VIEW_COLUMN (obj)));
|
(gtk_tree_view_column_get_tree_view (GTK_TREE_VIEW_COLUMN (obj)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sets the value of the entry to an empty string if a null value is selected.
|
||||||
|
*/
|
||||||
|
static gchar * vn_column_combo_on_format_entry_text (GtkComboBox * combo,
|
||||||
|
gchar * path, VnColumnCombo * obj)
|
||||||
|
{
|
||||||
|
gchar * str;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
|
||||||
|
gtk_tree_model_get_iter_from_string (obj->tree_model, &iter, path);
|
||||||
|
gtk_tree_model_get (obj->tree_model, &iter, obj->show_column, &str, -1);
|
||||||
|
|
||||||
|
return str ? str : g_strdup ("");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets the autocompletion functionality to the cell being edited.
|
* Sets the autocompletion functionality to the cell being edited.
|
||||||
*/
|
*/
|
||||||
static void vn_column_combo_on_editing_started (GtkCellRenderer * cell,
|
static void vn_column_combo_on_editing_started (GtkCellRenderer * cell,
|
||||||
GtkCellEditable * editable, const gchar * path, VnColumnCombo * obj)
|
GtkCellEditable * cell_editable, const gchar * path, VnColumnCombo * obj)
|
||||||
{
|
{
|
||||||
GtkEntry * entry;
|
GtkEntry * entry;
|
||||||
|
|
||||||
if (!GTK_IS_COMBO_BOX (editable) || !obj->tree_model)
|
if (!GTK_IS_COMBO_BOX (cell_editable) || !obj->tree_model)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
entry = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (editable)));
|
entry = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (cell_editable)));
|
||||||
|
|
||||||
if (!obj->completion_ready)
|
if (!obj->completion_ready)
|
||||||
{
|
{
|
||||||
gtk_entry_completion_set_model (obj->completion, obj->tree_model);
|
gtk_entry_completion_set_model (obj->completion, obj->tree_model);
|
||||||
g_object_set (obj->completion, "text-column", obj->show_column, NULL);
|
gtk_entry_completion_set_text_column (obj->completion, obj->show_column);
|
||||||
obj->completion_ready = TRUE;
|
obj->completion_ready = TRUE;
|
||||||
|
|
||||||
g_signal_connect_swapped (editable, "editing-done",
|
g_signal_connect_swapped (cell_editable, "editing-done",
|
||||||
G_CALLBACK (vn_column_combo_restore_focus), obj);
|
G_CALLBACK (vn_column_combo_restore_focus), obj);
|
||||||
obj->editable = editable;
|
obj->cell_editable = cell_editable;
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_entry_set_completion (entry, obj->completion);
|
gtk_entry_set_completion (entry, obj->completion);
|
||||||
|
|
||||||
|
// Each edition uses a new cell_editable.
|
||||||
|
if (obj->cell_editable)
|
||||||
|
g_signal_handlers_disconnect_by_func (obj->cell_editable,
|
||||||
|
vn_column_combo_on_format_entry_text, obj);
|
||||||
|
|
||||||
|
g_signal_connect (cell_editable, "format-entry-text",
|
||||||
|
G_CALLBACK (vn_column_combo_on_format_entry_text), obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -115,14 +147,23 @@ static void vn_column_combo_on_edited (GtkCellRendererText *renderer,
|
||||||
{
|
{
|
||||||
DbIter iter;
|
DbIter iter;
|
||||||
GValue value = {0};
|
GValue value = {0};
|
||||||
gvn_value_new_with_content (&value, G_TYPE_STRING, new_text);
|
|
||||||
|
|
||||||
if (db_model_search_value (obj->model, obj->show_column, &iter, &value))
|
if (!g_strcmp0 (new_text, ""))
|
||||||
{
|
{
|
||||||
const GValue * value;
|
g_value_init (&value, GVN_TYPE_NULL);
|
||||||
|
VN_COLUMN_GET_CLASS (obj)->value_changed (VN_COLUMN (obj), path, &value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gvn_value_new_with_content (&value, G_TYPE_STRING, new_text);
|
||||||
|
|
||||||
if ((value = db_model_get_value (obj->model, &iter, obj->index_column, NULL)))
|
if (db_model_search_value (obj->model, obj->show_column, &iter, &value))
|
||||||
VN_COLUMN_GET_CLASS (obj)->value_changed (VN_COLUMN (obj), path, value);
|
{
|
||||||
|
const GValue * val;
|
||||||
|
|
||||||
|
if ((val = db_model_get_value (obj->model, &iter, obj->index_column, NULL)))
|
||||||
|
VN_COLUMN_GET_CLASS (obj)->value_changed (VN_COLUMN (obj), path, val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_value_unset (&value);
|
g_value_unset (&value);
|
||||||
|
@ -133,7 +174,6 @@ static void vn_column_combo_on_edited (GtkCellRendererText *renderer,
|
||||||
static void vn_column_combo_set_editable (VnColumnCombo * obj, gboolean editable)
|
static void vn_column_combo_set_editable (VnColumnCombo * obj, gboolean editable)
|
||||||
{
|
{
|
||||||
VnColumn * parent = VN_COLUMN (obj);
|
VnColumn * parent = VN_COLUMN (obj);
|
||||||
g_object_set (parent->cell, "editable", editable, NULL);
|
|
||||||
|
|
||||||
if (editable)
|
if (editable)
|
||||||
{
|
{
|
||||||
|
@ -149,21 +189,29 @@ static void vn_column_combo_set_editable (VnColumnCombo * obj, gboolean editable
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_signal_handlers_disconnect_by_func (parent->cell,
|
g_signal_handlers_disconnect_by_data (parent->cell, obj);
|
||||||
vn_column_combo_on_editing_started, obj);
|
|
||||||
g_signal_handlers_disconnect_by_func (parent->cell,
|
|
||||||
vn_column_combo_on_edited, obj);
|
|
||||||
g_signal_handlers_disconnect_by_func (parent->cell,
|
|
||||||
vn_column_combo_restore_focus, obj);
|
|
||||||
|
|
||||||
if (obj->editable)
|
if (obj->cell_editable)
|
||||||
g_signal_handlers_disconnect_by_func (obj->editable,
|
g_signal_handlers_disconnect_by_data (obj->cell_editable, obj);
|
||||||
vn_column_combo_restore_focus, obj);
|
|
||||||
|
|
||||||
obj->completion = NULL;
|
obj->completion = NULL;
|
||||||
obj->completion_ready = FALSE;
|
obj->completion_ready = FALSE;
|
||||||
obj->editable = NULL;
|
obj->cell_editable = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_object_set (parent->cell, "editable", editable, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vn_column_combo_set_null (VnColumnCombo * obj, gboolean null)
|
||||||
|
{
|
||||||
|
if (vn_column_get_model (VN_COLUMN (obj)) && obj->model)
|
||||||
|
db_model_use_null_row (obj->model, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vn_column_combo_model_changed (VnColumnCombo * obj)
|
||||||
|
{
|
||||||
|
if (obj->model)
|
||||||
|
db_model_use_null_row (obj->model, VN_COLUMN (obj)->null);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Properties
|
||||||
|
@ -173,8 +221,6 @@ enum
|
||||||
PROP_INDEX_COLUMN = 1
|
PROP_INDEX_COLUMN = 1
|
||||||
,PROP_SHOW_COLUMN
|
,PROP_SHOW_COLUMN
|
||||||
,PROP_MODEL
|
,PROP_MODEL
|
||||||
,PROP_CONN
|
|
||||||
,PROP_SQL
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void vn_column_combo_set_property (VnColumnCombo * obj, guint id,
|
static void vn_column_combo_set_property (VnColumnCombo * obj, guint id,
|
||||||
|
@ -193,22 +239,6 @@ static void vn_column_combo_set_property (VnColumnCombo * obj, guint id,
|
||||||
case PROP_MODEL:
|
case PROP_MODEL:
|
||||||
vn_column_combo_set_model (obj, g_value_get_object (value));
|
vn_column_combo_set_model (obj, g_value_get_object (value));
|
||||||
break;
|
break;
|
||||||
case PROP_CONN:
|
|
||||||
db_model_set_conn (obj->model, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
case PROP_SQL:
|
|
||||||
{
|
|
||||||
const gchar * sql = g_value_get_string (value);
|
|
||||||
|
|
||||||
if (sql)
|
|
||||||
{
|
|
||||||
DbModel * model = db_model_new_with_sql (NULL, g_value_get_string (value));
|
|
||||||
vn_column_combo_set_model (obj, model);
|
|
||||||
g_object_unref (model);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -228,9 +258,6 @@ static void vn_column_combo_get_property (VnColumnCombo * obj, guint id,
|
||||||
case PROP_MODEL:
|
case PROP_MODEL:
|
||||||
g_value_set_object (value, obj->model);
|
g_value_set_object (value, obj->model);
|
||||||
break;
|
break;
|
||||||
case PROP_CONN:
|
|
||||||
g_value_set_object (value, db_model_get_conn (obj->model));
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -245,7 +272,7 @@ static void vn_column_combo_init (VnColumnCombo * obj)
|
||||||
obj->tree_model = NULL;
|
obj->tree_model = NULL;
|
||||||
obj->completion = NULL;
|
obj->completion = NULL;
|
||||||
obj->completion_ready = FALSE;
|
obj->completion_ready = FALSE;
|
||||||
obj->editable = NULL;
|
obj->cell_editable = NULL;
|
||||||
VN_COLUMN_GET_CLASS (obj)->set_renderer (VN_COLUMN (obj), cell);
|
VN_COLUMN_GET_CLASS (obj)->set_renderer (VN_COLUMN (obj), cell);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,6 +290,10 @@ static void vn_column_combo_class_init (VnColumnComboClass * klass)
|
||||||
k->get_property = (GObjectGetPropertyFunc) vn_column_combo_get_property;
|
k->get_property = (GObjectGetPropertyFunc) vn_column_combo_get_property;
|
||||||
VN_COLUMN_CLASS (klass)->set_value = (VnColumnSetValueFunc) vn_column_combo_set_value;
|
VN_COLUMN_CLASS (klass)->set_value = (VnColumnSetValueFunc) vn_column_combo_set_value;
|
||||||
VN_COLUMN_CLASS (klass)->set_editable = (VnColumnSetEditableFunc) vn_column_combo_set_editable;
|
VN_COLUMN_CLASS (klass)->set_editable = (VnColumnSetEditableFunc) vn_column_combo_set_editable;
|
||||||
|
VN_COLUMN_CLASS (klass)->set_null = (VnColumnSetNullFunc) vn_column_combo_set_null;
|
||||||
|
VN_COLUMN_CLASS (klass)->model_changed = (VnColumnModelChangedFunc) vn_column_combo_model_changed;
|
||||||
|
|
||||||
|
g_object_class_override_property (k, PROP_MODEL, "model");
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_INDEX_COLUMN,
|
g_object_class_install_property (k, PROP_INDEX_COLUMN,
|
||||||
g_param_spec_uint ("index-column"
|
g_param_spec_uint ("index-column"
|
||||||
|
@ -278,25 +309,10 @@ static void vn_column_combo_class_init (VnColumnComboClass * klass)
|
||||||
,0, 255, 1
|
,0, 255, 1
|
||||||
,G_PARAM_CONSTRUCT | G_PARAM_READWRITE
|
,G_PARAM_CONSTRUCT | G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_MODEL,
|
}
|
||||||
g_param_spec_object ("model"
|
|
||||||
,_("Model")
|
static void vn_column_combo_model_holder_interface_init (DbModelHolderInterface * iface)
|
||||||
,_("The model from which the combo takes the values shown in the list")
|
{
|
||||||
,DB_TYPE_MODEL
|
iface->get_model = (DbModelHolderGetModelFunc) vn_column_combo_get_model;
|
||||||
,G_PARAM_READWRITE
|
iface->set_model = (DbModelHolderSetModelFunc) vn_column_combo_set_model;
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_CONN,
|
|
||||||
g_param_spec_object ("conn"
|
|
||||||
,_("Connection")
|
|
||||||
,_("The connection used by the model")
|
|
||||||
,DB_TYPE_CONN
|
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_SQL,
|
|
||||||
g_param_spec_string ("sql"
|
|
||||||
,_("SQL")
|
|
||||||
,_("The SQL query used to create the model")
|
|
||||||
, NULL
|
|
||||||
,G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ struct _VnColumnCombo
|
||||||
guint show_column;
|
guint show_column;
|
||||||
GtkEntryCompletion * completion;
|
GtkEntryCompletion * completion;
|
||||||
gboolean completion_ready;
|
gboolean completion_ready;
|
||||||
GtkCellEditable * editable;
|
GtkCellEditable * cell_editable;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _VnColumnComboClass
|
struct _VnColumnComboClass
|
||||||
|
|
|
@ -117,7 +117,7 @@ static void vn_column_image_on_download_tooltip (DbFileLoader * fl,
|
||||||
{
|
{
|
||||||
GdkPixbuf * pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
|
GdkPixbuf * pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
|
||||||
|
|
||||||
if (data->image)
|
if (data->image && G_IS_OBJECT (data->image))
|
||||||
g_object_unref (data->image);
|
g_object_unref (data->image);
|
||||||
|
|
||||||
data->image = g_object_ref_sink (gtk_image_new_from_pixbuf (pixbuf));
|
data->image = g_object_ref_sink (gtk_image_new_from_pixbuf (pixbuf));
|
||||||
|
@ -325,12 +325,14 @@ static void vn_column_image_set_value (VnColumnImage * obj, GtkTreeModel * model
|
||||||
obj->loader = db_file_loader_new (obj->host, obj->path);
|
obj->loader = db_file_loader_new (obj->host, obj->path);
|
||||||
|
|
||||||
if (obj->tooltip_path && !obj->tooltips)
|
if (obj->tooltip_path && !obj->tooltips)
|
||||||
|
{
|
||||||
obj->tooltips = g_hash_table_new_full
|
obj->tooltips = g_hash_table_new_full
|
||||||
((GHashFunc) g_direct_hash, (GEqualFunc) g_direct_equal,
|
((GHashFunc) g_direct_hash, (GEqualFunc) g_direct_equal,
|
||||||
(GDestroyNotify) NULL, (GDestroyNotify) free_tooltip_data);
|
(GDestroyNotify) NULL, (GDestroyNotify) free_tooltip_data);
|
||||||
g_object_set (view, "has-tooltip", TRUE, NULL);
|
g_object_set (view, "has-tooltip", TRUE, NULL);
|
||||||
g_signal_connect (view, "query-tooltip",
|
g_signal_connect (view, "query-tooltip",
|
||||||
G_CALLBACK (vn_column_image_on_query_tooltip), obj);
|
G_CALLBACK (vn_column_image_on_query_tooltip), obj);
|
||||||
|
}
|
||||||
|
|
||||||
data = g_new (DownloadData, 1);
|
data = g_new (DownloadData, 1);
|
||||||
data->obj = g_object_ref (obj);
|
data->obj = g_object_ref (obj);
|
||||||
|
@ -344,8 +346,6 @@ static void vn_column_image_set_value (VnColumnImage * obj, GtkTreeModel * model
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vn_column_image_set_editable (VnColumn * obj, gboolean editable){}
|
|
||||||
|
|
||||||
static void vn_column_image_on_model_changed (VnColumnImage * obj)
|
static void vn_column_image_on_model_changed (VnColumnImage * obj)
|
||||||
{
|
{
|
||||||
if (obj->loader)
|
if (obj->loader)
|
||||||
|
@ -366,6 +366,8 @@ static void vn_column_image_on_model_changed (VnColumnImage * obj)
|
||||||
obj->tooltips = NULL;
|
obj->tooltips = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void vn_column_image_set_editable (VnColumn * obj, gboolean editable){}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Property
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Property
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -447,7 +449,7 @@ static void vn_column_image_finalize (VnColumnImage * obj)
|
||||||
if (obj->loader)
|
if (obj->loader)
|
||||||
{
|
{
|
||||||
db_file_loader_cancel_all (obj->loader);
|
db_file_loader_cancel_all (obj->loader);
|
||||||
g_object_unref (obj->loader);
|
g_object_unref (obj->loader);//XXX
|
||||||
}
|
}
|
||||||
|
|
||||||
if (obj->loaded)
|
if (obj->loaded)
|
||||||
|
|
|
@ -39,11 +39,12 @@ struct _VnColumnImage
|
||||||
VnColumn parent;
|
VnColumn parent;
|
||||||
gchar * host;
|
gchar * host;
|
||||||
gchar * path;
|
gchar * path;
|
||||||
gchar * tooltip_path;
|
|
||||||
gint tooltip_size;
|
|
||||||
DbFileLoader * loader;
|
DbFileLoader * loader;
|
||||||
GHashTable * loaded;
|
GHashTable * loaded;
|
||||||
|
gchar * tooltip_path;
|
||||||
|
gint tooltip_size;
|
||||||
GHashTable * tooltips;
|
GHashTable * tooltips;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _VnColumnImageClass
|
struct _VnColumnImageClass
|
||||||
|
|
|
@ -19,12 +19,95 @@
|
||||||
|
|
||||||
G_DEFINE_TYPE (VnColumnSpin, vn_column_spin, VN_TYPE_COLUMN);
|
G_DEFINE_TYPE (VnColumnSpin, vn_column_spin, VN_TYPE_COLUMN);
|
||||||
|
|
||||||
|
static void vn_column_entry_cb_edited (GtkCellRendererText * cell,
|
||||||
|
const gchar * path, gchar * text, VnColumnSpin * obj)
|
||||||
|
{
|
||||||
|
GValue value = {0};
|
||||||
|
|
||||||
|
if (g_strcmp0 (text, ""))
|
||||||
|
{
|
||||||
|
g_value_init (&value, G_TYPE_STRING);
|
||||||
|
g_value_set_string (&value, text);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
g_value_init (&value, GVN_TYPE_NULL);
|
||||||
|
|
||||||
|
VN_COLUMN_GET_CLASS (obj)->value_changed (VN_COLUMN (obj), path, &value);
|
||||||
|
g_value_unset (&value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vn_column_spin_set_editable (VnColumn * obj, gboolean editable)
|
||||||
|
{
|
||||||
|
g_object_set (obj->cell, "editable", editable, NULL);
|
||||||
|
|
||||||
|
if (editable)
|
||||||
|
g_signal_connect (obj->cell, "edited",
|
||||||
|
G_CALLBACK (vn_column_entry_cb_edited), obj);
|
||||||
|
else
|
||||||
|
g_signal_handlers_disconnect_by_func (obj->cell,
|
||||||
|
vn_column_entry_cb_edited, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vn_column_spin_set_value (VnColumnSpin * obj, GtkTreeModel * model,
|
||||||
|
GtkTreeIter * iter, GtkCellRenderer * cell, const GValue * value)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PROP_CLIMB_RATE = 1
|
||||||
|
,PROP_DIGITS
|
||||||
|
,PROP_VALUE_TYPE
|
||||||
|
};
|
||||||
|
|
||||||
|
static void vn_column_spin_set_property (VnColumnSpin * obj, guint id,
|
||||||
|
const GValue * value, GParamSpec * pspec)
|
||||||
|
{
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
case PROP_CLIMB_RATE:
|
||||||
|
g_object_set (VN_COLUMN (obj)->cell,
|
||||||
|
"climb-rate", g_value_get_double (value), NULL);
|
||||||
|
break;
|
||||||
|
case PROP_DIGITS:
|
||||||
|
g_object_set (VN_COLUMN (obj)->cell,
|
||||||
|
"digits", g_value_get_uint (value), NULL);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static void vn_column_spin_get_property (VnColumnSpin * obj, guint id,
|
||||||
|
GValue * value, GParamSpec * pspec)
|
||||||
|
{
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
case PROP_CLIMB_RATE:
|
||||||
|
{
|
||||||
|
gdouble climb_rate;
|
||||||
|
g_object_get (value, "climb-rate", &climb_rate, NULL);
|
||||||
|
g_value_set_double (value, climb_rate);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PROP_DIGITS:
|
||||||
|
{
|
||||||
|
guint digits;
|
||||||
|
g_object_get (VN_COLUMN (obj)->cell, "digits", &digits, NULL);
|
||||||
|
g_value_set_uint (value, digits);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void vn_column_spin_init (VnColumnSpin * obj)
|
static void vn_column_spin_init (VnColumnSpin * obj)
|
||||||
{
|
{
|
||||||
GtkCellRenderer * cell = gtk_cell_renderer_spin_new ();
|
GtkCellRenderer * cell = gtk_cell_renderer_spin_new ();
|
||||||
VN_COLUMN_GET_CLASS (obj)->set_renderer (VN_COLUMN (obj), cell);
|
VN_COLUMN_GET_CLASS (obj)->set_renderer (VN_COLUMN (obj), cell);
|
||||||
|
//??g_object_bind_property (obj, "digits", VN_COLUMN (obj)->cell, "digits");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vn_column_spin_finalize (VnColumnSpin * obj)
|
static void vn_column_spin_finalize (VnColumnSpin * obj)
|
||||||
|
@ -35,5 +118,26 @@ static void vn_column_spin_finalize (VnColumnSpin * obj)
|
||||||
static void vn_column_spin_class_init (VnColumnSpinClass * klass)
|
static void vn_column_spin_class_init (VnColumnSpinClass * klass)
|
||||||
{
|
{
|
||||||
GObjectClass * k = G_OBJECT_CLASS (klass);
|
GObjectClass * k = G_OBJECT_CLASS (klass);
|
||||||
|
VnColumnClass * col_k = VN_COLUMN_CLASS (klass);
|
||||||
k->finalize = (GObjectFinalizeFunc) vn_column_spin_finalize;
|
k->finalize = (GObjectFinalizeFunc) vn_column_spin_finalize;
|
||||||
|
k->set_property = (GObjectSetPropertyFunc) vn_column_spin_set_property;
|
||||||
|
k->get_property = (GObjectGetPropertyFunc) vn_column_spin_get_property;
|
||||||
|
col_k->set_value = (VnColumnSetValueFunc) vn_column_spin_set_value;
|
||||||
|
col_k->set_editable = (VnColumnSetEditableFunc) vn_column_spin_set_editable;
|
||||||
|
|
||||||
|
g_object_class_install_property (k, PROP_CLIMB_RATE,
|
||||||
|
g_param_spec_double ("climb-rate"
|
||||||
|
,_("Climb rate")
|
||||||
|
,_("The acceleration rate when you hold down a button.")
|
||||||
|
,0 ,0 ,0
|
||||||
|
,G_PARAM_CONSTRUCT | G_PARAM_READWRITE
|
||||||
|
));
|
||||||
|
|
||||||
|
g_object_class_install_property (k, PROP_DIGITS,
|
||||||
|
g_param_spec_uint ("digits"
|
||||||
|
,_("Digits")
|
||||||
|
,_("The number of decimal places to display.")
|
||||||
|
,0 ,20 ,0
|
||||||
|
,G_PARAM_CONSTRUCT | G_PARAM_READWRITE
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ field_include_HEADERS = \
|
||||||
vn-http-image.h
|
vn-http-image.h
|
||||||
|
|
||||||
AM_CPPFLAGS = \
|
AM_CPPFLAGS = \
|
||||||
|
-D_IMAGE_DIR=\"$(vn_imagedir)\" \
|
||||||
-I$(top_srcdir) \
|
-I$(top_srcdir) \
|
||||||
$(gtk_CFLAGS)
|
$(gtk_CFLAGS)
|
||||||
libvnfield_la_LIBADD = $(gtk_LIBS)
|
libvnfield_la_LIBADD = $(gtk_LIBS)
|
||||||
|
|
|
@ -29,7 +29,13 @@
|
||||||
* A combo box widget to select from a list of items, selected from a
|
* A combo box widget to select from a list of items, selected from a
|
||||||
* database.
|
* database.
|
||||||
*/
|
*/
|
||||||
G_DEFINE_TYPE (VnCombo, vn_combo, VN_TYPE_FIELD);
|
|
||||||
|
static void vn_combo_model_holder_interface_init (DbModelHolderInterface * iface);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_CODE (VnCombo, vn_combo, VN_TYPE_FIELD,
|
||||||
|
G_IMPLEMENT_INTERFACE (DB_TYPE_MODEL_HOLDER,
|
||||||
|
vn_combo_model_holder_interface_init)
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vn_combo_new:
|
* vn_combo_new:
|
||||||
|
@ -44,20 +50,6 @@ VnField * vn_combo_new (DbModel * model)
|
||||||
return g_object_new (VN_TYPE_COMBO, "model", model, NULL);
|
return g_object_new (VN_TYPE_COMBO, "model", model, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* vn_combo_new_with_sql:
|
|
||||||
* @conn: the connection used to create the combo model
|
|
||||||
* @sql: the SQL query used to create the combo model
|
|
||||||
*
|
|
||||||
* Creates a new #VnCombo
|
|
||||||
*
|
|
||||||
* Return value: a #VnCombo
|
|
||||||
**/
|
|
||||||
VnField * vn_combo_new_with_sql (DbConn * conn, const gchar * sql)
|
|
||||||
{
|
|
||||||
return g_object_new (VN_TYPE_COMBO, "sql", sql, "conn", conn, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private
|
||||||
|
|
||||||
static void vn_combo_cb_changed (GtkComboBox * combo, VnCombo * obj)
|
static void vn_combo_cb_changed (GtkComboBox * combo, VnCombo * obj)
|
||||||
|
@ -108,37 +100,20 @@ static void vn_combo_cb_status_changed (DbModel * model, DbModelStatus status, V
|
||||||
{
|
{
|
||||||
gtk_combo_box_set_model (obj->combo, obj->tree);
|
gtk_combo_box_set_model (obj->combo, obj->tree);
|
||||||
vn_combo_on_model_ready (obj, vn_field_get_value (VN_FIELD (obj)));
|
vn_combo_on_model_ready (obj, vn_field_get_value (VN_FIELD (obj)));
|
||||||
|
|
||||||
|
db_model_use_null_row (model, vn_field_get_null (VN_FIELD (obj)));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
gtk_combo_box_set_model (obj->combo, NULL);
|
gtk_combo_box_set_model (obj->combo, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
|
||||||
|
|
||||||
/**
|
static DbModel * vn_combo_get_model (VnCombo * obj)
|
||||||
* vn_combo_set_conn:
|
|
||||||
* @obj: a #VnCombo
|
|
||||||
* @conn: the #DbConn
|
|
||||||
*
|
|
||||||
* Sets the connection used to create the combo model.
|
|
||||||
**/
|
|
||||||
void vn_combo_set_conn (VnCombo * obj, DbConn * conn)
|
|
||||||
{
|
{
|
||||||
g_return_if_fail (VN_IS_COMBO (obj));
|
return obj->model;
|
||||||
g_return_if_fail (DB_IS_CONN (conn));
|
|
||||||
g_return_if_fail (obj->model);
|
|
||||||
|
|
||||||
db_model_set_conn (obj->model, conn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static void vn_combo_set_model (VnCombo * obj, DbModel * model)
|
||||||
* vn_combo_set_model:
|
|
||||||
* @obj: a #VnCombo
|
|
||||||
* @model: the #DbModel
|
|
||||||
*
|
|
||||||
* Sets the SQL query used to create the combo model.
|
|
||||||
**/
|
|
||||||
void vn_combo_set_model (VnCombo * obj, DbModel * model)
|
|
||||||
{
|
{
|
||||||
g_return_if_fail (VN_IS_COMBO (obj));
|
g_return_if_fail (VN_IS_COMBO (obj));
|
||||||
g_return_if_fail (DB_IS_MODEL (model) || !model);
|
g_return_if_fail (DB_IS_MODEL (model) || !model);
|
||||||
|
@ -161,6 +136,8 @@ void vn_combo_set_model (VnCombo * obj, DbModel * model)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vn_combo_get_index_column:
|
* vn_combo_get_index_column:
|
||||||
* @obj: a #VnCombo
|
* @obj: a #VnCombo
|
||||||
|
@ -230,8 +207,6 @@ enum
|
||||||
PROP_INDEX_COLUMN = 1
|
PROP_INDEX_COLUMN = 1
|
||||||
,PROP_SHOW_COLUMN
|
,PROP_SHOW_COLUMN
|
||||||
,PROP_MODEL
|
,PROP_MODEL
|
||||||
,PROP_CONN
|
|
||||||
,PROP_SQL
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void vn_combo_set_property (VnCombo * obj, guint property_id,
|
static void vn_combo_set_property (VnCombo * obj, guint property_id,
|
||||||
|
@ -248,22 +223,6 @@ static void vn_combo_set_property (VnCombo * obj, guint property_id,
|
||||||
case PROP_MODEL:
|
case PROP_MODEL:
|
||||||
vn_combo_set_model (obj, g_value_get_object (value));
|
vn_combo_set_model (obj, g_value_get_object (value));
|
||||||
break;
|
break;
|
||||||
case PROP_CONN:
|
|
||||||
vn_combo_set_conn (obj, g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
case PROP_SQL:
|
|
||||||
{
|
|
||||||
const gchar * sql = g_value_get_string (value);
|
|
||||||
|
|
||||||
if (sql)
|
|
||||||
{
|
|
||||||
DbModel * model = db_model_new_with_sql (NULL, g_value_get_string (value));
|
|
||||||
vn_combo_set_model (obj, model);
|
|
||||||
g_object_unref (model);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -283,9 +242,6 @@ static void vn_combo_get_property (VnCombo * obj, guint property_id,
|
||||||
case PROP_MODEL:
|
case PROP_MODEL:
|
||||||
g_value_set_object (value, obj->model);
|
g_value_set_object (value, obj->model);
|
||||||
break;
|
break;
|
||||||
case PROP_CONN:
|
|
||||||
g_value_set_object (value, db_model_get_conn (obj->model));
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -323,6 +279,8 @@ static void vn_combo_class_init (VnComboClass * klass)
|
||||||
k->get_property = (GObjectGetPropertyFunc) vn_combo_get_property;
|
k->get_property = (GObjectGetPropertyFunc) vn_combo_get_property;
|
||||||
VN_FIELD_CLASS (klass)->set_value = (VnFieldSetValueFunc) vn_combo_set_value;
|
VN_FIELD_CLASS (klass)->set_value = (VnFieldSetValueFunc) vn_combo_set_value;
|
||||||
|
|
||||||
|
g_object_class_override_property (k, PROP_MODEL, "model");
|
||||||
|
|
||||||
g_object_class_install_property (k, PROP_INDEX_COLUMN,
|
g_object_class_install_property (k, PROP_INDEX_COLUMN,
|
||||||
g_param_spec_uint ("index-column"
|
g_param_spec_uint ("index-column"
|
||||||
,_("Index column")
|
,_("Index column")
|
||||||
|
@ -337,25 +295,10 @@ static void vn_combo_class_init (VnComboClass * klass)
|
||||||
,0, 255, 1
|
,0, 255, 1
|
||||||
,G_PARAM_CONSTRUCT | G_PARAM_READWRITE
|
,G_PARAM_CONSTRUCT | G_PARAM_READWRITE
|
||||||
));
|
));
|
||||||
g_object_class_install_property (k, PROP_MODEL,
|
}
|
||||||
g_param_spec_object ("model"
|
|
||||||
,_("Model")
|
static void vn_combo_model_holder_interface_init (DbModelHolderInterface * iface)
|
||||||
,_("The model from which the combo takes the values shown in the list")
|
{
|
||||||
,DB_TYPE_MODEL
|
iface->get_model = (DbModelHolderGetModelFunc) vn_combo_get_model;
|
||||||
,G_PARAM_READWRITE
|
iface->set_model = (DbModelHolderSetModelFunc) vn_combo_set_model;
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_CONN,
|
|
||||||
g_param_spec_object ("conn"
|
|
||||||
,_("Connection")
|
|
||||||
,_("The connection used by the model")
|
|
||||||
,DB_TYPE_CONN
|
|
||||||
,G_PARAM_READWRITE
|
|
||||||
));
|
|
||||||
g_object_class_install_property (k, PROP_SQL,
|
|
||||||
g_param_spec_string ("sql"
|
|
||||||
,_("SQL")
|
|
||||||
,_("The SQL query used to create the model")
|
|
||||||
, NULL
|
|
||||||
,G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ typedef struct _VnComboClass VnComboClass;
|
||||||
struct _VnCombo
|
struct _VnCombo
|
||||||
{
|
{
|
||||||
VnField parent;
|
VnField parent;
|
||||||
|
/* <private> */
|
||||||
DbModel * model;
|
DbModel * model;
|
||||||
GtkComboBox * combo;
|
GtkComboBox * combo;
|
||||||
GtkCellRenderer * cell;
|
GtkCellRenderer * cell;
|
||||||
|
@ -49,9 +50,6 @@ struct _VnComboClass
|
||||||
|
|
||||||
GType vn_combo_get_type ();
|
GType vn_combo_get_type ();
|
||||||
VnField * vn_combo_new (DbModel * model);
|
VnField * vn_combo_new (DbModel * model);
|
||||||
VnField * vn_combo_new_with_sql (DbConn * conn, const gchar * sql);
|
|
||||||
void vn_combo_set_conn (VnCombo * obj, DbConn * conn);
|
|
||||||
void vn_combo_set_model (VnCombo * obj, DbModel * model);
|
|
||||||
guint vn_combo_get_index_column (VnCombo * obj);
|
guint vn_combo_get_index_column (VnCombo * obj);
|
||||||
void vn_combo_set_index_column (VnCombo * obj, guint column);
|
void vn_combo_set_index_column (VnCombo * obj, guint column);
|
||||||
guint vn_combo_get_show_column (VnCombo * obj);
|
guint vn_combo_get_show_column (VnCombo * obj);
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue