Files
MuditaOS/module-gui/gui/input/Translator.hpp
T
jimmorrisson 14918dc4f9 [EGD-4925] Change new filesystem handling implementation in module-gui. (#1193)
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.
2020-12-16 15:23:11 +01:00

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 */