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_ga8daa7a9ecec49c66f2e8fd5235cb3b0f}{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_ga8daa7a9ecec49c66f2e8fd5235cb3b0f}{elm\_progressbar\_add}}(win);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_ga9379629ad8ad2860aa786d838a4a106a}{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__Evas__Object__Group_gaaf1d3e26e36b316977336066b6f56632}{evas\_object\_size\_hint\_align\_set}}(pb,\ \mbox{\hyperlink{Evas__Common_8h_aecbac710f36d52911fc34dcdaf8e729c}{EVAS\_HINT\_FILL}},\ 0.5);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Elm__Box__Group_ga66a10dd861578521af2ab7b8c2ca65c5}{elm\_box\_pack\_end}}(bx,\ pb);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga07208fcafd4739de606bc35fff684bf5}{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_ga8daa7a9ecec49c66f2e8fd5235cb3b0f}{elm\_progressbar\_add}}(win);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_gaaf1d3e26e36b316977336066b6f56632}{evas\_object\_size\_hint\_align\_set}}(pb,\ \mbox{\hyperlink{Evas__Common_8h_aecbac710f36d52911fc34dcdaf8e729c}{EVAS\_HINT\_FILL}},\ 0.5);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_ga9379629ad8ad2860aa786d838a4a106a}{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{\ \ \ \mbox{\hyperlink{group__Elm__Box__Group_ga66a10dd861578521af2ab7b8c2ca65c5}{elm\_box\_pack\_end}}(bx,\ pb);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga07208fcafd4739de606bc35fff684bf5}{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_gac369f2d67be417e5cff81e8f001ff326}{elm\_icon\_add}}(win);}
\DoxyCodeLine{\ \ \ snprintf(buf,\ \textcolor{keyword}{sizeof}(buf),\ \textcolor{stringliteral}{"{}\%s/images/logo\_small.png"{}},\ \mbox{\hyperlink{group__Elm__App_gab10cf98c5aa3936dfda01d6bca366d09}{elm\_app\_data\_dir\_get}}());}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Elm__Image_gad1a96ede5f513042cef3c1dac4572f73}{elm\_image\_file\_set}}(ic1,\ buf,\ NULL);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_gab09d6bf93b5435230b41ceca2abe783a}{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_ga8daa7a9ecec49c66f2e8fd5235cb3b0f}{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{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_gaaf1d3e26e36b316977336066b6f56632}{evas\_object\_size\_hint\_align\_set}}(pb,\ \mbox{\hyperlink{Evas__Common_8h_aecbac710f36d52911fc34dcdaf8e729c}{EVAS\_HINT\_FILL}},\ 0.5);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_ga9379629ad8ad2860aa786d838a4a106a}{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__Box__Group_ga66a10dd861578521af2ab7b8c2ca65c5}{elm\_box\_pack\_end}}(bx,\ pb);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga07208fcafd4739de606bc35fff684bf5}{evas\_object\_show}}(ic1);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga07208fcafd4739de606bc35fff684bf5}{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_ga8daa7a9ecec49c66f2e8fd5235cb3b0f}{elm\_progressbar\_add}}(win);}
\DoxyCodeLine{\ \ \ elm\_object\_text\_set(pb,\ \textcolor{stringliteral}{"{}Label"{}});}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_gaaf1d3e26e36b316977336066b6f56632}{evas\_object\_size\_hint\_align\_set}}(pb,\ \mbox{\hyperlink{Evas__Common_8h_aecbac710f36d52911fc34dcdaf8e729c}{EVAS\_HINT\_FILL}},\ 0.5);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_ga9379629ad8ad2860aa786d838a4a106a}{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__Box__Group_ga66a10dd861578521af2ab7b8c2ca65c5}{elm\_box\_pack\_end}}(bx,\ pb);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga07208fcafd4739de606bc35fff684bf5}{evas\_object\_show}}(pb);}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ label\ =\ \mbox{\hyperlink{group__Elm__Label__Group_ga39a584d245f8a4b18d742e3ede702507}{elm\_label\_add}}(win);}
\DoxyCodeLine{\ \ \ elm\_object\_text\_set(label,\ \textcolor{stringliteral}{"{}ETA:\ N/A"{}});}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_gaaf1d3e26e36b316977336066b6f56632}{evas\_object\_size\_hint\_align\_set}}(label,\ 0.5,\ 0.5);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_ga9379629ad8ad2860aa786d838a4a106a}{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{\ \ \ \mbox{\hyperlink{group__Elm__Box__Group_ga66a10dd861578521af2ab7b8c2ca65c5}{elm\_box\_pack\_end}}(bx,\ label);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga07208fcafd4739de606bc35fff684bf5}{evas\_object\_show}}(label);}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Smart__Object__Group_gac12dd6655f488cc47ce6cf00eb7d12b2}{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 ETA 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}\ (\mbox{\hyperlink{group__Eina__Tools__Group_ga6bee37244b675b83d6a4f044a7a3d1e8}{EINA\_DBL\_EQ}}(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_ga8daa7a9ecec49c66f2e8fd5235cb3b0f}{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{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_gaaf1d3e26e36b316977336066b6f56632}{evas\_object\_size\_hint\_align\_set}}(pb,\ \mbox{\hyperlink{Evas__Common_8h_aecbac710f36d52911fc34dcdaf8e729c}{EVAS\_HINT\_FILL}},\ 0.5);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_ga9379629ad8ad2860aa786d838a4a106a}{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{\ \ \ \mbox{\hyperlink{group__Elm__Box__Group_ga66a10dd861578521af2ab7b8c2ca65c5}{elm\_box\_pack\_end}}(hbx,\ pb);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga07208fcafd4739de606bc35fff684bf5}{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_ga8daa7a9ecec49c66f2e8fd5235cb3b0f}{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{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_gaaf1d3e26e36b316977336066b6f56632}{evas\_object\_size\_hint\_align\_set}}(pb,\ \mbox{\hyperlink{Evas__Common_8h_aecbac710f36d52911fc34dcdaf8e729c}{EVAS\_HINT\_FILL}},\ 0.5);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group_ga9379629ad8ad2860aa786d838a4a106a}{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__Box__Group_ga66a10dd861578521af2ab7b8c2ca65c5}{elm\_box\_pack\_end}}(bx,\ pb);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga07208fcafd4739de606bc35fff684bf5}{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_gaf5caf46d74c4e122a18da323935d25e4}{elm\_button\_add}}(win);}
\DoxyCodeLine{\ \ \ elm\_object\_text\_set(bt,\ \textcolor{stringliteral}{"{}Start"{}});}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Smart__Object__Group_gac12dd6655f488cc47ce6cf00eb7d12b2}{evas\_object\_smart\_callback\_add}}(bt,\ \textcolor{stringliteral}{"{}clicked"{}},\ \_progressbar\_example\_start,}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ NULL);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Elm__Box__Group_ga66a10dd861578521af2ab7b8c2ca65c5}{elm\_box\_pack\_end}}(bt\_bx,\ bt);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga07208fcafd4739de606bc35fff684bf5}{evas\_object\_show}}(bt);}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ bt\ =\ \mbox{\hyperlink{group__Elm__Button_gaf5caf46d74c4e122a18da323935d25e4}{elm\_button\_add}}(win);}
\DoxyCodeLine{\ \ \ elm\_object\_text\_set(bt,\ \textcolor{stringliteral}{"{}Stop"{}});}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Smart__Object__Group_gac12dd6655f488cc47ce6cf00eb7d12b2}{evas\_object\_smart\_callback\_add}}(bt,\ \textcolor{stringliteral}{"{}clicked"{}},\ \_progressbar\_example\_stop,}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ NULL);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Elm__Box__Group_ga66a10dd861578521af2ab7b8c2ca65c5}{elm\_box\_pack\_end}}(bt\_bx,\ bt);}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga07208fcafd4739de606bc35fff684bf5}{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_ga926423e464d7ef71105dd822d90e1187}{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_ga7c118b6a6d232b63a6500e599d2a1b47}{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. 