bool TimeZoneListView::GetToolTipAt(BPoint point, BToolTip** _tip) { TimeZoneListItem* item = static_cast<TimeZoneListItem*>( this->ItemAt(this->IndexOf(point))); if (item == NULL || !item->HasTimeZone()) return false; BString nowInTimeZone; time_t now = time(NULL); BLocale::Default()->FormatTime(&nowInTimeZone, now, B_SHORT_TIME_FORMAT, &item->TimeZone()); BString dateInTimeZone; BLocale::Default()->FormatDate(&dateInTimeZone, now, B_SHORT_DATE_FORMAT, &item->TimeZone()); BString toolTip = item->Text(); toolTip << '\n' << item->TimeZone().ShortName() << " / " << item->TimeZone().ShortDaylightSavingName() << B_TRANSLATE("\nNow: ") << nowInTimeZone << " (" << dateInTimeZone << ')'; SetToolTip(toolTip.String()); *_tip = ToolTip(); return true; }
void TimeZoneView::_SetSystemTimeZone() { /* Set system timezone for all different API levels. How to do this? * 1) tell locale-roster about new default timezone * 2) tell kernel about new timezone offset */ int32 selection = fZoneList->CurrentSelection(); if (selection < 0) return; TimeZoneListItem* item = static_cast<TimeZoneListItem*>(fZoneList->ItemAt(selection)); if (item == NULL || !item->HasTimeZone()) return; fCurrentZoneItem = item; const BTimeZone& timeZone = item->TimeZone(); MutableLocaleRoster::Default()->SetDefaultTimeZone(timeZone); _kern_set_timezone(timeZone.OffsetFromGMT(), timeZone.ID().String(), timeZone.ID().Length()); fSetZone->SetEnabled(false); fLastUpdateMinute = -1; // just to trigger updating immediately }
void TimeZoneView::_UpdatePreview() { int32 selection = fZoneList->CurrentSelection(); TimeZoneListItem* item = selection < 0 ? NULL : (TimeZoneListItem*)fZoneList->ItemAt(selection); if (item == NULL || !item->HasTimeZone()) { fPreview->SetText(""); fPreview->SetTime(""); return; } BString timeString = _FormatTime(item->TimeZone()); fPreview->SetText(item->Text()); fPreview->SetTime(timeString.String()); fSetZone->SetEnabled((strcmp(fCurrent->Text(), item->Text()) != 0)); }