This application is a thorough example of the progress bar widget, consisting of a window with various progress bars, each with a given look/style one can give to those widgets. With two auxiliary buttons, one can start or stop a timer which will fill in the bars in synchrony, simulating an underlying task being completed.

We create {\bfseries{seven}} progress bars, being three of them horizontal, three vertical and a final one under the \char`\"{}wheel\char`\"{} alternate style.

For the first one, we add a progress bar on total pristine state, with no other call than the \mbox{\hyperlink{group__Elm__Progressbar_ga73ec06c9c8eb7e5f0263a132432e8cc3}{elm\+\_\+progressbar\+\_\+add()}} one\+:  
\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{   \textcolor{comment}{/* pb with no label, default unit label and no icon */}}
\DoxyCodeLine{   pb = \mbox{\hyperlink{group__Elm__Progressbar_ga73ec06c9c8eb7e5f0263a132432e8cc3}{elm\_progressbar\_add}}(win);}
\DoxyCodeLine{   evas\_object\_size\_hint\_weight\_set(pb, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}}, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}});}
\DoxyCodeLine{   evas\_object\_size\_hint\_align\_set(pb, \mbox{\hyperlink{Evas__Common_8h_aecbac710f36d52911fc34dcdaf8e729c}{EVAS\_HINT\_FILL}}, 0.5);}
\DoxyCodeLine{   elm\_box\_pack\_end(bx, pb);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga9cbc13661584e49fb9d9cdab514a1eeb}{evas\_object\_show}}(pb);}
\DoxyCodeLine{   example\_data.pb1 = pb;}

\end{DoxyCodeInclude}
 See, than, that the defaults of a progress bar are\+:
\begin{DoxyItemize}
\item no primary label shown,
\item unit label set to {\ttfamily \char`\"{}\%.\+0f \%\%\char`\"{}},
\item no icon set
\end{DoxyItemize}

The second progress bar is given a primary label, {\ttfamily \char`\"{}\+Infinite
bounce\char`\"{}}, and, besides, it\textquotesingle{}s set to {\bfseries{pulse}}. See how, after one starts the progress timer, with the \char`\"{}\+Start\char`\"{} button, it animates differently than the previous one. It won\textquotesingle{}t account for the progress, itself, and just dumbly animate a small bar within its bar region.  
\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{   \textcolor{comment}{/* pb with label, and set to pulse */}}
\DoxyCodeLine{   pb = \mbox{\hyperlink{group__Elm__Progressbar_ga73ec06c9c8eb7e5f0263a132432e8cc3}{elm\_progressbar\_add}}(win);}
\DoxyCodeLine{   evas\_object\_size\_hint\_align\_set(pb, \mbox{\hyperlink{Evas__Common_8h_aecbac710f36d52911fc34dcdaf8e729c}{EVAS\_HINT\_FILL}}, 0.5);}
\DoxyCodeLine{   evas\_object\_size\_hint\_weight\_set(pb, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}}, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}});}
\DoxyCodeLine{   elm\_object\_text\_set(pb, \textcolor{stringliteral}{"Infinite bounce"});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_gac3cab76a1bb90d2763b76256a178a044}{elm\_progressbar\_pulse\_set}}(pb, \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}});}
\DoxyCodeLine{   elm\_box\_pack\_end(bx, pb);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga9cbc13661584e49fb9d9cdab514a1eeb}{evas\_object\_show}}(pb);}
\DoxyCodeLine{   example\_data.pb2 = pb;}

\end{DoxyCodeInclude}


