Advertisement
dsreyes1014

Song List

Jun 15th, 2016
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.59 KB | None | 0 0
  1. static char *
  2. item_label_get(void *data, Evas_Object *obj, const char *part)
  3. {
  4.     Eina_List *list, l;
  5.     Eina_Compare_Cb cmp_func = (Eina_Compare_Cb)strcmp;
  6.     char song_dir[256];
  7.     char *song;
  8.     int i, len;
  9.    
  10.     i = 0;
  11.     len = 0;
  12.     snprintf(song_dir, sizeof(song_dir), "%s/.config/eW2C/songs", getenv("HOME"));
  13.    
  14.     list = ecore_file_ls(song_dir);
  15.     if (list == NULL)
  16.     {
  17.         eina_list_free (list);
  18.         return NULL;
  19.     }
  20.    
  21.     list = eina_list_sort(list, 0, cmp_func);    
  22.     list = eina_list_nth_list(list, (int)(long) data);
  23.     song = eina_list_data_get(list);
  24.     len = strlen(song);
  25.    
  26.     for (i = 0; i < strlen(song); i++)
  27.     {
  28.         /* Find songs with '.txt' extensions. */
  29.         if ((song[i] == '.') && (song[i + 1] == 't') &&
  30.             (song[i + 2] == 'x') && (song[i + 3] == 't'))
  31.         {
  32.             song[i] = '\0';
  33.             break;
  34.         } /* Find songs with '.pro' extensions. */
  35.         else if ((song[i] == '.') && (song[i + 1] == 'p') &&
  36.                  (song[i + 2] == 'r') && (song[i + 3] == 'o'))
  37.         {
  38.             song[i] = '\0';
  39.             break;
  40.         } /* Find songs with '.chopro' extensions. */
  41.         else if ((song[i] == '.') && (song[i + 1] == 'c') &&
  42.                  (song[i + 2] == 'h') && (song[i + 3] == 'o') &&
  43.                  (song[i + 4] == 'p') && (song[i + 5] == 'r') &&
  44.                  (song[i + 6] == 'o'))
  45.         {
  46.             song[i] = '\0';
  47.             break;
  48.         } /* Find songs with '.chordpro' extensions. */
  49.         else if ((song[i] == '.') && (song[i + 1] == 'c') &&
  50.                  (song[i + 2] == 'h') && (song[i + 3] == 'o') &&
  51.                  (song[i + 4] == 'r') && (song[i + 5] == 'd') &&
  52.                  (song[i + 6] == 'p') && (song[i + 7] == 'r') &&
  53.                  (song[i + 8] == 'o'))
  54.         {
  55.             song[i] = '\0';
  56.             break;
  57.         }
  58.     }
  59.    
  60.     eina_list_free(list);
  61.    
  62.     if (i < len)
  63.     {
  64.         return strdup(song);
  65.     }
  66.     else
  67.     {
  68.         return NULL;
  69.     }    
  70. }
  71.  
  72. static void
  73. append_item_cb(int count, Evas_Object *song_list)
  74. {
  75.     Elm_Genlist_Item_Class *item_class = NULL;
  76.     int i, lc;
  77.     Elm_Object_Item *it;
  78.    
  79.     if (item_class == NULL)
  80.     {
  81.         item_class = elm_genlist_item_class_new();
  82.         item_class -> item_style = "default";
  83.         item_class -> func.text_get = item_label_get;
  84.         item_class -> func.content_get = NULL;
  85.         item_class -> func.state_get = NULL;
  86.         item_class -> func.del = NULL;
  87.     }
  88.    
  89.     if (count != -1)
  90.     {
  91.         /* Append items. */
  92.         for (i = 0; i < count; i++)
  93.         {
  94.             it = elm_genlist_item_append(song_list,
  95.                                          item_class,
  96.                                          (void *)(long)i,
  97.                                          NULL,
  98.                                          ELM_GENLIST_ITEM_NONE,
  99.                                          item_sel_cb,
  100.                                          NULL);
  101.         }
  102.     }
  103.    
  104.     lc = elm_genlist_items_count(song_list);
  105.     it = elm_genlist_first_item_get(song_list);
  106.    
  107.     for (i = 0; i < lc; i++)
  108.     {
  109.         const char *label = elm_object_item_part_text_get(it, "elm.text");
  110.        
  111.         printf("Total of %i items in list\n", lc);
  112.        
  113.         if (label == NULL)
  114.         {
  115.             elm_object_item_del(it);
  116.             it = elm_genlist_first_item_get(song_list);
  117.             lc = elm_genlist_items_count(song_list);
  118.             printf("%s is #%i in list and should be removed\n", label, i);
  119.         }
  120.         else
  121.         {
  122.             it = elm_genlist_item_next_get(song_list);
  123.             printf("%s should not be removed\n", label);
  124.         }        
  125.     }
  126. }
  127.  
  128. int
  129. song_list(Evas_Object *main_box)
  130. {    
  131.     Ecore_File_Monitor *mon;
  132.     Evas_Object *song_list;
  133.     char song_dir[256];
  134.     int count;
  135.    
  136.     count = song_count();
  137.     song_list = elm_genlist_add(elm_object_parent_widget_get(main_box));
  138.     snprintf(song_dir, sizeof(song_dir), "%s/.config/eW2C/songs", getenv("HOME"));
  139.    
  140.     append_item_cb(count, song_list);
  141.     mon = ecore_file_monitor_add(song_dir, ecore_monitor_cb, song_list);
  142.    
  143.     elm_box_pack_start(main_box, song_list);
  144.     evas_object_size_hint_weight_set(song_list, 0.6, EVAS_HINT_EXPAND);
  145.     evas_object_size_hint_align_set(song_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
  146.     evas_object_smart_callback_add(song_list, "activated", activated_cb, NULL);
  147.    
  148.     evas_object_resize(song_list, 100, 400);
  149.     evas_object_show(song_list);
  150.    
  151.     return 0;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement