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, const Ewl_View *view);
00147 Ewl_View *ewl_tree_content_view_get(Ewl_Tree *tree);
00148
00149 Ewl_Tree_Selection_Type ewl_tree_selection_type_get(Ewl_Tree *tree);
00150 void ewl_tree_selection_type_set(Ewl_Tree *tree,
00151 Ewl_Tree_Selection_Type type);
00152
00153 void ewl_tree_fixed_rows_set(Ewl_Tree *tree, unsigned int fixed);
00154 unsigned int ewl_tree_fixed_rows_get(Ewl_Tree *tree);
00155
00156 void ewl_tree_alternate_row_colors_set(Ewl_Tree *tree,
00157 unsigned char alternate);
00158 unsigned int ewl_tree_alternate_row_colors_get(Ewl_Tree *tree);
00159
00160 Ewl_Widget *ewl_tree_content_widget_get(Ewl_Tree *tree);
00161
00162 void ewl_tree_row_expand(Ewl_Tree *tree, void *data,
00163 unsigned int row);
00164 void ewl_tree_row_collapse(Ewl_Tree *tree, void *data,
00165 unsigned int row);
00166
00167 unsigned int ewl_tree_row_expanded_is(Ewl_Tree *tree, void *data,
00168 unsigned int row);
00169
00170 void ewl_tree_kinetic_scrolling_set(Ewl_Tree *tree,
00171 Ewl_Kinetic_Scroll type);
00172 Ewl_Kinetic_Scroll ewl_tree_kinetic_scrolling_get(Ewl_Tree *tree);
00173 void ewl_tree_kinetic_max_velocity_set(Ewl_Tree *tree, double v);
00174 double ewl_tree_kinetic_max_velocity_get(Ewl_Tree *tree);
00175 void ewl_tree_kinetic_min_velocity_set(Ewl_Tree *tree, double v);
00176 double ewl_tree_kinetic_min_velocity_get(Ewl_Tree *tree);
00177 void ewl_tree_kinetic_dampen_set(Ewl_Tree *tree, double d);
00178 double ewl_tree_kinetic_dampen_get(Ewl_Tree *tree);
00179 void ewl_tree_kinetic_fps_set(Ewl_Tree *tree, int fps);
00180 int ewl_tree_kinetic_fps_get(Ewl_Tree *tree);
00181
00182
00183
00184
00185 void ewl_tree_cb_destroy(Ewl_Widget *w, void *ev, void *data);
00186 void ewl_tree_cb_configure(Ewl_Widget *w, void *ev, void *data);
00187 void ewl_tree_cb_column_sort(Ewl_Widget *w, void *ev, void *data);
00188
00189
00190
00191
00192 #define EWL_TREE_NODE_TYPE "node"
00193
00198 #define EWL_TREE_NODE_IS(w) (ewl_widget_type_is(EWL_WIDGET(w), EWL_TREE_NODE_TYPE))
00199
00200 #define EWL_TREE_NODE(n) ((Ewl_Tree_Node *)n)
00201
00205 typedef struct Ewl_Tree_Node Ewl_Tree_Node;
00206
00211 struct Ewl_Tree_Node
00212 {
00213 Ewl_MVC mvc;
00214
00215 Ewl_Widget *tree;
00216 Ewl_Widget *handle;
00217 Ewl_Row *row;
00219 struct
00220 {
00221 const Ewl_Model *model;
00222 void *data;
00223 } expansion;
00224
00225 unsigned int row_num;
00226 Ewl_Tree_Node_Flags expanded;
00227
00228 unsigned char built_children:1;
00229 };
00230
00231 Ewl_Widget *ewl_tree_node_new(void);
00232 int ewl_tree_node_init(Ewl_Tree_Node *node);
00233
00234 void ewl_tree_node_expandable_set(Ewl_Tree_Node *node,
00235 unsigned int expandable);
00236 unsigned int ewl_tree_node_expandable_get(Ewl_Tree_Node *node);
00237
00238 void ewl_tree_node_expand(Ewl_Tree_Node *node);
00239 void ewl_tree_node_collapse(Ewl_Tree_Node *node);
00240
00241 unsigned int ewl_tree_node_expanded_is(Ewl_Tree_Node *node);
00242 void ewl_tree_node_row_set(Ewl_Tree_Node *node, Ewl_Row *row);
00243
00244
00245
00246
00247 void ewl_tree_cb_node_configure(Ewl_Widget *w, void *ev_data, void *user_data);
00248 void ewl_tree_cb_node_data_unref(Ewl_Widget *w, void *ev_data, void *user_data);
00249 void ewl_tree_cb_node_realize(Ewl_Widget *w, void *ev, void *data);
00250 void ewl_tree_cb_node_toggle(Ewl_Widget *w, void *ev_data, void *user_data);
00251
00252 void ewl_tree_cb_node_child_show(Ewl_Container *c, Ewl_Widget *w);
00253 void ewl_tree_cb_node_child_hide(Ewl_Container *c, Ewl_Widget *w);
00254 void ewl_tree_cb_node_resize(Ewl_Container *c, Ewl_Widget *w, int size,
00255 Ewl_Orientation o);
00256 void ewl_tree_cb_node_child_add(Ewl_Container *c, Ewl_Widget *w);
00257 void ewl_tree_cb_node_child_del(Ewl_Container *c, Ewl_Widget *w, int idx);
00258
00263 #endif
00264