summaryrefslogtreecommitdiff
path: root/src/widget/include/mp-view-layout.h
blob: 85cfcdd702438fc1c134100fe1293e9194d20581 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
/*
 * Copyright 2012  Samsung Electronics Co., Ltd
 *
 * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
 *
 * 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.
 */



#ifndef __MP_VIEW_LAYOUT_H_
#define __MP_VIEW_LAYOUT_H_

#include "music.h"
#include "mp-define.h"

typedef void (*genlist_cb_t) (void *, Evas_Object *, void *);

typedef enum
{
	MP_LAYOUT_TRACK_LIST,
	MP_LAYOUT_GROUP_LIST,
	MP_LAYOUT_PLAYLIST_LIST,
} mp_list_category_t;

typedef enum
{
	MP_EDIT_DELETE,
	MP_EDIT_ADD_TO_PLAYLIST,
} mp_edit_operation_t;

enum
{
	MP_LAYOUT_CATEGORY_TYPE = 1,	//track list or group list or playlist
	MP_LAYOUT_TRACK_LIST_TYPE,	//audio_svc_track_type_e
	MP_LAYOUT_GROUP_LIST_TYPE,	//audio_svc_group_type_e
	MP_LAYOUT_PLAYLIT_ID,
	MP_LAYOUT_TYPE_STR,	//type_str for db query
	MP_LAYOUT_FILTER_STR,
	MP_LAYOUT_GENLIST_ITEMCLASS,	//item class of genlist
	MP_LAYOUT_GENLIST_AUTO_PLAYLIST_ITEMCLASS,	//item class of genlist
	MP_LAYOUT_LIST_CB,
	MP_LAYOUT_EDIT_MODE,
	MP_LAYOUT_REORDER_MODE,
};

typedef struct
{
	genlist_cb_t selected_cb;
	genlist_cb_t auto_playlist_cb;
} mp_genlist_cb_t;

typedef struct
{
	int magic;
	mp_list_category_t category;
	audio_svc_track_type_e track_type;
	audio_svc_group_type_e group_type;

	int playlist_id;
	char *type_str;
	char *filter_str;

	int edit_mode;
	int reorder;
	int add_to_plst;
	int rename_mode;

	int b_loading;

	int item_count;
	int track_count;	//for create playing list from search result.

	AudioHandleType *svc_handle;
	AudioHandleType *track_handle;	//for search
	AudioHandleType *artist_handle;	//for search
	AudioHandleType *album_handle;	//for search
	AudioHandleType *default_playlists;

	Evas_Object *navibar;	//parent navibar of layout

	Evas_Object *layout;
	Evas_Object *genlist;
	Evas_Object *search_bar;
	Evas_Object *now_playing;
	Evas_Object *box;	//content of confomant, genlist or sentinal should be contained in it.
	Evas_Object *sentinel;
	Evas_Object *isf_entry;

	Ecore_IMF_Context *imf_context;

	Elm_Genlist_Item_Class itc;
	Elm_Genlist_Item_Class auto_playlist_item_class;
	Elm_Object_Item *selected_it;	//Selected genlist item;

	struct appdata *ad;

	mp_genlist_cb_t cb_func;

	Ecore_Idler *search_idler_handle;

	view_data_t *view_data;

	Elm_Object_Item *rename_git;

	mp_view_mode_t view_mode;	// to classify edit & search view.
	Elm_Object_Item *search_group_git;	//group item for search list.

	Evas_Object *now_playing_icon;
	Evas_Object *now_playing_progress;
	Ecore_Timer *progress_timer;

	//added for append item in idler callback.
	Ecore_Idler *load_item_idler;
	Ecore_Idler *block_size_idler;

	//added for genlist edit mode
	Evas_Object *select_all_layout;
	Evas_Object *select_all_checkbox;
	Eina_Bool select_all_checked;
	int checked_count;

	//support cancel while processing edit function.
	Ecore_Idler *edit_idler;
	Ecore_Idler *reorder_idler;
	Elm_Object_Item *current_edit_item;
	int selected_count;	//use to store checked count when editing strared.
	int error_count;
	AudioHandleType *group_track_handle;	//for deleting group items
	int edit_track_index;	//for deleting group items
	bool group_item_delete_error;	//for deleting group items
	mp_edit_operation_t edit_operation;
	int playlist_track_count;	//number of tracks in playlist..
	int edit_playlist_id;	//playlist_id  tracks to be added.

	char *navibar_title;
	void *callback_data;
	int default_playlist_count;

	Elm_Object_Item **aa_group;	//group item for artist-album list.
	Elm_Genlist_Item_Class *aa_group_itc; //group for album list.
	int aa_group_count; // count of group item
	int selected_group_index; //selected index for group
	AudioHandleType *aa_handle; //handle for artist-album group
	int selected_album_sub_index; //selected index for artist-album sub genlist
	int *aa_item_count; //item count for artist-album sub genlist
	bool album_delete_flag; //flag for delete album item
	int selected_index; //selected index for group

	Elm_Object_Item *album_group;	//group item for album track view.
	Elm_Genlist_Item_Class *album_group_itc; //group for album track view.
	AudioHandleType *album_track_handle; //group item handle for album track view

	Eina_Bool is_item_del;	//set it true if elm_object_item_del() used. When play track after delete track, svc_handle mismatch with list.

} mp_layout_data_t;

typedef struct
{
	Elm_Object_Item *it;	// Genlist Item pointer
	Eina_Bool checked;	// Check status
	audio_svc_group_type_e group_type;	//use this to classify ablum or artist when group item seleted in search view.
	AudioHandleType *handle;
	MediaSvcHandle *media_svc_handle;
} mp_genlist_item_data_t;

#define MP_LAYOUT_DATA_MAGIC	0x810522bb
#define MP_SET_LAYOUT_DATA_MAGIC(layout_data)	((mp_layout_data_t *)layout_data)->magic = MP_LAYOUT_DATA_MAGIC
#define MP_CHECK_LAYOUT_DATA(layout_data)	\
do {                                                  \
	if (((mp_layout_data_t *)layout_data)->magic != MP_LAYOUT_DATA_MAGIC) {        \
		ERROR_TRACE("\n###########      ERROR   CHECK  #############\nPARAM is not layout data\n###########      ERROR   CHECK  #############\n"); \
		mp_assert(FALSE);}            \
} while (0)

Evas_Object *mp_view_layout_create(Evas_Object * parent, view_data_t * view_data, mp_view_mode_t view_mode);
void mp_view_layout_destroy(Evas_Object * view_layout);
void mp_view_layout_update(Evas_Object * view_layout);
int mp_view_layout_get_count(Evas_Object * view_layout);
void mp_view_layout_set_layout_data(Evas_Object * view_layout, ...);
void mp_view_layout_clear(Evas_Object * view_layout);

void mp_view_layout_show_now_playing(Evas_Object * view_layout);
void mp_view_layout_hide_now_playing(Evas_Object * view_layout);
void mp_view_layout_set_now_playing_info(Evas_Object * view_layout);
void mp_view_layout_reset_select_all(mp_layout_data_t * layout_data);

void mp_view_layout_progress_timer_thaw(Evas_Object * view_layout);
void mp_view_layout_progress_timer_freeze(Evas_Object * view_layout);
void mp_view_layout_set_edit_mode(mp_layout_data_t * layout_data, bool edit_mode);
void mp_view_layout_search_changed_cb(void *data, Evas_Object * obj, void *event_info);

#endif