/* iscannable-group.c generated by valac 0.25.3.3-7022, the Vala compiler
 * generated from iscannable-group.vala, do not modify */


#include <glib.h>
#include <glib-object.h>


#define CARIBOU_TYPE_ISCANNABLE_GROUP (caribou_iscannable_group_get_type ())
#define CARIBOU_ISCANNABLE_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_ISCANNABLE_GROUP, CaribouIScannableGroup))
#define CARIBOU_IS_ISCANNABLE_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_ISCANNABLE_GROUP))
#define CARIBOU_ISCANNABLE_GROUP_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), CARIBOU_TYPE_ISCANNABLE_GROUP, CaribouIScannableGroupIface))

typedef struct _CaribouIScannableGroup CaribouIScannableGroup;
typedef struct _CaribouIScannableGroupIface CaribouIScannableGroupIface;

#define CARIBOU_TYPE_ISCANNABLE_ITEM (caribou_iscannable_item_get_type ())
#define CARIBOU_ISCANNABLE_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_ISCANNABLE_ITEM, CaribouIScannableItem))
#define CARIBOU_IS_ISCANNABLE_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_ISCANNABLE_ITEM))
#define CARIBOU_ISCANNABLE_ITEM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), CARIBOU_TYPE_ISCANNABLE_ITEM, CaribouIScannableItemIface))

typedef struct _CaribouIScannableItem CaribouIScannableItem;
typedef struct _CaribouIScannableItemIface CaribouIScannableItemIface;

#define CARIBOU_TYPE_SCAN_GROUPING (caribou_scan_grouping_get_type ())

struct _CaribouIScannableItemIface {
	GTypeInterface parent_iface;
	gboolean (*get_scan_stepping) (CaribouIScannableItem* self);
	void (*set_scan_stepping) (CaribouIScannableItem* self, gboolean value);
	gboolean (*get_scan_selected) (CaribouIScannableItem* self);
	void (*set_scan_selected) (CaribouIScannableItem* self, gboolean value);
};

typedef enum  {
	CARIBOU_SCAN_GROUPING_NONE,
	CARIBOU_SCAN_GROUPING_SUBGROUPS,
	CARIBOU_SCAN_GROUPING_ROWS,
	CARIBOU_SCAN_GROUPING_LINEAR
} CaribouScanGrouping;

struct _CaribouIScannableGroupIface {
	GTypeInterface parent_iface;
	CaribouIScannableItem* (*child_select) (CaribouIScannableGroup* self);
	void (*scan_reset) (CaribouIScannableGroup* self);
	CaribouIScannableItem** (*get_scan_children) (CaribouIScannableGroup* self, int* result_length1);
	CaribouIScannableItem* (*child_step) (CaribouIScannableGroup* self, gint cycles);
	CaribouIScannableItem** (*get_step_path) (CaribouIScannableGroup* self, int* result_length1);
	CaribouIScannableItem** (*get_selected_path) (CaribouIScannableGroup* self, int* result_length1);
	CaribouScanGrouping (*get_scan_grouping) (CaribouIScannableGroup* self);
	void (*set_scan_grouping) (CaribouIScannableGroup* self, CaribouScanGrouping value);
};



GType caribou_iscannable_item_get_type (void) G_GNUC_CONST;
GType caribou_scan_grouping_get_type (void) G_GNUC_CONST;
GType caribou_iscannable_group_get_type (void) G_GNUC_CONST;
CaribouIScannableItem* caribou_iscannable_group_child_select (CaribouIScannableGroup* self);
void caribou_iscannable_group_scan_reset (CaribouIScannableGroup* self);
CaribouIScannableItem** caribou_iscannable_group_get_scan_children (CaribouIScannableGroup* self, int* result_length1);
CaribouIScannableItem* caribou_iscannable_group_child_step (CaribouIScannableGroup* self, gint cycles);
CaribouIScannableItem** caribou_iscannable_group_get_step_path (CaribouIScannableGroup* self, int* result_length1);
CaribouIScannableItem** caribou_iscannable_group_get_selected_path (CaribouIScannableGroup* self, int* result_length1);
CaribouScanGrouping caribou_iscannable_group_get_scan_grouping (CaribouIScannableGroup* self);
void caribou_iscannable_group_set_scan_grouping (CaribouIScannableGroup* self, CaribouScanGrouping value);


CaribouIScannableItem* caribou_iscannable_group_child_select (CaribouIScannableGroup* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return CARIBOU_ISCANNABLE_GROUP_GET_INTERFACE (self)->child_select (self);
}


void caribou_iscannable_group_scan_reset (CaribouIScannableGroup* self) {
	g_return_if_fail (self != NULL);
	CARIBOU_ISCANNABLE_GROUP_GET_INTERFACE (self)->scan_reset (self);
}


