This code places a Elementary diskselector widgets on a window, along with some buttons trigerring actions on it (though its A\-P\-I).

It covers most of diskselector item functions.

On our {\ttfamily main} function, we are adding a default diskselector with 3 items. We are only setting their labels (second parameter of function elm\-\_\-diskselector\-\_\-item\-\_\-append)\-:  
\begin{DoxyCodeInclude}
   ds = elm_diskselector_add(win);
   evas\_object\_size\_hint\_weight\_set(ds, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   evas\_object\_size\_hint\_align\_set(ds, EVAS\_HINT\_FILL, EVAS\_HINT\_FILL);
   elm_box_pack_end(bx, ds);
   evas\_object\_show(ds);

   elm_diskselector_item_append(ds, \textcolor{stringliteral}{"Item 0"}, NULL, NULL, NULL);
   elm_diskselector_item_append(ds, \textcolor{stringliteral}{"Item 1"}, NULL, NULL, NULL);
   elm_diskselector_item_append(ds, \textcolor{stringliteral}{"Item 2"}, NULL, NULL, NULL);

\end{DoxyCodeInclude}


Next we are adding lots of buttons, each one for a callback function that will realize a task covering part of diskselector items A\-P\-I. Lets check the first one\-: 
\begin{DoxyCodeInclude}
   bt = elm_button_add(win);
   elm\_object\_text\_set(bt, \textcolor{stringliteral}{"Append item"});
   evas\_object\_smart\_callback\_add(bt, \textcolor{stringliteral}{"clicked"}, \_add\_cb, ds);
   elm_box_pack_end(hbx, bt);
   evas\_object\_size\_hint\_weight\_set(bt, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   evas\_object\_size\_hint\_align\_set(bt, EVAS\_HINT\_FILL, EVAS\_HINT\_FILL);
   evas\_object\_show(bt);

\end{DoxyCodeInclude}


We are labeling the button with a task description with elm\-\_\-object\-\_\-text\-\_\-set() and setting a callback function evas\-\_\-object\-\_\-smart\-\_\-callback\-\_\-add(). Each callback function will have the signature\-: {\ttfamily  static void \-\_\-task\-\_\-cb(void $\ast$data, Evas\-\_\-\-Object $\ast$obj, void $\ast$event\-\_\-info)} with the function name varying for each task.

Now let's cover all of them.

{\bfseries  Appending an item\-: }  
\begin{DoxyCodeInclude}
\_add\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   Elm_Object_Item *ds\_it;
   Evas\_Object *ds = data;
   \textcolor{keywordtype}{char} label[32];

   snprintf(label, \textcolor{keyword}{sizeof}(label), \textcolor{stringliteral}{"Item %i"}, counter++);
   ds\_it = elm_diskselector_item_append(ds, label, NULL, NULL, NULL);
   \textcolor{keywordflow}{if} (!ds\_it) printf(\textcolor{stringliteral}{"Error adding item\(\backslash\)n"});
\}

\end{DoxyCodeInclude}


All items are included on diskselector after last one. You {\bfseries can't} prepend items.

The first parameter of \hyperlink{group__Diskselector_gabbba9ffdb5d25c8f3de075e010bfc1b8}{elm\-\_\-diskselector\-\_\-item\-\_\-append()} is the diskselector object, that we are receiving as data on our callback function. The second one is a label, the string that will be placed in the center of our item. As we don't wan't icons or callback functions, we can send N\-U\-L\-L as third, fourth and fifth parameters.

{\bfseries  Appending an item with icon\-: }  
\begin{DoxyCodeInclude}
\_add\_ic\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   Elm_Object_Item *ds\_it;
   Evas\_Object *ic, *ds = data;
   \textcolor{keywordtype}{char} label[32];

   snprintf(label, \textcolor{keyword}{sizeof}(label), \textcolor{stringliteral}{"Item %i"}, counter++);
   ic = elm_icon_add(ds);
   elm_icon_standard_set(ic, \textcolor{stringliteral}{"home"});

   ds\_it = elm_diskselector_item_append(ds, label, ic, NULL, NULL);
   \textcolor{keywordflow}{if} (!ds\_it) printf(\textcolor{stringliteral}{"Error adding item with icon\(\backslash\)n"});
\}

\end{DoxyCodeInclude}


If an icon is required, you can pass it as third parameter on our \hyperlink{group__Diskselector_gabbba9ffdb5d25c8f3de075e010bfc1b8}{elm\-\_\-diskselector\-\_\-item\-\_\-append()} function. It will be place on the left side of item's label, that will be shifted to right a bit.

For more details about how to create icons, look for elm\-\_\-icon examples.

{\bfseries  Appending an item with callback function for selected\-: }  
\begin{DoxyCodeInclude}
\_sel\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   Elm_Object_Item *ds\_it = event\_info;
   printf(\textcolor{stringliteral}{"Selected label: %s\(\backslash\)n"}, elm\_object\_item\_text\_get(ds\_it));
\}

