mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-10-25 07:58:29 -04:00
Due to vfs deprecation there is need to remove all vfs calls from code. This PR covers module gui. There are some modifications in other modules included which are necessary because of build system issues.
85 lines
2.4 KiB
C++
85 lines
2.4 KiB
C++
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
#pragma once
|
|
|
|
#include "InputEvent.hpp"
|
|
#include "Profile.hpp"
|
|
#include "bsp/keyboard/key_codes.hpp"
|
|
#include <cstdint>
|
|
#include <map>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <common_data/RawKey.hpp>
|
|
|
|
namespace gui
|
|
{
|
|
|
|
// TODO if neccessary `custom` keymap can be added her
|
|
enum class Keymaps
|
|
{
|
|
ABC,
|
|
abc,
|
|
digit,
|
|
};
|
|
|
|
class KeyBaseTranslation
|
|
{
|
|
public:
|
|
// previous pressed key (only for pressed keys), used for shortpress and longpress
|
|
RawKey prev_key_press = {};
|
|
// was previous key released? used for longpress only
|
|
bool prev_key_released = true;
|
|
// did previous key already timed out (and send longpress as a result)
|
|
bool prev_key_timedout = false;
|
|
InputEvent set(RawKey key);
|
|
/// timeout keypress (only press) - returns true on timeout'ed keypress
|
|
bool timeout(uint32_t time);
|
|
};
|
|
|
|
/// KeyPress translator
|
|
/// simplest 1:1 keys handling, used when application needs simplest key parsing possible
|
|
/// no keys behaviour analysis done here - just mapping
|
|
class KeyInputSimpleTranslation : public KeyBaseTranslation
|
|
{
|
|
public:
|
|
/// translate incomming key
|
|
InputEvent translate(RawKey key);
|
|
/// translate timeout - simulate key release
|
|
InputEvent translate(uint32_t timeout);
|
|
};
|
|
|
|
/// translator using & switching KeyMaps for use per widget basis ,called for selected widget, per widget basis
|
|
class KeyInputMappedTranslation : public KeyBaseTranslation
|
|
{
|
|
uint32_t times = 0;
|
|
|
|
public:
|
|
bool setProfile(std::string profileName);
|
|
uint32_t handle(RawKey key, const std::string &keymap);
|
|
uint32_t getTimes()
|
|
{
|
|
return times;
|
|
}
|
|
};
|
|
|
|
/// profiles cache - load once for all
|
|
class Profiles
|
|
{
|
|
private:
|
|
const char *profilesFolder = "assets/profiles";
|
|
std::map<std::string, gui::Profile> profiles = {};
|
|
Profile empty;
|
|
|
|
void loadProfile(const std::string &filepath);
|
|
std::vector<std::string> getProfilesList(std::string ext);
|
|
void init();
|
|
|
|
public:
|
|
static Profiles &get();
|
|
static Profile &get(const std::string &name);
|
|
};
|
|
|
|
} /* namespace gui */
|