Next, comes a progress bar with an {\bfseries{icon}}, a primary label and a unit label {\bfseries{function}} set. It\textquotesingle{}s also made to grow its bar in an {\bfseries{inverted}} manner, so check that out during the timer\textquotesingle{}s progression\+:  
\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{   ic1 = \mbox{\hyperlink{group__Elm__Icon_ga5739728c1209f90422cf65a778a16502}{elm\_icon\_add}}(win);}
\DoxyCodeLine{   snprintf(buf, \textcolor{keyword}{sizeof}(buf), \textcolor{stringliteral}{"\%s/images/logo\_small.png"}, \mbox{\hyperlink{group__Elm__App_ga92a09dbf88cc1ca3eab51c51dea589d0}{elm\_app\_data\_dir\_get}}());}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Image_gad1a96ede5f513042cef3c1dac4572f73}{elm\_image\_file\_set}}(ic1, buf, NULL);}
\DoxyCodeLine{   evas\_object\_size\_hint\_aspect\_set(ic1, \mbox{\hyperlink{Evas__Common_8h_ac68b577b7c0b79c356f01926e4a8099faeaf1e019f2dbfbbc2da9ab1fe1f175f6}{EVAS\_ASPECT\_CONTROL\_VERTICAL}}, 1, 1);}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{comment}{/* pb with label, icon, custom unit label function and span size set */}}
\DoxyCodeLine{   pb = \mbox{\hyperlink{group__Elm__Progressbar_ga73ec06c9c8eb7e5f0263a132432e8cc3}{elm\_progressbar\_add}}(win);}
\DoxyCodeLine{   elm\_object\_text\_set(pb, \textcolor{stringliteral}{"Label"});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__General_ga0531ec8867c72def7c780601764ca642}{elm\_object\_part\_content\_set}}(pb, \textcolor{stringliteral}{"icon"}, ic1);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga6dcd3a314d99d2fc9df2cc74259a0128}{elm\_progressbar\_inverted\_set}}(pb, \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga702ae4ddbb0bb36a39d382d235cd03b4}{elm\_progressbar\_unit\_format\_function\_set}}(pb, \_progress\_format\_cb,}
\DoxyCodeLine{                                            \_progress\_format\_free);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga0fcab656cc093c7a8e2db9c7d62c4edf}{elm\_progressbar\_span\_size\_set}}(pb, 200);}
\DoxyCodeLine{   evas\_object\_size\_hint\_align\_set(pb, \mbox{\hyperlink{Evas__Common_8h_aecbac710f36d52911fc34dcdaf8e729c}{EVAS\_HINT\_FILL}}, 0.5);}
\DoxyCodeLine{   evas\_object\_size\_hint\_weight\_set(pb, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}}, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}});}
\DoxyCodeLine{   elm\_box\_pack\_end(bx, pb);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga9cbc13661584e49fb9d9cdab514a1eeb}{evas\_object\_show}}(ic1);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga9cbc13661584e49fb9d9cdab514a1eeb}{evas\_object\_show}}(pb);}
\DoxyCodeLine{   example\_data.pb3 = pb;}

\end{DoxyCodeInclude}
 Another important thing in this one is the call to \mbox{\hyperlink{group__Elm__Progressbar_ga0fcab656cc093c7a8e2db9c7d62c4edf}{elm\+\_\+progressbar\+\_\+span\+\_\+size\+\_\+set()}} -- this is how we forcefully set a minimum horizontal size to our whole window! We\textquotesingle{}re not resizing it manually, as you can see in the \mbox{\hyperlink{progressbar_example_c}{complete code}}.

The format callback is a simple function that gets passed the progress value and returns a string. A free function should be provided as well, if the format callback allocates memory.  
\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{\textcolor{comment}{/* Format callback */}}
\DoxyCodeLine{\textcolor{keyword}{static} \textcolor{keywordtype}{char} *}
\DoxyCodeLine{\_progress\_format\_cb(\textcolor{keywordtype}{double} val)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keyword}{static} \textcolor{keywordtype}{char} buf[30];}
\DoxyCodeLine{   \textcolor{keywordtype}{int} files = (1-\/val)*14000;}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (snprintf(buf, 30, \textcolor{stringliteral}{"\%i files left"}, files) > 0)}
\DoxyCodeLine{     \textcolor{keywordflow}{return} strdup(buf);}
\DoxyCodeLine{   \textcolor{keywordflow}{return} NULL;}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\_progress\_format\_free(\textcolor{keywordtype}{char} *str)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   free(str);}
\DoxyCodeLine{\}}