\textcolor{keyword}{static} \textcolor{keywordtype}{void}
\_add\_func\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   Elm_Object_Item *ds\_it;
   Evas\_Object *ds = data;
   \textcolor{keywordtype}{char} label[32];

   snprintf(label, \textcolor{keyword}{sizeof}(label), \textcolor{stringliteral}{"Item %i"}, counter++);
   ds\_it = elm_diskselector_item_append(ds, label, NULL, \_sel\_cb, NULL);
   \textcolor{keywordflow}{if} (!ds\_it) printf(\textcolor{stringliteral}{"Error adding item\(\backslash\)n"});
\}

\end{DoxyCodeInclude}


To set a callback function that will be called every time an item is selected, i.\-e., everytime the diskselector stops with this item in center position, just pass the function as fourth parameter.

{\bfseries  Appending an item with callback function for selected with data\-: }  
\begin{DoxyCodeInclude}
\_sel\_data\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   \textcolor{keywordtype}{char} *content = data;
   Elm_Object_Item *ds\_it = event\_info;
   printf(\textcolor{stringliteral}{"Selected label: %s with data: %s\(\backslash\)n"},
          elm\_object\_item\_text\_get(ds\_it), content);
\}

\textcolor{keyword}{static} \textcolor{keywordtype}{void}
\_free\_data(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   free(data);
\}

\textcolor{keyword}{static} \textcolor{keywordtype}{void}
\_add\_data\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   Elm_Object_Item *ds\_it;
   Evas\_Object *ds = data;
   \textcolor{keywordtype}{char} label[32];
   \textcolor{keywordtype}{char} *content = malloc(\textcolor{keyword}{sizeof}(\textcolor{keywordtype}{char}) * 32);

   snprintf(content, 32, \textcolor{stringliteral}{"Item content %i"}, counter);
   snprintf(label, \textcolor{keyword}{sizeof}(label), \textcolor{stringliteral}{"Item %i"}, counter++);
   ds\_it = elm_diskselector_item_append(ds, label, NULL, \_sel\_data\_cb, content);
   \textcolor{keywordflow}{if} (!ds\_it)
     \{
        printf(\textcolor{stringliteral}{"Error adding item\(\backslash\)n"});
        \textcolor{keywordflow}{return};
     \}
   elm_object_item_del_cb_set(ds\_it, \_free\_data);
\}

\end{DoxyCodeInclude}


If the callback function request an extra data, it can be attached to our item passing a pointer for data as fifth parameter. Our function \-\_\-sel\-\_\-data\-\_\-cb will receive it as {\ttfamily  void $\ast$data }.

If you want to free this data, or handle that the way you need when the item is deleted, set a callback function for that, with \hyperlink{group__General_gadf971e78aa95cfd83fd3c3ce38ff8cd7}{elm\-\_\-object\-\_\-item\-\_\-del\-\_\-cb\-\_\-set()}.

As you can see we check if {\ttfamily it} is not {\ttfamily N\-U\-L\-L} after appending it. If an error happens, we won't try to set a function for it.

{\bfseries  Deleting an item\-: }  
\begin{DoxyCodeInclude}
\_del\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   Elm_Object_Item *selected\_ds\_it;
   Evas\_Object *ds = data;

   selected\_ds\_it = elm_diskselector_selected_item_get(ds);
   elm_object_item_del(selected\_ds\_it);
\}

\end{DoxyCodeInclude}


To delete an item we simple need to call \hyperlink{group__General_ga6aac9c72588cd81c517b235c4b833c76}{elm\-\_\-object\-\_\-item\-\_\-del()} with a pointer for such item.

If you need, you can get selected item with \hyperlink{group__Diskselector_ga38d38e52f7b242f0b1346e73d11d6525}{elm\-\_\-diskselector\-\_\-selected\-\_\-item\-\_\-get()}, that will return a pointer for it.

