This code places seven Elementary spinner widgets on a window, each of them exemplifying a part of the widget\textquotesingle{}s A\+P\+I.

The first of them is the default spinner\+:  
\begin{DoxyCodeInclude}
   sp = elm_spinner_add(win);
   evas\_object\_size\_hint\_align\_set(sp, EVAS\_HINT\_FILL, 0.5);
   evas\_object\_size\_hint\_weight\_set(sp, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   elm_box_pack_end(bx, sp);
   evas\_object\_show(sp);

\end{DoxyCodeInclude}
 As you see, the defaults for a spinner are\+: \begin{DoxyItemize}
\item no wrap \item min value set to 0 \item max value set to 100 \item step value set to 1 \item label format set to \char`\"{}\%0.\+f\char`\"{}\end{DoxyItemize}
If another format is required, see the second spinner. It will put a text before and after the value, and also format value to display two decimals\+: 
\begin{DoxyCodeInclude}
   elm_spinner_label_format_set(sp, \textcolor{stringliteral}{"Percentage %%%1.2f something"});

\end{DoxyCodeInclude}


The third one will use a customized step, define new minimum and maximum values and enable wrap, so when value reaches minimum it jumps to maximum, or jumps to minimum after maximum value is reached. Format is set to display a decimal\+: 
\begin{DoxyCodeInclude}
   sp = elm_spinner_add(win);
   elm_spinner_label_format_set(sp, \textcolor{stringliteral}{"%1.1f units"});
   elm_spinner_step_set(sp, 1.5);
   elm_spinner_wrap_set(sp, EINA\_TRUE);
   elm_spinner_min_max_set(sp, -50.0, 250.0);
   evas\_object\_size\_hint\_align\_set(sp, EVAS\_HINT\_FILL, 0.5);
   evas\_object\_size\_hint\_weight\_set(sp, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   elm_box_pack_end(bx, sp);
   evas\_object\_show(sp);

\end{DoxyCodeInclude}


The fourth uses {\ttfamily vertical} style, so instead of left and right arrows, top and bottom are displayed. Also the change interval is reduced, so user can change value faster. 
\begin{DoxyCodeInclude}
   elm_object_style_set(sp, \textcolor{stringliteral}{"vertical"});
   elm_spinner_interval_set(sp, 0.2);

\end{DoxyCodeInclude}


In the fifth the user won\textquotesingle{}t be allowed to set value directly, i.\+e., will be obligate change value only using arrows\+: 
\begin{DoxyCodeInclude}
   elm_spinner_editable_set(sp, EINA\_FALSE);

\end{DoxyCodeInclude}


The sixth widget will receive a lot of special values, so instead of reading numeric values, user will see labels for each one. Also direct edition is disabled, otherwise users would see the numeric value on edition mode. User will be able to select a month in this widget\+: 
\begin{DoxyCodeInclude}
   sp = elm_spinner_add(win);
   elm_spinner_editable_set(sp, EINA\_FALSE);
   elm_spinner_min_max_set(sp, 1, 12);
   elm_spinner_special_value_add(sp, 1, \textcolor{stringliteral}{"January"});
   elm_spinner_special_value_add(sp, 2, \textcolor{stringliteral}{"February"});
   elm_spinner_special_value_add(sp, 3, \textcolor{stringliteral}{"March"});
   elm_spinner_special_value_add(sp, 4, \textcolor{stringliteral}{"April"});
   elm_spinner_special_value_add(sp, 5, \textcolor{stringliteral}{"May"});
   elm_spinner_special_value_add(sp, 6, \textcolor{stringliteral}{"June"});
   elm_spinner_special_value_add(sp, 7, \textcolor{stringliteral}{"July"});
   elm_spinner_special_value_add(sp, 8, \textcolor{stringliteral}{"August"});
   elm_spinner_special_value_add(sp, 9, \textcolor{stringliteral}{"September"});
   elm_spinner_special_value_add(sp, 10, \textcolor{stringliteral}{"October"});
   elm_spinner_special_value_add(sp, 11, \textcolor{stringliteral}{"November"});
   elm_spinner_special_value_add(sp, 12, \textcolor{stringliteral}{"December"});
   evas\_object\_size\_hint\_align\_set(sp, EVAS\_HINT\_FILL, 0.5);
   evas\_object\_size\_hint\_weight\_set(sp, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   elm_box_pack_end(bx, sp);
   evas\_object\_show(sp);

\end{DoxyCodeInclude}


Finally the last widget will exemplify how to listen to widget\textquotesingle{}s signals, {\ttfamily  changed } and {\ttfamily  delay,changed }. First we need to implement callback functions that will simply print spinner\textquotesingle{}s value\+:  
\begin{DoxyCodeInclude}
\textcolor{keyword}{static} \textcolor{keywordtype}{void}
\_delay\_changed\_cb(\textcolor{keywordtype}{void} *data, Evas\_Object *obj, \textcolor{keywordtype}{void} *event\_info)
\{
   printf(\textcolor{stringliteral}{"Value delay changed to %0.f\(\backslash\)n"}, elm_spinner_value_get(obj));
\}

EAPI\_MAIN \textcolor{keywordtype}{int}
elm\_main(\textcolor{keywordtype}{int} argc, \textcolor{keywordtype}{char} **argv)
\{
   Evas\_Object *win, *bx, *sp;

   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);

   win = elm_win_util_standard_add(\textcolor{stringliteral}{"spinner"}, \textcolor{stringliteral}{"Spinner Example"});
   elm_win_autodel_set(win, EINA\_TRUE);

   bx = elm_box_add(win);
   evas\_object\_size\_hint\_weight\_set(bx, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   elm_win_resize_object_add(win, bx);
   evas\_object\_show(bx);

   \textcolor{comment}{/* default */}
   sp = elm_spinner_add(win);
   evas\_object\_size\_hint\_align\_set(sp, EVAS\_HINT\_FILL, 0.5);
   evas\_object\_size\_hint\_weight\_set(sp, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   elm_box_pack_end(bx, sp);
   evas\_object\_show(sp);

   \textcolor{comment}{/* format */}
   sp = elm_spinner_add(win);
   elm_spinner_label_format_set(sp, \textcolor{stringliteral}{"Percentage %%%1.2f something"});
   evas\_object\_size\_hint\_align\_set(sp, EVAS\_HINT\_FILL, 0.5);
   evas\_object\_size\_hint\_weight\_set(sp, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   elm_box_pack_end(bx, sp);
   evas\_object\_show(sp);

   \textcolor{comment}{/* min max, step and wrap */}
   sp = elm_spinner_add(win);
   elm_spinner_label_format_set(sp, \textcolor{stringliteral}{"%1.1f units"});
   elm_spinner_step_set(sp, 1.5);
   elm_spinner_wrap_set(sp, EINA\_TRUE);
   elm_spinner_min_max_set(sp, -50.0, 250.0);
   evas\_object\_size\_hint\_align\_set(sp, EVAS\_HINT\_FILL, 0.5);
   evas\_object\_size\_hint\_weight\_set(sp, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   elm_box_pack_end(bx, sp);
   evas\_object\_show(sp);

   \textcolor{comment}{/* vertical */}
   sp = elm_spinner_add(win);
   elm_object_style_set(sp, \textcolor{stringliteral}{"vertical"});
   elm_spinner_interval_set(sp, 0.2);
   evas\_object\_size\_hint\_align\_set(sp, EVAS\_HINT\_FILL, 0.5);
   evas\_object\_size\_hint\_weight\_set(sp, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   elm_box_pack_end(bx, sp);
   evas\_object\_show(sp);

   \textcolor{comment}{/* disabled edition */}
   sp = elm_spinner_add(win);
   elm_spinner_editable_set(sp, EINA\_FALSE);
   evas\_object\_size\_hint\_align\_set(sp, EVAS\_HINT\_FILL, 0.5);
   evas\_object\_size\_hint\_weight\_set(sp, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   elm_box_pack_end(bx, sp);
   evas\_object\_show(sp);

   \textcolor{comment}{/* special values */}
   sp = elm_spinner_add(win);
   elm_spinner_editable_set(sp, EINA\_FALSE);
   elm_spinner_min_max_set(sp, 1, 12);
   elm_spinner_special_value_add(sp, 1, \textcolor{stringliteral}{"January"});
   elm_spinner_special_value_add(sp, 2, \textcolor{stringliteral}{"February"});
   elm_spinner_special_value_add(sp, 3, \textcolor{stringliteral}{"March"});
   elm_spinner_special_value_add(sp, 4, \textcolor{stringliteral}{"April"});
   elm_spinner_special_value_add(sp, 5, \textcolor{stringliteral}{"May"});
   elm_spinner_special_value_add(sp, 6, \textcolor{stringliteral}{"June"});
   elm_spinner_special_value_add(sp, 7, \textcolor{stringliteral}{"July"});
   elm_spinner_special_value_add(sp, 8, \textcolor{stringliteral}{"August"});
   elm_spinner_special_value_add(sp, 9, \textcolor{stringliteral}{"September"});
   elm_spinner_special_value_add(sp, 10, \textcolor{stringliteral}{"October"});
   elm_spinner_special_value_add(sp, 11, \textcolor{stringliteral}{"November"});
   elm_spinner_special_value_add(sp, 12, \textcolor{stringliteral}{"December"});
   evas\_object\_size\_hint\_align\_set(sp, EVAS\_HINT\_FILL, 0.5);
   evas\_object\_size\_hint\_weight\_set(sp, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   elm_box_pack_end(bx, sp);
   evas\_object\_show(sp);

   sp = elm_spinner_add(win);
   evas\_object\_size\_hint\_align\_set(sp, EVAS\_HINT\_FILL, 0.5);
   evas\_object\_size\_hint\_weight\_set(sp, EVAS\_HINT\_EXPAND, EVAS\_HINT\_EXPAND);
   elm_box_pack_end(bx, sp);
   evas\_object\_show(sp);
   elm_spinner_editable_set(sp, EINA\_TRUE);
   evas\_object\_smart\_callback\_add(sp, \textcolor{stringliteral}{"changed"}, \_changed\_cb, NULL);
   evas\_object\_smart\_callback\_add(sp, \textcolor{stringliteral}{"delay,changed"}, \_delay\_changed\_cb, NULL);

   evas\_object\_show(win);

   elm_run();

   \textcolor{keywordflow}{return} 0;
\}

\end{DoxyCodeInclude}


The first callback function should be called everytime value changes, the second one only after user stops to increment or decrement. Try to keep arrows pressed and check the difference. 
\begin{DoxyCodeInclude}

\end{DoxyCodeInclude}


See the full \hyperlink{spinner_example_8c-example}{example}, whose window should look like this picture\+:

 
\begin{DoxyImageNoCaption}
  \mbox{\includegraphics[width=\textwidth]{screenshots/spinner_example}}
\end{DoxyImageNoCaption}


See the full \hyperlink{spinner_example_8c-example}{source code} for this example. 