Enlightenment CVS committal Author : dj2 Project : e17 Module : libs/ewl
Dir : e17/libs/ewl/src/lib Modified Files: ewl_combo.c ewl_filelist_tree.c ewl_filepicker.c ewl_list.c ewl_model.c ewl_model.h ewl_mvc.c ewl_mvc.h ewl_tree2.c ewl_tree2.h Log Message: - working on tree2 selections. the selection struct now contains a pointer to the model along with the data. - this breaks the api to set selections on the tree slightly =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_combo.c,v retrieving revision 1.44 retrieving revision 1.45 diff -u -3 -r1.44 -r1.45 --- ewl_combo.c 18 Jan 2007 10:24:59 -0000 1.44 +++ ewl_combo.c 22 Jan 2007 09:33:03 -0000 1.45 @@ -254,7 +254,8 @@ combo = data; i = ewl_container_child_index_get(EWL_CONTAINER(combo->popup), w); - ewl_mvc_selected_set(EWL_MVC(combo), ewl_mvc_data_get(EWL_MVC(combo)), i, -1); + ewl_mvc_selected_set(EWL_MVC(combo), NULL, + ewl_mvc_data_get(EWL_MVC(combo)), i, -1); ewl_widget_hide(combo->popup); ewl_widget_state_set(combo->button, "collapsed", =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_filelist_tree.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- ewl_filelist_tree.c 18 Jan 2007 10:24:59 -0000 1.1 +++ ewl_filelist_tree.c 22 Jan 2007 09:33:03 -0000 1.2 @@ -108,12 +108,7 @@ data = NEW(Ewl_Filelist_Tree_Data, 1); data->list = fl; - fl->tree = ewl_tree2_new(); - ewl_container_child_append(EWL_CONTAINER(fl), fl->tree); - ewl_mvc_data_set(EWL_MVC(fl->tree), data); - ewl_widget_show(fl->tree); - - /* Setup the columns model, by default only one column */ + /* Setup the tree model */ model = ewl_model_new(); ewl_model_count_set(model, ewl_filelist_tree_data_count); ewl_model_fetch_set(model, ewl_filelist_tree_data_fetch); @@ -122,8 +117,14 @@ ewl_model_expansion_data_fetch_set(model, ewl_filelist_tree_data_expansion_data_fetch); + fl->tree = ewl_tree2_new(); + ewl_container_child_append(EWL_CONTAINER(fl), fl->tree); + ewl_mvc_data_set(EWL_MVC(fl->tree), data); + ewl_mvc_model_set(EWL_MVC(fl->tree), model); + ewl_widget_show(fl->tree); + view = ewl_label_view_get(); - ewl_tree2_column_append(EWL_TREE2(fl->tree), model, view); + ewl_tree2_column_append(EWL_TREE2(fl->tree), view, TRUE); DRETURN_INT(TRUE, DLEVEL_STABLE); } =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_filepicker.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- ewl_filepicker.c 18 Jan 2007 10:24:59 -0000 1.22 +++ ewl_filepicker.c 22 Jan 2007 09:33:03 -0000 1.23 @@ -149,7 +149,7 @@ ewl_mvc_model_set(EWL_MVC(fp->type_combo), model); ewl_mvc_view_set(EWL_MVC(fp->type_combo), view); ewl_mvc_data_set(EWL_MVC(fp->type_combo), fp); - ewl_mvc_selected_set(EWL_MVC(fp->type_combo), fp, 0, 0); + ewl_mvc_selected_set(EWL_MVC(fp->type_combo), NULL, fp, 0, 0); ewl_combo_editable_set(EWL_COMBO(fp->type_combo), TRUE); ewl_callback_append(fp->type_combo, EWL_CALLBACK_VALUE_CHANGED, ewl_filepicker_cb_type_change, fp); =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_list.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- ewl_list.c 18 Jan 2007 10:24:59 -0000 1.14 +++ ewl_list.c 22 Jan 2007 09:33:03 -0000 1.15 @@ -170,8 +170,8 @@ ewl_highlight_follow_get(EWL_HIGHLIGHT(w))); } - ewl_mvc_handle_click(EWL_MVC(data), ewl_mvc_data_get(EWL_MVC(data)), - row, -1); + ewl_mvc_handle_click(EWL_MVC(data), NULL, + ewl_mvc_data_get(EWL_MVC(data)), row, -1); DLEAVE_FUNCTION(DLEVEL_STABLE); } =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_model.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- ewl_model.c 8 Jan 2007 13:02:35 -0000 1.12 +++ ewl_model.c 22 Jan 2007 09:33:03 -0000 1.13 @@ -93,129 +93,161 @@ } /** - * @param m: The model to set the callback on - * @param exp: The expandable callback - * @return Returns no value - * @brief Sets the expandable callback on the given model + * @param m: The Ewl_Model to set the sort callback on + * @param sort: The sort callback to set + * @return Returns no value. + * @brief Sets the sort callback into the model */ void -ewl_model_expandable_set(Ewl_Model *m, Ewl_Model_Expandable exp) +ewl_model_sort_set(Ewl_Model *m, Ewl_Model_Sort sort) { DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("m", m); - m->expandable = exp; + m->sort = sort; DLEAVE_FUNCTION(DLEVEL_STABLE); } /** - * @param m: The model to get the expandable callback from - * @return Returns the expandable callback set on the model - * @brief Retrieves the expandable callback set on the model + * @param m: The Ewl_Model to get the sort callback from + * @return Returns the Ewl_Model_Sort set on the model or NULL if none set + * @brief Gets the sort callback from the model */ -Ewl_Model_Expandable -ewl_model_expandable_get(Ewl_Model *m) +Ewl_Model_Sort +ewl_model_sort_get(Ewl_Model *m) { DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR_RET("m", m, NULL); - DRETURN_PTR(m->expandable, DLEVEL_STABLE); + DRETURN_INT(m->sort, DLEVEL_STABLE); } /** - * @param m: The Ewl_Model to set the expansion_data callback into - * @param get: The Ewl_Model_Expansion_Data_Fetch callback for subrows + * @param m: The Ewl_Model to set the count callback on + * @param count: The count callback to set on the model * @return Returns no value. - * @brief Sets the subfetch callback into the model + * @brief Sets the count callback into the model */ void -ewl_model_expansion_data_fetch_set(Ewl_Model *m, - Ewl_Model_Expansion_Data_Fetch get) +ewl_model_count_set(Ewl_Model *m, Ewl_Model_Count count) { DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("m", m); - m->expansion_data = get; + m->count = count; DLEAVE_FUNCTION(DLEVEL_STABLE); } /** - * @param m: The Ewl_Model to get the expansion_data callback from - * @return Returns the Ewl_Model_Expansion_Data_Fetch for the model - * @brief Gets the expansion_data callback from the model + * @param m: The Ewl_Model to get the count callback from + * @return Returns the Ewl_Model_Count callback set on the model or NULL if + * none set. + * @brief Gets the count callback from the model */ -Ewl_Model_Expansion_Data_Fetch -ewl_model_expansion_data_fetch_get(Ewl_Model *m) +Ewl_Model_Count +ewl_model_count_get(Ewl_Model *m) { DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR_RET("m", m, NULL); - DRETURN_INT(m->expansion_data, DLEVEL_STABLE); + DRETURN_INT(m->count, DLEVEL_STABLE); } /** - * @param m: The Ewl_Model to set the sort callback on - * @param sort: The sort callback to set - * @return Returns no value. - * @brief Sets the sort callback into the model + * @param m: The model to set the callback on + * @param exp: The expandable callback + * @return Returns no value + * @brief Sets the expandable callback on the given model */ void -ewl_model_sort_set(Ewl_Model *m, Ewl_Model_Sort sort) +ewl_model_expandable_set(Ewl_Model *m, Ewl_Model_Expandable exp) { DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("m", m); - m->sort = sort; + m->expansion.is = exp; DLEAVE_FUNCTION(DLEVEL_STABLE); } /** - * @param m: The Ewl_Model to get the sort callback from - * @return Returns the Ewl_Model_Sort set on the model or NULL if none set - * @brief Gets the sort callback from the model + * @param m: The model to get the expandable callback from + * @return Returns the expandable callback set on the model + * @brief Retrieves the expandable callback set on the model */ -Ewl_Model_Sort -ewl_model_sort_get(Ewl_Model *m) +Ewl_Model_Expandable +ewl_model_expandable_get(Ewl_Model *m) { DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR_RET("m", m, NULL); - DRETURN_INT(m->sort, DLEVEL_STABLE); + DRETURN_PTR(m->expansion.is, DLEVEL_STABLE); } /** - * @param m: The Ewl_Model to set the count callback on - * @param count: The count callback to set on the model + * @param m: The Ewl_Model to set the expansion_data callback into + * @param get: The Ewl_Model_Expansion_Data_Fetch callback for subrows * @return Returns no value. - * @brief Sets the count callback into the model + * @brief Sets the subfetch callback into the model */ void -ewl_model_count_set(Ewl_Model *m, Ewl_Model_Count count) +ewl_model_expansion_data_fetch_set(Ewl_Model *m, + Ewl_Model_Expansion_Data_Fetch get) { DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("m", m); - m->count = count; + m->expansion.data = get; DLEAVE_FUNCTION(DLEVEL_STABLE); } /** - * @param m: The Ewl_Model to get the count callback from - * @return Returns the Ewl_Model_Count callback set on the model or NULL if - * none set. - * @brief Gets the count callback from the model + * @param m: The Ewl_Model to get the expansion_data callback from + * @return Returns the Ewl_Model_Expansion_Data_Fetch for the model + * @brief Gets the expansion_data callback from the model */ -Ewl_Model_Count -ewl_model_count_get(Ewl_Model *m) +Ewl_Model_Expansion_Data_Fetch +ewl_model_expansion_data_fetch_get(Ewl_Model *m) { DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR_RET("m", m, NULL); - DRETURN_INT(m->count, DLEVEL_STABLE); + DRETURN_INT(m->expansion.data, DLEVEL_STABLE); +} + +/** + * @param m: The model to work with + * @param f: The model expansion model fetch callback + * @return Returns no value + * @brief Sets the model expansion model fetch callback to @a f + */ +void +ewl_model_expansion_model_fetch_set(Ewl_Model *m, + Ewl_Model_Expansion_Model_Fetch f) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("m", m); + + m->expansion.model = f; + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @param m: The model to work with + * @return Returns the model expansion model fetch function + * @brief Retrieves the model expansion model fetch function + */ +Ewl_Model_Expansion_Model_Fetch +ewl_model_expansion_model_fetch_get(Ewl_Model *m) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("m", m, NULL); + + DRETURN_PTR(m->expansion.model, DLEVEL_STABLE); } /** =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_model.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- ewl_model.h 8 Jan 2007 13:02:35 -0000 1.15 +++ ewl_model.h 22 Jan 2007 09:33:03 -0000 1.16 @@ -12,6 +12,11 @@ */ /** + * The Ewl_Model structure + */ +typedef struct Ewl_Model Ewl_Model; + +/** * @def EWL_MODEL_DATA_FETCH(f) * Model callback to handle fetching the data at the given row/column */ @@ -47,6 +52,18 @@ typedef void *(*Ewl_Model_Expansion_Data_Fetch)(void *data, unsigned int row); /** + * @def EWL_MODEL_EXPANSION_MODEL_FETCH(f) ((Ewl_Model_Expansion_Model_Fetch)(f) + * Model callback to get the model to use for the expansion point + */ + +/** + * A typedef to shorten the definition of the model_expansion_model_fetch + * callback + */ +typedef Ewl_Model *(*Ewl_Model_Expansion_Model_Fetch)(void *data, + unsigned int row); + +/** * @def EWL_MODEL_DATA_SORT(f) * Model callback to inform the program to sort it's data in the given * column @@ -77,20 +94,20 @@ #define EWL_MODEL(model) ((Ewl_Model *)model) /** - * The Ewl_Model structure - */ -typedef struct Ewl_Model Ewl_Model; - -/** * This holds the callbacks needed to define a model */ struct Ewl_Model { + struct + { + Ewl_Model_Expandable is; /**< Is the row expandable */ + Ewl_Model_Expansion_Data_Fetch data; /**< Get expansion data */ + Ewl_Model_Expansion_Model_Fetch model; /**< Get expansion model */ + } expansion; + Ewl_Model_Fetch fetch; /**< Retrieve data for a cell */ - Ewl_Model_Expandable expandable; /**< Is the row expandable */ - Ewl_Model_Expansion_Data_Fetch expansion_data; /**< Get expansion data */ - Ewl_Model_Sort sort; /**< Trigger sort on column */ Ewl_Model_Count count; /**< Count of data items */ + Ewl_Model_Sort sort; /**< Trigger sort on column */ }; Ewl_Model *ewl_model_new(void); @@ -101,18 +118,23 @@ void ewl_model_fetch_set(Ewl_Model *m, Ewl_Model_Fetch get); Ewl_Model_Fetch ewl_model_fetch_get(Ewl_Model *m); -void ewl_model_expandable_set(Ewl_Model *m, Ewl_Model_Expandable exp); +void ewl_model_sort_set(Ewl_Model *m, Ewl_Model_Sort sort); +Ewl_Model_Sort ewl_model_sort_get(Ewl_Model *m); + +void ewl_model_count_set(Ewl_Model *m, Ewl_Model_Count count); +Ewl_Model_Count ewl_model_count_get(Ewl_Model *m); + +void ewl_model_expandable_set(Ewl_Model *m, + Ewl_Model_Expandable exp); Ewl_Model_Expandable ewl_model_expandable_get(Ewl_Model *m); void ewl_model_expansion_data_fetch_set(Ewl_Model *m, Ewl_Model_Expansion_Data_Fetch get); Ewl_Model_Expansion_Data_Fetch ewl_model_expansion_data_fetch_get(Ewl_Model *m); -void ewl_model_sort_set(Ewl_Model *m, Ewl_Model_Sort sort); -Ewl_Model_Sort ewl_model_sort_get(Ewl_Model *m); - -void ewl_model_count_set(Ewl_Model *m, Ewl_Model_Count count); -Ewl_Model_Count ewl_model_count_get(Ewl_Model *m); +void ewl_model_expansion_model_fetch_set(Ewl_Model *m, + Ewl_Model_Expansion_Model_Fetch f); +Ewl_Model_Expansion_Model_Fetch ewl_model_expansion_model_fetch_get(Ewl_Model *m); /* * Internal stuff. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_mvc.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- ewl_mvc.c 18 Jan 2007 10:24:59 -0000 1.14 +++ ewl_mvc.c 22 Jan 2007 09:33:03 -0000 1.15 @@ -352,6 +352,8 @@ /** * @param mvc: The MVC to set the list into + * @param model: The model to use for this data. If NULL the model from the + * MVC will be used * @param data: The parent data containing the index selection * @param srow: The start row * @param scolumn: The start column @@ -361,10 +363,12 @@ * @brief Sets the given range, inclusive, as selected in the mvc */ void -ewl_mvc_selected_range_add(Ewl_MVC *mvc, void *data, int srow, int scolumn, - int erow, int ecolumn) +ewl_mvc_selected_range_add(Ewl_MVC *mvc, Ewl_Model *model, void *data, + int srow, int scolumn, + int erow, int ecolumn) { Ewl_Selection *sel; + Ewl_Model *mod; int tmp; DENTER_FUNCTION(DLEVEL_STABLE); @@ -374,6 +378,9 @@ if (mvc->selection_mode == EWL_SELECTION_MODE_NONE) DRETURN(DLEVEL_STABLE); + if (model) mod = model; + else mod = ewl_mvc_model_get(mvc); + /* make sure the start comes before the end */ if (erow < srow) { @@ -390,10 +397,10 @@ } if (mvc->selection_mode == EWL_SELECTION_MODE_SINGLE) - sel = ewl_mvc_selection_index_new(data, srow, scolumn); - + sel = ewl_mvc_selection_index_new(mod, data, srow, scolumn); else - sel = ewl_mvc_selection_range_new(data, srow, scolumn, erow, ecolumn); + sel = ewl_mvc_selection_range_new(mod, data, srow, scolumn, + erow, ecolumn); ecore_list_append(mvc->selected, sel); ewl_mvc_selected_change_notify(mvc); @@ -403,6 +410,8 @@ /** * @param mvc: The MVC to work with + * @param model: The model to work with the data. If NULL the model from the + * MVC will be used * @param data: The parent data containing the index selection * @param row: The row to set * @param column: The column to set @@ -410,7 +419,8 @@ * @brief Sets the given index as selected */ void -ewl_mvc_selected_set(Ewl_MVC *mvc, void *data, int row, int column) +ewl_mvc_selected_set(Ewl_MVC *mvc, Ewl_Model *model, void *data, + int row, int column) { Ewl_Selection *sel; @@ -424,13 +434,15 @@ while ((sel = ecore_list_remove_first(mvc->selected))) ewl_mvc_cb_sel_free(sel); - ewl_mvc_selected_add(mvc, data, row, column); + ewl_mvc_selected_add(mvc, model, data, row, column); DLEAVE_FUNCTION(DLEVEL_STABLE); } /** * @param mvc: The MVC to work with + * @param model: The model to work with. If NULL the model from the MVC will + * be used * @param data: The parent data containing the index selection * @param row: The row to add * @param column: The column to add @@ -438,9 +450,11 @@ * @brief Adds the given index to the selected list */ void -ewl_mvc_selected_add(Ewl_MVC *mvc, void *data, int row, int column) +ewl_mvc_selected_add(Ewl_MVC *mvc, Ewl_Model *model, void *data, + int row, int column) { Ewl_Selection *si; + Ewl_Model *mod; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("mvc", mvc); @@ -449,7 +463,10 @@ if (mvc->selection_mode == EWL_SELECTION_MODE_NONE) DRETURN(DLEVEL_STABLE); - si = ewl_mvc_selection_index_new(data, row, column); + if (model) mod = model; + else mod = ewl_mvc_model_get(mvc); + + si = ewl_mvc_selection_index_new(mod, data, row, column); ecore_list_append(mvc->selected, si); ewl_mvc_selected_change_notify(mvc); @@ -480,6 +497,7 @@ ret = NEW(Ewl_Selection_Idx, 1); ret->sel.type = EWL_SELECTION_TYPE_INDEX; + ret->sel.model = sel->model; if (sel->type == EWL_SELECTION_TYPE_INDEX) { Ewl_Selection_Idx *si; @@ -661,6 +679,7 @@ } /** + * @param model: The model to work with this data * @param data: The parent data containing the index selection * @param row: The row to create the index selection for * @param column: The column to create the index for @@ -668,13 +687,14 @@ * @brief Creates a new index selection based on given values */ Ewl_Selection * -ewl_mvc_selection_index_new(void *data, int row, int column) +ewl_mvc_selection_index_new(Ewl_Model *model, void *data, int row, int column) { Ewl_Selection_Idx *sel; DENTER_FUNCTION(DLEVEL_STABLE); sel = NEW(Ewl_Selection_Idx, 1); + sel->sel.model = model; sel->sel.type = EWL_SELECTION_TYPE_INDEX; sel->sel.data = data; sel->row = row; @@ -684,6 +704,7 @@ } /** + * @param model: The model to work with this data * @param srow: The start row * @param scolumn: The start column * @param erow: The end row @@ -692,15 +713,17 @@ * @brief Creates a new range selection based on given values */ Ewl_Selection * -ewl_mvc_selection_range_new(void *data, int srow, int scolumn, int erow, int ecolumn) +ewl_mvc_selection_range_new(Ewl_Model *model, void *data, int srow, + int scolumn, int erow, + int ecolumn) { Ewl_Selection_Range *sel; DENTER_FUNCTION(DLEVEL_STABLE); sel = NEW(Ewl_Selection_Range, 1); + sel->sel.model = model; sel->sel.type = EWL_SELECTION_TYPE_RANGE; - /* FIXME: Need to scan the data and split on branches */ sel->sel.data = data; sel->start.row = srow; sel->start.column = scolumn; @@ -713,16 +736,20 @@ /** * @internal * @param mvc: The mvc to work with + * @param model: A model to use. If NULL the MVC model will be used + * @param data: The data the model was working with * @param row: The row to add * @param column: The column to add * @return Returns no value * @brief Handles the click of the given cell */ void -ewl_mvc_handle_click(Ewl_MVC *mvc, void *data, int row, int column) +ewl_mvc_handle_click(Ewl_MVC *mvc, Ewl_Model *model, void *data, int row, + int column) { unsigned int modifiers; int multi_select = FALSE; + Ewl_Model *mod; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("mvc", mvc); @@ -731,6 +758,9 @@ if (ewl_mvc_selection_mode_get(mvc) == EWL_SELECTION_MODE_MULTI) multi_select = TRUE; + if (model) mod = model; + else mod = ewl_mvc_model_get(mvc); + modifiers = ewl_ev_modifiers_get(); if (multi_select && (modifiers & EWL_KEY_MODIFIER_SHIFT)) { @@ -740,6 +770,7 @@ Ewl_Selection *sel; void *sdata; int srow, scolumn; + Ewl_Model *smod; /* A shift will add the current position into a * range with the last selected item. If the @@ -754,6 +785,7 @@ sdata = sel->data; srow = idx->row; scolumn = idx->column; + smod = EWL_SELECTION(idx)->model; if (sel->highlight) ewl_widget_destroy(sel->highlight); @@ -767,12 +799,14 @@ sdata = sel->data; srow = idx->start.row; scolumn = idx->start.column; + smod = EWL_SELECTION(idx)->model; if (sel->highlight) { Ewl_Widget *w; - while ((w = ecore_list_remove_first(sel->highlight))) + while ((w = ecore_list_remove_first( + sel->highlight))) ewl_widget_destroy(w); } @@ -790,7 +824,8 @@ for (k = scolumn; k <= column; k++) { if (ewl_mvc_selected_is(mvc, data, i, k)) - ewl_mvc_selected_rm(mvc, data, i, k); + ewl_mvc_selected_rm(mvc, + data, i, k); } } @@ -798,21 +833,21 @@ ecore_list_remove(mvc->selected); - ewl_mvc_selected_range_add(mvc, data, srow, scolumn, + ewl_mvc_selected_range_add(mvc, smod, data, srow, scolumn, row, column); } else - ewl_mvc_selected_set(mvc, data, row, column); + ewl_mvc_selected_set(mvc, mod, data, row, column); } else if (multi_select && (modifiers & EWL_KEY_MODIFIER_CTRL)) { if (ewl_mvc_selected_is(mvc, data, row, column)) ewl_mvc_selected_rm(mvc, data, row, column); else - ewl_mvc_selected_add(mvc, data, row, column); + ewl_mvc_selected_add(mvc, mod, data, row, column); } else - ewl_mvc_selected_set(mvc, data, row, column); + ewl_mvc_selected_set(mvc, mod, data, row, column); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -1006,12 +1041,12 @@ /* one item left in the grouping */ if ((((si->start.row - erow) + 1) * ((si->start.column - si->end.column) + 1)) == 1) - n = ewl_mvc_selection_index_new(sel->data, + n = ewl_mvc_selection_index_new(sel->model, sel->data, si->start.row, si->start.column); else - n = ewl_mvc_selection_range_new(sel->data, + n = ewl_mvc_selection_range_new(sel->model, sel->data, si->start.row, si->start.column, erow, si->end.column); @@ -1028,10 +1063,12 @@ ecolumn = (column - 1); if ((((si->end.row - row) + 1) * ((si->start.column - ecolumn) + 1)) == 1) - n = ewl_mvc_selection_index_new(sel->data, row, si->start.column); + n = ewl_mvc_selection_index_new(sel->model, sel->data, + row, si->start.column); else - n = ewl_mvc_selection_range_new(sel->data, row, si->start.column, + n = ewl_mvc_selection_range_new(sel->model, sel->data, + row, si->start.column, si->end.row, ecolumn); ecore_list_append(mvc->selected, n); @@ -1046,10 +1083,12 @@ scolumn = column + 1; if ((((si->end.row - row) + 1) * ((scolumn - si->end.column) + 1)) == 1) - n = ewl_mvc_selection_index_new(sel->data, row, si->end.column); + n = ewl_mvc_selection_index_new(sel->model, sel->data, + row, si->end.column); else - n = ewl_mvc_selection_range_new(sel->data, row, scolumn, + n = ewl_mvc_selection_range_new(sel->model, sel->data, + row, scolumn, si->end.row, si->end.column); @@ -1065,10 +1104,12 @@ srow = row + 1; if ((((srow - si->end.row) + 1) * ((column - column) + 1)) == 1) - n = ewl_mvc_selection_index_new(sel->data, si->end.row, column); + n = ewl_mvc_selection_index_new(sel->model, sel->data, + si->end.row, column); else - n = ewl_mvc_selection_range_new(sel->data, srow, column, + n = ewl_mvc_selection_range_new(sel->model, sel->data, + srow, column, si->end.row, column); ecore_list_append(mvc->selected, n); =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_mvc.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- ewl_mvc.h 18 Jan 2007 10:24:59 -0000 1.12 +++ ewl_mvc.h 22 Jan 2007 09:33:03 -0000 1.13 @@ -35,6 +35,8 @@ struct Ewl_Selection { Ewl_Selection_Type type; /**< The type of selection */ + Ewl_Model *model; /**< The model to work with this + selection */ void *highlight; /**< highlight widgets for the MVC */ void *data; /**< Data containing the selection */ }; @@ -144,20 +146,25 @@ void ewl_mvc_selected_list_set(Ewl_MVC *mvc, Ecore_List *list); Ecore_List *ewl_mvc_selected_list_get(Ewl_MVC *mvc); -void ewl_mvc_selected_range_add(Ewl_MVC *mvc, void *data, +void ewl_mvc_selected_range_add(Ewl_MVC *mvc, Ewl_Model * model, + void *data, int srow, int scolumn, int erow, int ecolumn); -void ewl_mvc_selected_set(Ewl_MVC *mvc, void *data, int row, int column); -void ewl_mvc_selected_add(Ewl_MVC *mvc, void *data, int row, int column); +void ewl_mvc_selected_set(Ewl_MVC *mvc, Ewl_Model *model, + void *data, int row, int column); +void ewl_mvc_selected_add(Ewl_MVC *mvc, Ewl_Model *model, + void *data, int row, int column); Ewl_Selection_Idx *ewl_mvc_selected_get(Ewl_MVC *mvc); void ewl_mvc_selected_rm(Ewl_MVC *mvc, void *data, int row, int column); int ewl_mvc_selected_count_get(Ewl_MVC *mvc); unsigned int ewl_mvc_selected_is(Ewl_MVC *mvc, void *data, int row, int column); -Ewl_Selection *ewl_mvc_selection_index_new(void *data, int row, int column); -Ewl_Selection *ewl_mvc_selection_range_new(void *data, int srow, int scolumn, +Ewl_Selection *ewl_mvc_selection_index_new(Ewl_Model *model, void *data, + int row, int column); +Ewl_Selection *ewl_mvc_selection_range_new(Ewl_Model *model, void *data, + int srow, int scolumn, int erow, int ecolumn); void ewl_mvc_highlight(Ewl_MVC *mvc, Ewl_Container *c, @@ -172,7 +179,8 @@ void ewl_mvc_cb_destroy(Ewl_Widget *w, void *ev, void *data); -void ewl_mvc_handle_click(Ewl_MVC *mvc, void *data, int row, int column); +void ewl_mvc_handle_click(Ewl_MVC *mvc, Ewl_Model *model, + void *data, int row, int column); /** * @} =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_tree2.c,v retrieving revision 1.51 retrieving revision 1.52 diff -u -3 -r1.51 -r1.52 --- ewl_tree2.c 18 Jan 2007 10:24:59 -0000 1.51 +++ ewl_tree2.c 22 Jan 2007 09:33:03 -0000 1.52 @@ -7,6 +7,7 @@ typedef struct Ewl_Tree2_Branch_Cache Ewl_Tree2_Branch_Cache; struct Ewl_Tree2_Branch_Cache { + Ewl_Model *model; int row_count; void *data; }; @@ -109,19 +110,18 @@ /** * @param tree: The Ewl_Tree to append the column too - * @param model: The model to use for this column * @param view: The view to use for this column * @return Returns no value. * @brief Append a new column to the tree */ void -ewl_tree2_column_append(Ewl_Tree2 *tree, Ewl_Model *model, Ewl_View *view) +ewl_tree2_column_append(Ewl_Tree2 *tree, Ewl_View *view, + unsigned int sortable) { Ewl_Tree2_Column *c; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("tree", tree); - DCHECK_PARAM_PTR("model", model); DCHECK_PARAM_PTR("view", view); DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); @@ -132,9 +132,9 @@ DRETURN(DLEVEL_STABLE); } - ewl_tree2_column_model_set(c, model); ewl_tree2_column_view_set(c, view); ewl_tree2_column_mvc_set(c, EWL_MVC(tree)); + ewl_tree2_column_sortable_set(c, sortable); ecore_list_append(tree->columns, c); ewl_mvc_dirty_set(EWL_MVC(tree), TRUE); @@ -144,19 +144,18 @@ /** * @param tree: The Ewl_Tree to prepend the column too - * @param model: The model to use for this column * @param view: The view to use for this column * @return Returns no value. * @brief Prepend a new column to the tree */ void -ewl_tree2_column_prepend(Ewl_Tree2 *tree, Ewl_Model *model, Ewl_View *view) +ewl_tree2_column_prepend(Ewl_Tree2 *tree, Ewl_View *view, + unsigned int sortable) { Ewl_Tree2_Column *c; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("tree", tree); - DCHECK_PARAM_PTR("model", model); DCHECK_PARAM_PTR("view", view); DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); @@ -167,9 +166,9 @@ DRETURN(DLEVEL_STABLE); } - ewl_tree2_column_model_set(c, model); ewl_tree2_column_view_set(c, view); ewl_tree2_column_mvc_set(c, EWL_MVC(tree)); + ewl_tree2_column_sortable_set(c, sortable); ecore_list_prepend(tree->columns, c); ewl_mvc_dirty_set(EWL_MVC(tree), TRUE); @@ -179,21 +178,19 @@ /** * @param tree: The Ewl_Tree to insert the column into - * @param model: The model to use for this column * @param view: The view to use for this column * @param idx: The index to insert into * @return Returns no value. * @brief Insert a new column into the tree */ void -ewl_tree2_column_insert(Ewl_Tree2 *tree, Ewl_Model *model, Ewl_View *view, - unsigned int idx) +ewl_tree2_column_insert(Ewl_Tree2 *tree, Ewl_View *view, unsigned int idx, + unsigned int sortable) { Ewl_Tree2_Column *c; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("tree", tree); - DCHECK_PARAM_PTR("model", model); DCHECK_PARAM_PTR("view", view); DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); @@ -204,9 +201,9 @@ DRETURN(DLEVEL_STABLE); } - ewl_tree2_column_model_set(c, model); ewl_tree2_column_view_set(c, view); ewl_tree2_column_mvc_set(c, EWL_MVC(tree)); + ewl_tree2_column_sortable_set(c, sortable); ecore_list_goto_index(tree->columns, idx); ecore_list_insert(tree->columns, c); @@ -361,6 +358,8 @@ * @param tree: The tree to work with * @return Returns the widget that contains the tree rows * @brief Retrieves the widget containing the tree rows + * + * XXX This is a badly named function. Too close to the MVC view name */ Ewl_Widget * ewl_tree2_view_widget_get(Ewl_Tree2 *tree) @@ -569,6 +568,8 @@ void *data) { Ewl_Tree2_Column *c, *col; + Ewl_MVC *mvc; + Ewl_Model *model; int index = 0; DENTER_FUNCTION(DLEVEL_STABLE); @@ -576,22 +577,25 @@ c = data; + mvc = ewl_tree2_column_mvc_get(c); + model = ewl_mvc_model_get(mvc); + /* sanity check */ - if (!c->model || !c->model->sort) + if (!model || !model->sort) { DWARNING("In ewl_tree2_cb_column_sort without a sort cb."); DRETURN(DLEVEL_STABLE); } /* loop over the columns and reset the sort settings */ - ecore_list_goto_first(EWL_TREE2(c->parent)->columns); - while ((col = ecore_list_next(EWL_TREE2(c->parent)->columns))) + ecore_list_goto_first(EWL_TREE2(mvc)->columns); + while ((col = ecore_list_next(EWL_TREE2(mvc)->columns))) { /* skip the current column */ if (col == c) { /* we're the index before the one we're now on */ - index = ecore_list_index(EWL_TREE2(c->parent)->columns) - 1; + index = ecore_list_index(EWL_TREE2(mvc)->columns) - 1; continue; } @@ -603,8 +607,8 @@ c->sort = ((c->sort + 1) % EWL_SORT_DIRECTION_MAX); if (!c->sort) c->sort ++; - c->model->sort(ewl_mvc_data_get(c->parent), index, c->sort); - ewl_mvc_dirty_set(c->parent, TRUE); + model->sort(ewl_mvc_data_get(mvc), index, c->sort); + ewl_mvc_dirty_set(mvc, TRUE); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -637,6 +641,7 @@ ewl_tree2_header_build(Ewl_Tree2 *tree, Ewl_Tree2_Column *col, void *mvc_data, int column) { Ewl_Widget *h, *c; + Ewl_Model *model; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("tree", tree); @@ -651,12 +656,14 @@ DRETURN(DLEVEL_STABLE); } + model = ewl_mvc_model_get(EWL_MVC(tree)); + h = ewl_hbox_new(); ewl_container_child_append(EWL_CONTAINER(tree->header), h); ewl_widget_appearance_set(h, "header"); ewl_widget_show(h); - if (col->model->sort) + if (col->sortable) ewl_callback_append(h, EWL_CALLBACK_CLICKED, ewl_tree2_cb_column_sort, col); @@ -666,7 +673,7 @@ ewl_container_child_append(EWL_CONTAINER(h), c); /* display the sort arrow if needed */ - if (col->model->sort) + if (col->sortable) { char *state_str; @@ -691,8 +698,8 @@ } static void -ewl_tree2_column_build(Ewl_Row *row, Ewl_Tree2_Column *col, void *mvc_data, - int r, int c, Ewl_Widget *node) +ewl_tree2_column_build(Ewl_Row *row, Ewl_Model *model, Ewl_View *view, + void *mvc_data, int r, int c, Ewl_Widget *node) { Ewl_Widget *cell; Ewl_Widget *child; @@ -700,7 +707,8 @@ DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("row", row); - DCHECK_PARAM_PTR("col", col); + DCHECK_PARAM_PTR("model", model); + DCHECK_PARAM_PTR("view", view); DCHECK_TYPE("row", row, EWL_ROW_TYPE); cell = ewl_cell_new(); @@ -711,7 +719,7 @@ ewl_tree2_cb_cell_clicked, node); ewl_widget_show(cell); - val = col->model->fetch(mvc_data, r, c); + val = model->fetch(mvc_data, r, c); if (!val) { child = ewl_label_new(); @@ -719,8 +727,8 @@ } else { - child = col->view->construct(); - col->view->assign(child, val); + child = view->construct(); + view->assign(child, val); } ewl_container_child_append(EWL_CONTAINER(cell), child); ewl_widget_show(child); @@ -732,8 +740,9 @@ ewl_tree2_build_tree(Ewl_Tree2 *tree) { Ewl_Tree2_Column *col; - int column = 0, rows = 0; + int column = 0; void *mvc_data; + Ewl_Model *model; Ewl_Tree2_Branch_Cache *head; DENTER_FUNCTION(DLEVEL_STABLE); @@ -741,25 +750,21 @@ DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); mvc_data = ewl_mvc_data_get(EWL_MVC(tree)); + model = ewl_mvc_model_get(EWL_MVC(tree)); /* setup the headers */ ewl_container_reset(EWL_CONTAINER(tree->header)); ecore_list_goto_first(tree->columns); while ((col = ecore_list_next(tree->columns))) { - int r; - ewl_tree2_header_build(tree, col, mvc_data, column); - - r = col->model->count(mvc_data); - if (r > rows) rows = r; - column ++; } head = NEW(Ewl_Tree2_Branch_Cache, 1); - head->row_count = rows; + head->row_count = model->count(mvc_data); head->data = mvc_data; + head->model = model; ewl_container_reset(EWL_CONTAINER(tree->rows)); ewl_tree2_build_tree_rows(tree, head, 0, tree->rows, FALSE); @@ -786,10 +791,11 @@ node = ewl_tree2_node_new(); EWL_TREE2_NODE(node)->tree = EWL_WIDGET(tree); EWL_TREE2_NODE(node)->row_num = i; + EWL_TREE2_NODE(node)->model = curbranch->model; + EWL_TREE2_NODE(node)->data = curbranch->data; ewl_container_child_append(EWL_CONTAINER(parent), node); - if (!hidden) - ewl_widget_show(node); + if (!hidden) ewl_widget_show(node); row = ewl_row_new(); ewl_row_header_set(EWL_ROW(row), EWL_ROW(tree->header)); @@ -811,49 +817,51 @@ ecore_list_goto_first(tree->columns); while((col = ecore_list_next(tree->columns))) { - ewl_tree2_column_build(EWL_ROW(row), col, + ewl_tree2_column_build(EWL_ROW(row), + curbranch->model, col->view, curbranch->data, i, column, node); column ++; } /* check if this is an expansion point */ col = ecore_list_goto_first(tree->columns); - if (col && col->model->expandable && - col->model->expandable(curbranch->data, i)) + if (col && curbranch->model->expansion.is && + curbranch->model->expansion.is(curbranch->data, i)) { Ewl_Tree2_Branch_Cache *tmp; int hidden = TRUE; - if (!col->model->expansion_data) + if (!curbranch->model->expansion.data) { - DWARNING("In ewl_tree2_build_tree_rows, model expandable but without expansion_data_fetch cb."); + DWARNING("In ewl_tree2_build_tree_rows, " + "model expandable but without " + "expansion_data_fetch cb."); DRETURN(DLEVEL_STABLE); } tmp = NEW(Ewl_Tree2_Branch_Cache, 1); - tmp->data = col->model->expansion_data(curbranch->data, i); + tmp->data = curbranch->model->expansion.data( + curbranch->data, i); tmp->row_count = 0; + if (curbranch->model->expansion.model) + tmp->model = + curbranch->model->expansion.model( + curbranch->data, i); - ewl_tree2_node_expandable_set(EWL_TREE2_NODE(node), curbranch->data); + if (!tmp->model) + tmp->model = curbranch->model; - if (col->model->expansion_data && + ewl_tree2_node_expandable_set(EWL_TREE2_NODE(node), + curbranch->data); + + if (curbranch->model->expansion.data && ewl_tree2_row_expanded_is(tree, curbranch->data, i)) { ewl_tree2_node_expand(EWL_TREE2_NODE(node)); hidden = FALSE; } - /* XXX probably need a better way to do this? */ - ecore_list_goto_first(tree->columns); - while ((col = ecore_list_next(tree->columns))) - { - int r; - r = col->model->count(tmp->data); - if (r > tmp->row_count) tmp->row_count = r; - - column ++; - } - + tmp->row_count = tmp->model->count(tmp->data); ewl_tree2_build_tree_rows(tree, tmp, colour, node, hidden); FREE(tmp); } @@ -901,7 +909,7 @@ ewl_tree2_cb_row_clicked(Ewl_Widget *w, void *ev __UNUSED__, void *data) { Ewl_Tree2 *tree; - int row; + Ewl_Tree2_Node *node; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("w", w); @@ -911,10 +919,10 @@ if (tree->type != EWL_TREE_SELECTION_TYPE_ROW) DRETURN(DLEVEL_STABLE); - row = ewl_container_child_index_get(EWL_CONTAINER(tree->rows), - EWL_WIDGET(data)); - ewl_mvc_handle_click(EWL_MVC(tree), ewl_mvc_data_get(EWL_MVC(tree)), - row, -1); + node = data; + ewl_mvc_handle_click(EWL_MVC(tree), node->model, + node->data, + node->row_num, -1); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -924,7 +932,8 @@ { Ewl_Row *row; Ewl_Tree2 *tree; - int r, column; + Ewl_Tree2_Node *node; + int column; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("w", w); @@ -935,12 +944,12 @@ if (tree->type != EWL_TREE_SELECTION_TYPE_CELL) DRETURN(DLEVEL_STABLE); - r = ewl_container_child_index_get(EWL_CONTAINER(tree->rows), - EWL_WIDGET(data)); + node = data; column = ewl_container_child_index_get(EWL_CONTAINER(row), w); - ewl_mvc_handle_click(EWL_MVC(tree), ewl_mvc_data_get(EWL_MVC(tree)), - r, column); + ewl_mvc_handle_click(EWL_MVC(tree), node->model, + node->data, node->row_num, + column); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -1011,7 +1020,6 @@ DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("c", c); - c->model = NULL; c->view = NULL; c->parent = NULL; c->sort = EWL_SORT_DIRECTION_NONE; @@ -1023,38 +1031,6 @@ /** * @param c: The column to work with - * @param m: The model to set - * @return Returns no value - * @brief Sets the given model @a m into the column @a c - */ -void -ewl_tree2_column_model_set(Ewl_Tree2_Column *c, Ewl_Model *m) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("c", c); - DCHECK_PARAM_PTR("m", m); - - c->model = m; - - DLEAVE_FUNCTION(DLEVEL_STABLE); -} - -/** - * @param c: The column to work with - * @return Returns the model for the column - * @brief Retrieves the model for the given column - */ -Ewl_Model * -ewl_tree2_column_model_get(Ewl_Tree2_Column *c) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR_RET("c", c, NULL); - - DRETURN_PTR(c->model, DLEVEL_STABLE); -} - -/** - * @param c: The column to work with * @param v: The view to set * @return Returns no value * @brief Sets the given view @a v into the column @a c @@ -1120,6 +1096,37 @@ } /** + * @param c: The column to work with + * @param sortable: The sortable flag to set + * @return Returns no value + * @brief Sets the sortable flag of column @a c to @a sortable + */ +void +ewl_tree2_column_sortable_set(Ewl_Tree2_Column *c, unsigned int sortable) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("c", c); + + c->sortable = !!sortable; + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @param c: The column to work with + * @return Returns TRUE if the column is sortable, FALSE otherwise + * @brief Retrieves the sort flag for the column @a c + */ +unsigned int +ewl_tree2_column_sortable_get(Ewl_Tree2_Column *c) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("c", c, FALSE); + + DRETURN_INT(c->sortable, DLEVEL_STABLE); +} + +/** * @param c: The Ewl_Tree2_Column to work with * @return Returns the parent tree for this column or NULL if none set * @brief Retrieves the parent tree for this column or NULL if none set @@ -1226,11 +1233,7 @@ DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("node", node); - if (node->data == data) - DRETURN(DLEVEL_STABLE); - - node->data = data; - if (data) + if (data && !node->handle) { node->handle = ewl_check_new(); ewl_object_fill_policy_set(EWL_OBJECT(node->handle), @@ -1242,7 +1245,7 @@ ewl_tree2_cb_node_toggle, node); ewl_widget_show(node->handle); } - else if (node->handle) + else if (node->handle && !data) { ewl_widget_destroy(node->handle); node->handle = NULL; @@ -1347,11 +1350,13 @@ DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR_RET("node", node, FALSE); - DRETURN_INT(((node->expanded == EWL_TREE_NODE_EXPANDED) ? TRUE : FALSE), DLEVEL_STABLE); + DRETURN_INT(((node->expanded == EWL_TREE_NODE_EXPANDED) ? TRUE : FALSE), + DLEVEL_STABLE); } void -ewl_tree2_cb_node_configure(Ewl_Widget *w, void *ev_data __UNUSED__, void *user_data __UNUSED__) +ewl_tree2_cb_node_configure(Ewl_Widget *w, void *ev_data __UNUSED__, + void *user_data __UNUSED__) { Ewl_Tree2_Node *node; Ewl_Container *c; =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_tree2.h,v retrieving revision 1.38 retrieving revision 1.39 diff -u -3 -r1.38 -r1.39 --- ewl_tree2.h 8 Jan 2007 13:02:35 -0000 1.38 +++ ewl_tree2.h 22 Jan 2007 09:33:03 -0000 1.39 @@ -102,42 +102,19 @@ unsigned char headers_visible:1; /**< Are the headers visible? */ }; -/** - * @def EWL_TREE2_COLUMN - * Typecasts a pointer to an Ewl_Tree2_Column pointer. - */ -#define EWL_TREE2_COLUMN(c) ((Ewl_Tree2_Column *)c) - -/** - * The Ewl_Tree2_Column type - */ -typedef struct Ewl_Tree2_Column Ewl_Tree2_Column; - -/** - * Holdes the model and view to use for this column in the tree - */ -struct Ewl_Tree2_Column -{ - Ewl_Model *model; /**< The model for the column */ - Ewl_View *view; /**< The view for the column */ - - Ewl_MVC *parent; /**< The mvc this column is for */ - Ewl_Sort_Direction sort; /**< direction the column is sorted in */ -}; - /* * Tree view/controller manipulation */ Ewl_Widget *ewl_tree2_new(void); int ewl_tree2_init(Ewl_Tree2 *tree); -void ewl_tree2_column_append(Ewl_Tree2 *t, Ewl_Model *m, - Ewl_View *v); -void ewl_tree2_column_prepend(Ewl_Tree2 *t, Ewl_Model *m, - Ewl_View *v); -void ewl_tree2_column_insert(Ewl_Tree2 *t, Ewl_Model *m, - Ewl_View *v, - unsigned int idx); +void ewl_tree2_column_append(Ewl_Tree2 *t, Ewl_View *v, + unsigned int sortable); +void ewl_tree2_column_prepend(Ewl_Tree2 *t, Ewl_View *v, + unsigned int sortable); +void ewl_tree2_column_insert(Ewl_Tree2 *t, Ewl_View *v, + unsigned int idx, + unsigned int sortable); void ewl_tree2_column_remove(Ewl_Tree2 *t, unsigned int idx); void ewl_tree2_headers_visible_set(Ewl_Tree2 *tree, @@ -171,18 +148,44 @@ /* * Ewl_Tree2_Column stuff */ + +/** + * @def EWL_TREE2_COLUMN + * Typecasts a pointer to an Ewl_Tree2_Column pointer. + */ +#define EWL_TREE2_COLUMN(c) ((Ewl_Tree2_Column *)c) + +/** + * The Ewl_Tree2_Column type + */ +typedef struct Ewl_Tree2_Column Ewl_Tree2_Column; + +/** + * Holdes the model and view to use for this column in the tree + */ +struct Ewl_Tree2_Column +{ + Ewl_View *view; /**< The view for the column */ + + Ewl_MVC *parent; /**< The mvc this column is for */ + Ewl_Sort_Direction sort; /**< direction the column is sorted in */ + + unsigned char sortable:1; /**< Is this column sortable */ +}; + Ewl_Tree2_Column *ewl_tree2_column_new(void); void ewl_tree2_column_destroy(Ewl_Tree2_Column *c); -void ewl_tree2_column_model_set(Ewl_Tree2_Column *c, Ewl_Model *m); -Ewl_Model *ewl_tree2_column_model_get(Ewl_Tree2_Column *c); - void ewl_tree2_column_view_set(Ewl_Tree2_Column *c, Ewl_View *v); Ewl_View *ewl_tree2_column_view_get(Ewl_Tree2_Column *c); void ewl_tree2_column_mvc_set(Ewl_Tree2_Column *c, Ewl_MVC *mvc); Ewl_MVC *ewl_tree2_column_mvc_get(Ewl_Tree2_Column *c); +void ewl_tree2_column_sortable_set(Ewl_Tree2_Column *c, + unsigned int sortable); +unsigned int ewl_tree2_column_sortable_get(Ewl_Tree2_Column *c); + void ewl_tree2_column_sort_direction_set(Ewl_Tree2_Column *c, Ewl_Sort_Direction sort); Ewl_Sort_Direction ewl_tree2_column_sort_direction_get(Ewl_Tree2_Column *c); @@ -201,6 +204,7 @@ Ewl_Widget *row; /**< The row this node is for */ Ewl_Widget *handle; /**< the expansion handle */ + Ewl_Model *model; /**< The model used to make this row */ void *data; /**< The data that this nodes row comes from */ unsigned int row_num; /**< The row number of this row */ Ewl_Tree_Node_Flags expanded; @@ -227,8 +231,6 @@ Ewl_Orientation o); void ewl_tree2_cb_node_child_add(Ewl_Container *c, Ewl_Widget *w); void ewl_tree2_cb_node_child_del(Ewl_Container *c, Ewl_Widget *w, int idx); - - /** * @} ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs