New: line and triangle primitives message popup dialog expose buttons for for font, alignment, color, timer, switch and source pickers generic popup dialog that can be filled with other things lvgl.isAppMode() function to let widgets know when app mode is active additional containers for creating layouts (box and setting) flex layouts Fixes: colors are updated when theme changes fix memory leaks when stand alone scripts close run stand alone scripts in a separate Lua state and use lua_pcallk() to prevent cross boundary errors (color only)
212 lines
6.3 KiB
C++
212 lines
6.3 KiB
C++
/*
|
|
* Copyright (C) EdgeTX
|
|
*
|
|
* Based on code named
|
|
* opentx - https://github.com/opentx/opentx
|
|
* th9x - http://code.google.com/p/th9x
|
|
* er9x - http://code.google.com/p/er9x
|
|
* gruvin9x - http://code.google.com/p/gruvin9x
|
|
*
|
|
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <inttypes.h>
|
|
#include "edgetx_types.h"
|
|
|
|
#include "hal/key_driver.h"
|
|
|
|
constexpr event_t EVT_REFRESH = 0x1000;
|
|
constexpr event_t EVT_ENTRY = 0x1001;
|
|
constexpr event_t EVT_ENTRY_UP = 0x1002;
|
|
constexpr event_t EVT_ROTARY_LEFT = 0x1003;
|
|
constexpr event_t EVT_ROTARY_RIGHT = 0x1004;
|
|
|
|
#if defined(COLORLCD)
|
|
constexpr event_t _MSK_KEY_BREAK = 0x0200;
|
|
constexpr event_t _MSK_KEY_REPT = 0x0400;
|
|
constexpr event_t _MSK_KEY_FIRST = 0x0600;
|
|
constexpr event_t _MSK_KEY_LONG = 0x0800;
|
|
constexpr event_t _MSK_KEY_LONG_BRK = 0x0A00;
|
|
constexpr event_t _MSK_KEY_FLAGS = 0x0E00;
|
|
#else
|
|
constexpr event_t _MSK_KEY_BREAK = 0x0020;
|
|
constexpr event_t _MSK_KEY_REPT = 0x0040;
|
|
constexpr event_t _MSK_KEY_FIRST = 0x0060;
|
|
constexpr event_t _MSK_KEY_LONG = 0x0080;
|
|
constexpr event_t _MSK_KEY_FLAGS = 0x00E0;
|
|
#endif
|
|
|
|
#if defined(COLORLCD)
|
|
constexpr event_t _MSK_VIRTUAL_KEY = 0x2000;
|
|
|
|
constexpr event_t EVT_VIRTUAL_KEY(uint8_t key)
|
|
{
|
|
return (key | _MSK_VIRTUAL_KEY);
|
|
}
|
|
|
|
constexpr event_t EVT_VIRTUAL_KEY_MIN = EVT_VIRTUAL_KEY('m');
|
|
constexpr event_t EVT_VIRTUAL_KEY_MAX = EVT_VIRTUAL_KEY('M');
|
|
constexpr event_t EVT_VIRTUAL_KEY_PLUS = EVT_VIRTUAL_KEY('+');
|
|
constexpr event_t EVT_VIRTUAL_KEY_MINUS = EVT_VIRTUAL_KEY('-');
|
|
constexpr event_t EVT_VIRTUAL_KEY_FORWARD = EVT_VIRTUAL_KEY('F');
|
|
constexpr event_t EVT_VIRTUAL_KEY_BACKWARD = EVT_VIRTUAL_KEY('B');
|
|
constexpr event_t EVT_VIRTUAL_KEY_DEFAULT = EVT_VIRTUAL_KEY('0');
|
|
constexpr event_t EVT_VIRTUAL_KEY_UP = EVT_VIRTUAL_KEY('U');
|
|
constexpr event_t EVT_VIRTUAL_KEY_DOWN = EVT_VIRTUAL_KEY('D');
|
|
constexpr event_t EVT_VIRTUAL_KEY_LEFT = EVT_VIRTUAL_KEY('L');
|
|
constexpr event_t EVT_VIRTUAL_KEY_RIGHT = EVT_VIRTUAL_KEY('R');
|
|
constexpr event_t EVT_VIRTUAL_KEY_NEXT = EVT_VIRTUAL_KEY('N');
|
|
constexpr event_t EVT_VIRTUAL_KEY_PREVIOUS = EVT_VIRTUAL_KEY('P');
|
|
constexpr event_t EVT_VIRTUAL_KEY_SIGN = EVT_VIRTUAL_KEY(177);
|
|
|
|
constexpr bool IS_VIRTUAL_KEY_EVENT(event_t event)
|
|
{
|
|
return (event & 0xF000) == _MSK_VIRTUAL_KEY;
|
|
}
|
|
|
|
// Touch events for Lua widgets - assuming _MSK_KEY_* for PCBHORUS
|
|
constexpr event_t EVT_TOUCH = EVT_VIRTUAL_KEY('t');
|
|
constexpr event_t EVT_TOUCH_FIRST = EVT_TOUCH | _MSK_KEY_FIRST;
|
|
constexpr event_t EVT_TOUCH_BREAK = EVT_TOUCH | _MSK_KEY_BREAK;
|
|
constexpr event_t EVT_TOUCH_SLIDE = EVT_TOUCH | _MSK_KEY_LONG;
|
|
constexpr event_t EVT_TOUCH_TAP = EVT_TOUCH | _MSK_KEY_REPT;
|
|
|
|
constexpr bool IS_TOUCH_EVENT(event_t event)
|
|
{
|
|
return (event & ~_MSK_KEY_FLAGS) == EVT_TOUCH;
|
|
}
|
|
#endif
|
|
|
|
// normal order of events is: FIRST, LONG, REPEAT, REPEAT, ..., BREAK
|
|
#define EVT_KEY_MASK(e) ((e) & 0x1F)
|
|
|
|
constexpr event_t EVT_KEY_FIRST(uint8_t key)
|
|
{
|
|
return (key | _MSK_KEY_FIRST); // fired when key is pressed
|
|
}
|
|
|
|
constexpr event_t EVT_KEY_REPT(uint8_t key)
|
|
{
|
|
return (key | _MSK_KEY_REPT); // fired when key is held pressed long enough, fires multiple times with increasing speed
|
|
}
|
|
|
|
constexpr event_t EVT_KEY_LONG(uint8_t key)
|
|
{
|
|
return (key | _MSK_KEY_LONG); // fired when key is held pressed for a while
|
|
}
|
|
|
|
constexpr event_t EVT_KEY_BREAK(uint8_t key)
|
|
{
|
|
return (key | _MSK_KEY_BREAK); // fired when key is released (short or long), but only if the event was not killed
|
|
}
|
|
|
|
constexpr bool IS_KEY_EVENT(event_t event)
|
|
{
|
|
return (event & 0xF000) == 0; // fired when key is released (short or long), but only if the event was not killed
|
|
}
|
|
|
|
// constexpr bool IS_TRIM_EVENT(event_t event)
|
|
// {
|
|
// return (IS_KEY_EVENT(event) && EVT_KEY_MASK(event) >= TRM_BASE);
|
|
// }
|
|
|
|
inline bool IS_KEY_FIRST(event_t evt)
|
|
{
|
|
return (evt & _MSK_KEY_FLAGS) == _MSK_KEY_FIRST;
|
|
}
|
|
|
|
inline bool IS_KEY_REPT(event_t evt)
|
|
{
|
|
return (evt & _MSK_KEY_FLAGS) == _MSK_KEY_REPT;
|
|
}
|
|
|
|
inline bool IS_KEY_LONG(event_t evt)
|
|
{
|
|
return (evt & _MSK_KEY_FLAGS) == _MSK_KEY_LONG;
|
|
}
|
|
|
|
inline bool IS_KEY_BREAK(event_t evt)
|
|
{
|
|
return (evt & _MSK_KEY_FLAGS) == _MSK_KEY_BREAK;
|
|
}
|
|
|
|
inline bool IS_KEY_EVT(event_t evt, uint8_t key)
|
|
{
|
|
return (evt & _MSK_KEY_FLAGS) && (EVT_KEY_MASK(evt) == key);
|
|
}
|
|
|
|
inline bool IS_NEXT_EVENT(event_t evt)
|
|
{
|
|
return evt == EVT_KEY_FIRST(KEY_DOWN) || evt == EVT_KEY_REPT(KEY_DOWN) ||
|
|
evt == EVT_KEY_FIRST(KEY_MINUS) || evt == EVT_KEY_REPT(KEY_MINUS) ||
|
|
evt == EVT_ROTARY_RIGHT;
|
|
}
|
|
|
|
inline bool IS_PREVIOUS_EVENT(event_t evt)
|
|
{
|
|
return evt == EVT_KEY_FIRST(KEY_UP) || evt == EVT_KEY_REPT(KEY_UP) ||
|
|
evt == EVT_KEY_FIRST(KEY_PLUS) || evt == EVT_KEY_REPT(KEY_PLUS) ||
|
|
evt == EVT_ROTARY_LEFT;
|
|
}
|
|
|
|
inline bool IS_NEXT_MOVE_EVENT(event_t evt)
|
|
{
|
|
return evt == EVT_KEY_FIRST(KEY_DOWN) || evt == EVT_KEY_REPT(KEY_DOWN) ||
|
|
evt == EVT_KEY_FIRST(KEY_RIGHT) || evt == EVT_KEY_REPT(KEY_RIGHT) ||
|
|
evt == EVT_KEY_FIRST(KEY_MINUS) || evt == EVT_KEY_REPT(KEY_MINUS) ||
|
|
evt == EVT_ROTARY_RIGHT;
|
|
}
|
|
|
|
inline bool IS_PREVIOUS_MOVE_EVENT(event_t evt)
|
|
{
|
|
return evt == EVT_KEY_FIRST(KEY_UP) || evt == EVT_KEY_REPT(KEY_UP) ||
|
|
evt == EVT_KEY_FIRST(KEY_LEFT) || evt == EVT_KEY_REPT(KEY_LEFT) ||
|
|
evt == EVT_KEY_FIRST(KEY_PLUS) || evt == EVT_KEY_REPT(KEY_PLUS) ||
|
|
evt == EVT_ROTARY_LEFT;
|
|
}
|
|
|
|
void pushEvent(event_t evt);
|
|
event_t getEvent();
|
|
|
|
void pauseEvents(event_t event);
|
|
void killEvents(event_t event);
|
|
void killAllEvents();
|
|
bool waitKeysReleased();
|
|
bool isEvent();
|
|
bool keyDown();
|
|
|
|
event_t getTrimEvent();
|
|
void pauseTrimEvents(event_t event);
|
|
void killTrimEvents(event_t event);
|
|
|
|
uint8_t keysGetState(uint8_t key);
|
|
uint8_t keysGetTrimState(uint8_t trim);
|
|
|
|
bool keysPollingCycle();
|
|
bool rotaryEncoderPollingCycle();
|
|
|
|
#if defined(USE_HATS_AS_KEYS)
|
|
void setHatsAsKeys(bool val);
|
|
bool getHatsAsKeys();
|
|
void setTransposeHatsForLUA(bool val);
|
|
#endif
|
|
|
|
struct InactivityData
|
|
{
|
|
uint16_t counter;
|
|
uint8_t sum;
|
|
};
|
|
|
|
extern InactivityData inactivity;
|