00001
00002 #ifndef EWL_MVC_H
00003 #define EWL_MVC_H
00004
00005 #include "ewl_box.h"
00006 #include "ewl_model.h"
00007 #include "ewl_view.h"
00008
00025 #define EWL_MVC_TYPE "mvc"
00026
00031 #define EWL_MVC_IS(w) (ewl_widget_type_is(EWL_WIDGET(w), EWL_MVC_TYPE))
00032
00037 #define EWL_SELECTION(x) ((Ewl_Selection *)x)
00038
00042 typedef struct Ewl_Selection Ewl_Selection;
00043
00047 struct Ewl_Selection
00048 {
00049 Ewl_Selection_Type type;
00050 const Ewl_Model *model;
00052 void *highlight;
00053 void *data;
00054 };
00055
00060 #define EWL_SELECTION_IDX(x) ((Ewl_Selection_Idx *)x)
00061
00065 typedef struct Ewl_Selection_Idx Ewl_Selection_Idx;
00066
00070 struct Ewl_Selection_Idx
00071 {
00072 Ewl_Selection sel;
00074 unsigned int row;
00075 unsigned int column;
00076 };
00077
00082 #define EWL_SELECTION_RANGE(x) ((Ewl_Selection_Range *)x)
00083
00087 typedef struct Ewl_Selection_Range Ewl_Selection_Range;
00088
00092 struct Ewl_Selection_Range
00093 {
00094 Ewl_Selection sel;
00096 struct
00097 {
00098 unsigned int row;
00099 unsigned int column;
00100 } start,
00101 end;
00102 };
00103
00107 typedef struct Ewl_MVC Ewl_MVC;
00108
00113 #define EWL_MVC(mvc) ((Ewl_MVC *)mvc)
00114
00118 struct Ewl_MVC
00119 {
00120 Ewl_Box box;
00122 void *data;
00123 const Ewl_View *view;
00124 const Ewl_Model *model;
00126 struct {
00127 void (*view_change)(Ewl_MVC *mvc);
00128 void (*selected_change)(Ewl_MVC *mvc);
00129 } cb;
00131 Ecore_List *selected;
00133 Ewl_Selection_Mode selection_mode;
00134 unsigned char dirty:1;
00135 };
00136
00137 int ewl_mvc_init(Ewl_MVC *mvc);
00138
00139 void ewl_mvc_view_set(Ewl_MVC *mvc, const Ewl_View *view);
00140 const Ewl_View *ewl_mvc_view_get(Ewl_MVC *mvc);
00141
00142 void ewl_mvc_model_set(Ewl_MVC *mvc, const Ewl_Model *model);
00143 const Ewl_Model *ewl_mvc_model_get(Ewl_MVC *mvc);
00144
00145 void ewl_mvc_data_set(Ewl_MVC *mvc, void *data);
00146 void *ewl_mvc_data_get(Ewl_MVC *mvc);
00147
00148 void ewl_mvc_dirty_set(Ewl_MVC *mvc, unsigned int dirty);
00149 unsigned int ewl_mvc_dirty_get(Ewl_MVC *mvc);
00150
00151 void ewl_mvc_selection_mode_set(Ewl_MVC *mvc,
00152 Ewl_Selection_Mode mode);
00153 Ewl_Selection_Mode ewl_mvc_selection_mode_get(Ewl_MVC *mvc);
00154
00155 void ewl_mvc_selected_clear(Ewl_MVC *mvc);
00156
00157 void ewl_mvc_selected_list_set(Ewl_MVC *mvc, Ecore_List *list);
00158 Ecore_List *ewl_mvc_selected_list_get(Ewl_MVC *mvc);
00159
00160 void ewl_mvc_selected_range_add(Ewl_MVC *mvc,
00161 const Ewl_Model * model,
00162 void *data,
00163 unsigned int srow,
00164 unsigned int scolumn,
00165 unsigned int erow,
00166 unsigned int ecolumn);
00167
00168 void ewl_mvc_selected_set(Ewl_MVC *mvc, const Ewl_Model *model,
00169 void *data, unsigned int row,
00170 unsigned int column);
00171 void ewl_mvc_selected_add(Ewl_MVC *mvc, const Ewl_Model *model,
00172 void *data, unsigned int row,
00173 unsigned int column);
00174 Ewl_Selection_Idx *ewl_mvc_selected_get(Ewl_MVC *mvc);
00175 void ewl_mvc_selected_rm(Ewl_MVC *mvc, void *data, unsigned int row,
00176 unsigned int column);
00177
00178 unsigned int ewl_mvc_selected_count_get(Ewl_MVC *mvc);
00179 unsigned int ewl_mvc_selected_is(Ewl_MVC *mvc, void *data, unsigned int row,
00180 unsigned int column);
00181
00182 Ewl_Selection *ewl_mvc_selection_index_new(const Ewl_Model *model, void *data,
00183 unsigned int row,
00184 unsigned int column);
00185 Ewl_Selection *ewl_mvc_selection_range_new(const Ewl_Model *model, void *data,
00186 unsigned int srow,
00187 unsigned int scolumn,
00188 unsigned int erow,
00189 unsigned int ecolumn);
00190
00191 void ewl_mvc_highlight(Ewl_MVC *mvc, Ewl_Container *c,
00192 Ewl_Widget *(*widget)(Ewl_MVC *mvc,
00193 void *data, unsigned int row,
00194 unsigned int column));
00195
00196
00197
00198
00199 void ewl_mvc_view_change_cb_set(Ewl_MVC *mvc, void (*cb)(Ewl_MVC *mvc));
00200 void ewl_mvc_selected_change_cb_set(Ewl_MVC *mvc, void (*cb)(Ewl_MVC *mvc));
00201
00202 void ewl_mvc_cb_destroy(Ewl_Widget *w, void *ev, void *data);
00203 void ewl_mvc_cb_data_unref(Ewl_Widget *w, void *ev, void *data);
00204
00205 void ewl_mvc_handle_click(Ewl_MVC *mvc, const Ewl_Model *model,
00206 void *data, unsigned int row,
00207 unsigned int column);
00208
00213 #endif
00214