@@ -80,6 +80,7 @@ public:
8080 ColorTheme m_secondColor;
8181 QVariantListModel m_secondMonth;
8282 int m_currentDay;
83+ bool m_currentDayChanged;
8384 QString m_username;
8485 FakeDataMap::const_iterator m_dataIndex;
8586 UserMetricsDataPtr m_newData;
@@ -88,12 +89,16 @@ public:
8889 void setUsername(const QString &username);
8990
9091protected:
92+ void findAndSetUsername(const QString &username);
93+
9194 void nextFakeData();
9295
9396 void generateFakeData();
9497
9598 void loadFakeData();
9699
100+ void loadUserMetricsData();
101+
97102 void finishSetFakeData();
98103
99104private:
@@ -220,7 +225,7 @@ int UserMetricsData::length() const
220225}
221226
222227UserMetricsPrivate::UserMetricsPrivate(UserMetrics *parent) :
223− q_ptr(parent), m_firstColor(this), m_secondColor(this), m_currentDay(0)
228+ q_ptr(parent), m_firstColor(this), m_secondColor(this), m_currentDay(-1), m_currentDayChanged(false)
224229{
225230 m_fakeData.insert("", UserMetricsDataPtr(new UserMetricsData(this)));
226231}
@@ -229,12 +234,8 @@ UserMetricsPrivate::~UserMetricsPrivate()
229234{
230235}
231236
232−void UserMetricsPrivate::setUsername(const QString &username)
237+void UserMetricsPrivate::findAndSetUsername(const QString &username)
233238{
234− if (m_username == username && m_newData) {
235− return;
236− }
237−
238239 m_username = username;
239240
240241 m_dataIndex = m_fakeData.constFind(m_username);
@@ -242,7 +243,15 @@ void UserMetricsPrivate::setUsername(const QString &username)
242243 {
243244 m_dataIndex = m_fakeData.constFind("");
244245 }
246+}
247+
248+void UserMetricsPrivate::setUsername(const QString &username)
249+{
250+ if (m_username == username && m_newData) {
251+ return;
252+ }
245253
254+ findAndSetUsername(username);
246255 loadFakeData();
247256
248257 q_ptr->usernameChanged(m_username);
@@ -351,24 +360,27 @@ void UserMetricsPrivate::loadFakeData()
351360 // we emit no signal if the data has stayed empty
352361}
353362
354−void UserMetricsPrivate::finishSetFakeData()
363+void UserMetricsPrivate::loadUserMetricsData()
355364{
356− bool oldLabelEmpty = m_label.isEmpty();
357− bool newLabelEmpty = m_newData->label().isEmpty();
358−
359365 m_label = m_newData->label();
360366 m_firstColor = m_newData->firstColor();
361367 m_firstMonth.setVariantList(m_newData->firstMonth());
362368 m_secondColor = m_newData->secondColor();
363369 m_secondMonth.setVariantList(m_newData->secondMonth());
370+}
371+
372+void UserMetricsPrivate::finishSetFakeData()
373+{
374+ bool oldLabelEmpty = m_label.isEmpty();
375+ bool newLabelEmpty = m_newData->label().isEmpty();
364376
365− bool currentDayChanged = m_currentDay != m_username.length();
366− m_currentDay = m_username.length();
377+ loadUserMetricsData();
367378
368379 q_ptr->labelChanged(m_label);
369− if (currentDayChanged)
380+ if (m_currentDayChanged)
370381 {
371− q_ptr->currentDayChanged(m_currentDay);
382+ q_ptr->currentDayChanged(m_currentDay);
383+ m_currentDayChanged = false;
372384 }
373385
374386 if (oldLabelEmpty && !newLabelEmpty)
@@ -454,6 +466,14 @@ int UserMetrics::currentDay() const
454466 return d_ptr->m_currentDay;
455467}
456468
469+void UserMetrics::setDay(int day)
470+{
471+ if(day != d_ptr->m_currentDay){
472+ d_ptr->m_currentDay = day;
473+ d_ptr->m_currentDayChanged = true;
474+ }
475+}
476+
457477void UserMetrics::nextDataSourceSlot()
458478{
459479 d_ptr->nextFakeData();
@@ -464,6 +484,15 @@ void UserMetrics::readyForDataChangeSlot()
464484 d_ptr->finishSetFakeData();
465485}
466486
487+void UserMetrics::reset()
488+{
489+ d_ptr->m_currentDay = -1;
490+ d_ptr->m_currentDayChanged = false;
491+
492+ d_ptr->findAndSetUsername("");
493+ d_ptr->loadUserMetricsData();
494+}
495+
467496/**
468497 * Factory methods
469498 */