File Manager / src /
main-app.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 "main-app.h"
- #include "view/window.h"
- #include "view/main-view.h"
- #include "view/list-view.h"
- #include "view/navigator.h"
- #include "utils/ui-utils.h"
- #include "utils/logger.h"
- #include "model/fs-manager.h"
- #include "model/clipboard.h"
- #include "model/navi-path-storage.h"
- #include <stdlib.h>
- #include <Elementary.h>
- #include <app.h>
- #include <elm_app.h>
- #define BASE_DISPLAY_SCALE 2.6
- /* app event callbacks */
- static bool _on_create_cb(void *user_data);
- static void _on_terminate_cb(void *user_data);
- static void _on_pause_cb(void *user_data);
- static void _on_resume_cb(void *user_data);
- static void _on_app_control_cb(app_control_h app_control, void *user_data);
- static void _app_clear_data(app_data *app);
- static Evas_Object *_app_add_naviframe(app_data *app);
- static void _app_naviframe_backbutton_cb(void *data, Evas_Object *obj, void *event_info);
- app_data *app_create()
- {
- app_data *app = calloc(1, sizeof(app_data));
- return app;
- }
- void app_destroy(app_data *app)
- {
- free(app);
- }
- int app_run(app_data *app, int argc, char **argv)
- {
- if (!app) {
- return -1;
- }
- ui_app_lifecycle_callback_s cbs = {
- .create = _on_create_cb,
- .terminate = _on_terminate_cb,
- .pause = _on_pause_cb,
- .resume = _on_resume_cb,
- .app_control = _on_app_control_cb
- };
- return ui_app_main(argc, argv, &cbs, app);
- }
- static bool _on_create_cb(void *user_data)
- {
- app_data *app = user_data;
- if (!app) {
- return false;
- }
- elm_app_base_scale_set(BASE_DISPLAY_SCALE);
- /* Create file system manager */
- app->manager = fs_manager_create();
- RETVM_IF(!app->manager, false, "Failed to create file system manager");
- /* Create clipboard */
- app->clipboard = clipboard_create();
- if (!app->clipboard) {
- ERR("Failed to create clipboard");
- fs_manager_destroy(app->manager);
- return false;
- }
- /* Create main window */
- app->win = win_create();
- if (!app->win) {
- ERR("Failed to create main window");
- _app_clear_data(app);
- return false;
- }
- /* Create naviframe */
- app->navi = _app_add_naviframe(app);
- if (!app->navi) {
- ERR("Failed to create naviframe");
- _app_clear_data(app);
- return false;
- }
- /* Create navigation path storage */
- app->path_storage = navi_path_storage_create();
- if (!app->path_storage) {
- ERR("Failed to create navigation path storage");
- _app_clear_data(app);
- return false;
- }
- /* Create navigator */
- app->navigator = navigator_create(app);
- if (!app->navigator) {
- ERR("Failed to create navigator");
- _app_clear_data(app);
- return false;
- }
- /* Create main view */
- int res = main_view_add(app, app->navi);
- if (res != RESULT_TYPE_OK) {
- ERR("Failed to create main view");
- _app_clear_data(app);
- return false;
- }
- return true;
- }
- static void _on_terminate_cb(void *user_data)
- {
- app_data *app = user_data;
- _app_clear_data(app);
- }
- static void _on_pause_cb(void *user_data)
- {
- }
- static void _on_resume_cb(void *user_data)
- {
- }
- static void _on_app_control_cb(app_control_h app_control, void *user_data)
- {
- }
- static void _app_clear_data(app_data *app)
- {
- if (app) {
- fs_manager_destroy(app->manager);
- app->manager = NULL;
- clipboard_destroy(app->clipboard);
- app->clipboard = NULL;
- win_destroy(app->win);
- app->win = NULL;
- navigator_destroy(app->navigator);
- app->navigator = NULL;
- navi_path_storage_destroy(app->path_storage);
- app->path_storage = NULL;
- }
- }
- static Evas_Object *_app_add_naviframe(app_data *app)
- {
- Evas_Object *naviframe = NULL;
- Evas_Object *parent = win_get_host_layout(app->win);
- if (parent) {
- naviframe = ui_utils_navi_add(parent, _app_naviframe_backbutton_cb, app);
- if (naviframe) {
- win_set_layout(app->win, naviframe);
- }
- }
- return naviframe;
- }
- static void _app_naviframe_backbutton_cb(void *data, Evas_Object *obj, void *event_info)
- {
- app_data *app = (app_data *)data;
- if (app->status.curr_mode != MODE_DEFAULT) {
- app->status.curr_mode = MODE_DEFAULT;
- if (app->status.is_mainview) {
- RETM_IF(main_view_update(
- elm_naviframe_top_item_get(obj)) != RESULT_TYPE_OK,
- "Failed to navigate to previous view");
- } else {
- RETM_IF(list_view_update(
- elm_naviframe_top_item_get(obj), UPDATE_TYPE_GENLIST |
- UPDATE_TYPE_CTRL_BAR_MODE) != RESULT_TYPE_OK,
- "Failed to navigate to previous view");
- }
- return;
- }
- if (elm_naviframe_top_item_get(obj) == elm_naviframe_bottom_item_get(obj)) {
- if (app) {
- win_lower(app->win);
- }
- } else {
- int res = navigator_goto_previous_view(app->navigator);
- RETM_IF(res != RESULT_TYPE_OK, "Failed to navigate to previous view");
- }
- }