File Manager / src / view /

main-view.c

  1. /*
  2. * Copyright 2014 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
  3. *
  4. * Licensed under the Apache License, Version 2.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
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  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.
  15. *
  16. */
  17.  
  18. #include "view/main-view.h"
  19. #include "view/ctrl-bar-view.h"
  20. #include "view/genlist-widget.h"
  21. #include "view/navigator.h"
  22. #include "view/view.h"
  23. #include "utils/config.h"
  24. #include "utils/logger.h"
  25. #include "utils/ui-utils.h"
  26. #include "utils/common-utils.h"
  27. #include "utils/app-types.h"
  28. #include "model/fs-manager.h"
  29. #include "main-app.h"
  30.  
  31. #define FM_MAIN_VIEW_TITLE "Storages"
  32.  
  33. typedef struct {
  34. view_data view;
  35. genlist_widget *genlist_widget;
  36. ctrl_bar_widget *ctrl_widget;
  37. Eina_List *storage_list;
  38. } main_view_data;
  39.  
  40. static int _main_view_fill(main_view_data *data);
  41. static int _main_view_create_widgets(main_view_data *data);
  42. static void _main_view_destroy(main_view_data *data);
  43.  
  44. static void _main_view_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
  45.  
  46. int main_view_add(app_data *app, Evas_Object *parent)
  47. {
  48. RETVM_IF(!app, RESULT_TYPE_INVALID_ARG, "App object is NULL");
  49. RETVM_IF(!parent, RESULT_TYPE_INVALID_ARG, "Parent object is NULL");
  50.  
  51. app->status.is_mainview = EINA_TRUE;
  52.  
  53. main_view_data *data = calloc(1, sizeof(main_view_data));
  54. RETVM_IF(!data, RESULT_TYPE_FAIL_ALLOCATE_MEMORY, "Fail allocate memory");
  55.  
  56. data->view.app = app;
  57. data->view.navi = parent;
  58.  
  59. data->storage_list = NULL;
  60. data->view.is_root = EINA_FALSE;
  61.  
  62. data->view.navi_layout = ui_utils_layout_add(data->view.navi, _main_view_del_cb, data);
  63. if (!data->view.navi_layout) {
  64. ERR("Fail to create layout");
  65. _main_view_destroy(data);
  66. return RESULT_TYPE_FAIL;
  67. }
  68.  
  69. elm_layout_file_set(data->view.navi_layout, ui_utils_get_resource(FM_LAYOUT_EDJ), "navi_layout");
  70.  
  71. int result = navigator_add_view(data->view.app->navigator, FM_MAIN_VIEW_TITLE, &data->view);
  72. if (result != RESULT_TYPE_OK) {
  73. ERR("Fail to add view to naviframe");
  74. evas_object_del(data->view.navi_layout);
  75. return result;
  76. }
  77.  
  78. result = _main_view_create_widgets(data);
  79. if (result != RESULT_TYPE_OK) {
  80. ERR("Fail to create widgets");
  81. evas_object_del(data->view.navi_layout);
  82. return result;
  83. }
  84.  
  85. result = _main_view_fill(data);
  86. if (result != RESULT_TYPE_OK) {
  87. ERR("Fail to initialize main view");
  88. evas_object_del(data->view.navi_layout);
  89. return result;
  90. }
  91.  
  92. elm_object_item_data_set(data->view.navi_item, data);
  93.  
  94. return RESULT_TYPE_OK;
  95. }
  96.  
  97. int main_view_update(Elm_Object_Item *navi_item)
  98. {
  99. RETVM_IF(!navi_item, RESULT_TYPE_INVALID_ARG, "View object is NULL");
  100.  
  101. main_view_data *data = elm_object_item_data_get(navi_item);
  102. RETVM_IF(!data, RESULT_TYPE_INVALID_ARG, "Data is NULL");
  103. RETVM_IF(!data->genlist_widget, RESULT_TYPE_INVALID_ARG, "Genlist widget is NULL");
  104.  
  105. common_util_clear_storage_list(&data->storage_list);
  106. genlist_widget_clear(data->genlist_widget);
  107.  
  108. return _main_view_fill(data);
  109. }
  110.  
  111. static int _main_view_create_widgets(main_view_data *data)
  112. {
  113. data->genlist_widget = genlist_widget_add((view_data *)data);
  114. RETVM_IF(!data->genlist_widget, RESULT_TYPE_INVALID_ARG, "Fail to create genlist widget");
  115.  
  116. data->ctrl_widget = ctrl_bar_widget_add((view_data *)data);
  117. RETVM_IF(!data->ctrl_widget, RESULT_TYPE_INVALID_ARG, "Fail to create ctrl bar widget");
  118.  
  119. return RESULT_TYPE_OK;
  120. }
  121.  
  122. static int _main_view_fill(main_view_data *data)
  123. {
  124. int res = fs_manager_get_storage_list(data->view.app->manager, &data->storage_list);
  125. RETVM_IF(res != RESULT_TYPE_OK, res, "Fail to get storage list");
  126.  
  127. genlist_widget_content_set(data->genlist_widget, data->storage_list);
  128. return RESULT_TYPE_OK;
  129. }
  130.  
  131. static void _main_view_destroy(main_view_data *data)
  132. {
  133. if (data) {
  134. common_util_clear_storage_list(&data->storage_list);
  135. free(data);
  136. }
  137. }
  138.  
  139. static void _main_view_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
  140. {
  141. _main_view_destroy(data);
  142. }