CaribouIScannableItem** caribou_iscannable_group_get_scan_children (CaribouIScannableGroup* self, int* result_length1) {
	g_return_val_if_fail (self != NULL, NULL);
	return CARIBOU_ISCANNABLE_GROUP_GET_INTERFACE (self)->get_scan_children (self, result_length1);
}


CaribouIScannableItem* caribou_iscannable_group_child_step (CaribouIScannableGroup* self, gint cycles) {
	g_return_val_if_fail (self != NULL, NULL);
	return CARIBOU_ISCANNABLE_GROUP_GET_INTERFACE (self)->child_step (self, cycles);
}


CaribouIScannableItem** caribou_iscannable_group_get_step_path (CaribouIScannableGroup* self, int* result_length1) {
	g_return_val_if_fail (self != NULL, NULL);
	return CARIBOU_ISCANNABLE_GROUP_GET_INTERFACE (self)->get_step_path (self, result_length1);
}


CaribouIScannableItem** caribou_iscannable_group_get_selected_path (CaribouIScannableGroup* self, int* result_length1) {
	g_return_val_if_fail (self != NULL, NULL);
	return CARIBOU_ISCANNABLE_GROUP_GET_INTERFACE (self)->get_selected_path (self, result_length1);
}


CaribouScanGrouping caribou_iscannable_group_get_scan_grouping (CaribouIScannableGroup* self) {
	g_return_val_if_fail (self != NULL, 0);
	return CARIBOU_ISCANNABLE_GROUP_GET_INTERFACE (self)->get_scan_grouping (self);
}


void caribou_iscannable_group_set_scan_grouping (CaribouIScannableGroup* self, CaribouScanGrouping value) {
	g_return_if_fail (self != NULL);
	CARIBOU_ISCANNABLE_GROUP_GET_INTERFACE (self)->set_scan_grouping (self, value);
}


static void caribou_iscannable_group_base_init (CaribouIScannableGroupIface * iface) {
	static gboolean initialized = FALSE;
	if (!initialized) {
		initialized = TRUE;
		g_object_interface_install_property (iface, g_param_spec_enum ("scan-grouping", "scan-grouping", "scan-grouping", CARIBOU_TYPE_SCAN_GROUPING, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
		g_signal_new ("selected_item_changed", CARIBOU_TYPE_ISCANNABLE_GROUP, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, CARIBOU_TYPE_ISCANNABLE_ITEM);
		g_signal_new ("step_item_changed", CARIBOU_TYPE_ISCANNABLE_GROUP, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, CARIBOU_TYPE_ISCANNABLE_ITEM);
		g_signal_new ("scan_cleared", CARIBOU_TYPE_ISCANNABLE_GROUP, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
	}
}


/**
     * Interface implemented by containers of selectable items in scanning mode.
     */
GType caribou_iscannable_group_get_type (void) {
	static volatile gsize caribou_iscannable_group_type_id__volatile = 0;
	if (g_once_init_enter (&caribou_iscannable_group_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (CaribouIScannableGroupIface), (GBaseInitFunc) caribou_iscannable_group_base_init, (GBaseFinalizeFunc) NULL, (GClassInitFunc) NULL, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
		GType caribou_iscannable_group_type_id;
		caribou_iscannable_group_type_id = g_type_register_static (G_TYPE_INTERFACE, "CaribouIScannableGroup", &g_define_type_info, 0);
		g_type_interface_add_prerequisite (caribou_iscannable_group_type_id, G_TYPE_OBJECT);
		g_once_init_leave (&caribou_iscannable_group_type_id__volatile, caribou_iscannable_group_type_id);
	}
	return caribou_iscannable_group_type_id__volatile;
}


GType caribou_scan_grouping_get_type (void) {
	static volatile gsize caribou_scan_grouping_type_id__volatile = 0;
	if (g_once_init_enter (&caribou_scan_grouping_type_id__volatile)) {
		static const GEnumValue values[] = {{CARIBOU_SCAN_GROUPING_NONE, "CARIBOU_SCAN_GROUPING_NONE", "none"}, {CARIBOU_SCAN_GROUPING_SUBGROUPS, "CARIBOU_SCAN_GROUPING_SUBGROUPS", "subgroups"}, {CARIBOU_SCAN_GROUPING_ROWS, "CARIBOU_SCAN_GROUPING_ROWS", "rows"}, {CARIBOU_SCAN_GROUPING_LINEAR, "CARIBOU_SCAN_GROUPING_LINEAR", "linear"}, {0, NULL, NULL}};
		GType caribou_scan_grouping_type_id;
		caribou_scan_grouping_type_id = g_enum_register_static ("CaribouScanGrouping", values);
		g_once_init_leave (&caribou_scan_grouping_type_id__volatile, caribou_scan_grouping_type_id);
	}
	return caribou_scan_grouping_type_id__volatile;
}



