Metadata-editor / src /

main.c

  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. #include "$(appName)-ref.h"
  18. #include <glib.h>
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <string.h>
  22. #include <storage.h>
  23. #include <metadata_editor.h>
  24.  
  25. typedef struct appdata {
  26. Evas_Object *win;
  27. Evas_Object *conform;
  28. Evas_Object *layout;
  29. Evas_Object *nf;
  30. } appdata_s;
  31.  
  32. Evas_Object *t_path;
  33. Evas_Object *item_artist;
  34. Evas_Object *item_title;
  35. Evas_Object *item_album;
  36. Evas_Object *item_genre;
  37. Evas_Object *item_composer;
  38. Evas_Object *item_copyright;
  39. Evas_Object *item_year;
  40. Evas_Object *item_description;
  41. Evas_Object *item_track;
  42. Evas_Object *item_comment;
  43. Evas_Object *item_conductor;
  44. Evas_Object *item_lyrics;
  45. Evas_Object *cbox;
  46.  
  47. static void
  48. win_delete_request_cb(void *data , Evas_Object *obj , void *event_info)
  49. {
  50. ui_app_exit();
  51. }
  52.  
  53. static Eina_Bool
  54. nf_it_pop_cb(void *data, Elm_Object_Item *it)
  55. {
  56. appdata_s *ad = data;
  57. /* Don't pop the last view but hide window */
  58. elm_win_lower(ad->win);
  59. return EINA_FALSE;
  60. }
  61.  
  62. static void
  63. err_popup(int ret)
  64. {
  65. char err_val[50] = {0, };
  66. Evas_Object *popup = elm_popup_add(cbox);
  67.  
  68. elm_object_style_set(popup, "toast");
  69. evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
  70. evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  71. snprintf(err_val, sizeof(err_val), "<font_size=30>Operation failed [%d]</font/>", ret);
  72. elm_object_text_set(popup, err_val);
  73. elm_popup_timeout_set(popup, 2.0);
  74. evas_object_smart_callback_add(popup, "timeout", NULL, NULL);
  75.  
  76. evas_object_show(popup);
  77. }
  78.  
  79. static void
  80. noti_popup(const char *msg)
  81. {
  82. Evas_Object *popup = elm_popup_add(cbox);
  83.  
  84. elm_object_style_set(popup, "toast");
  85. evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
  86. evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  87. elm_object_text_set(popup, msg);
  88. elm_popup_timeout_set(popup, 2.0);
  89. evas_object_smart_callback_add(popup, "timeout", NULL, NULL);
  90.  
  91. evas_object_show(popup);
  92. }
  93.  
  94. static bool _storage_cb(int storage_id, storage_type_e type, storage_state_e state, const char *path, void *user_data)
  95. {
  96. if(STORAGE_TYPE_INTERNAL == type) {
  97. int *internal_storage_id = (int *)user_data;
  98. if(NULL != internal_storage_id) {
  99. *internal_storage_id = storage_id;
  100. }
  101. return false;
  102. } else {
  103. return true;
  104. }
  105. }
  106.  
  107.  
  108. static void
  109. update_clicked_cb(void *data, Evas_Object *obj, void *event_info)
  110. {
  111. int ret = METADATA_EDITOR_ERROR_NONE;
  112. metadata_editor_h metadata = NULL;
  113. char full_path[100] = {0, };
  114. char *media_path = NULL;
  115. int internal_storage_id = -1;
  116.  
  117. ret = storage_foreach_device_supported(_storage_cb, &internal_storage_id);
  118. if(STORAGE_ERROR_NONE != ret) {
  119. dlog_print(DLOG_ERROR, LOG_TAG, "storage_foreach_device_supported() failed! Error code = %d", ret);
  120. return;
  121. }
  122.  
  123. ret = storage_get_root_directory(internal_storage_id, &media_path);
  124. if(STORAGE_ERROR_NONE != ret) {
  125. dlog_print(DLOG_ERROR, LOG_TAG, "storage_get_root_directory() failed! Error code = %d", ret);
  126. return;
  127. }
  128.  
  129. ret = metadata_editor_create(&metadata);
  130. if(ret != METADATA_EDITOR_ERROR_NONE) {
  131. err_popup(ret);
  132. return;
  133. }
  134. snprintf(full_path, sizeof(full_path), "%s/%s", media_path, elm_object_text_get(t_path));
  135. ret = metadata_editor_set_path(metadata, full_path);
  136. if(ret != METADATA_EDITOR_ERROR_NONE) {
  137. err_popup(ret);
  138. return;
  139. }
  140.  
  141. if(media_path) {
  142. free(media_path);
  143. media_path = NULL;
  144. }
  145.  
  146. ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_ARTIST, elm_object_text_get(item_artist));
  147. if(ret != METADATA_EDITOR_ERROR_NONE) {
  148. err_popup(ret);
  149. return;
  150. }
  151. ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_TITLE, elm_object_text_get(item_title));
  152. if(ret != METADATA_EDITOR_ERROR_NONE) {
  153. err_popup(ret);
  154. return;
  155. }
  156. ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_ALBUM, elm_object_text_get(item_album));
  157. if(ret != METADATA_EDITOR_ERROR_NONE) {
  158. err_popup(ret);
  159. return;
  160. }
  161. ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_GENRE, elm_object_text_get(item_genre));
  162. if(ret != METADATA_EDITOR_ERROR_NONE) {
  163. err_popup(ret);
  164. return;
  165. }
  166. ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_AUTHOR, elm_object_text_get(item_composer));
  167. if(ret != METADATA_EDITOR_ERROR_NONE) {
  168. err_popup(ret);
  169. return;
  170. }
  171. ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_COPYRIGHT, elm_object_text_get(item_copyright));
  172. if(ret != METADATA_EDITOR_ERROR_NONE) {
  173. err_popup(ret);
  174. return;
  175. }
  176. ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_DATE, elm_object_text_get(item_year));
  177. if(ret != METADATA_EDITOR_ERROR_NONE) {
  178. err_popup(ret);
  179. return;
  180. }
  181. ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_DESCRIPTION, elm_object_text_get(item_description));
  182. if(ret != METADATA_EDITOR_ERROR_NONE) {
  183. err_popup(ret);
  184. return;
  185. }
  186. ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_TRACK_NUM, elm_object_text_get(item_track));
  187. if(ret != METADATA_EDITOR_ERROR_NONE) {
  188. err_popup(ret);
  189. return;
  190. }
  191. ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_COMMENT, elm_object_text_get(item_comment));
  192. if(ret != METADATA_EDITOR_ERROR_NONE) {
  193. err_popup(ret);
  194. return;
  195. }
  196. ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_CONDUCTOR, elm_object_text_get(item_conductor));
  197. if(ret != METADATA_EDITOR_ERROR_NONE) {
  198. err_popup(ret);
  199. return;
  200. }
  201. ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_UNSYNCLYRICS, elm_object_text_get(item_lyrics));
  202. if(ret != METADATA_EDITOR_ERROR_NONE) {
  203. err_popup(ret);
  204. return;
  205. }
  206.  
  207. ret = metadata_editor_update_metadata(metadata);
  208. if(ret != METADATA_EDITOR_ERROR_NONE) {
  209. err_popup(ret);
  210. return;
  211. }
  212. ret = metadata_editor_destroy(metadata);
  213. if(ret != METADATA_EDITOR_ERROR_NONE) {
  214. err_popup(ret);
  215. return;
  216. }
  217. noti_popup("<font_size=30>Update successful</font/>");
  218. }
  219.  
  220. static void
  221. get_clicked_cb(void *data, Evas_Object *obj, void *event_info)
  222. {
  223. int ret = METADATA_EDITOR_ERROR_NONE;
  224. metadata_editor_h metadata = NULL;
  225. char full_path[100] = {0, };
  226. char *artist = NULL;
  227. char *title = NULL;
  228. char *album = NULL;
  229. char *genre = NULL;
  230. char *composer = NULL;
  231. char *copyright = NULL;
  232. char *date = NULL;
  233. char *description = NULL;
  234. char *comment = NULL;
  235. char *track_num = NULL;
  236. char *conductor = NULL;
  237. char *lyric = NULL;
  238. char *media_path = NULL;
  239. int internal_storage_id = -1;
  240.  
  241. ret = storage_foreach_device_supported(_storage_cb, &internal_storage_id);
  242. if(STORAGE_ERROR_NONE != ret) {
  243. dlog_print(DLOG_ERROR, LOG_TAG, "storage_foreach_device_supported() failed! Error code = %d", ret);
  244. return;
  245. }
  246.  
  247. ret = storage_get_root_directory(internal_storage_id, &media_path);
  248. if(STORAGE_ERROR_NONE != ret) {
  249. dlog_print(DLOG_ERROR, LOG_TAG, "storage_get_root_directory() failed! Error code = %d", ret);
  250. return;
  251. }
  252.  
  253. ret = metadata_editor_create(&metadata);
  254. if(ret != METADATA_EDITOR_ERROR_NONE) {
  255. err_popup(ret);
  256. return;
  257. }
  258. snprintf(full_path, sizeof(full_path), "%s/%s", media_path, elm_object_text_get(t_path));
  259. ret = metadata_editor_set_path(metadata, full_path);
  260. if(ret != METADATA_EDITOR_ERROR_NONE) {
  261. err_popup(ret);
  262. return;
  263. }
  264.  
  265. ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_ARTIST, &artist);
  266. if(ret != METADATA_EDITOR_ERROR_NONE) {
  267. err_popup(ret);
  268. return;
  269. }
  270. elm_object_text_set(item_artist, artist);
  271. ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_TITLE, &title);
  272. if(ret != METADATA_EDITOR_ERROR_NONE) {
  273. err_popup(ret);
  274. return;
  275. }
  276. elm_object_text_set(item_title, title);
  277. ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_ALBUM, &album);
  278. if(ret != METADATA_EDITOR_ERROR_NONE) {
  279. err_popup(ret);
  280. return;
  281. }
  282. elm_object_text_set(item_album, album);
  283. ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_GENRE, &genre);
  284. if(ret != METADATA_EDITOR_ERROR_NONE) {
  285. err_popup(ret);
  286. return;
  287. }
  288. elm_object_text_set(item_genre, genre);
  289. ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_AUTHOR, &composer);
  290. if(ret != METADATA_EDITOR_ERROR_NONE) {
  291. err_popup(ret);
  292. return;
  293. }
  294. elm_object_text_set(item_composer, composer);
  295. ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_COPYRIGHT, &copyright);
  296. if(ret != METADATA_EDITOR_ERROR_NONE) {
  297. err_popup(ret);
  298. return;
  299. }
  300. elm_object_text_set(item_copyright, copyright);
  301. ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_DATE, &date);
  302. if(ret != METADATA_EDITOR_ERROR_NONE) {
  303. err_popup(ret);
  304. return;
  305. }
  306. elm_object_text_set(item_year, date);
  307. ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_DESCRIPTION, &description);
  308. if(ret != METADATA_EDITOR_ERROR_NONE) {
  309. err_popup(ret);
  310. return;
  311. }
  312. elm_object_text_set(item_description, description);
  313. ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_TRACK_NUM, &track_num);
  314. if(ret != METADATA_EDITOR_ERROR_NONE) {
  315. err_popup(ret);
  316. return;
  317. }
  318. elm_object_text_set(item_track, track_num);
  319. ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_COMMENT, &comment);
  320. if(ret != METADATA_EDITOR_ERROR_NONE) {
  321. err_popup(ret);
  322. return;
  323. }
  324. elm_object_text_set(item_comment, comment);
  325. ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_CONDUCTOR, &conductor);
  326. if(ret != METADATA_EDITOR_ERROR_NONE) {
  327. err_popup(ret);
  328. return;
  329. }
  330. elm_object_text_set(item_conductor, conductor);
  331. ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_UNSYNCLYRICS, &lyric);
  332. if(ret != METADATA_EDITOR_ERROR_NONE) {
  333. err_popup(ret);
  334. return;
  335. }
  336. elm_object_text_set(item_lyrics, lyric);
  337.  
  338. metadata_editor_destroy(metadata);
  339. if(ret != METADATA_EDITOR_ERROR_NONE) {
  340. err_popup(ret);
  341. return;
  342. }
  343. noti_popup("<font_size=30>Read Successful</font/>");
  344. if(media_path) {
  345. free(media_path);
  346. media_path = NULL;
  347. }
  348. }
  349.  
  350. static Evas_Object*
  351. create_box(appdata_s *ad)
  352. {
  353. Evas_Object *box;
  354.  
  355. box = elm_box_add(ad->nf);
  356. elm_box_padding_set(box, 20, 20);
  357. elm_object_content_set(ad->nf, box);
  358. elm_box_horizontal_set(box, EINA_FALSE);
  359. evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
  360. evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  361. evas_object_show(box);
  362.  
  363. Evas_Object *abox = elm_box_add(box);
  364. Evas_Object *bbox = elm_box_add(box);
  365. cbox = elm_box_add(box);
  366.  
  367. // Create a box for adding content
  368. elm_box_padding_set(abox, 10, 10);
  369. elm_box_horizontal_set(abox, EINA_TRUE);
  370. evas_object_size_hint_align_set(abox, EVAS_HINT_FILL, EVAS_HINT_FILL);
  371. evas_object_size_hint_weight_set(abox, EVAS_HINT_EXPAND, 0.1);
  372. evas_object_show(abox);
  373. // Insert item
  374. Evas_Object *l_path = elm_label_add(abox);
  375. elm_object_text_set(l_path, "<font_size=30>Path</font/>");
  376. evas_object_size_hint_align_set(l_path, 0.5, 0.5);
  377. evas_object_size_hint_weight_set(l_path, 0.2, EVAS_HINT_EXPAND);
  378. evas_object_show(l_path);
  379.  
  380. t_path = elm_entry_add(abox);
  381. char *path = "test.mp3";
  382. elm_object_text_set(t_path, path);
  383. evas_object_size_hint_align_set(t_path, EVAS_HINT_FILL, 0.5);
  384. evas_object_size_hint_weight_set(t_path, 0.6, EVAS_HINT_EXPAND);
  385. evas_object_show(t_path);
  386.  
  387. Evas_Object *bt_get = elm_button_add(abox);
  388. elm_object_text_set(bt_get, "<font_size=30>Get</font/>");
  389. elm_box_horizontal_set(bt_get, EINA_FALSE);
  390. evas_object_size_hint_align_set(bt_get, EVAS_HINT_FILL, EVAS_HINT_FILL);
  391. evas_object_size_hint_weight_set(bt_get, 0.2, EVAS_HINT_EXPAND);
  392. evas_object_smart_callback_add(bt_get, "clicked", get_clicked_cb, NULL);
  393. evas_object_show(bt_get);
  394.  
  395. // Create a box for adding content
  396. elm_box_padding_set(bbox, 10, 10);
  397. evas_object_size_hint_align_set(bbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
  398. evas_object_size_hint_weight_set(bbox, EVAS_HINT_EXPAND, 0.8);
  399. evas_object_show(bbox);
  400.  
  401. Evas_Object *scroller = elm_scroller_add(bbox);
  402. evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  403. evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
  404. elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
  405. elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_ON);
  406. evas_object_show(scroller);
  407.  
  408. Evas_Object *content = elm_box_add(scroller);
  409. evas_object_size_hint_weight_set(content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  410. evas_object_size_hint_align_set(content, EVAS_HINT_FILL, EVAS_HINT_FILL);
  411. // evas_object_show(content);
  412. elm_object_content_set(scroller, content);
  413.  
  414.  
  415. // Inser ITEM
  416. Evas_Object *title = elm_box_add(content);
  417. elm_box_horizontal_set(title, EINA_TRUE);
  418. evas_object_size_hint_align_set(title, EVAS_HINT_FILL, EVAS_HINT_FILL);
  419. evas_object_size_hint_weight_set(title, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  420. evas_object_show(title);
  421.  
  422. Evas_Object *lbl_title = elm_label_add(title);
  423. elm_object_text_set(lbl_title, "<font_size=30> Title</font/>");
  424. evas_object_size_hint_align_set(lbl_title, EVAS_HINT_FILL, 0.5);
  425. evas_object_size_hint_weight_set(lbl_title, 0.2, EVAS_HINT_EXPAND);
  426. evas_object_show(lbl_title);
  427.  
  428. item_title = elm_entry_add(title);
  429. elm_object_text_set(item_title, NULL);
  430. evas_object_size_hint_align_set(item_title, EVAS_HINT_FILL, 0.5);
  431. evas_object_size_hint_weight_set(item_title, 0.8, EVAS_HINT_EXPAND);
  432. evas_object_show(item_title);
  433.  
  434. Evas_Object *artist = elm_box_add(content);
  435. elm_box_horizontal_set(artist, EINA_TRUE);
  436. evas_object_size_hint_align_set(artist, EVAS_HINT_FILL, EVAS_HINT_FILL);
  437. evas_object_size_hint_weight_set(artist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  438. evas_object_show(artist);
  439.  
  440. Evas_Object *lbl_artist = elm_label_add(artist);
  441. elm_object_text_set(lbl_artist, "<font_size=30> Artist</font/>");
  442. evas_object_size_hint_align_set(lbl_artist, EVAS_HINT_FILL, 0.5);
  443. evas_object_size_hint_weight_set(lbl_artist, 0.2, EVAS_HINT_EXPAND);
  444. evas_object_show(lbl_artist);
  445.  
  446. item_artist = elm_entry_add(artist);
  447. elm_object_text_set(item_artist, NULL);
  448. evas_object_size_hint_align_set(item_artist, EVAS_HINT_FILL, 0.5);
  449. evas_object_size_hint_weight_set(item_artist, 0.8, EVAS_HINT_EXPAND);
  450. evas_object_show(item_artist);
  451.  
  452. Evas_Object *album = elm_box_add(content);
  453. elm_box_horizontal_set(album, EINA_TRUE);
  454. evas_object_size_hint_align_set(album, EVAS_HINT_FILL, EVAS_HINT_FILL);
  455. evas_object_size_hint_weight_set(album, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  456. evas_object_show(album);
  457.  
  458. Evas_Object *lbl_album = elm_label_add(album);
  459. elm_object_text_set(lbl_album, "<font_size=30> Album</font/>");
  460. evas_object_size_hint_align_set(lbl_album, EVAS_HINT_FILL, 0.5);
  461. evas_object_size_hint_weight_set(lbl_album, 0.2, EVAS_HINT_EXPAND);
  462. evas_object_show(lbl_album);
  463.  
  464. item_album = elm_entry_add(album);
  465. elm_object_text_set(item_album, NULL);
  466. evas_object_size_hint_align_set(item_album, EVAS_HINT_FILL, 0.5);
  467. evas_object_size_hint_weight_set(item_album, 0.8, EVAS_HINT_EXPAND);
  468. evas_object_show(item_album);
  469.  
  470. Evas_Object *genre = elm_box_add(content);
  471. elm_box_horizontal_set(genre, EINA_TRUE);
  472. evas_object_size_hint_align_set(genre, EVAS_HINT_FILL, EVAS_HINT_FILL);
  473. evas_object_size_hint_weight_set(genre, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  474. evas_object_show(genre);
  475.  
  476. Evas_Object *lbl_genre = elm_label_add(genre);
  477. elm_object_text_set(lbl_genre, "<font_size=30> Genre</font/>");
  478. evas_object_size_hint_align_set(lbl_genre, EVAS_HINT_FILL, 0.5);
  479. evas_object_size_hint_weight_set(lbl_genre, 0.2, EVAS_HINT_EXPAND);
  480. evas_object_show(lbl_genre);
  481.  
  482. item_genre = elm_entry_add(genre);
  483. elm_object_text_set(item_genre, NULL);
  484. evas_object_size_hint_align_set(item_genre, EVAS_HINT_FILL, 0.5);
  485. evas_object_size_hint_weight_set(item_genre, 0.8, EVAS_HINT_EXPAND);
  486. evas_object_show(item_genre);
  487.  
  488. Evas_Object *composer = elm_box_add(content);
  489. elm_box_horizontal_set(composer, EINA_TRUE);
  490. evas_object_size_hint_align_set(composer, EVAS_HINT_FILL, EVAS_HINT_FILL);
  491. evas_object_size_hint_weight_set(composer, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  492. evas_object_show(composer);
  493.  
  494. Evas_Object *lbl_composer = elm_label_add(composer);
  495. elm_object_text_set(lbl_composer, "<font_size=30> Composer</font/>");
  496. evas_object_size_hint_align_set(lbl_composer, EVAS_HINT_FILL, 0.5);
  497. evas_object_size_hint_weight_set(lbl_composer, 0.2, EVAS_HINT_EXPAND);
  498. evas_object_show(lbl_composer);
  499.  
  500. item_composer = elm_entry_add(composer);
  501. elm_object_text_set(item_composer, NULL);
  502. evas_object_size_hint_align_set(item_composer, EVAS_HINT_FILL, 0.5);
  503. evas_object_size_hint_weight_set(item_composer, 0.8, EVAS_HINT_EXPAND);
  504. evas_object_show(item_composer);
  505.  
  506. Evas_Object *copyright = elm_box_add(content);
  507. elm_box_horizontal_set(copyright, EINA_TRUE);
  508. evas_object_size_hint_align_set(copyright, EVAS_HINT_FILL, EVAS_HINT_FILL);
  509. evas_object_size_hint_weight_set(copyright, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  510. evas_object_show(copyright);
  511.  
  512. Evas_Object *lbl_copyright = elm_label_add(copyright);
  513. elm_object_text_set(lbl_copyright, "<font_size=30> Copyright</font/>");
  514. evas_object_size_hint_align_set(lbl_copyright, EVAS_HINT_FILL, 0.5);
  515. evas_object_size_hint_weight_set(lbl_copyright, 0.2, EVAS_HINT_EXPAND);
  516. evas_object_show(lbl_copyright);
  517.  
  518. item_copyright = elm_entry_add(copyright);
  519. elm_object_text_set(item_copyright, NULL);
  520. evas_object_size_hint_align_set(item_copyright, EVAS_HINT_FILL, 0.5);
  521. evas_object_size_hint_weight_set(item_copyright, 0.8, EVAS_HINT_EXPAND);
  522. evas_object_show(item_copyright);
  523.  
  524. Evas_Object *year = elm_box_add(content);
  525. elm_box_horizontal_set(year, EINA_TRUE);
  526. evas_object_size_hint_align_set(year, EVAS_HINT_FILL, EVAS_HINT_FILL);
  527. evas_object_size_hint_weight_set(year, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  528. evas_object_show(year);
  529.  
  530. Evas_Object *lbl_year = elm_label_add(year);
  531. elm_object_text_set(lbl_year, "<font_size=30> Year</font/>");
  532. evas_object_size_hint_align_set(lbl_year, EVAS_HINT_FILL, 0.5);
  533. evas_object_size_hint_weight_set(lbl_year, 0.2, EVAS_HINT_EXPAND);
  534. evas_object_show(lbl_year);
  535.  
  536. item_year = elm_entry_add(year);
  537. elm_object_text_set(item_year, NULL);
  538. evas_object_size_hint_align_set(item_year, EVAS_HINT_FILL, 0.5);
  539. evas_object_size_hint_weight_set(item_year, 0.8, EVAS_HINT_EXPAND);
  540. evas_object_show(item_year);
  541.  
  542. Evas_Object *description = elm_box_add(content);
  543. elm_box_horizontal_set(description, EINA_TRUE);
  544. evas_object_size_hint_align_set(description, EVAS_HINT_FILL, EVAS_HINT_FILL);
  545. evas_object_size_hint_weight_set(description, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  546. evas_object_show(description);
  547.  
  548. Evas_Object *lbl_description = elm_label_add(description);
  549. elm_object_text_set(lbl_description, "<font_size=30> Description</font/>");
  550. evas_object_size_hint_align_set(lbl_description, EVAS_HINT_FILL, 0.5);
  551. evas_object_size_hint_weight_set(lbl_description, 0.2, EVAS_HINT_EXPAND);
  552. evas_object_show(lbl_description);
  553.  
  554. item_description = elm_entry_add(description);
  555. elm_object_text_set(item_description, NULL);
  556. evas_object_size_hint_align_set(item_description, EVAS_HINT_FILL, 0.5);
  557. evas_object_size_hint_weight_set(item_description, 0.8, EVAS_HINT_EXPAND);
  558. evas_object_show(item_description);
  559.  
  560. Evas_Object *track = elm_box_add(content);
  561. elm_box_horizontal_set(track, EINA_TRUE);
  562. evas_object_size_hint_align_set(track, EVAS_HINT_FILL, EVAS_HINT_FILL);
  563. evas_object_size_hint_weight_set(track, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  564. evas_object_show(track);
  565.  
  566. Evas_Object *lbl_track = elm_label_add(track);
  567. elm_object_text_set(lbl_track, "<font_size=30> Track</font/>");
  568. evas_object_size_hint_align_set(lbl_track, EVAS_HINT_FILL, 0.5);
  569. evas_object_size_hint_weight_set(lbl_track, 0.2, EVAS_HINT_EXPAND);
  570. evas_object_show(lbl_track);
  571.  
  572. item_track = elm_entry_add(track);
  573. elm_object_text_set(item_track, NULL);
  574. evas_object_size_hint_align_set(item_track, EVAS_HINT_FILL, 0.5);
  575. evas_object_size_hint_weight_set(item_track, 0.8, EVAS_HINT_EXPAND);
  576. evas_object_show(item_track);
  577.  
  578. Evas_Object *comment = elm_box_add(content);
  579. elm_box_horizontal_set(comment, EINA_TRUE);
  580. evas_object_size_hint_align_set(comment, EVAS_HINT_FILL, EVAS_HINT_FILL);
  581. evas_object_size_hint_weight_set(comment, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  582. evas_object_show(comment);
  583.  
  584. Evas_Object *lbl_comment = elm_label_add(comment);
  585. elm_object_text_set(lbl_comment, "<font_size=30> Comment</font/>");
  586. evas_object_size_hint_align_set(lbl_comment, EVAS_HINT_FILL, 0.5);
  587. evas_object_size_hint_weight_set(lbl_comment, 0.2, EVAS_HINT_EXPAND);
  588. evas_object_show(lbl_comment);
  589.  
  590. item_comment = elm_entry_add(comment);
  591. elm_object_text_set(item_comment, NULL);
  592. evas_object_size_hint_align_set(item_comment, EVAS_HINT_FILL, 0.5);
  593. evas_object_size_hint_weight_set(item_comment, 0.8, EVAS_HINT_EXPAND);
  594. evas_object_show(item_comment);
  595.  
  596. Evas_Object *conductor = elm_box_add(content);
  597. elm_box_horizontal_set(conductor, EINA_TRUE);
  598. evas_object_size_hint_align_set(conductor, EVAS_HINT_FILL, EVAS_HINT_FILL);
  599. evas_object_size_hint_weight_set(conductor, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  600. evas_object_show(conductor);
  601.  
  602. Evas_Object *lbl_conductor = elm_label_add(conductor);
  603. elm_object_text_set(lbl_conductor, "<font_size=30> Conductor</font/>");
  604. evas_object_size_hint_align_set(lbl_conductor, EVAS_HINT_FILL, 0.5);
  605. evas_object_size_hint_weight_set(lbl_conductor, 0.2, EVAS_HINT_EXPAND);
  606. evas_object_show(lbl_conductor);
  607.  
  608. item_conductor = elm_entry_add(conductor);
  609. elm_object_text_set(item_conductor, NULL);
  610. evas_object_size_hint_align_set(item_conductor, EVAS_HINT_FILL, 0.5);
  611. evas_object_size_hint_weight_set(item_conductor, 0.8, EVAS_HINT_EXPAND);
  612. evas_object_show(item_conductor);
  613.  
  614. Evas_Object *lyrics = elm_box_add(content);
  615. elm_box_horizontal_set(lyrics, EINA_TRUE);
  616. evas_object_size_hint_align_set(lyrics, EVAS_HINT_FILL, EVAS_HINT_FILL);
  617. evas_object_size_hint_weight_set(lyrics, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  618. evas_object_show(lyrics);
  619.  
  620. Evas_Object *lbl_lyrics = elm_label_add(lyrics);
  621. elm_object_text_set(lbl_lyrics, "<font_size=30> Lyrics</font/>");
  622. evas_object_size_hint_align_set(lbl_lyrics, EVAS_HINT_FILL, 0.5);
  623. evas_object_size_hint_weight_set(lbl_lyrics, 0.2, EVAS_HINT_EXPAND);
  624. evas_object_show(lbl_lyrics);
  625.  
  626. item_lyrics = elm_entry_add(lyrics);
  627. elm_object_text_set(item_lyrics, NULL);
  628. evas_object_size_hint_align_set(item_lyrics, EVAS_HINT_FILL, 0.5);
  629. evas_object_size_hint_weight_set(item_lyrics, 0.8, EVAS_HINT_EXPAND);
  630. evas_object_show(item_lyrics);
  631.  
  632. // Create a box for adding content
  633. evas_object_size_hint_align_set(cbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
  634. evas_object_size_hint_weight_set(cbox, EVAS_HINT_EXPAND, 0.1);
  635. evas_object_show(cbox);
  636.  
  637. Evas_Object *bt_update = elm_button_add(cbox);
  638. elm_object_text_set(bt_update, "<font_size=30>Update Metadata</font/>");
  639. evas_object_size_hint_align_set(bt_update, EVAS_HINT_FILL, EVAS_HINT_FILL);
  640. evas_object_size_hint_weight_set(bt_update, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  641. evas_object_smart_callback_add(bt_update, "clicked", update_clicked_cb, NULL);
  642. evas_object_show(bt_update);
  643.  
  644. elm_box_pack_end(box, abox);
  645. elm_box_pack_end(abox, l_path);
  646. elm_box_pack_end(abox, t_path);
  647. elm_box_pack_end(abox, bt_get);
  648.  
  649. elm_box_pack_end(box, bbox);
  650. elm_box_pack_end(bbox, scroller);
  651. elm_box_pack_end(scroller, content);
  652. elm_box_pack_end(content, title);
  653. elm_box_pack_end(title, lbl_title);
  654. elm_box_pack_end(title, item_title);
  655. elm_box_pack_end(content, artist);
  656. elm_box_pack_end(artist, lbl_artist);
  657. elm_box_pack_end(artist, item_artist);
  658. elm_box_pack_end(content, album);
  659. elm_box_pack_end(album, lbl_album);
  660. elm_box_pack_end(album, item_album);
  661. elm_box_pack_end(content, genre);
  662. elm_box_pack_end(genre, lbl_genre);
  663. elm_box_pack_end(genre, item_genre);
  664. elm_box_pack_end(content, composer);
  665. elm_box_pack_end(composer, lbl_composer);
  666. elm_box_pack_end(composer, item_composer);
  667. elm_box_pack_end(content, copyright);
  668. elm_box_pack_end(copyright, lbl_copyright);
  669. elm_box_pack_end(copyright, item_copyright);
  670. elm_box_pack_end(content, year);
  671. elm_box_pack_end(year, lbl_year);
  672. elm_box_pack_end(year, item_year);
  673. elm_box_pack_end(content, description);
  674. elm_box_pack_end(description, lbl_description);
  675. elm_box_pack_end(description, item_description);
  676. elm_box_pack_end(content, track);
  677. elm_box_pack_end(track, lbl_track);
  678. elm_box_pack_end(track, item_track);
  679. elm_box_pack_end(content, comment);
  680. elm_box_pack_end(comment, lbl_comment);
  681. elm_box_pack_end(comment, item_comment);
  682. elm_box_pack_end(content, conductor);
  683. elm_box_pack_end(conductor, lbl_conductor);
  684. elm_box_pack_end(conductor, item_conductor);
  685. elm_box_pack_end(content, lyrics);
  686. elm_box_pack_end(lyrics, lbl_lyrics);
  687. elm_box_pack_end(lyrics, item_lyrics);
  688.  
  689. elm_box_pack_end(box, cbox);
  690. elm_box_pack_end(cbox, bt_update);
  691.  
  692. return box;
  693. }
  694.  
  695. static Evas_Object*
  696. create_main_view(appdata_s *ad)
  697. {
  698. Elm_Object_Item *nf_it;
  699. Evas_Object *box;
  700.  
  701. ad->nf = elm_naviframe_add(ad->conform);
  702. eext_object_event_callback_add(ad->nf, EEXT_CALLBACK_BACK, eext_naviframe_back_cb, ad);
  703.  
  704. box = create_box(ad);
  705. nf_it = elm_naviframe_item_push(ad->nf, "Metadata Editor", NULL, NULL, box, NULL);
  706. elm_naviframe_item_pop_cb_set(nf_it, nf_it_pop_cb, ad);
  707.  
  708. return ad->nf;
  709. }
  710.  
  711. static void
  712. create_base_gui(appdata_s *ad)
  713. {
  714. Evas_Object *bg;
  715.  
  716. /* Window */
  717. ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);
  718. elm_win_conformant_set(ad->win, EINA_TRUE);
  719. elm_win_autodel_set(ad->win, EINA_TRUE);
  720.  
  721. if (elm_win_wm_rotation_supported_get(ad->win)) {
  722. int rots[4] = { 0, 90, 180, 270 };
  723. elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);
  724. }
  725.  
  726. evas_object_smart_callback_add(ad->win, "delete,request", win_delete_request_cb, NULL);
  727.  
  728. /* Conformant */
  729. ad->conform = elm_conformant_add(ad->win);
  730. elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
  731. elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE);
  732. evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  733. elm_win_resize_object_add(ad->win, ad->conform);
  734. evas_object_show(ad->conform);
  735.  
  736. /* Indicator BG */
  737. bg = elm_bg_add(ad->conform);
  738. elm_object_style_set(bg, "indicator/headerbg");
  739. elm_object_part_content_set(ad->conform, "elm.swallow.indicator_bg", bg);
  740. evas_object_show(bg);
  741.  
  742. /* Naviframe */
  743. ad->nf = create_main_view(ad);
  744. elm_object_content_set(ad->conform, ad->nf);
  745.  
  746. /* Show window after base gui is set up */
  747. evas_object_show(ad->win);
  748. }
  749.  
  750. static bool
  751. app_create(void *data)
  752. {
  753. /* Hook to take necessary actions before main event loop starts
  754. Initialize UI resources and application's data
  755. If this function returns true, the main loop of application starts
  756. If this function returns false, the application is terminated */
  757. appdata_s *ad = data;
  758.  
  759. create_base_gui(ad);
  760.  
  761. return true;
  762. }
  763.  
  764. static void
  765. app_control(app_control_h app_control , void *data)
  766. {
  767. /* Handle the launch request. */
  768. }
  769.  
  770. static void
  771. app_pause(void *data)
  772. {
  773. /* Take necessary actions when application becomes invisible. */
  774. }
  775.  
  776. static void
  777. app_resume(void *data)
  778. {
  779. /* Take necessary actions when application becomes visible. */
  780. }
  781.  
  782. static void
  783. app_terminate(void *data)
  784. {
  785. /* Release all resources. */
  786. }
  787.  
  788. static void
  789. ui_app_lang_changed(app_event_info_h event_info, void *user_data)
  790. {
  791. /*APP_EVENT_LANGUAGE_CHANGED*/
  792. char *locale = NULL;
  793. system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
  794. elm_language_set(locale);
  795. free(locale);
  796. return;
  797. }
  798.  
  799. static void
  800. ui_app_orient_changed(app_event_info_h event_info, void *user_data)
  801. {
  802. /*APP_EVENT_DEVICE_ORIENTATION_CHANGED*/
  803. return;
  804. }
  805.  
  806. static void
  807. ui_app_region_changed(app_event_info_h event_info, void *user_data)
  808. {
  809. /*APP_EVENT_REGION_FORMAT_CHANGED*/
  810. }
  811.  
  812. static void
  813. ui_app_low_battery(app_event_info_h event_info, void *user_data)
  814. {
  815. /*APP_EVENT_LOW_BATTERY*/
  816. }
  817.  
  818. static void
  819. ui_app_low_memory(app_event_info_h event_info, void *user_data)
  820. {
  821. /*APP_EVENT_LOW_MEMORY*/
  822. }
  823.  
  824. int
  825. main(int argc, char *argv[])
  826. {
  827. appdata_s ad = {0,};
  828. int ret = 0;
  829.  
  830. ui_app_lifecycle_callback_s event_callback = {0,};
  831. app_event_handler_h handlers[5] = {NULL, };
  832.  
  833. event_callback.create = app_create;
  834. event_callback.terminate = app_terminate;
  835. event_callback.pause = app_pause;
  836. event_callback.resume = app_resume;
  837. event_callback.app_control = app_control;
  838.  
  839. ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, ui_app_low_battery, &ad);
  840. ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, ui_app_low_memory, &ad);
  841. ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, ui_app_orient_changed, &ad);
  842. ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, &ad);
  843. ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, ui_app_region_changed, &ad);
  844. ui_app_remove_event_handler(handlers[APP_EVENT_LOW_MEMORY]);
  845.  
  846. ret = ui_app_main(argc, argv, &event_callback, &ad);
  847. if (ret != APP_ERROR_NONE) {
  848. dlog_print(DLOG_ERROR, LOG_TAG, "ui_app_main() is failed. err = %d", ret);
  849. }
  850.  
  851. return ret;
  852. }