Code Refactoring
[profile/tv/apps/native/homescreen.git] / include / bar.h
1 /*
2  * Copyright (c) 2014 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 #ifndef __BAR_H__
18 #define __BAR_H__
19
20 #include <Evas.h>
21
22 /**
23  * BAR_DIR
24  */
25 enum bar_direction {
26         BAR_DIR_LEFT,
27         BAR_DIR_RIGHT,
28         BAR_DIR_UP,
29         BAR_DIR_DOWN,
30         BAR_DIR_BACK,
31         BAR_DIR_MAX,
32 };
33
34 /**
35  * BAR_EVENT
36  *
37  * DONE event is done and will not be passed on
38  * PASS event will not be handled and just passed on
39  * MOVE caller should handle bar move event
40  * BACK caller should handle back key event
41  * ERROR error is occured, it will be passed on
42  */
43 enum bar_event {
44         BAR_EVENT_DONE,
45         BAR_EVENT_PASS,
46         BAR_EVENT_MOVE,
47         BAR_EVENT_BACK,
48         BAR_EVENT_ERROR = -1,
49 };
50
51 struct bar_info;
52
53 /**
54  * bar operations
55  *
56  * The homescreen is consist of bars.
57  * There's two main bars - home bar and custom bar
58  * and three sub bars - dynamic bar, user bar, delete bar.
59  *
60  * Here is hierarchy of bars.
61  *
62  * homescreen -> home bar -> dynamic bar
63  *                        -> user bar
64  *            -> custom bar -> dynamic bar -> delete bar
65  *
66  * Bars are operated by following functions.
67  *
68  * add_bar: create new bar
69  * update: update the bar
70  * get_object: get the base evas object of bar
71  * get_item: get the evas object of specific item
72  * show: show the bar
73  * hide: hide the bar
74  * move: move (the focus) to bar
75  * is_move: check that the bar can be moved
76  * key_down: event callback for key down
77  * key_up: event callback for key up
78  * release: release the bar
79  */
80 struct bar_ops {
81         int (*add_bar)(struct bar_info *info, Evas_Object *base);
82         int (*update)(struct bar_info *info, void *eng, void *data);
83         Evas_Object *(*get_object)(struct bar_info *info);
84         Evas_Object *(*get_item)(struct bar_info *info);
85         void (*show)(struct bar_info *info);
86         void (*hide)(struct bar_info *info);
87         Eina_Bool (*move)(struct bar_info *info);
88         Eina_Bool (*is_move)(struct bar_info *info, int dir);
89         enum bar_event (*key_down)(struct bar_info *info, void *ei);
90         enum bar_event (*key_up)(struct bar_info *info, void *ei);
91         void (*release)(struct bar_info *info);
92 };
93
94 /**
95  * bar callback
96  *
97  * func: function called by parent bar
98  * data: parameter for func
99  */
100 struct bar_cb {
101         Eina_Bool (*func)(void *data, Evas_Object *foc);
102         void *data;
103 };
104
105 struct bar_info {
106         struct bar_ops *ops;
107         struct bar_cb cb;
108         void *data;
109 };
110
111 /* bar initialize functions */
112 int init_home_bar(struct bar_info *info);
113 int init_user_bar(struct bar_info *info);
114 int init_dynamic_bar(struct bar_info *info);
115 int init_custom_bar(struct bar_info *info);
116 int init_delete_bar(struct bar_info *info);
117
118 #endif