2007-11-15 Neil J. Patel <njp@o-hand.com>
* clutter/Makefile.am: * clutter/clutter-model.c: * clutter/clutter-model.h: * clutter/clutter.h: * tests/Makefile.am: * tests/test-model.c: Merged ClutterModel, which closes #443.
This commit is contained in:
parent
baad0f5b0d
commit
70e09ab9df
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2007-11-15 Neil J. Patel <njp@o-hand.com>
|
||||||
|
|
||||||
|
* clutter/Makefile.am:
|
||||||
|
* clutter/clutter-model.c:
|
||||||
|
* clutter/clutter-model.h:
|
||||||
|
* clutter/clutter.h:
|
||||||
|
* tests/Makefile.am:
|
||||||
|
* tests/test-model.c:
|
||||||
|
Merged ClutterModel, which closes #443.
|
||||||
|
|
||||||
2007-11-14 Emmanuele Bassi <ebassi@openedhand.com>
|
2007-11-14 Emmanuele Bassi <ebassi@openedhand.com>
|
||||||
|
|
||||||
* clutter/clutter-clone-texture.c (set_parent_texture): Hide the
|
* clutter/clutter-clone-texture.c (set_parent_texture): Hide the
|
||||||
|
@ -67,6 +67,7 @@ source_h = \
|
|||||||
$(srcdir)/clutter-layout.h \
|
$(srcdir)/clutter-layout.h \
|
||||||
$(srcdir)/clutter-main.h \
|
$(srcdir)/clutter-main.h \
|
||||||
$(srcdir)/clutter-media.h \
|
$(srcdir)/clutter-media.h \
|
||||||
|
$(srcdir)/clutter-model.h \
|
||||||
$(srcdir)/clutter-rectangle.h \
|
$(srcdir)/clutter-rectangle.h \
|
||||||
$(srcdir)/clutter-score.h \
|
$(srcdir)/clutter-score.h \
|
||||||
$(srcdir)/clutter-script.h \
|
$(srcdir)/clutter-script.h \
|
||||||
@ -153,6 +154,7 @@ source_c = \
|
|||||||
clutter-main.c \
|
clutter-main.c \
|
||||||
clutter-marshal.c \
|
clutter-marshal.c \
|
||||||
clutter-media.c \
|
clutter-media.c \
|
||||||
|
clutter-model.c \
|
||||||
clutter-rectangle.c \
|
clutter-rectangle.c \
|
||||||
clutter-score.c \
|
clutter-score.c \
|
||||||
clutter-script.c \
|
clutter-script.c \
|
||||||
|
1991
clutter/clutter-model.c
Normal file
1991
clutter/clutter-model.c
Normal file
File diff suppressed because it is too large
Load Diff
302
clutter/clutter-model.h
Normal file
302
clutter/clutter-model.h
Normal file
@ -0,0 +1,302 @@
|
|||||||
|
/*
|
||||||
|
* Clutter.
|
||||||
|
*
|
||||||
|
* An OpenGL based 'interactive canvas' library.
|
||||||
|
*
|
||||||
|
* Authored By Matthew Allum <mallum@openedhand.com>
|
||||||
|
* Neil Jagdish Patel <njp@o-hand.com>
|
||||||
|
* Emmanuele Bassi <ebassi@openedhand.com>
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 OpenedHand
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library 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
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CLUTTER_MODEL_H__
|
||||||
|
#define __CLUTTER_MODEL_H__
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <glib-object.h>
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#define CLUTTER_TYPE_MODEL (clutter_model_get_type ())
|
||||||
|
#define CLUTTER_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_MODEL, ClutterModel))
|
||||||
|
#define CLUTTER_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_MODEL, ClutterModelClass))
|
||||||
|
#define CLUTTER_IS_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_MODEL))
|
||||||
|
#define CLUTTER_IS_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_MODEL))
|
||||||
|
#define CLUTTER_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_MODEL, ClutterModelClass))
|
||||||
|
|
||||||
|
typedef struct _ClutterModel ClutterModel;
|
||||||
|
typedef struct _ClutterModelClass ClutterModelClass;
|
||||||
|
typedef struct _ClutterModelPrivate ClutterModelPrivate;
|
||||||
|
typedef struct _ClutterModelIter ClutterModelIter;
|
||||||
|
typedef struct _ClutterModelIterClass ClutterModelIterClass;
|
||||||
|
typedef struct _ClutterModelIterPrivate ClutterModelIterPrivate;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterModelFilterFunc:
|
||||||
|
* @model: a #ClutterModel
|
||||||
|
* @iter: the iterator for the row
|
||||||
|
* @user_data: data passed to clutter_model_set_filter()
|
||||||
|
*
|
||||||
|
* Filters the content of a row in the model.
|
||||||
|
*
|
||||||
|
* Return value: If the row should be displayed, return %TRUE
|
||||||
|
*
|
||||||
|
* Since: 0.6
|
||||||
|
*/
|
||||||
|
typedef gboolean (*ClutterModelFilterFunc) (ClutterModel *model,
|
||||||
|
ClutterModelIter *iter,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterModelSortFunc:
|
||||||
|
* @model: a #ClutterModel
|
||||||
|
* @a: a #GValue representing the contents of the row
|
||||||
|
* @b: a #GValue representing the contents of the second row
|
||||||
|
* @user_data: data passed to clutter_model_set_sort()
|
||||||
|
*
|
||||||
|
* Compares the content of two rows in the model.
|
||||||
|
*
|
||||||
|
* Return value: a positive integer if @a is after @b, a negative integer if
|
||||||
|
* @a is before @b, or 0 if the rows are the same
|
||||||
|
*
|
||||||
|
* Since: 0.6
|
||||||
|
*/
|
||||||
|
typedef gboolean (*ClutterModelSortFunc) (ClutterModel *model,
|
||||||
|
const GValue *a,
|
||||||
|
const GValue *b,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterModelForeachFunc:
|
||||||
|
* @model: a #ClutterModel
|
||||||
|
* @iter: the iterator for the row
|
||||||
|
* @user_data: data passed to clutter_model_foreach()
|
||||||
|
*
|
||||||
|
* Iterates on the content of a row in the model
|
||||||
|
*
|
||||||
|
* Return value: %TRUE if the iteration should continue, %FALSE otherwise
|
||||||
|
*
|
||||||
|
* Since: 0.6
|
||||||
|
*/
|
||||||
|
typedef gboolean (*ClutterModelForeachFunc) (ClutterModel *model,
|
||||||
|
ClutterModelIter *iter,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterModel:
|
||||||
|
*
|
||||||
|
* Base class for list models. The #ClutterModel structure contains
|
||||||
|
* only private data and should be manipulated using the provided
|
||||||
|
* API.
|
||||||
|
*
|
||||||
|
* Since: 0.6
|
||||||
|
*/
|
||||||
|
struct _ClutterModel
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
GObject parent_instance;
|
||||||
|
|
||||||
|
ClutterModelPrivate *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterModelClass:
|
||||||
|
* @row_added: signal class handler for ClutterModel::row-added
|
||||||
|
* @row_removed: signal class handler for ClutterModel::row-removed
|
||||||
|
* @row_changed: signal class handler for ClutterModel::row-changed
|
||||||
|
* @sort_changed: signal class handler for ClutterModel::sort-changed
|
||||||
|
* @filter_changed: signal class handler for ClutterModel::filter-changed
|
||||||
|
*
|
||||||
|
* Class for #ClutterModel instances.
|
||||||
|
*
|
||||||
|
* Since: 0.6
|
||||||
|
*/
|
||||||
|
struct _ClutterModelClass
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
GObjectClass parent_class;
|
||||||
|
|
||||||
|
/*< public >*/
|
||||||
|
/* vtable */
|
||||||
|
ClutterModelIter *(* get_iter_at_row) (ClutterModel *model,
|
||||||
|
guint index_);
|
||||||
|
|
||||||
|
/* signals */
|
||||||
|
void (* row_added) (ClutterModel *model,
|
||||||
|
ClutterModelIter *iter);
|
||||||
|
void (* row_removed) (ClutterModel *model,
|
||||||
|
ClutterModelIter *iter);
|
||||||
|
void (* row_changed) (ClutterModel *model,
|
||||||
|
ClutterModelIter *iter);
|
||||||
|
|
||||||
|
void (* sort_changed) (ClutterModel *model);
|
||||||
|
void (* filter_changed) (ClutterModel *model);
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
/* padding for future */
|
||||||
|
void (*_clutter_model_1) (void);
|
||||||
|
void (*_clutter_model_2) (void);
|
||||||
|
void (*_clutter_model_3) (void);
|
||||||
|
void (*_clutter_model_4) (void);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GType clutter_model_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
|
ClutterModel * clutter_model_new (guint n_columns,
|
||||||
|
...);
|
||||||
|
ClutterModel * clutter_model_newv (guint n_columns,
|
||||||
|
GType *types);
|
||||||
|
void clutter_model_set_types (ClutterModel *model,
|
||||||
|
guint n_columns,
|
||||||
|
GType *types);
|
||||||
|
|
||||||
|
gboolean clutter_model_append (ClutterModel *model,
|
||||||
|
...);
|
||||||
|
gboolean clutter_model_prepend (ClutterModel *model,
|
||||||
|
...);
|
||||||
|
gboolean clutter_model_insert (ClutterModel *model,
|
||||||
|
guint index_,
|
||||||
|
...);
|
||||||
|
gboolean clutter_model_insert_value (ClutterModel *model,
|
||||||
|
guint index_,
|
||||||
|
guint column,
|
||||||
|
const GValue *value);
|
||||||
|
void clutter_model_remove (ClutterModel *model,
|
||||||
|
guint index_);
|
||||||
|
guint clutter_model_get_n_rows (ClutterModel *model);
|
||||||
|
|
||||||
|
ClutterModelIter *clutter_model_get_first_iter (ClutterModel *model);
|
||||||
|
ClutterModelIter *clutter_model_get_last_iter (ClutterModel *model);
|
||||||
|
ClutterModelIter *clutter_model_get_iter_at_row (ClutterModel *model,
|
||||||
|
guint index_);
|
||||||
|
void clutter_model_set_sorting_column (ClutterModel *model,
|
||||||
|
guint column);
|
||||||
|
guint clutter_model_get_sorting_column (ClutterModel *model);
|
||||||
|
void clutter_model_foreach (ClutterModel *model,
|
||||||
|
ClutterModelForeachFunc func,
|
||||||
|
gpointer user_data);
|
||||||
|
void clutter_model_set_sort (ClutterModel *model,
|
||||||
|
guint column,
|
||||||
|
ClutterModelSortFunc func,
|
||||||
|
gpointer user_data,
|
||||||
|
GDestroyNotify notify);
|
||||||
|
void clutter_model_set_filter (ClutterModel *model,
|
||||||
|
ClutterModelFilterFunc func,
|
||||||
|
gpointer user_data,
|
||||||
|
GDestroyNotify notify);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ClutterModelIter
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CLUTTER_TYPE_MODEL_ITER (clutter_model_iter_get_type ())
|
||||||
|
#define CLUTTER_MODEL_ITER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_MODEL_ITER, ClutterModelIter))
|
||||||
|
#define CLUTTER_MODEL_ITER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_MODEL_ITER, ClutterModelIterClass))
|
||||||
|
#define CLUTTER_IS_MODEL_ITER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_MODEL_ITER))
|
||||||
|
#define CLUTTER_IS_MODEL_ITER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_MODEL_ITER))
|
||||||
|
#define CLUTTER_MODEL_ITER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_MODEL_ITER, ClutterModelIterClass))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterModelIter:
|
||||||
|
*
|
||||||
|
* Base class for list models iters. The #ClutterModelIter structure contains
|
||||||
|
* only private data and should be manipulated using the provided
|
||||||
|
* API.
|
||||||
|
*
|
||||||
|
* Since: 0.6
|
||||||
|
*/
|
||||||
|
struct _ClutterModelIter
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
GObject parent_instance;
|
||||||
|
|
||||||
|
ClutterModelIterPrivate *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterModelIterClass:
|
||||||
|
*
|
||||||
|
* Class for #ClutterModelIter instances.
|
||||||
|
*
|
||||||
|
* Since: 0.6
|
||||||
|
*/
|
||||||
|
struct _ClutterModelIterClass
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
GObjectClass parent_class;
|
||||||
|
|
||||||
|
/*< public >*/
|
||||||
|
|
||||||
|
/* vtable not signals */
|
||||||
|
void (* get_value) (ClutterModelIter *iter,
|
||||||
|
guint column,
|
||||||
|
GValue *value);
|
||||||
|
void (* set_value) (ClutterModelIter *iter,
|
||||||
|
guint column,
|
||||||
|
const GValue *value);
|
||||||
|
|
||||||
|
gboolean (* is_first) (ClutterModelIter *iter);
|
||||||
|
gboolean (* is_last) (ClutterModelIter *iter);
|
||||||
|
|
||||||
|
ClutterModelIter *(* next) (ClutterModelIter *iter);
|
||||||
|
ClutterModelIter *(* prev) (ClutterModelIter *iter);
|
||||||
|
|
||||||
|
ClutterModel* (* get_model) (ClutterModelIter *iter);
|
||||||
|
guint (* get_row) (ClutterModelIter *iter);
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
/* padding for future */
|
||||||
|
void (*_clutter_model_iter_1) (void);
|
||||||
|
void (*_clutter_model_iter_2) (void);
|
||||||
|
void (*_clutter_model_iter_3) (void);
|
||||||
|
void (*_clutter_model_iter_4) (void);
|
||||||
|
};
|
||||||
|
|
||||||
|
GType clutter_model_iter_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
|
|
||||||
|
void clutter_model_iter_get (ClutterModelIter *iter,
|
||||||
|
...);
|
||||||
|
void clutter_model_iter_get_valist (ClutterModelIter *iter,
|
||||||
|
va_list args);
|
||||||
|
void clutter_model_iter_get_value (ClutterModelIter *iter,
|
||||||
|
guint column,
|
||||||
|
GValue *value);
|
||||||
|
void clutter_model_iter_set (ClutterModelIter *iter,
|
||||||
|
...);
|
||||||
|
void clutter_model_iter_set_valist (ClutterModelIter *iter,
|
||||||
|
va_list args);
|
||||||
|
void clutter_model_iter_set_value (ClutterModelIter *iter,
|
||||||
|
guint column,
|
||||||
|
const GValue *value);
|
||||||
|
gboolean clutter_model_iter_is_first (ClutterModelIter *iter);
|
||||||
|
gboolean clutter_model_iter_is_last (ClutterModelIter *iter);
|
||||||
|
ClutterModelIter *clutter_model_iter_next (ClutterModelIter *iter);
|
||||||
|
ClutterModelIter *clutter_model_iter_prev (ClutterModelIter *iter);
|
||||||
|
ClutterModel * clutter_model_iter_get_model (ClutterModelIter *iter);
|
||||||
|
guint clutter_model_iter_get_row (ClutterModelIter *iter);
|
||||||
|
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __CLUTTER_MODEL_H__ */
|
@ -54,6 +54,7 @@
|
|||||||
#include "clutter-layout.h"
|
#include "clutter-layout.h"
|
||||||
#include "clutter-main.h"
|
#include "clutter-main.h"
|
||||||
#include "clutter-media.h"
|
#include "clutter-media.h"
|
||||||
|
#include "clutter-model.h"
|
||||||
#include "clutter-stage.h"
|
#include "clutter-stage.h"
|
||||||
#include "clutter-texture.h"
|
#include "clutter-texture.h"
|
||||||
#include "clutter-timeout-pool.h"
|
#include "clutter-timeout-pool.h"
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2007-11-15 Neil J. Patel <njp@o-hand.com>
|
||||||
|
|
||||||
|
* clutter-docs.sgml:
|
||||||
|
* clutter-sections.txt:
|
||||||
|
* clutter.types:
|
||||||
|
Added support for ClutterModel.
|
||||||
|
|
||||||
2007-11-14 Emmanuele Bassi <ebassi@openedhand.com>
|
2007-11-14 Emmanuele Bassi <ebassi@openedhand.com>
|
||||||
|
|
||||||
* clutter-sections.txt: Update with the ClutterScriptable changes
|
* clutter-sections.txt: Update with the ClutterScriptable changes
|
||||||
|
@ -145,6 +145,8 @@
|
|||||||
<xi:include href="xml/clutter-color.xml"/>
|
<xi:include href="xml/clutter-color.xml"/>
|
||||||
<xi:include href="xml/clutter-util.xml"/>
|
<xi:include href="xml/clutter-util.xml"/>
|
||||||
<xi:include href="xml/clutter-fixed.xml"/>
|
<xi:include href="xml/clutter-fixed.xml"/>
|
||||||
|
<xi:include href="xml/clutter-model.xml"/>
|
||||||
|
<xi:include href="xml/clutter-model-iter.xml"/>
|
||||||
<xi:include href="xml/clutter-version.xml"/>
|
<xi:include href="xml/clutter-version.xml"/>
|
||||||
<xi:include href="xml/clutter-units.xml"/>
|
<xi:include href="xml/clutter-units.xml"/>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
@ -1133,3 +1133,70 @@ CLUTTER_SCRIPTABLE_GET_IFACE
|
|||||||
ClutterScriptable
|
ClutterScriptable
|
||||||
clutter_scriptable_get_type
|
clutter_scriptable_get_type
|
||||||
</SECTION>
|
</SECTION>
|
||||||
|
|
||||||
|
<SECTION>
|
||||||
|
<FILE>clutter-model</FILE>
|
||||||
|
<TITLE>ClutterModel</TITLE>
|
||||||
|
ClutterModel
|
||||||
|
ClutterModelClass
|
||||||
|
ClutterModelFilterFunc
|
||||||
|
ClutterModelSortFunc
|
||||||
|
ClutterModelForeachFunc
|
||||||
|
clutter_model_new
|
||||||
|
clutter_model_newv
|
||||||
|
clutter_model_set_types
|
||||||
|
clutter_model_append
|
||||||
|
clutter_model_prepend
|
||||||
|
clutter_model_insert
|
||||||
|
clutter_model_insert_value
|
||||||
|
clutter_model_remove
|
||||||
|
clutter_model_get_n_rows
|
||||||
|
clutter_model_get_first_iter
|
||||||
|
clutter_model_get_last_iter
|
||||||
|
clutter_model_get_iter_at_row
|
||||||
|
clutter_model_set_sorting_column
|
||||||
|
clutter_model_get_sorting_column
|
||||||
|
clutter_model_foreach
|
||||||
|
clutter_model_set_sort
|
||||||
|
clutter_model_set_filter
|
||||||
|
<SUBSECTION Standard>
|
||||||
|
CLUTTER_TYPE_MODEL
|
||||||
|
CLUTTER_MODEL
|
||||||
|
CLUTTER_IS_MODEL
|
||||||
|
CLUTTER_MODEL_CLASS
|
||||||
|
CLUTTER_IS_MODEL_CLASS
|
||||||
|
CLUTTER_MODEL_GET_CLASS
|
||||||
|
<SUBSECTION Private>
|
||||||
|
ClutterModelPrivate
|
||||||
|
</SECTION>
|
||||||
|
|
||||||
|
<SECTION>
|
||||||
|
<FILE>clutter-model-iter</FILE>
|
||||||
|
<TITLE>ClutterModelIter</TITLE>
|
||||||
|
ClutterModelIter
|
||||||
|
ClutterModelIterClass
|
||||||
|
clutter_model_iter_get
|
||||||
|
clutter_model_iter_get_valist
|
||||||
|
clutter_model_iter_get_value
|
||||||
|
clutter_model_iter_set
|
||||||
|
clutter_model_iter_set_valist
|
||||||
|
clutter_model_iter_set_value
|
||||||
|
clutter_model_iter_is_first
|
||||||
|
clutter_model_iter_is_last
|
||||||
|
clutter_model_iter_next
|
||||||
|
clutter_model_iter_prev
|
||||||
|
clutter_model_iter_get_model
|
||||||
|
clutter_model_iter_get_row
|
||||||
|
<SUBSECTION Standard>
|
||||||
|
CLUTTER_TYPE_MODEL_ITER
|
||||||
|
CLUTTER_MODEL_ITER
|
||||||
|
CLUTTER_IS_MODEL_ITER
|
||||||
|
CLUTTER_MODEL_ITER_CLASS
|
||||||
|
CLUTER_IS_MODEL_ITER_CLASS
|
||||||
|
CLUTTER_MODEL_GET_CLASS
|
||||||
|
<SUBSECTION Private>
|
||||||
|
ClutterModelIterPrivate
|
||||||
|
</SECTION>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,3 +26,5 @@ clutter_hbox_get_type
|
|||||||
clutter_vbox_get_type
|
clutter_vbox_get_type
|
||||||
clutter_script_get_type
|
clutter_script_get_type
|
||||||
clutter_scriptable_get_type
|
clutter_scriptable_get_type
|
||||||
|
clutter_model_get_type
|
||||||
|
clutter_model_iter_get_type
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
noinst_PROGRAMS = test-textures test-events test-offscreen test-scale \
|
noinst_PROGRAMS = test-textures test-events test-offscreen test-scale \
|
||||||
test-actors test-behave test-text test-entry test-project \
|
test-actors test-behave test-text test-entry test-project \
|
||||||
test-boxes test-perspective test-rotate test-depth \
|
test-boxes test-perspective test-rotate test-depth \
|
||||||
test-threads test-timeline test-score test-script
|
test-threads test-timeline test-score test-script test-model
|
||||||
|
|
||||||
INCLUDES = -I$(top_srcdir)/
|
INCLUDES = -I$(top_srcdir)/
|
||||||
LDADD = $(top_builddir)/clutter/libclutter-@CLUTTER_FLAVOUR@-@CLUTTER_MAJORMINOR@.la
|
LDADD = $(top_builddir)/clutter/libclutter-@CLUTTER_FLAVOUR@-@CLUTTER_MAJORMINOR@.la
|
||||||
@ -25,5 +25,6 @@ test_threads_SOURCES = test-threads.c
|
|||||||
test_timeline_SOURCES = test-timeline.c
|
test_timeline_SOURCES = test-timeline.c
|
||||||
test_score_SOURCES = test-score.c
|
test_score_SOURCES = test-score.c
|
||||||
test_script_SOURCES = test-script.c
|
test_script_SOURCES = test-script.c
|
||||||
|
test_model_SOURCES = test-model.c
|
||||||
|
|
||||||
EXTRA_DIST = redhand.png test-script.json
|
EXTRA_DIST = redhand.png test-script.json
|
||||||
|
198
tests/test-model.c
Normal file
198
tests/test-model.c
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
#include <clutter/clutter.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_iter (ClutterModelIter *iter, const gchar *text)
|
||||||
|
{
|
||||||
|
gint i;
|
||||||
|
gchar *string;
|
||||||
|
|
||||||
|
clutter_model_iter_get (iter, 0, &i, 1, &string, -1);
|
||||||
|
g_print ("%s: %d, %s\n", text, i, string);
|
||||||
|
g_free (string);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
foreach_func (ClutterModel *model, ClutterModelIter *iter, gpointer null)
|
||||||
|
{
|
||||||
|
gint i;
|
||||||
|
gchar *string;
|
||||||
|
|
||||||
|
clutter_model_iter_get (iter, 0, &i, 1, &string, -1);
|
||||||
|
g_print ("Foreach: %d: %s\n", i, string);
|
||||||
|
|
||||||
|
g_free (string);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
filter_func (ClutterModel *model, ClutterModelIter *iter, gpointer null)
|
||||||
|
{
|
||||||
|
gint i = 0;
|
||||||
|
|
||||||
|
clutter_model_iter_get (iter, 0, &i, -1);
|
||||||
|
|
||||||
|
return !(i % 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gint
|
||||||
|
sort_func (ClutterModel *model,
|
||||||
|
const GValue *a,
|
||||||
|
const GValue *b,
|
||||||
|
gpointer null)
|
||||||
|
{
|
||||||
|
return -1 * strcmp (g_value_get_string (a), g_value_get_string (b));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_row_changed (ClutterModel *model, ClutterModelIter *iter)
|
||||||
|
{
|
||||||
|
print_iter (iter, "Changed");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
filter_model (ClutterModel *model)
|
||||||
|
{
|
||||||
|
ClutterModelIter *iter;
|
||||||
|
|
||||||
|
clutter_model_set_filter (model, filter_func, NULL, NULL);
|
||||||
|
|
||||||
|
iter = clutter_model_get_first_iter (model);
|
||||||
|
|
||||||
|
while (!clutter_model_iter_is_last (iter))
|
||||||
|
{
|
||||||
|
print_iter (iter, "Filtered Forward Iteration");
|
||||||
|
iter = clutter_model_iter_next (iter);
|
||||||
|
}
|
||||||
|
g_object_unref (iter);
|
||||||
|
|
||||||
|
clutter_model_set_sort (model, 1, sort_func, NULL, NULL);
|
||||||
|
|
||||||
|
g_signal_connect (model, "row-changed",
|
||||||
|
G_CALLBACK (on_row_changed), NULL);
|
||||||
|
|
||||||
|
iter = clutter_model_get_iter_at_row (model, 0);
|
||||||
|
clutter_model_iter_set (iter, 1, "Changed string of 0th row, automatically"
|
||||||
|
" gets sorted", -1);
|
||||||
|
g_object_unref (iter);
|
||||||
|
|
||||||
|
clutter_model_foreach (model, foreach_func, NULL);
|
||||||
|
|
||||||
|
clutter_model_set_filter (model, NULL, NULL, NULL);
|
||||||
|
while (clutter_model_get_n_rows (model))
|
||||||
|
{
|
||||||
|
clutter_model_remove (model, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
clutter_main_quit ();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
iterate (ClutterModel *model)
|
||||||
|
{
|
||||||
|
ClutterModelIter *iter;
|
||||||
|
|
||||||
|
iter = clutter_model_get_first_iter (model);
|
||||||
|
|
||||||
|
while (!clutter_model_iter_is_last (iter))
|
||||||
|
{
|
||||||
|
print_iter (iter, "Forward Iteration");
|
||||||
|
iter = clutter_model_iter_next (iter);
|
||||||
|
}
|
||||||
|
g_object_unref (iter);
|
||||||
|
|
||||||
|
iter = clutter_model_get_last_iter (model);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
print_iter (iter, "Reverse Iteration");
|
||||||
|
iter = clutter_model_iter_prev (iter);
|
||||||
|
}
|
||||||
|
while (!clutter_model_iter_is_first (iter));
|
||||||
|
|
||||||
|
print_iter (iter, "Reverse Iteration");
|
||||||
|
g_object_unref (iter);
|
||||||
|
|
||||||
|
filter_model (model);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
populate_model (ClutterModel *model)
|
||||||
|
{
|
||||||
|
gint i;
|
||||||
|
|
||||||
|
for (i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
gchar *string = g_strdup_printf ("String %d", i);
|
||||||
|
|
||||||
|
clutter_model_append (model,
|
||||||
|
0, i,
|
||||||
|
1, string,
|
||||||
|
-1);
|
||||||
|
g_free (string);
|
||||||
|
}
|
||||||
|
|
||||||
|
clutter_model_foreach (model, foreach_func, NULL);
|
||||||
|
iterate (model);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_row_added (ClutterModel *model, ClutterModelIter *iter, gpointer null)
|
||||||
|
{
|
||||||
|
gint i;
|
||||||
|
gchar *string;
|
||||||
|
|
||||||
|
clutter_model_iter_get (iter, 0, &i, 1, &string, -1);
|
||||||
|
|
||||||
|
g_print ("Added: %d, %s\n", i, string);
|
||||||
|
|
||||||
|
g_free (string);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_row_removed (ClutterModel *model, ClutterModelIter *iter, gpointer null)
|
||||||
|
{
|
||||||
|
print_iter (iter, "Removed");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_sort_changed (ClutterModel *model)
|
||||||
|
{
|
||||||
|
g_print ("\nSort Changed\n\n");
|
||||||
|
clutter_model_foreach (model, foreach_func, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_filter_changed (ClutterModel *model)
|
||||||
|
{
|
||||||
|
g_print ("\nFilter Changed\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
ClutterModel *model;
|
||||||
|
|
||||||
|
clutter_init (&argc, &argv);
|
||||||
|
|
||||||
|
model = clutter_model_new (2, G_TYPE_INT, G_TYPE_STRING);
|
||||||
|
|
||||||
|
g_timeout_add (1000, (GSourceFunc)populate_model, model);
|
||||||
|
|
||||||
|
g_signal_connect (model, "row-added",
|
||||||
|
G_CALLBACK (on_row_added), NULL);
|
||||||
|
g_signal_connect (model, "row-removed",
|
||||||
|
G_CALLBACK (on_row_removed), NULL);
|
||||||
|
g_signal_connect (model, "sort-changed",
|
||||||
|
G_CALLBACK (on_sort_changed), NULL);
|
||||||
|
g_signal_connect (model, "filter-changed",
|
||||||
|
G_CALLBACK (on_filter_changed), NULL);
|
||||||
|
|
||||||
|
clutter_main();
|
||||||
|
|
||||||
|
g_object_unref (model);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user