2 * Copyright 2013 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "mf-widget.h"
20 #include "mf-callback.h"
21 #include "mf-fm-svc-wrapper.h"
22 //double wscale = (double)(((double)w) / ((double)GL_WIN_WIDTH));
23 #define LEFT_SCALE 0.4
24 #define LEFT_W (800*LEFT_SCALE)
27 #ifdef MYFILE_SPLIT_VIEW
29 static void _gl_con(void *data, Evas_Object *obj, void *event_info);
30 static void _gl_exp_ndepth(void *data, Evas_Object *obj, void *event_info);
32 void mf_split_view_unset_right_content(void *data)
36 mf_retm_if(data == NULL, "data is NULL");
37 struct appdata *ap = (struct appdata*)data;
38 Evas_Object *unset = NULL;
40 unset = mf_widget_unset_part_content(ap->mf_MainWindow.sSplitData.pPanes, "right");
42 evas_object_hide(unset);
47 void mf_split_view_path_info_update(Evas_Object *label, const char *fullpath, Eina_Bool root)
50 mf_retm_if(label == NULL, "label is NULL");
51 mf_retm_if(fullpath == NULL, "path_info is NULL");
52 char *pathinfo = NULL;
56 info = g_strdup("Root");
58 pathinfo = mf_fm_svc_path_info_get(fullpath);
59 info = mf_fm_svc_path_info_translate(pathinfo, MF_PATH_INFO_MAX_LENGTH_LANDSCAPE);
62 elm_object_part_text_set(label, "info", info);
67 void mf_split_view_init(void *data)
70 mf_retm_if(data == NULL, "data is NULL");
71 struct appdata *ap = (struct appdata*)data;
72 Evas_Object *pLeftGenlist = NULL;
73 /*** create the panes */
75 ap->mf_MainWindow.sSplitData.pPanes = mf_widget_create_panes(ap->mf_MainWindow.pMainLayout);
76 evas_object_show(ap->mf_MainWindow.sSplitData.pPanes);
78 ap->mf_MainWindow.sSplitData.pMainLayout = mf_widget_create_layout_main(ap->mf_MainWindow.sSplitData.pPanes);
81 elm_panes_content_left_size_set(ap->mf_MainWindow.sSplitData.pPanes, LEFT_SCALE);
84 /** create the left folder genlist **/
85 pLeftGenlist = mf_widget_create_genlist(ap->mf_MainWindow.sSplitData.pPanes);
86 evas_object_smart_callback_add(pLeftGenlist, "expanded", _gl_exp_ndepth, ap);
87 evas_object_smart_callback_add(pLeftGenlist, "contracted", _gl_con, ap);
89 //mf_widget_resize(pLeftGenlist, LEFT_W, LEFT_H);
90 ap->mf_MainWindow.sSplitData.pSplitLeftGenlist = pLeftGenlist;
91 evas_object_show(pLeftGenlist);
93 elm_object_part_content_set(ap->mf_MainWindow.sSplitData.pPanes, "left", pLeftGenlist);
95 ap->mf_MainWindow.sSplitData.bFlagSplitViewCreate = TRUE;
99 void mf_split_view_destory(void *data)
102 mf_retm_if(data == NULL, "data is NULL");
103 struct appdata *ap = (struct appdata*)data;
105 //SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pSelectAllCheckBox);
106 //SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pSelectAllLayout);
107 SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pSplitLeftGenlist);
108 SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pPanes);
109 SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pMainLayout);
110 ap->mf_MainWindow.sSplitData.bFlagSplitViewCreate = FALSE;
114 void mf_split_view_hide(void *data)
117 mf_retm_if(data == NULL, "data is NULL");
118 struct appdata *ap = (struct appdata*)data;
119 evas_object_hide(ap->mf_MainWindow.sSplitData.pSplitLeftGenlist);
120 evas_object_hide(ap->mf_MainWindow.sSplitData.pPanes);
121 evas_object_hide(ap->mf_MainWindow.sSplitData.pMainLayout);
125 void mf_split_view_show(void *data)
128 mf_retm_if(data == NULL, "data is NULL");
129 struct appdata *ap = (struct appdata*)data;
130 evas_object_show(ap->mf_MainWindow.sSplitData.pSplitLeftGenlist);
131 evas_object_show(ap->mf_MainWindow.sSplitData.pPanes);
132 evas_object_show(ap->mf_MainWindow.sSplitData.pMainLayout);
136 void mf_split_view_genlist_append(void *data, Evas_Object *pGenlist, GString *fullpath, Elm_Object_Item *parent_item)
139 mf_retm_if(data == NULL, "data is NULL");
140 struct appdata *ap = (struct appdata*)data;
141 Elm_Object_Item *parent = NULL;
142 Eina_List *dir_list = NULL;
143 Eina_List *file_list = NULL;
144 mfItemData_s *it_data;
145 int iSortTypeValue = 0;
146 it_data = elm_object_item_data_get(parent_item);
147 mf_retm_if(it_data == NULL, "it_data is NULL");
148 mf_retm_if(it_data->m_ItemName == NULL, "it_data->m_ItemName is NULL");
149 mf_retm_if(it_data->m_ItemName->str == NULL, "it_data->m_ItemName->str is NULL");
151 mf_debug("fullpath is [%s] item is [%s]", fullpath->str, it_data->m_ItemName->str);
153 mf_fm_svc_wrapper_get_file_list(it_data->m_ItemName->str, &dir_list, &file_list);
156 mf_util_get_vconf_value(VCONF_TYPE_SORT_TYPE, &iSortTypeValue);
158 mf_fs_oper_sort_list(&file_list, iSortTypeValue);
160 if (iSortTypeValue == MYFILE_SORT_BY_NAME_A2Z || iSortTypeValue == MYFILE_SORT_BY_NAME_Z2A || iSortTypeValue == MYFILE_SORT_BY_DATE_R2O
161 || iSortTypeValue == MYFILE_SORT_BY_DATE_O2R) {
162 mf_fs_oper_sort_list(&dir_list, iSortTypeValue);
164 mf_fs_oper_sort_list(&dir_list, ap->mf_Status.iFolderSortType);
166 if (dir_list == NULL || eina_list_count(dir_list) == 0) {
171 if (g_string_equal(fullpath, it_data->m_ItemName)) {
172 it_data->flagExpand = true;
173 elm_object_item_data_set(it_data->item, it_data);
175 elm_genlist_item_update(it_data->item);
176 mf_genlist_split_left_items_append(ap, pGenlist, parent_item, dir_list);
181 it_data->flagExpand = true;
182 elm_object_item_data_set(it_data->item, it_data);
184 elm_genlist_item_update(it_data->item);
185 parent = mf_genlist_split_left_items_append(ap, pGenlist, parent_item, dir_list);
186 mf_split_view_genlist_append(ap, pGenlist, fullpath, parent);
192 Elm_Object_Item *mf_split_view_locate_item_get(void *data, int locate)
195 mf_retvm_if(data == NULL, NULL, "data is NULL");
196 struct appdata *ap = (struct appdata*)data;
198 Elm_Object_Item *item = NULL;
202 item = ap->mf_MainWindow.sSplitData.mmc_item;
205 item = ap->mf_MainWindow.sSplitData.otg_item;
209 item = ap->mf_MainWindow.sSplitData.phone_item;
215 static void _gl_con(void *data, Evas_Object *obj, void *event_info)
218 struct appdata *ap = (struct appdata *)data;
219 if (ap->mf_Status.flagNaviPush) {
220 mf_debug("the transition of the naviframe is not finished");
223 if (ap->mf_Status.more != MORE_EDIT) {
224 Elm_Object_Item *item = event_info;
225 elm_genlist_item_subitems_clear(item);
226 SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
227 mfItemData_s *selected = (mfItemData_s *) elm_object_item_data_get(item);
228 mf_error("g_strcmp0(ap->mf_Status.path->str, selected->m_ItemName->str) %d", g_strcmp0(ap->mf_Status.path->str, selected->m_ItemName->str));
229 if (g_strcmp0(ap->mf_Status.path->str, selected->m_ItemName->str)) {
230 myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
231 SAFE_FREE_GSTRING(ap->mf_Status.path);
232 ap->mf_Status.path = g_string_new(selected->m_ItemName->str);
233 SAFE_FREE_CHAR(pNavi_s->pCurrentPath);
234 pNavi_s->pCurrentPath = g_strdup(selected->m_ItemName->str);
235 if (ap->mf_Status.more == MORE_DEFAULT) {
236 mf_navi_bar_create_default_view(ap);
237 mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
238 mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_OTG_ROOT, true);
239 //mf_ctrl_bar_item_set_disable(ap->mf_MainWindow.pNaviCtrlBar, CTRL_DISABLE_OTG_ROOT, TRUE);
240 } else if (ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
241 || ap->mf_Status.more == MORE_DATA_COPYING || ap->mf_Status.more == MORE_DATA_MOVING) {
242 mf_navi_bar_create_path_select_view(ap);
243 mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
244 mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_OTG_ROOT, true);
245 //mf_ctrl_bar_item_set_disable(ap->mf_MainWindow.pNaviCtrlBar, CTRL_DISABLE_OTG_ROOT, TRUE);
253 static void _gl_exp_ndepth(void *data, Evas_Object *obj, void *event_info)
256 struct appdata *ap = (struct appdata *)data;
257 Elm_Object_Item *item = event_info;
260 mfItemData_s *selected = (mfItemData_s *) elm_object_item_data_get(item);
261 //elm_genlist_item_selected_set(item, FALSE);
263 if (ap->mf_Status.flagNaviPush) {
264 mf_debug("the transition of the naviframe is not finished");
267 SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
268 if (ap->mf_Status.more == MORE_RENAME) {
269 if (elm_genlist_item_flip_get(item)) {
273 mf_callback_rename_save_cb(ap, NULL, NULL);
276 } else if (ap->mf_Status.more != MORE_EDIT) {
277 if (g_string_equal(selected->m_ItemName, ap->mf_Status.path)) {
279 myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
280 SAFE_FREE_GSTRING(ap->mf_Status.path);
281 ap->mf_Status.path = g_string_new(selected->m_ItemName->str);
282 SAFE_FREE_CHAR(pNavi_s->pCurrentPath);
283 pNavi_s->pCurrentPath = g_strdup(selected->m_ItemName->str);
285 mf_split_view_genlist_append(ap, ap->mf_MainWindow.sSplitData.pSplitLeftGenlist,
286 ap->mf_Status.path, item);
288 mf_split_view_genlist_append(ap, ap->mf_MainWindow.sSplitData.pSplitLeftGenlist,
289 ap->mf_Status.path, item);
290 if (!g_string_equal(selected->m_ItemName, ap->mf_Status.path)) {
291 mf_callback_left_click_cb(data, selected->m_ItemName, item);
302 void mf_split_view_left_genlist_refresh(void *data)
305 mf_retm_if(data == NULL, "data is NULL");
306 struct appdata *ap = (struct appdata*)data;
307 Evas_Object *pGenlist = NULL;
309 GString *fullpath = ap->mf_Status.path;
310 mf_retm_if(fullpath == NULL, "fullpath is NULL");
311 //Eina_List *dir_list = NULL;
314 mf_widget_unset_part_content(ap->mf_MainWindow.sSplitData.pPanes, "left");
315 SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pSplitLeftGenlist);
316 /** create the left folder genlist **/
317 pGenlist = mf_widget_create_genlist(ap->mf_MainWindow.sSplitData.pPanes);
318 evas_object_smart_callback_add(pGenlist, "expanded", _gl_exp_ndepth, ap);
319 evas_object_smart_callback_add(pGenlist, "contracted", _gl_con, ap);
321 //mf_widget_resize(pLeftGenlist, LEFT_W, LEFT_H);
322 ap->mf_MainWindow.sSplitData.pSplitLeftGenlist = pGenlist;
324 //elm_genlist_mode_set(pGenlist, ELM_LIST_SCROLL); /* Back to default */
325 //elm_scroller_policy_set(pGenlist,EINA_TRUE, EINA_TRUE);
326 evas_object_show(pGenlist);
328 elm_object_part_content_set(ap->mf_MainWindow.sSplitData.pPanes, "left", pGenlist);
331 //pGenlist = ap->mf_MainWindow.sSplitData.pSplitLeftGenlist;
332 mf_retm_if(pGenlist == NULL, "pGenlist is NULL");
333 Elm_Object_Item *parent_item = NULL;
334 mf_genlist_clear(pGenlist);
335 mf_genlist_split_left_genlist_style(ap);
336 mf_genlist_split_root_items_append(pGenlist, ap);
339 int locate = mf_fm_svc_wrapper_get_location(fullpath->str);
341 parent_item = mf_split_view_locate_item_get(ap, locate);
343 mf_split_view_genlist_append(ap, pGenlist, fullpath, parent_item);
344 //error_code = mf_fm_svc_wrapper_get_file_list(path, &dir_list, file_list);
348 bool mf_split_view_refresh(void *data)
351 mf_retvm_if(data == NULL, FALSE, "data is NULL");
352 struct appdata *ap = (struct appdata*)data;
353 //update the left genlist items
354 mf_split_view_left_genlist_refresh(ap);