File Manager / src / view /
navi-bar-title.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-bar-title.h"
#include "view/navi-path-widget.h"
#include "view/list-view.h"
#include "view/navigator.h"
#include "utils/ui-utils.h"
#include "utils/model-utils.h"
#include "utils/app-types.h"
#include "utils/config.h"
#include "utils/logger.h"
#include "main-app.h"
void _navi_bar_title_widget_delete(title_widget *widget);
static Evas_Object *_navi_bar_title_create_button(title_widget *widget,
Evas_Object *parent_layout,
const char *icon_id,
const char *part,
Evas_Smart_Cb cb_clicked,
Evas_Smart_Cb cb_pressed,
Evas_Smart_Cb cb_unpressed);
void _navi_bar_title_widget_delete_cb(void *data, Evas *e, Evas_Object *obj,
void *event_info);
static void _navi_bar_title_home_button_on_click_cb(void *data, Evas_Object *obj, void *eventInfo);
static void _navi_bar_title_home_button_on_pressed_cb(void *data, Evas_Object *obj, void *eventInfo);
static void _navi_bar_title_home_button_on_unpressed_cb(void *data, Evas_Object *obj, void *eventInfo);
static void _navi_bar_title_upper_button_on_click_cb(void *data, Evas_Object *obj, void *eventInfo);
static void _navi_bar_title_upper_button_on_pressed_cb(void *data, Evas_Object *obj, void *eventInfo);
static void _navi_bar_title_upper_button_on_unpressed_cb(void *data, Evas_Object *obj, void *eventInfo);
title_widget *navi_bar_title_widget_add(view_data *view)
{
RETVM_IF(!view, NULL, "View is NULL");
title_widget *data = calloc(1, sizeof(title_widget));
RETVM_IF(!data, NULL, "Fail allocate memory");
data->view = view;
Evas_Object *btn = _navi_bar_title_create_button(data,
data->view->navi_layout,
ui_utils_get_resource(FM_TITLE_ICON_HOME),
"title_left_btn",
_navi_bar_title_home_button_on_click_cb,
_navi_bar_title_home_button_on_pressed_cb,
_navi_bar_title_home_button_on_unpressed_cb);
if (!btn) {
ERR("Fail to create home button");
_navi_bar_title_widget_delete(data);
return NULL;
}
elm_object_item_part_content_set(data->view->navi_item, "title_left_btn", btn);
btn = _navi_bar_title_create_button(data,
data->view->navi_layout,
ui_utils_get_resource(FM_TITLE_ICON_UPPER),
"title_right_btn",
_navi_bar_title_upper_button_on_click_cb,
_navi_bar_title_upper_button_on_pressed_cb,
_navi_bar_title_upper_button_on_unpressed_cb);
if (!btn) {
ERR("Fail to create upper button");
_navi_bar_title_widget_delete(data);
return NULL;
}
elm_object_item_part_content_set(data->view->navi_item, "title_right_btn", btn);
evas_object_event_callback_add(btn, EVAS_CALLBACK_FREE, _navi_bar_title_widget_delete_cb, data);
return data;
}
void _navi_bar_title_widget_delete(title_widget *widget)
{
free(widget);
}
void _navi_bar_title_widget_delete_cb(void *data, Evas *e, Evas_Object *obj,
void *event_info)
{
_navi_bar_title_widget_delete(data);
}
static Evas_Object *_navi_bar_title_create_button(title_widget *widget,
Evas_Object *parent_layout,
const char *icon_id,
const char *part,
Evas_Smart_Cb cb_clicked,
Evas_Smart_Cb cb_pressed,
Evas_Smart_Cb cb_unpressed)
{
Evas_Object *btn = elm_object_part_content_get(parent_layout, part);
if (!btn) {
btn = elm_button_add(parent_layout);
RETVM_IF(!btn, NULL, "btn is NULL");
elm_object_style_set(btn, "naviframe/title_icon");
Evas_Object *icon = elm_image_add(parent_layout);
RETVM_IF(!icon, NULL, "Icon is NULL");
elm_image_file_set(icon, icon_id, NULL);
elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
elm_object_content_set(btn, icon);
evas_object_smart_callback_add(btn, "clicked" , cb_clicked , widget);
evas_object_smart_callback_add(btn, "pressed" , cb_pressed , icon);
evas_object_smart_callback_add(btn, "unpressed", cb_unpressed, icon);
evas_object_show(btn);
elm_object_part_content_set(parent_layout, part, btn);
}
return btn;
}
static void _navi_bar_title_home_button_on_click_cb(void *data, Evas_Object *obj, void *eventInfo)
{
RETM_IF(!data, "Data is NULL");
title_widget *widget = data;
app_data *app = widget->view->app;
int res = navigator_goto_root_view(app->navigator);
RETM_IF(res != RESULT_TYPE_OK, "Fail to navigate to root view");
}
static void _navi_bar_title_home_button_on_pressed_cb(void *data, Evas_Object *obj, void *eventInfo)
{
RETM_IF(!data, "Data is NULL");
Evas_Object *home_button_ic = data;
elm_image_file_set(home_button_ic, ui_utils_get_resource(FM_TITLE_ICON_HOME_PRESS), NULL);
}
static void _navi_bar_title_home_button_on_unpressed_cb(void *data, Evas_Object *obj, void *eventInfo)
{
RETM_IF(!data, "Data is NULL");
Evas_Object *home_button_ic = data;
elm_image_file_set(home_button_ic, ui_utils_get_resource(FM_TITLE_ICON_HOME), NULL);
}
static void _navi_bar_title_upper_button_on_click_cb(void *data, Evas_Object *obj, void *eventInfo)
{
RETM_IF(!data, "Data is NULL");
title_widget *widget = data;
app_data *app = widget->view->app;
int res = navigator_goto_previous_view(app->navigator);
RETM_IF(res != RESULT_TYPE_OK, "Fail to navigate to previous view");
}
static void _navi_bar_title_upper_button_on_pressed_cb(void *data, Evas_Object *obj, void *eventInfo)
{
RETM_IF(!data, "Data is NULL");
Evas_Object *upper_button_ic = data;
elm_image_file_set(upper_button_ic, ui_utils_get_resource(FM_TITLE_ICON_UPPER_PRESS), NULL);
}
static void _navi_bar_title_upper_button_on_unpressed_cb(void *data, Evas_Object *obj, void *eventInfo)
{
RETM_IF(!data, "Data is NULL");
Evas_Object *upper_button_ic = data;
elm_image_file_set(upper_button_ic, ui_utils_get_resource(FM_TITLE_ICON_UPPER), NULL);
}