/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2017 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef MODEL_H #define MODEL_H #include "../ui/toolkit.h" #include "../common/context.h" #include "../ui/tree.h" #ifdef __cplusplus extern "C" { #endif typedef struct UiListModel UiListModel; /* * UiList to GtkTreeModel wrapper */ struct UiListModel { GObject object; UiObject *obj; UiModel *model; UiVar *var; GType *columntypes; int numcolumns; int stamp; }; /* * initialize the class and register the type */ void ui_list_init(); /* * Creates a UiListModel for a given UiList */ UiListModel* ui_list_model_new(UiObject *obj, UiVar *var, UiModel *info); void ui_list_model_dispose(GObject *obj); void ui_list_model_finalize(GObject *obj); // interface functions GtkTreeModelFlags ui_list_model_get_flags(GtkTreeModel *tree_model); gint ui_list_model_get_n_columns(GtkTreeModel *tree_model); GType ui_list_model_get_column_type(GtkTreeModel *tree_model, gint index); gboolean ui_list_model_get_iter( GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path); GtkTreePath* ui_list_model_get_path( GtkTreeModel *tree_model, GtkTreeIter *iter); void ui_list_model_get_value( GtkTreeModel *tree_model, GtkTreeIter *iter, gint column, GValue *value); gboolean ui_list_model_iter_next( GtkTreeModel *tree_model, GtkTreeIter *iter); gboolean ui_list_model_iter_children( GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent); gboolean ui_list_model_iter_has_child( GtkTreeModel *tree_model, GtkTreeIter *iter); gint ui_list_model_iter_n_children( GtkTreeModel *tree_model, GtkTreeIter *iter); gboolean ui_list_model_iter_nth_child( GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent, gint n); gboolean ui_list_model_iter_parent( GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *child); /* dnd */ gboolean ui_list_model_drag_data_received( GtkTreeDragDest *drag_dest, GtkTreePath *dest, GtkSelectionData *selection_data); gboolean ui_list_model_row_drop_possible( GtkTreeDragDest *drag_dest, GtkTreePath *dest_path, GtkSelectionData *selection_data); gboolean ui_list_model_row_draggable( GtkTreeDragSource *drag_source, GtkTreePath *path); gboolean ui_list_model_drag_data_get( GtkTreeDragSource *drag_source, GtkTreePath *path, GtkSelectionData *selection_data); gboolean ui_list_model_drag_data_delete( GtkTreeDragSource *drag_source, GtkTreePath *path); #ifdef __cplusplus } #endif #endif /* MODEL_H */