File Manager / src / view /
navi-path-widget.c
- /*
- * Copyright 2014 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
- #include "view/navi-path-widget.h"
- #include "view/list-view.h"
- #include "view/navigator.h"
- #include "utils/ui-utils.h"
- #include "utils/app-types.h"
- #include "utils/common-utils.h"
- #include "utils/config.h"
- #include "utils/logger.h"
- #define FM_DEF_TEXT_COLOR 43, 58, 175, 255
- #define FM_NAVIFRAME_ITEM_INDEX_MAIN 1
- #define FM_DEF_COLUMN_NUMBER 0
- #define FM_DEF_COLUMN_SPAN 1
- #define FM_DEF_ROW_SPAN 1
- #define FM_CLICK_MAX_DURATION_MS 150
- #define FM_CLICK_MIN_X_DISTANCE_PIX 50
- static void _navi_path_widget_destroy(navi_path_widget *widget);
- static void _navi_path_widget_append_label(navi_path_widget *widget, const char *label_name);
- static void _navi_path_widget_label_clicked(navi_path_widget *widget, Evas_Object *label);
- static void _navi_path_widget_label_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
- static void _navi_path_widget_label_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
- static void _navi_path_widget_delete_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
- navi_path_widget *navi_path_widget_add(view_data *view)
- {
- RETVM_IF(!view, NULL, "View object is NULL");
- navi_path_widget *widget = calloc(1, sizeof(navi_path_widget));
- RETVM_IF(!widget, NULL, "Fail allocate memory");
- widget->table_size = 0;
- widget->view = view;
- widget->navi_path_layout = ui_utils_genlist_add(widget->view->navi_layout, _navi_path_widget_delete_cb, widget);
- if (!widget->navi_path_layout) {
- ERR("Layout is NULL");
- _navi_path_widget_destroy(widget);
- return NULL;
- }
- evas_object_size_hint_weight_set(widget->navi_path_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(widget->navi_path_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_layout_file_set(widget->navi_path_layout, ui_utils_get_resource(FM_LAYOUT_EDJ), "path_info");
- evas_object_show(widget->navi_path_layout);
- widget->navi_path_scroller = elm_scroller_add(widget->navi_path_layout);
- if (!widget->navi_path_scroller) {
- ERR("Scroller is NULL");
- evas_object_del(widget->navi_path_layout);
- return NULL;
- }
- elm_scroller_bounce_set(widget->navi_path_scroller, EINA_TRUE, EINA_FALSE);
- elm_scroller_policy_set(widget->navi_path_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
- evas_object_size_hint_weight_set(widget->navi_path_scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(widget->navi_path_scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(widget->navi_path_scroller);
- widget->navi_path_table = elm_table_add(widget->navi_path_layout);
- if (!widget->navi_path_table) {
- ERR("Table is NULL");
- evas_object_del(widget->navi_path_layout);
- return NULL;
- }
- evas_object_size_hint_weight_set(widget->navi_path_table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(widget->navi_path_table, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(widget->navi_path_table);
- elm_object_content_set(widget->navi_path_scroller, widget->navi_path_table);
- elm_object_part_content_set(widget->navi_path_layout, "info", widget->navi_path_scroller);
- elm_object_part_content_set(widget->view->navi_layout, "header_box", widget->navi_path_layout);
- return widget;
- }
- void navi_path_widget_content_set(navi_path_widget *widget, Eina_List *path_list)
- {
- RETM_IF(!widget, "Widget object is NULL");
- Eina_List *list = NULL;
- char *data = NULL;
- EINA_LIST_FOREACH(path_list, list, data) {
- _navi_path_widget_append_label(widget, data);
- }
- }
- static void _navi_path_widget_append_label(navi_path_widget *widget, const char *label_name)
- {
- RETM_IF(!widget, "Widget object is NULL");
- RETM_IF(!widget->view, "View object is NULL");
- RETM_IF(!label_name, "Label name is NULL");
- Evas_Object *label = elm_label_add(widget->navi_path_layout);
- RETM_IF(!label, "Label object is NULL");
- char *label_markup = elm_entry_utf8_to_markup(label_name);
- char *lable_text = common_util_strconcat(label_markup, "/", NULL);
- elm_object_text_set(label, lable_text);
- free(lable_text);
- free(label_markup);
- evas_object_color_set(label, FM_DEF_TEXT_COLOR);
- evas_object_event_callback_add(label, EVAS_CALLBACK_MOUSE_DOWN, _navi_path_widget_label_down_cb, widget);
- evas_object_event_callback_add(label, EVAS_CALLBACK_MOUSE_UP, _navi_path_widget_label_up_cb, widget);
- evas_object_show(label);
- elm_table_pack(widget->navi_path_table,
- label,
- ++widget->table_size,
- FM_DEF_COLUMN_NUMBER,
- FM_DEF_COLUMN_SPAN,
- FM_DEF_ROW_SPAN);
- widget->labels_list = eina_list_append(widget->labels_list, label);
- }
- static void _navi_path_widget_destroy(navi_path_widget *widget)
- {
- free(widget);
- }
- static void _navi_path_widget_label_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
- {
- RETM_IF(!data, "Data is NULL");
- RETM_IF(!event_info, "Event info is NULL");
- navi_path_widget *widget = data;
- Evas_Event_Mouse_Down *ei = event_info;
- widget->was_down = EINA_TRUE;
- widget->down_time_ms = ei->timestamp;
- widget->down_pos_x = ei->canvas.x;
- }
- static void _navi_path_widget_label_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
- {
- RETM_IF(!data, "Data is NULL");
- RETM_IF(!obj, "Object is NULL");
- RETM_IF(!event_info, "Event info is NULL");
- navi_path_widget *widget = data;
- Evas_Event_Mouse_Down *event = event_info;
- if (!widget->was_down) {
- return;
- }
- widget->was_down = EINA_FALSE;
- if ((event->timestamp - widget->down_time_ms) > FM_CLICK_MAX_DURATION_MS) {
- return;
- }
- if (abs(event->canvas.x - widget->down_pos_x) > FM_CLICK_MIN_X_DISTANCE_PIX) {
- return;
- }
- _navi_path_widget_label_clicked(widget, obj);
- }
- static void _navi_path_widget_label_clicked(navi_path_widget *widget, Evas_Object *label)
- {
- int pos = 0;
- elm_table_pack_get(label, &pos, NULL, NULL, NULL);
- int view_index = pos + FM_NAVIFRAME_ITEM_INDEX_MAIN;
- int res = navigator_goto_view_by_index(widget->view->app->navigator, view_index);
- RETM_IF(res != RESULT_TYPE_OK, "Failed to navigate to view by index '%d'", view_index);
- }
- static void _navi_path_widget_delete_cb(void *data, Evas *evas, Evas_Object *obj,
- void *event_info)
- {
- _navi_path_widget_destroy(data);
- }