\end{DoxyCodeInclude}


The last horizontal progress bar has a callback that gets called when its value is {\bfseries{changed}}. This callback updates a label to provide an estimate when the operation finishes.  
\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{   \textcolor{comment}{/* pb with label and changed trigger  */}}
\DoxyCodeLine{   pb = \mbox{\hyperlink{group__Elm__Progressbar_ga73ec06c9c8eb7e5f0263a132432e8cc3}{elm\_progressbar\_add}}(win);}
\DoxyCodeLine{   elm\_object\_text\_set(pb, \textcolor{stringliteral}{"Label"});}
\DoxyCodeLine{   evas\_object\_size\_hint\_align\_set(pb, \mbox{\hyperlink{Evas__Common_8h_aecbac710f36d52911fc34dcdaf8e729c}{EVAS\_HINT\_FILL}}, 0.5);}
\DoxyCodeLine{   evas\_object\_size\_hint\_weight\_set(pb, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}}, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}});}
\DoxyCodeLine{   elm\_box\_pack\_end(bx, pb);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga9cbc13661584e49fb9d9cdab514a1eeb}{evas\_object\_show}}(pb);}
\DoxyCodeLine{}
\DoxyCodeLine{   label = \mbox{\hyperlink{group__Elm__Label_ga01e161a300e3ee6f7a13a44505724e03}{elm\_label\_add}}(win);}
\DoxyCodeLine{   elm\_object\_text\_set(label, \textcolor{stringliteral}{"ETA: N/A"});}
\DoxyCodeLine{   evas\_object\_size\_hint\_align\_set(label, 0.5, 0.5);}
\DoxyCodeLine{   evas\_object\_size\_hint\_weight\_set(label, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}}, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}});}
\DoxyCodeLine{   elm\_box\_pack\_end(bx, label);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga9cbc13661584e49fb9d9cdab514a1eeb}{evas\_object\_show}}(label);}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Smart__Object__Group_ga18a8b179f94d21b2b09e19db11741061}{evas\_object\_smart\_callback\_add}}(pb, \textcolor{stringliteral}{"changed"}, \_on\_changed, label);}
\DoxyCodeLine{   example\_data.pb4 = pb;}

\end{DoxyCodeInclude}


The \char`\"{}changed\char`\"{} signal is emitted every time the progressbar value is updated through \mbox{\hyperlink{group__Elm__Progressbar_ga06299da7deaa70dd1181477157fd5701}{elm\+\_\+progressbar\+\_\+value\+\_\+set()}}. This callback calculates and displays the E\+TA based on the progress and time that has passed.  
\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{\textcolor{comment}{/* Callback for "changed" signal */}}
\DoxyCodeLine{\textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\_on\_changed(\textcolor{keywordtype}{void}        *data,}
\DoxyCodeLine{            \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *obj,}
\DoxyCodeLine{            \textcolor{keywordtype}{void}        *event\_info \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}})}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keyword}{static} \textcolor{keywordtype}{char} buf[30];}
\DoxyCodeLine{   \textcolor{keyword}{static} time\_t tstart = 0;}
\DoxyCodeLine{   \textcolor{keyword}{static} \textcolor{keywordtype}{double} eta = 0;}
\DoxyCodeLine{   time\_t tdiff;}
\DoxyCodeLine{   \textcolor{keywordtype}{double} val;}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *label =  (\mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *)data;}
\DoxyCodeLine{}
\DoxyCodeLine{   val = \mbox{\hyperlink{group__Elm__Progressbar_ga87c65ecf41baee9f861f426072cb69ae}{elm\_progressbar\_value\_get}}(obj);}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (val == 0)}
\DoxyCodeLine{     \{}
\DoxyCodeLine{        tstart = 0;}
\DoxyCodeLine{        elm\_object\_text\_set(label, \textcolor{stringliteral}{"ETA: N/A"});}
\DoxyCodeLine{        \textcolor{keywordflow}{return};}
\DoxyCodeLine{     \}}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{comment}{/* First invocation */}}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (tstart == 0)}
\DoxyCodeLine{     \{}
\DoxyCodeLine{        tstart = time(NULL);}
\DoxyCodeLine{     \}}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{comment}{/* Calculate ETA and update */}}
\DoxyCodeLine{   tdiff = time(NULL) -\/ tstart;}
\DoxyCodeLine{   eta = 0.3*eta + 0.7*(tdiff/val)*(1-\/val);}
\DoxyCodeLine{   snprintf(buf, 30, \textcolor{stringliteral}{"ETA: \%.0fs"}, eta);}
\DoxyCodeLine{   elm\_object\_text\_set(label, buf);}
\DoxyCodeLine{\}}