{\bfseries  Unselecting an item\-: }  
\begin{DoxyCodeInclude}
\_unselect\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   Elm_Object_Item *selected\_ds\_it;
   Evas\_Object *ds = data;

   selected\_ds\_it = elm_diskselector_selected_item_get(ds);
   elm_diskselector_item_selected_set(selected\_ds\_it, EINA\_FALSE);
\}

\end{DoxyCodeInclude}


To select an item, you should call \hyperlink{group__Diskselector_ga561704ff709972d4ebb9da9beb15b0a2}{elm\-\_\-diskselector\-\_\-item\-\_\-selected\-\_\-set()} passing {\ttfamily E\-I\-N\-A\-\_\-\-T\-R\-U\-E}, and to unselect it, {\ttfamily E\-I\-N\-A\-\_\-\-F\-A\-L\-S\-E}.

If you unselect the selected item, diskselector will automatically select the first item.

{\bfseries  Printing all items\-: }  
\begin{DoxyCodeInclude}
\_print\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   \textcolor{keyword}{const} Eina\_List *l, *items;
   Elm_Object_Item *ds\_it;
   Evas\_Object *ds = data;

   items = elm_diskselector_items_get(ds);
   EINA\_LIST\_FOREACH(items, l, ds\_it)
     printf("%s\(\backslash\)n", elm\_object\_item\_text\_get(ds\_it));
\}

\end{DoxyCodeInclude}


{\bfseries  Clearing the diskselector\-: }  
\begin{DoxyCodeInclude}
\_clear\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   Evas\_Object *ds = data;
   elm_diskselector_clear(ds);
\}

\end{DoxyCodeInclude}


{\bfseries  Selecting the first item\-: }  
\begin{DoxyCodeInclude}
\_select\_first\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   Elm_Object_Item *first\_ds\_it;
   Evas\_Object *ds = data;

   first\_ds\_it = elm_diskselector_first_item_get(ds);
   \textcolor{keywordflow}{if} (first\_ds\_it)
     elm_diskselector_item_selected_set(first\_ds\_it, EINA\_TRUE);
\}

\end{DoxyCodeInclude}


{\bfseries  Selecting the last item\-: }  
\begin{DoxyCodeInclude}
\_select\_last\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   Elm_Object_Item *last\_ds\_it;
   Evas\_Object *ds = data;

   last\_ds\_it = elm_diskselector_last_item_get(ds);
   \textcolor{keywordflow}{if} (last\_ds\_it)
     elm_diskselector_item_selected_set(last\_ds\_it, EINA\_TRUE);
\}

\end{DoxyCodeInclude}


{\bfseries  Selecting the next item\-: }  
\begin{DoxyCodeInclude}
\_select\_next\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   Elm_Object_Item *selected\_ds\_it, *next\_ds\_it;
   Evas\_Object *ds = data;

   selected\_ds\_it = elm_diskselector_selected_item_get(ds);
   \textcolor{keywordflow}{if} (!selected\_ds\_it) \textcolor{keywordflow}{return};

   next\_ds\_it = elm_diskselector_item_next_get(selected\_ds\_it);
   \textcolor{keywordflow}{if} (next\_ds\_it)
     elm_diskselector_item_selected_set(next\_ds\_it, EINA\_TRUE);
\}

\end{DoxyCodeInclude}


{\bfseries  Selecting the previous item\-: }  
\begin{DoxyCodeInclude}
\_select\_prev\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   Elm_Object_Item *selected\_ds\_it, *prev\_ds\_it;
   Evas\_Object *ds = data;

   selected\_ds\_it = elm_diskselector_selected_item_get(ds);
   \textcolor{keywordflow}{if} (!selected\_ds\_it) \textcolor{keywordflow}{return};

   prev\_ds\_it = elm_diskselector_item_prev_get(selected\_ds\_it);
   \textcolor{keywordflow}{if} (prev\_ds\_it)
     elm_diskselector_item_selected_set(prev\_ds\_it, EINA\_TRUE);
\}

\end{DoxyCodeInclude}


See the full \hyperlink{diskselector_example_02_8c-example}{diskselector\-\_\-example\-\_\-02.c} code, whose window should look like this picture\-:

 
\begin{DoxyImage}
\includegraphics{screenshots/diskselector_example_02}
\caption{width=}
\end{DoxyImage}
 