/* Class initialization
 * Override functions in parent classes and define properties
 * and signals
 */
static void xfdashboard_applications_menu_model_class_init(XfdashboardApplicationsMenuModelClass *klass)
{
	ClutterModelClass		*modelClass=CLUTTER_MODEL_CLASS(klass);
	GObjectClass			*gobjectClass=G_OBJECT_CLASS(klass);

	/* Override functions */
	modelClass->resort=_xfdashboard_applications_menu_model_resort;

	gobjectClass->dispose=_xfdashboard_applications_menu_model_dispose;

	/* Set up private structure */
	g_type_class_add_private(klass, sizeof(XfdashboardApplicationsMenuModelPrivate));

	/* Define signals */
	XfdashboardApplicationsMenuModelSignals[SIGNAL_LOADED]=
		g_signal_new("loaded",
						G_TYPE_FROM_CLASS(klass),
						G_SIGNAL_RUN_LAST,
						G_STRUCT_OFFSET(XfdashboardApplicationsMenuModelClass, loaded),
						NULL,
						NULL,
						g_cclosure_marshal_VOID__VOID,
						G_TYPE_NONE,
						0);
}
static void
gmc_video_model_class_init (GmcVideoModelClass *klass)
{
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
  ClutterModelClass *model_class = CLUTTER_MODEL_CLASS (klass);

  g_type_class_add_private (object_class, sizeof (GmcVideoModelPrivate));

  object_class->set_property = gmc_video_model_set_property;
  object_class->get_property = gmc_video_model_get_property;

  model_class->get_n_rows = gmc_video_model_get_n_rows;
  model_class->insert_row = gmc_video_model_insert_row;
  model_class->remove_row = gmc_video_model_remove_row;
  model_class->get_iter_at_row = gmc_video_model_get_iter_at_row;
  model_class->resort = gmc_video_model_resort;

  g_object_class_install_property (object_class,
                                   PROP_FILENAME,
                                   g_param_spec_string ("filename",
                                                        "Filename",
                                                        "The database filename",
                                                        "movies_default.db",
                                                        G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT));

}
static void
clutter_list_model_class_init (ClutterListModelClass *klass)
{
  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
  ClutterModelClass *model_class = CLUTTER_MODEL_CLASS (klass);

  g_type_class_add_private (klass, sizeof (ClutterListModelPrivate));

  gobject_class->finalize = clutter_list_model_finalize;
  gobject_class->dispose = clutter_list_model_dispose;

  model_class->get_iter_at_row = clutter_list_model_get_iter_at_row;
  model_class->insert_row      = clutter_list_model_insert_row;
  model_class->remove_row      = clutter_list_model_remove_row;
  model_class->resort          = clutter_list_model_resort;

  model_class->row_removed     = clutter_list_model_row_removed;
}
static void _xfdashboard_applications_menu_model_resort(ClutterModel *inModel,
														ClutterModelSortFunc inSortCallback,
														gpointer inUserData)
{
	g_return_if_fail(XFDASHBOARD_IS_APPLICATIONS_MENU_MODEL(inModel));

	/* If given sort function is NULL use default one */
	if(inSortCallback==NULL)
	{
		gint	sortColumn=clutter_model_get_sorting_column(inModel);

		switch(sortColumn)
		{
			case XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_SEQUENCE_ID:
				inSortCallback=_xfdashboard_applications_menu_model_resort_uint_callback;
				break;

			case XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_MENU_ELEMENT:
				inSortCallback=_xfdashboard_applications_menu_model_resort_menu_element_callback;
				break;

			case XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_PARENT_MENU:
				inSortCallback=_xfdashboard_applications_menu_model_resort_parent_menu_callback;
				break;

			case XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_SECTION:
				inSortCallback=_xfdashboard_applications_menu_model_resort_section_callback;
				break;

			case XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_TITLE:
			case XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_DESCRIPTION:
				inSortCallback=_xfdashboard_applications_menu_model_resort_string_callback;
				break;

			default:
				g_critical("Sorting column %d without user-defined function is not possible", sortColumn);
				g_assert_not_reached();
				break;
		}
	}

	/* Call parent's class resort method */
	CLUTTER_MODEL_CLASS(xfdashboard_applications_menu_model_parent_class)->resort(inModel, inSortCallback, inUserData);
}