\end{DoxyCodeInclude}


The next three progress bars are just variants on the ones already shown, but now all being {\bfseries{vertical}}. Another time we use one of than to give the window a minimum vertical size, with \mbox{\hyperlink{group__Elm__Progressbar_ga0fcab656cc093c7a8e2db9c7d62c4edf}{elm\+\_\+progressbar\+\_\+span\+\_\+size\+\_\+set()}}. To demonstrate this trick once more, the fifth one, which is also set to pulse, has a smaller hardcoded span size\+:  
\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{   \textcolor{comment}{/* vertical pb, with pulse and custom (small) span size */}}
\DoxyCodeLine{   pb = \mbox{\hyperlink{group__Elm__Progressbar_ga73ec06c9c8eb7e5f0263a132432e8cc3}{elm\_progressbar\_add}}(win);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga41dd83f3eab54cf82e49515b09c18069}{elm\_progressbar\_horizontal\_set}}(pb, \mbox{\hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{EINA\_FALSE}});}
\DoxyCodeLine{   evas\_object\_size\_hint\_align\_set(pb, \mbox{\hyperlink{Evas__Common_8h_aecbac710f36d52911fc34dcdaf8e729c}{EVAS\_HINT\_FILL}}, 0.5);}
\DoxyCodeLine{   evas\_object\_size\_hint\_weight\_set(pb, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}}, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga0fcab656cc093c7a8e2db9c7d62c4edf}{elm\_progressbar\_span\_size\_set}}(pb, 80);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_gac3cab76a1bb90d2763b76256a178a044}{elm\_progressbar\_pulse\_set}}(pb, \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_gab3b04eea0c8c842668faa3bfdcb0c78c}{elm\_progressbar\_unit\_format\_set}}(pb, NULL);}
\DoxyCodeLine{   elm\_object\_text\_set(pb, \textcolor{stringliteral}{"Infinite bounce"});}
\DoxyCodeLine{   elm\_box\_pack\_end(hbx, pb);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga9cbc13661584e49fb9d9cdab514a1eeb}{evas\_object\_show}}(pb);}
\DoxyCodeLine{   example\_data.pb6 = pb;}

\end{DoxyCodeInclude}


We end the widget demonstration by showing a progress bar with the special {\bfseries{\char`\"{}wheel\char`\"{}}} progress bar style. One does {\bfseries{not}} need to set it to pulse, with \mbox{\hyperlink{group__Elm__Progressbar_gac3cab76a1bb90d2763b76256a178a044}{elm\+\_\+progressbar\+\_\+pulse\+\_\+set()}}, explicitly, because its theme does not take it in account\+:  
\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{   \textcolor{comment}{/* "wheel" style progress bar */}}
\DoxyCodeLine{   pb = \mbox{\hyperlink{group__Elm__Progressbar_ga73ec06c9c8eb7e5f0263a132432e8cc3}{elm\_progressbar\_add}}(win);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Styles_ga7fc2d1f9ba723470da7a05799c49f7fe}{elm\_object\_style\_set}}(pb, \textcolor{stringliteral}{"wheel"});}
\DoxyCodeLine{   elm\_object\_text\_set(pb, \textcolor{stringliteral}{"Style: wheel"});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_gac3cab76a1bb90d2763b76256a178a044}{elm\_progressbar\_pulse\_set}}(pb, \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}});}
\DoxyCodeLine{   evas\_object\_size\_hint\_align\_set(pb, \mbox{\hyperlink{Evas__Common_8h_aecbac710f36d52911fc34dcdaf8e729c}{EVAS\_HINT\_FILL}}, 0.5);}
\DoxyCodeLine{   evas\_object\_size\_hint\_weight\_set(pb, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}}, \mbox{\hyperlink{Evas__Common_8h_aa47c85083d3dae0111c21ec49359306a}{EVAS\_HINT\_EXPAND}});}
\DoxyCodeLine{   elm\_box\_pack\_end(bx, pb);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga9cbc13661584e49fb9d9cdab514a1eeb}{evas\_object\_show}}(pb);}
\DoxyCodeLine{   example\_data.pb8 = pb;}

\end{DoxyCodeInclude}


The two buttons exercising the bars, the facto, follow\+:  
\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{   bt = \mbox{\hyperlink{group__Elm__Button_ga0021b9d86d822367035843ed18bc6ea9}{elm\_button\_add}}(win);}
\DoxyCodeLine{   elm\_object\_text\_set(bt, \textcolor{stringliteral}{"Start"});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Smart__Object__Group_ga18a8b179f94d21b2b09e19db11741061}{evas\_object\_smart\_callback\_add}}(bt, \textcolor{stringliteral}{"clicked"}, \_progressbar\_example\_start,}
\DoxyCodeLine{                                  NULL);}
\DoxyCodeLine{   elm\_box\_pack\_end(bt\_bx, bt);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga9cbc13661584e49fb9d9cdab514a1eeb}{evas\_object\_show}}(bt);}
\DoxyCodeLine{}
\DoxyCodeLine{   bt = \mbox{\hyperlink{group__Elm__Button_ga0021b9d86d822367035843ed18bc6ea9}{elm\_button\_add}}(win);}
\DoxyCodeLine{   elm\_object\_text\_set(bt, \textcolor{stringliteral}{"Stop"});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Smart__Object__Group_ga18a8b179f94d21b2b09e19db11741061}{evas\_object\_smart\_callback\_add}}(bt, \textcolor{stringliteral}{"clicked"}, \_progressbar\_example\_stop,}
\DoxyCodeLine{                                  NULL);}
\DoxyCodeLine{   elm\_box\_pack\_end(bt\_bx, bt);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga9cbc13661584e49fb9d9cdab514a1eeb}{evas\_object\_show}}(bt);}

\end{DoxyCodeInclude}


