Apply IActivatedListener for gengrid / genlist.
[profile/tv/apps/native/musicplayer.git] / include / category-layout.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 __CATEGORY_LAYOUT_H__
18 #define __CATEGORY_LAYOUT_H__
19
20
21 class CCategoryLayout : public CExtBaseLayout, public CListenerMgr,
22         public IKeyDownListener, public IMouseMoveListener, public IMouseClickedListener,
23         public IRealizedListener, public IUnrealizedListener, public IActivatedListener {
24 private:
25         struct SCategoryLayout *m;
26
27 public:
28         enum EDepthType {
29                 E_DEPTH_CATEGORY,
30                 E_DEPTH_ALBUM,
31                 E_DEPTH_SONG,
32                 E_DEPTH_SELECT_LIST,
33                 E_DEPTH_SHOW_LIST
34         };
35
36         enum ESelectType {
37                 SELECT_CREATE,
38                 SELECT_ADD,
39                 SELECT_REMOVE
40         };
41
42         struct SCatItemInfo {
43                 CCategoryInfo *catinfo;
44                 ECategoryType type;
45                 CAlbumInfo *alinfo;
46                 CSongInfo *sinfo;
47                 Elm_Object_Item *item;
48                 bool check_status;
49         };
50
51 protected:
52         struct SCategoryLayoutProtected {
53                 int depth;
54                 CCategoryInfo *c_catinfo;
55                 CAlbumInfo *c_alinfo;
56                 SContentInfo *ctxtinfo;
57                 ESelectType sel_type;
58                 Evas_Object *grid;
59                 class CEntryPopup *epopup;
60                 Evas_Object *base;
61                 Elm_Object_Item *focused_item;
62         } t;
63
64 private:
65         static Eina_Bool sm_CbFocusIdler(void *dt);
66         Eina_Bool m_OnFocusIdler(void);
67
68         static void sm_CbEntrynameSet(void *dt, const char *name);
69         void m_OnEntrynameSet(const char *name);
70
71         static char *sm_CbGetSelectlistItemText(void *data, Evas_Object *obj, const char *part);
72         static char *sm_CbGetListItemText(void *data, Evas_Object *obj, const char *part);
73         static void sm_CbRemoveListItem(void *data, Evas_Object *obj);
74
75         static void sm_CbSongItemSelect(void *data, Evas_Object *obj, void *event_info);
76         void m_OnSongItemSelect(Evas_Object *obj, Elm_Object_Item *event_info);
77
78         static void sm_CbSelectlistItemSelect(void *data, Evas_Object *obj, void *event_info);
79         void m_OnSelectlistItemSelect(Evas_Object *obj, Elm_Object_Item *event_info);
80
81         static void sm_CbCtxtUpdate(void *dt, enum EActionType type, int lid);
82 protected:
83         virtual void t_OnCtxtUpdate(enum EActionType type, int lid);
84
85 private:
86         static void sm_CbCtxtClose(void *dt);
87         void m_OnCtxtClose(void);
88
89         static char *sm_CbGetGridItemText(void *data, Evas_Object *obj, const char *part);
90         static char *sm_CbGetGridAlbumItemText(void *data, Evas_Object *obj, const char *part);
91         static Evas_Object *sm_CbGetGridItemContent(void *data, Evas_Object *obj, const char *part);
92         static Evas_Object *sm_CbGetGridAlbumitemContent(void *data, Evas_Object *obj, const char *part);
93         static void sm_CbRemoveGridItem(void *data, Evas_Object *obj);
94
95         static void sm_CbItemSelect(void *data, Elm_Object_Item *it, const char *emission, const char *source);
96         void m_OnItemSelect(Elm_Object_Item *it, const char *emission, const char *source);
97
98 private:
99         inline int m_ConvertToMin(int milsec);
100         void m_RemoveFocusIdler(void);
101         Elm_Object_Item *m_FindItemByInfo(Eina_List *list, void *info);
102         SCatItemInfo *m_FindItemInfo(Eina_List *list, Elm_Object_Item *item);
103         void m_GotoPlayback(int mode, char *id);
104         Eina_List *m_GetSelectedList(Eina_List *infolist, int type);
105         void m_AddSelectedSongs(void);
106         void m_RemoveSelectedSongs(void);
107         void m_AddAlbumsToPlayback(int mode);
108         void m_AddSongsToPlayback(int mode);
109         Evas_Object *m_AddAlbumCover(void);
110         Evas_Object *m_AddGrid(void);
111         void m_AddCategoryItem(Elm_Gengrid_Item_Class *grid_item, ECategoryType type, void *info);
112         void m_AddButtons(void);
113         void m_AddSelectlistButtons(void);
114
115         void m_CreateSongsTopSection(void);
116         void m_CreateSongList(void);
117         void m_CreateAlbumgrid(void);
118         void m_CreateCatgrid(bool sort_flag);
119         void m_SortCatgrid(void);
120         void m_EmptyLayout(bool sort_flag);
121
122 protected:
123         bool t_SetEdje(const char *layout);
124         void t_UpdateLayout(bool sort_flag);
125         void t_UpdateLayoutWithFocus(void);
126
127 protected:
128         virtual void t_OnShow(void);
129
130 protected:
131         virtual void t_HandleItemSelect(SCatItemInfo *itinfo) = 0;
132         virtual EContextType t_ContextType(void) = 0;
133         virtual bool t_GetMediaList(Eina_List **list) = 0;
134         virtual ECategoryType t_CategoryType(void) = 0;
135
136 public:
137         CCategoryLayout(const char *pLayoutId) :
138                 CExtBaseLayout(pLayoutId),
139                 IKeyDownListener(this),
140                 IMouseMoveListener(this),
141                 IMouseClickedListener(this),
142                 IRealizedListener(this),
143                 IUnrealizedListener(this),
144                 IActivatedListener(this),
145                 m(0) {
146                 memset(&t, 0, sizeof(t));
147         }
148         virtual ~CCategoryLayout() {}
149
150         bool Create(CLayoutMgr *mgr);
151         virtual void Destroy(void);
152
153         virtual void Update(bool focusFlag);
154
155 public:
156         virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
157         virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
158         virtual void OnMouseClicked(int id, Evas_Object *obj);
159         virtual void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item);
160         virtual void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item);
161         virtual void OnActivated(int id, Evas_Object *obj, Elm_Object_Item *item);
162 };
163
164
165 #endif /*__CATEGORY_LAYOUT_H__*/