static void BlankDisplay(bool doblank) { static bool oldblank = false; if (!XCSoarInterface::GetUISettings().display.enable_auto_blank) return; if (doblank == oldblank) return; if (!Display::BlankSupported()) // can't do it, not supported return; UIState &ui_state = CommonInterface::SetUIState(); if (doblank) { if (Power::External::Status == Power::External::OFF) { // Power off the display Display::Blank(true); oldblank = true; ui_state.screen_blanked = true; } else { ResetDisplayTimeOut(); } } else { // was blanked // Power on the display Display::Blank(false); oldblank = false; ui_state.screen_blanked = false; } }
static void MessageProcessTimer() { // don't display messages if airspace warning dialog is active if (!dlgAirspaceWarningVisible()) if (CommonInterface::main_window->popup.Render()) // turn screen on if blanked and receive a new message ResetDisplayTimeOut(); }
void ProcessTimer::AirspaceProcessTimer() { if (globalRunningEvent.test()) { if (airspaceWarningEvent.test()) { airspaceWarningEvent.reset(); ResetDisplayTimeOut(); dlgAirspaceWarningShowDlg(); } } }
void ProcessTimer::MessageProcessTimer() { // don't display messages if airspace warning dialog is active if (!dlgAirspaceWarningVisible()) { if (main_window.popup.Render()) { // turn screen on if blanked and receive a new message ResetDisplayTimeOut(); } } }
bool XCSoarInterface::Debounce(void) { static PeriodClock fps_last; ResetDisplayTimeOut(); InterfaceTimeoutReset(); if (SettingsMap().ScreenBlanked) { // prevent key presses working if screen is blanked, // so a key press just triggers turning the display on again return false; } return fps_last.check_update(debounceTimeout); }
void InfoBoxManager::ProcessQuickAccess(const int id, const TCHAR *Value) { if (id < 0) return; // do approciate action if (InfoBoxes[id] != NULL) InfoBoxes[id]->HandleQuickAccess(Value); SetDirty(); ResetDisplayTimeOut(); }
void InfoBoxManager::ProcessKey(InfoBoxContent::InfoBoxKeyCodes keycode) { int focus = GetFocused(); if (focus < 0) return; if (InfoBoxes[focus] != NULL) InfoBoxes[focus]->HandleKey(keycode); InputEvents::HideMenu(); SetDirty(); ResetDisplayTimeOut(); }
// Debounce input buttons (does not matter which button is pressed) bool XCSoarInterface::Debounce(void) { #if defined(GNAV) || defined(PCGNAV) return true; #else static PeriodClock fps_last; ResetDisplayTimeOut(); if (SettingsMap().ScreenBlanked) // prevent key presses working if screen is blanked, // so a key press just triggers turning the display on again return false; return fps_last.check_update(debounceTimeout); #endif }
void CheckDisplayTimeOut(bool sticky) { #if defined(WIN32) && !defined(_WIN32_WCE) SystemIdleTimerReset(); #endif if (!sticky) { if (DisplayTimeOut < DISPLAYTIMEOUTMAX) DisplayTimeOut++; } else { // JMW don't let display timeout while a dialog is active ResetDisplayTimeOut(); return; } if (DisplayTimeOut >= DISPLAYTIMEOUTMAX) BlankDisplay(true); else BlankDisplay(false); }
void BlankDisplay(bool doblank) { static bool oldblank = false; UpdateBatteryInfo(); if (!XCSoarInterface::SettingsMap().EnableAutoBlank) return; if (doblank == oldblank) return; if (!Display::BlankSupported()) // can't do it, not supported return; // TODO feature: Trigger a GCE (Glide Computer Event) when // switching to battery mode This can be used to warn users that // power has been lost and you are now on battery power - ie: // something else is wrong if (doblank) { /* Battery status - simulator only - for safety of battery data note: Simulator only - more important to keep running in your plane */ // JMW, maybe this should be active always... // we don't want the PDA to be completely depleted. if (Power::External::Status == Power::External::OFF) { if (is_simulator() && Power::Battery::RemainingPercentValid && Power::Battery::RemainingPercent < BATTERY_EXIT) { LogStartUp(TEXT("Battery low exit...")); // TODO feature: Warning message on battery shutdown XCSoarInterface::SignalShutdown(true); } else { if (Power::Battery::RemainingPercentValid && Power::Battery::RemainingPercent < BATTERY_WARNING) { DWORD LocalWarningTime = ::GetTickCount(); if ((LocalWarningTime - BatteryWarningTime) > BATTERY_REMINDER) { BatteryWarningTime = LocalWarningTime; // TODO feature: Show the user what the batt status is. Message::AddMessage(_("Organiser Battery Low")); } } else { BatteryWarningTime = 0; } } } if (Power::External::Status == Power::External::OFF) { // Power off the display Display::Blank(true); oldblank = true; XCSoarInterface::SetSettingsMap().ScreenBlanked = true; } else { ResetDisplayTimeOut(); } } else if (oldblank) { // was blanked // Power on the display Display::Blank(false); oldblank = false; XCSoarInterface::SetSettingsMap().ScreenBlanked = false; } }
LRESULT Window::OnMessage(HWND _hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: OnCreate(); return 0; case WM_DESTROY: OnDestroy(); return 0; case WM_CLOSE: if (OnClose()) /* true returned: message was handled */ return 0; break; case WM_SIZE: OnResize(LOWORD(lParam), HIWORD(lParam)); return 0; case WM_MOUSEMOVE: if (OnMouseMove(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), wParam)) return 0; break; case WM_LBUTTONDOWN: if (OnMouseDown(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_LBUTTONUP: if (OnMouseUp(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_LBUTTONDBLCLK: if (!double_clicks) /* instead of disabling CS_DBLCLKS (which would affect all instances of a window class), we just translate WM_LBUTTONDBLCLK to WM_LBUTTONDOWN here; this even works for built-in window class such as BUTTON */ return OnMessage(_hWnd, WM_LBUTTONDOWN, wParam, lParam); if (OnMouseDouble(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; #ifdef WM_MOUSEWHEEL case WM_MOUSEWHEEL: if (OnMouseWheel(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), GET_WHEEL_DELTA_WPARAM(wParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; #endif case WM_KEYDOWN: if (OnKeyDown(wParam)) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_KEYUP: if (OnKeyUp(wParam)) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_COMMAND: if (OnCommand(LOWORD(wParam), HIWORD(wParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_CANCELMODE: if (OnCancelMode()) return 0; break; case WM_SETFOCUS: OnSetFocus(); /* pass on to DefWindowProc() so the underlying window class knows it's focused */ break; case WM_KILLFOCUS: OnKillFocus(); /* pass on to DefWindowProc() so the underlying window class knows it's not focused anymore */ break; case WM_TIMER: if (OnTimer(*(WindowTimer *)wParam)) return 0; break; case WM_PAINT: if (custom_painting) { PaintCanvas canvas(*this); OnPaint(canvas, canvas.get_dirty()); return 0; } break; case WM_GETDLGCODE: if (OnKeyCheck(wParam)) return DLGC_WANTMESSAGE; break; } if (message >= WM_USER && message <= 0x7FFF && OnUser(message - WM_USER)) return 0; return OnUnhandledMessage(_hWnd, message, wParam, lParam); }
LRESULT Window::on_message(HWND _hWnd, UINT message, WPARAM wParam, LPARAM lParam) { if (IsEmbedded() && !IsAltair()) { /* some older iPaqs such as the H3900 send only WM_KEYUP for VK_APP*, but never VK_KEYDOWN; the hx4700 has an additional set of undocumented key codes (0xca..0xcd) for the APP keys, but sends WM_KEYUP/VK_APP* additionally; the following rules hopefully catch all of these obscurities */ if (message == WM_KEYUP && wParam >= 0x80) /* convert to WM_KEYDOWN to make all handlers catch it */ message = WM_KEYDOWN; else if (message == WM_KEYDOWN && wParam >= 0x80) /* ignore the real WM_KEYDOWN, just in case it really happens */ return 0; } switch (message) { case WM_CREATE: on_create(); return 0; case WM_DESTROY: on_destroy(); return 0; case WM_CLOSE: if (on_close()) /* true returned: message was handled */ return 0; break; case WM_SIZE: on_resize(LOWORD(lParam), HIWORD(lParam)); return 0; case WM_MOUSEMOVE: if (on_mouse_move(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), wParam)) return 0; break; case WM_LBUTTONDOWN: if (on_mouse_down(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_LBUTTONUP: if (on_mouse_up(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_LBUTTONDBLCLK: if (!double_clicks) /* instead of disabling CS_DBLCLKS (which would affect all instances of a window class), we just translate WM_LBUTTONDBLCLK to WM_LBUTTONDOWN here; this even works for built-in window class such as BUTTON */ return on_message(_hWnd, WM_LBUTTONDOWN, wParam, lParam); if (on_mouse_double(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; #ifdef WM_MOUSEWHEEL case WM_MOUSEWHEEL: if (on_mouse_wheel(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), GET_WHEEL_DELTA_WPARAM(wParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; #endif case WM_KEYDOWN: if (on_key_down(::TranscodeKey(wParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_KEYUP: if (on_key_up(::TranscodeKey(wParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_COMMAND: if (on_command(LOWORD(wParam), HIWORD(wParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_CANCELMODE: if (on_cancel_mode()) return 0; break; case WM_SETFOCUS: on_setfocus(); return 0; case WM_KILLFOCUS: on_killfocus(); return 0; case WM_TIMER: if (on_timer(*(WindowTimer *)wParam)) return 0; break; case WM_PAINT: if (custom_painting) { PaintCanvas canvas(*this); on_paint(canvas, canvas.get_dirty()); return 0; } break; case WM_GETDLGCODE: if (on_key_check(wParam)) return DLGC_WANTMESSAGE; break; } if (message >= WM_USER && message <= 0x7FFF && on_user(message - WM_USER)) return 0; return on_unhandled_message(_hWnd, message, wParam, lParam); }
void BlankDisplay(bool doblank) { static bool oldblank = false; BATTERYINFO BatteryInfo; BatteryInfo.acStatus = 0; // JMW initialise if (GetBatteryInfo(&BatteryInfo)) { PDABatteryPercent = BatteryInfo.BatteryLifePercent; PDABatteryTemperature = BatteryInfo.BatteryTemperature; // VENTA3 /* // All you need to display extra Battery informations... TCHAR vtemp[1000]; _stprintf(vtemp,_T("Battpercent=%d Volt=%d Curr=%d AvCurr=%d mAhC=%d Temp=%d Lifetime=%d Fulllife=%d\n"), BatteryInfo.BatteryLifePercent, BatteryInfo.BatteryVoltage, BatteryInfo.BatteryCurrent, BatteryInfo.BatteryAverageCurrent, BatteryInfo.BatterymAHourConsumed, BatteryInfo.BatteryTemperature, BatteryInfo.BatteryLifeTime, BatteryInfo.BatteryFullLifeTime); StartupStore( vtemp ); */ } if (!XCSoarInterface::SettingsMap().EnableAutoBlank) { return; } if (doblank == oldblank) { return; } HDC gdc; int iESC=SETPOWERMANAGEMENT; gdc = ::GetDC(NULL); if (ExtEscape(gdc, QUERYESCSUPPORT, sizeof(int), (LPCSTR)&iESC, 0, NULL)==0) { // can't do it, not supported } else { VIDEO_POWER_MANAGEMENT vpm; vpm.Length = sizeof(VIDEO_POWER_MANAGEMENT); vpm.DPMSVersion = 0x0001; // TODO feature: Trigger a GCE (Glide Computer Event) when // switching to battery mode This can be used to warn users that // power has been lost and you are now on battery power - ie: // something else is wrong if (doblank) { /* Battery status - simulator only - for safety of battery data note: Simulator only - more important to keep running in your plane */ // JMW, maybe this should be active always... // we don't want the PDA to be completely depleted. if (BatteryInfo.acStatus==0) { if (is_simulator() && (PDABatteryPercent < BATTERY_EXIT)) { StartupStore(TEXT("Battery low exit...\n")); // TODO feature: Warning message on battery shutdown XCSoarInterface::SignalShutdown(true); } else { if (PDABatteryPercent < BATTERY_WARNING) { DWORD LocalWarningTime = ::GetTickCount(); if ((LocalWarningTime - BatteryWarningTime) > BATTERY_REMINDER) { BatteryWarningTime = LocalWarningTime; // TODO feature: Show the user what the batt status is. Message::AddMessage(TEXT("Organiser Battery Low")); } } else { BatteryWarningTime = 0; } } } if (BatteryInfo.acStatus==0) { // Power off the display vpm.PowerState = VideoPowerOff; ExtEscape(gdc, SETPOWERMANAGEMENT, vpm.Length, (LPCSTR) &vpm, 0, NULL); oldblank = true; XCSoarInterface::SetSettingsMap().ScreenBlanked = true; } else { ResetDisplayTimeOut(); } } else { if (oldblank) { // was blanked // Power on the display vpm.PowerState = VideoPowerOn; ExtEscape(gdc, SETPOWERMANAGEMENT, vpm.Length, (LPCSTR) &vpm, 0, NULL); oldblank = false; XCSoarInterface::SetSettingsMap().ScreenBlanked = false; } } } ::ReleaseDC(NULL, gdc); }
LRESULT Window::on_message(HWND _hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: return on_create() ? 0 : -1; break; case WM_DESTROY: if (on_destroy()) return 0; break; case WM_CLOSE: if (on_close()) /* true returned: message was handled */ return 0; break; case WM_SIZE: if (on_resize(LOWORD(lParam), HIWORD(lParam))) return 0; break; case WM_MOUSEMOVE: if (on_mouse_move(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), wParam)) return 0; break; case WM_LBUTTONDOWN: XCSoarInterface::InterfaceTimeoutReset(); if (on_mouse_down(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_LBUTTONUP: XCSoarInterface::InterfaceTimeoutReset(); if (on_mouse_up(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_LBUTTONDBLCLK: XCSoarInterface::InterfaceTimeoutReset(); if (on_mouse_double(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; #ifdef WM_MOUSEWHEEL case WM_MOUSEWHEEL: XCSoarInterface::InterfaceTimeoutReset(); if (on_mouse_wheel(GET_WHEEL_DELTA_WPARAM(wParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; #endif case WM_KEYDOWN: XCSoarInterface::InterfaceTimeoutReset(); if (on_key_down(wParam)) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_KEYUP: XCSoarInterface::InterfaceTimeoutReset(); if (on_key_up(wParam)) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_COMMAND: XCSoarInterface::InterfaceTimeoutReset(); if (on_command(LOWORD(wParam), HIWORD(wParam))) { /* true returned: message was handled */ ResetDisplayTimeOut(); return 0; } break; case WM_SETFOCUS: if (on_setfocus()) return 0; break; case WM_KILLFOCUS: if (on_killfocus()) return 0; break; case WM_TIMER: if (on_timer(wParam)) return 0; break; } if (message >= WM_USER && message <= 0x7FFF && on_user(message - WM_USER)) return 0; return on_unhandled_message(_hWnd, message, wParam, lParam); }