00001
00002 #ifndef EWL_TREE_H
00003 #define EWL_TREE_H
00004
00005 #include "ewl_mvc.h"
00006 #include "ewl_row.h"
00007
00075 #define EWL_TREE_TYPE "tree"
00076
00081 #define EWL_TREE_IS(w) (ewl_widget_type_is(EWL_WIDGET(w), EWL_TREE_TYPE))
00082
00087 #define EWL_TREE(t) ((Ewl_Tree *)t)
00088
00092 typedef struct Ewl_Tree Ewl_Tree;
00093
00097 struct Ewl_Tree
00098 {
00099 Ewl_MVC mvc;
00101 const Ewl_View *content_view;
00103 Ewl_Widget *header;
00104 Ewl_Widget *rows;
00106 unsigned int *rowcache;
00108 Ewl_Tree_Selection_Type type;
00110 Ecore_Hash *expansions;
00112 struct
00113 {
00114 unsigned int column;
00115 Ewl_Sort_Direction direction;
00116 } sort;
00118 unsigned int columns;
00119 unsigned char fixed:1;
00120 unsigned char headers_visible:1;
00121 unsigned char row_color_alternate:1;
00122 };
00123
00124
00125
00126
00127 Ewl_Widget *ewl_tree_new(void);
00128 int ewl_tree_init(Ewl_Tree *tree);
00129
00130 void ewl_tree_column_count_set(Ewl_Tree *tree,
00131 unsigned int count);
00132 unsigned int ewl_tree_column_count_get(Ewl_Tree *tree);
00133 void ewl_tree_column_fixed_size_set(Ewl_Tree *tree,
00134 unsigned int col, unsigned int fixed);
00135 unsigned int ewl_tree_column_fixed_size_get(Ewl_Tree *tree,
00136 unsigned int col);
00137 void ewl_tree_column_initial_size_set(Ewl_Tree *tree,
00138 unsigned int col, int size);
00139 int ewl_tree_column_initial_size_get(Ewl_Tree *tree,
00140 unsigned int col);
00141
00142 void ewl_tree_headers_visible_set(Ewl_Tree *tree,
00143 unsigned char visible);
00144 unsigned int ewl_tree_headers_visible_get(Ewl_Tree *tree);
00145
00146 void ewl_tree_content_view_set(Ewl_Tree *tree,
00147 const Ewl_View *view);
00148 const Ewl_View *ewl_tree_content_view_get(Ewl_Tree *tree);
00149
00150 Ewl_Tree_Selection_Type ewl_tree_selection_type_get(Ewl_Tree *tree);
00151 void ewl_tree_selection_type_set(Ewl_Tree *tree,
00152 Ewl_Tree_Selection_Type type);
00153
00154 void ewl_tree_fixed_rows_set(Ewl_Tree *tree,
00155 unsigned int fixed);
00156 unsigned int ewl_tree_fixed_rows_get(Ewl_Tree *tree);
00157
00158 void ewl_tree_alternate_row_colors_set(Ewl_Tree *tree,
00159 unsigned char alternate);
00160 unsigned int ewl_tree_alternate_row_colors_get(Ewl_Tree *tree);
00161
00162 Ewl_Widget *ewl_tree_content_widget_get(Ewl_Tree *tree);
00163
00164 void ewl_tree_row_expand(Ewl_Tree *tree, void *data,
00165 unsigned int row);
00166 void ewl_tree_row_collapse(Ewl_Tree *tree, void *data,
00167 unsigned int row);
00168
00169 unsigned int ewl_tree_row_expanded_is(Ewl_Tree *tree, void *data,
00170 unsigned int row);
00171
00172 void ewl_tree_row_visible_ensure(Ewl_Tree *tree,
00173 void *data, unsigned int row);
00174
00175 void ewl_tree_kinetic_scrolling_set(Ewl_Tree *tree,
00176 Ewl_Kinetic_Scroll type);
00177 Ewl_Kinetic_Scroll ewl_tree_kinetic_scrolling_get(Ewl_Tree *tree);
00178 void ewl_tree_kinetic_max_velocity_set(Ewl_Tree *tree,
00179 double v);
00180 double ewl_tree_kinetic_max_velocity_get(Ewl_Tree *tree);
00181 void ewl_tree_kinetic_min_velocity_set(Ewl_Tree *tree,
00182 double v);
00183 double ewl_tree_kinetic_min_velocity_get(Ewl_Tree *tree);
00184 void ewl_tree_kinetic_dampen_set(Ewl_Tree *tree, double d);
00185 double ewl_tree_kinetic_dampen_get(Ewl_Tree *tree);
00186 void ewl_tree_kinetic_fps_set(Ewl_Tree *tree, int fps);
00187 int ewl_tree_kinetic_fps_get(Ewl_Tree *tree);
00188
00189
00190
00191
00192 void ewl_tree_cb_destroy(Ewl_Widget *w, void *ev, void *data);
00193 void ewl_tree_cb_configure(Ewl_Widget *w, void *ev, void *data);
00194 void ewl_tree_cb_column_sort(Ewl_Widget *w, void *ev, void *data);
00195
00196
00197
00198
00199 #define EWL_TREE_NODE_TYPE "node"
00200
00205 #define EWL_TREE_NODE_IS(w) (ewl_widget_type_is(EWL_WIDGET(w), EWL_TREE_NODE_TYPE))
00206
00207 #define EWL_TREE_NODE(n) ((Ewl_Tree_Node *)n)
00208
00212 typedef struct Ewl_Tree_Node Ewl_Tree_Node;
00213
00218 struct Ewl_Tree_Node
00219 {
00220 Ewl_MVC mvc;
00221
00222 Ewl_Widget *tree;
00223 Ewl_Widget *handle;
00224 Ewl_Row *row;
00226 struct
00227 {
00228 const Ewl_Model *model;
00229 void *data;
00230 } expansion;
00231
00232 unsigned int row_num;
00233 Ewl_Tree_Node_Flags expanded;
00234
00235 unsigned char built_children:1;
00236 };
00237
00238 Ewl_Widget *ewl_tree_node_new(void);
00239 int ewl_tree_node_init(Ewl_Tree_Node *node);
00240
00241 void ewl_tree_node_expandable_set(Ewl_Tree_Node *node,
00242 unsigned int expandable);
00243 unsigned int ewl_tree_node_expandable_get(Ewl_Tree_Node *node);
00244
00245 void ewl_tree_node_expand(Ewl_Tree_Node *node);
00246 void ewl_tree_node_collapse(Ewl_Tree_Node *node);
00247
00248 unsigned int ewl_tree_node_expanded_is(Ewl_Tree_Node *node);
00249 void ewl_tree_node_row_set(Ewl_Tree_Node *node, Ewl_Row *row);
00250
00251
00252
00253
00254 void ewl_tree_cb_node_configure(Ewl_Widget *w, void *ev_data, void *user_data);
00255 void ewl_tree_cb_node_data_unref(Ewl_Widget *w, void *ev_data, void *user_data);
00256 void ewl_tree_cb_node_realize(Ewl_Widget *w, void *ev, void *data);
00257 void ewl_tree_cb_node_toggle(Ewl_Widget *w, void *ev_data, void *user_data);
00258
00259 void ewl_tree_cb_node_child_show(Ewl_Container *c, Ewl_Widget *w);
00260 void ewl_tree_cb_node_child_hide(Ewl_Container *c, Ewl_Widget *w);
00261 void ewl_tree_cb_node_resize(Ewl_Container *c, Ewl_Widget *w, int size,
00262 Ewl_Orientation o);
00263 void ewl_tree_cb_node_child_add(Ewl_Container *c, Ewl_Widget *w);
00264 void ewl_tree_cb_node_child_del(Ewl_Container *c, Ewl_Widget *w, int idx);
00265
00270 #endif
00271