32 #include "percentdonelistener.h"
36 const uint32_t minPercent = 0;
37 const uint32_t maxPercent = 100;
39 PercentDoneListener::~PercentDoneListener() {
43 PercentDoneCallback::PercentDoneCallback()
44 : m_totalElements(0), m_percent(1), m_numberOfEvents(0), m_count(0) {
48 PercentDoneCallback::~PercentDoneCallback() {
52 void PercentDoneCallback::setTotalNumberOfElements(
unsigned int totalElements)
54 m_totalElements = totalElements;
57 void PercentDoneCallback::setPercentDoneInterval(
unsigned int percent)
62 void PercentDoneCallback::incrementCount() {
64 if (m_count == minPercent) {
66 fireEvent(minPercent);
74 if (!m_listeners.empty() && m_totalElements > 0) {
75 if (m_count >= m_totalElements) {
76 fireEvent(maxPercent);
80 uint32_t percentDone =
static_cast<uint32_t
>((
static_cast<float>(m_count)/m_totalElements) * maxPercent);
82 if ((percentDone % m_percent) == 0 && (percentDone != m_percent * m_numberOfEvents)) {
87 fireEvent(m_percent * m_numberOfEvents);
93 void PercentDoneCallback::reset() {
99 fireEvent(minPercent);
102 void PercentDoneCallback::addListener(PercentDoneListener* listener) {
104 m_listeners.push_back(listener);
108 void PercentDoneCallback::removeListener(PercentDoneListener* listener) {
109 ListenerContainer::iterator iter = m_listeners.begin();
110 for ( ; iter != m_listeners.end(); ++iter) {
111 if (*iter == listener) {
112 m_listeners.erase(iter);
118 void PercentDoneCallback::fireEvent(uint32_t percent) {
119 ListenerContainer::iterator iter = m_listeners.begin();
120 for ( ; iter != m_listeners.end(); ++iter) {
121 (*iter)->OnEvent(percent);