* ```
*/
+/* {{{ GtkStringObject */
+
/**
* GtkStringObject:
*
return self->string;
}
+/* }}} */
+/* {{{ List model implementation */
+
struct _GtkStringList
{
GObject parent_instance;
iface->get_item = gtk_string_list_get_item;
}
+/* }}} */
+/* {{{ Buildable implementation */
+
typedef struct
{
GtkBuilder *builder;
iface->custom_finished = gtk_string_list_buildable_custom_finished;
}
+/* }}} */
+/* {{{ GObject implementation */
+
+enum {
+ PROP_STRINGS = 1
+};
+
G_DEFINE_TYPE_WITH_CODE (GtkStringList, gtk_string_list, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
gtk_string_list_buildable_init)
G_OBJECT_CLASS (gtk_string_list_parent_class)->dispose (object);
}
+static void
+gtk_string_list_set_property (GObject *object,
+ unsigned int prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GtkStringList *self = GTK_STRING_LIST (object);
+
+ switch (prop_id)
+ {
+ case PROP_STRINGS:
+ gtk_string_list_splice (self, 0, 0,
+ (const char * const *) g_value_get_boxed (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
static void
gtk_string_list_class_init (GtkStringListClass *class)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (class);
gobject_class->dispose = gtk_string_list_dispose;
+ gobject_class->set_property = gtk_string_list_set_property;
+
+ g_object_class_install_property (gobject_class, PROP_STRINGS,
+ g_param_spec_boxed ("strings", NULL, NULL,
+ G_TYPE_STRV,
+ G_PARAM_WRITABLE|G_PARAM_STATIC_STRINGS|G_PARAM_CONSTRUCT_ONLY));
}
static void
objects_init (&self->items);
}
+/* }}} */
+/* {{{ Public API */
+
/**
* gtk_string_list_new:
* @strings: (array zero-terminated=1) (nullable): The strings to put in the model
GtkStringList *
gtk_string_list_new (const char * const *strings)
{
- GtkStringList *self;
-
- self = g_object_new (GTK_TYPE_STRING_LIST, NULL);
-
- gtk_string_list_splice (self, 0, 0, strings);
-
- return self;
+ return g_object_new (GTK_TYPE_STRING_LIST,
+ "strings", strings,
+ NULL);
}
/**
return objects_get (&self->items, position)->string;
}
+
+/* }}} */
+/* vim:set foldmethod=marker expandtab: */
g_object_unref (builder);
}
+static void
+test_create_builder2 (void)
+{
+ const char *ui =
+"<interface>"
+" <object class=\"GtkStringList\" id=\"list\">"
+" <property name=\"strings\">a\nb\nc</property>"
+" </object>"
+"</interface>";
+ GtkBuilder *builder;
+ GtkStringList *list;
+
+ builder = gtk_builder_new_from_string (ui, -1);
+ list = GTK_STRING_LIST (gtk_builder_get_object (builder, "list"));
+ assert_model (list, "a b c");
+
+ g_object_unref (builder);
+}
+
static void
test_get_string (void)
{
g_test_add_func ("/stringlist/create/empty", test_create_empty);
g_test_add_func ("/stringlist/create/strv", test_create_strv);
g_test_add_func ("/stringlist/create/builder", test_create_builder);
+ g_test_add_func ("/stringlist/create/builder2", test_create_builder2);
g_test_add_func ("/stringlist/get_string", test_get_string);
g_test_add_func ("/stringlist/splice", test_splice);
g_test_add_func ("/stringlist/add_remove", test_add_remove);