DatabaseQuery* Draw::GetDataToFetch() { const DTime& start_time = m_index.GetStartTime(); assert(start_time.IsValid()); PeriodType period = start_time.GetPeriod(); int d = m_values.m_view.Start(); DatabaseQuery* q = NULL; if (m_draw_info == NULL) return q; if (GetEnable() == false) return q; bool no_max_probes = !m_draw_info->IsValid() || m_draw_info->GetParam()->GetIPKParam()->GetFormulaType() == TParam::LUA_AV; for (size_t i = 0; i < m_values.len(); ++i) { ValueInfo &v = m_values.Get(i); if (v.state != ValueInfo::EMPTY) continue; DTime pt = GetDTimeOfIndex(i - d); if (period == PERIOD_T_DAY) v.max_probes = 1; else if (no_max_probes) v.max_probes = 0; else { DTime ptn = pt + m_index.GetDateRes() + m_index.GetTimeRes(); v.max_probes = (ptn.GetTime() - pt.GetTime()).GetMinutes() / 10; } v.state = ValueInfo::PENDING; if (q == NULL) q = CreateDataQuery(m_draw_info, period, m_draw_no); AddTimeToDataQuery(q, pt.GetTime().GetTicks()); } return q; }
void XYDialog::OnDateChange(wxCommandEvent &event) { wxButton *button; DTime *time; if (event.GetId() == XY_START_TIME) { button = wxDynamicCast(FindWindow(XY_START_TIME), wxButton); time = &m_start_time; } else { button = wxDynamicCast(FindWindow(XY_END_TIME), wxButton); time = &m_end_time; } DateChooserWidget *dcw = new DateChooserWidget( this, _("Select date"), 1, -1, -1, 1 ); wxDateTime wxtime = time->GetTime(); bool ret = dcw->GetDate(wxtime); dcw->Destroy(); if (ret == false) return; *time = DTime(m_period, wxtime); time->AdjustToPeriod(); button->SetLabel(FormatTime(time->GetTime(), m_period)); }
DTime TimeIndex::AdjustToPeriodSpan(const DTime &time) const { wxDateTime dt = time.GetTime(); if (m_number_of_values == default_units_count[time.GetPeriod()] * PeriodMult[time.GetPeriod()]) { switch (time.GetPeriod()) { case PERIOD_T_DECADE : case PERIOD_T_YEAR : dt.SetMonth(wxDateTime::Jan); case PERIOD_T_MONTH : dt.SetDay(1); dt.SetHour(0); break; case PERIOD_T_WEEK: case PERIOD_T_SEASON : dt.SetToWeekDayInSameWeek(wxDateTime::Mon); case PERIOD_T_DAY : dt.SetHour(0); dt.SetMinute(0); break; case PERIOD_T_30MINUTE : dt.SetMinute(dt.GetMinute() / 30 * 30); dt.SetSecond(0); break; case PERIOD_T_5MINUTE : dt.SetMinute(dt.GetMinute() / 3 * 3); dt.SetSecond(0); break; case PERIOD_T_MINUTE : case PERIOD_T_30SEC : dt.SetSecond(dt.GetSecond() / 30 * 30); break; case PERIOD_T_OTHER: case PERIOD_T_LAST: assert(false); } return DTime(time.GetPeriod(), dt); } else { DTime ret(time); return ret.AdjustToPeriodStart(); } }
int DTime::GetDistance(const DTime &t) const { assert(IsValid()); assert(t.IsValid()); if (GetPeriod() != t.GetPeriod()) { wxLogError(_T("our period: %d, his period: %d"), GetPeriod(), t.GetPeriod()); assert(false); } const wxDateTime& _t0 = GetTime(); const wxDateTime& _t = t.GetTime(); int ret = -1; switch (GetPeriod()) { case PERIOD_T_DECADE: ret = _t.GetYear() - _t0.GetYear(); break; case PERIOD_T_YEAR: ret = _t.GetYear() * 12 + _t.GetMonth() - _t0.GetYear() * 12 - _t0.GetMonth(); break; case PERIOD_T_MONTH: ret = (_t - _t0).GetHours(); //acount for daylight saving time switch (ret % 24) { case 1: ret -= 1; break; case 23: ret += 1; break; case -1: ret += 1; break; case -23: ret -= 1; break; } ret /= 24; break; case PERIOD_T_DAY: ret = (_t - _t0).GetMinutes() / 10; break; case PERIOD_T_30MINUTE: ret = ((_t - _t0).GetSeconds() / 10).ToLong(); break; case PERIOD_T_5MINUTE: ret = ((_t - _t0).GetSeconds()).ToLong(); break; case PERIOD_T_MINUTE: ret = ((_t - _t0).GetMilliseconds() / 500).ToLong(); break; case PERIOD_T_30SEC: ret = ((_t - _t0).GetMilliseconds() / 100).ToLong(); break; case PERIOD_T_WEEK: ret = (_t - _t0).GetHours() / 8; if (_t0.IsDST() != _t.IsDST()) { if (_t0 < _t && _t.IsDST()) ret += 1; else if (_t < _t0 && _t0.IsDST()) ret -= 1; } break; case PERIOD_T_SEASON: ret = (_t - _t0).GetDays() / 7; if (_t0.IsDST() != _t.IsDST()) { if (_t0 < _t && _t.IsDST()) ret += 1; else if (_t < _t0 && _t0.IsDST()) ret -= 1; } break; default: assert(false); } return ret; }