mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-25 06:18:18 -05:00
Completely independent input language files and display language files. Input language files are now loaded based on number of files in "profiles" folder. InputLanguageSettings window now shows input languages based on their "filetype" value andfiles in "profiles" folder.
83 lines
2.3 KiB
C++
83 lines
2.3 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);
|
|
};
|
|
|
|
/// profiles cache - load once for all
|
|
class Profiles
|
|
{
|
|
private:
|
|
std::map<std::string, gui::Profile> profilesList = {};
|
|
|
|
void loadProfile(const std::string &filepath);
|
|
std::vector<std::string> getProfilesNames();
|
|
void init();
|
|
Profile empty;
|
|
|
|
static Profiles &get();
|
|
|
|
public:
|
|
std::vector<std::string> getAvailableInputLanguages();
|
|
Profile &get(const std::string &name);
|
|
};
|
|
|
|
/// translator using & switching KeyMaps for use per widget basis ,called for selected widget, per widget basis
|
|
class KeyInputMappedTranslation : public KeyBaseTranslation
|
|
{
|
|
uint32_t times = 0;
|
|
Profiles profiles;
|
|
|
|
public:
|
|
uint32_t handle(RawKey key, const std::string &keymap);
|
|
uint32_t getTimes() const noexcept;
|
|
};
|
|
|
|
} /* namespace gui */
|