The first of the callbacks will, for the progress bars set to pulse, start the pulsing animation at that time. For the others, a timer callback will take care of updating the values\+:  
\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{\textcolor{keyword}{static} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}}}
\DoxyCodeLine{\_progressbar\_example\_value\_set(\textcolor{keywordtype}{void} *data \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}})}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keywordtype}{double} progress;}
\DoxyCodeLine{}
\DoxyCodeLine{   progress = \mbox{\hyperlink{group__Elm__Progressbar_ga87c65ecf41baee9f861f426072cb69ae}{elm\_progressbar\_value\_get}}(example\_data.pb1);}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (progress < 1.0) progress += 0.0123;}
\DoxyCodeLine{   \textcolor{keywordflow}{else} progress = 0.0;}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{comment}{/* just the non-\/pulsing ones need an update */}}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga06299da7deaa70dd1181477157fd5701}{elm\_progressbar\_value\_set}}(example\_data.pb1, progress);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga06299da7deaa70dd1181477157fd5701}{elm\_progressbar\_value\_set}}(example\_data.pb3, progress);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga06299da7deaa70dd1181477157fd5701}{elm\_progressbar\_value\_set}}(example\_data.pb4, progress);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga06299da7deaa70dd1181477157fd5701}{elm\_progressbar\_value\_set}}(example\_data.pb5, progress);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga06299da7deaa70dd1181477157fd5701}{elm\_progressbar\_value\_set}}(example\_data.pb7, progress);}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (progress < 1.0) \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Ecore__Main__Loop__Group_ga1ee9db07f9a46a8b20fb83e1c6dbed09}{ECORE\_CALLBACK\_RENEW}};}
\DoxyCodeLine{}
\DoxyCodeLine{   example\_data.run = 0;}
\DoxyCodeLine{   \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Ecore__Main__Loop__Group_gae0c653baad8836232c0dc27f91f875d6}{ECORE\_CALLBACK\_CANCEL}};}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\_progressbar\_example\_start(\textcolor{keywordtype}{void}        *data \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}},}
\DoxyCodeLine{                           \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *obj \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}},}
\DoxyCodeLine{                           \textcolor{keywordtype}{void}        *event\_info \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}})}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga220f1159a4ab9ecfb333841e8b6db5de}{elm\_progressbar\_pulse}}(example\_data.pb2, \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga220f1159a4ab9ecfb333841e8b6db5de}{elm\_progressbar\_pulse}}(example\_data.pb6, \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga220f1159a4ab9ecfb333841e8b6db5de}{elm\_progressbar\_pulse}}(example\_data.pb8, \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}});}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (!example\_data.run)}
\DoxyCodeLine{     \{}
\DoxyCodeLine{        example\_data.timer = \mbox{\hyperlink{group__Ecore__Timer__Group_ga7b9cb9d24ecebfdbb957436e2e669402}{ecore\_timer\_add}}(}
\DoxyCodeLine{           0.1, \_progressbar\_example\_value\_set, NULL);}
\DoxyCodeLine{        example\_data.run = \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}};}
\DoxyCodeLine{     \}}
\DoxyCodeLine{\}}

\end{DoxyCodeInclude}


Finally, the callback to stop the progress timer will stop the pulsing on the pulsing progress bars and, for the others, to delete the timer which was acting on their values\+:  
\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{\textcolor{comment}{/* end of show */}}
\DoxyCodeLine{\textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\_progressbar\_example\_stop(\textcolor{keywordtype}{void}        *data \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}},}
\DoxyCodeLine{                          \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *obj \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}},}
\DoxyCodeLine{                          \textcolor{keywordtype}{void}        *event\_info \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}})}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga220f1159a4ab9ecfb333841e8b6db5de}{elm\_progressbar\_pulse}}(example\_data.pb2, \mbox{\hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{EINA\_FALSE}});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga220f1159a4ab9ecfb333841e8b6db5de}{elm\_progressbar\_pulse}}(example\_data.pb6, \mbox{\hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{EINA\_FALSE}});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Elm__Progressbar_ga220f1159a4ab9ecfb333841e8b6db5de}{elm\_progressbar\_pulse}}(example\_data.pb8, \mbox{\hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{EINA\_FALSE}});}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (example\_data.run)}
\DoxyCodeLine{     \{}
\DoxyCodeLine{        \mbox{\hyperlink{group__Ecore__Timer__Group_gaba2b599c7aabe3ab664dc3d47f62a33a}{ecore\_timer\_del}}(example\_data.timer);}
\DoxyCodeLine{        example\_data.run = \mbox{\hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{EINA\_FALSE}};}
\DoxyCodeLine{     \}}
\DoxyCodeLine{\}}

\end{DoxyCodeInclude}


This is how the example program\textquotesingle{}s window looks like\+:  
\begin{DoxyImageNoCaption}
  \mbox{\includegraphics[width=\textwidth]{screenshots/progressbar_example}}
\end{DoxyImageNoCaption}


See the full \mbox{\hyperlink{progressbar_example_c}{source code}} for this example. 