240 lines
6.3 KiB
C++
240 lines
6.3 KiB
C++
#include "LOGIC/Lgc_Func_Button.h"
|
|
|
|
#include "LOGIC/Lgc_Core.h"
|
|
#include "LOGIC/Lgc_Func_Button_Private.h"
|
|
#include "MID/Mid_Def.h"
|
|
#include <algorithm>
|
|
|
|
QString Lgc_FunctionButton_GetUsageShortText(quint16 Usage)
|
|
{
|
|
switch (Usage)
|
|
{
|
|
case 0x0053: return QStringLiteral("Num");
|
|
case 0x0054: return QStringLiteral("/");
|
|
case 0x0055: return QStringLiteral("*");
|
|
case 0x0056: return QStringLiteral("-");
|
|
case 0x0057: return QStringLiteral("+");
|
|
case 0x0058: return QStringLiteral("Enter");
|
|
case 0x0059: return QStringLiteral("1");
|
|
case 0x005A: return QStringLiteral("2");
|
|
case 0x005B: return QStringLiteral("3");
|
|
case 0x005C: return QStringLiteral("4");
|
|
case 0x005D: return QStringLiteral("5");
|
|
case 0x005E: return QStringLiteral("6");
|
|
case 0x005F: return QStringLiteral("7");
|
|
case 0x0060: return QStringLiteral("8");
|
|
case 0x0061: return QStringLiteral("9");
|
|
case 0x0062: return QStringLiteral("0");
|
|
case 0x0063: return QStringLiteral(".");
|
|
default:
|
|
return Mid_GetKeyboardUsageText(Usage);
|
|
}
|
|
}
|
|
|
|
QString Lgc_FunctionButton_GetFeatureTypeText(Lgc_FunctionFeature_Type Type)
|
|
{
|
|
switch (Type)
|
|
{
|
|
case Lgc_FunctionFeature_Type::KeyCombination:
|
|
return QStringLiteral("快捷键");
|
|
|
|
case Lgc_FunctionFeature_Type::KeySequence:
|
|
return QStringLiteral("快捷键序列");
|
|
|
|
case Lgc_FunctionFeature_Type::Website:
|
|
return QStringLiteral("打开网址");
|
|
|
|
default:
|
|
return QStringLiteral("未知类型");
|
|
}
|
|
}
|
|
|
|
QVector<quint16> Lgc_FunctionButton_GetConfigurableUsages()
|
|
{
|
|
return {
|
|
0x0053, 0x0054, 0x0055, 0x0056,
|
|
0x005F, 0x0060, 0x0061, 0x0057,
|
|
0x005C, 0x005D, 0x005E,
|
|
0x0059, 0x005A, 0x005B, 0x0058,
|
|
0x0062, 0x0063
|
|
};
|
|
}
|
|
|
|
QVector<int> Lgc_FunctionButton_GetFeatureIdList(const Lgc_FunctionButton_Config& Config)
|
|
{
|
|
QVector<int> FeatureIdList = Config.FeatureMap.keys().toVector();
|
|
std::sort(FeatureIdList.begin(), FeatureIdList.end());
|
|
return FeatureIdList;
|
|
}
|
|
|
|
Lgc_FunctionFeature_Definition Lgc_FunctionButton_GetFeature(
|
|
const Lgc_FunctionButton_Config& Config,
|
|
int FeatureId)
|
|
{
|
|
return Config.FeatureMap.value(FeatureId);
|
|
}
|
|
|
|
QString Lgc_FunctionButton_GetFeatureName(const Lgc_FunctionFeature_Definition& Feature)
|
|
{
|
|
if (!Feature.Name.trimmed().isEmpty())
|
|
{
|
|
return Feature.Name.trimmed();
|
|
}
|
|
return Feature.Id > 0 ? QStringLiteral("功能%1").arg(Feature.Id) : QStringLiteral("未命名功能");
|
|
}
|
|
|
|
int Lgc_FunctionButton_AddFeature(Lgc_FunctionButton_Config* p_Config)
|
|
{
|
|
if (p_Config == nullptr)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int FeatureId = 1;
|
|
while (p_Config->FeatureMap.contains(FeatureId))
|
|
{
|
|
++FeatureId;
|
|
}
|
|
p_Config->NextFeatureId = FeatureId + 1;
|
|
|
|
Lgc_FunctionFeature_Definition Feature;
|
|
Feature.Id = FeatureId;
|
|
Feature.Name = QStringLiteral("功能%1").arg(FeatureId);
|
|
Feature.Type = Lgc_FunctionFeature_Type::KeyCombination;
|
|
p_Config->FeatureMap.insert(FeatureId, Feature);
|
|
return FeatureId;
|
|
}
|
|
|
|
void Lgc_FunctionButton_RemoveFeature(Lgc_FunctionButton_Config* p_Config, int FeatureId)
|
|
{
|
|
if ((p_Config == nullptr) || (FeatureId <= 0))
|
|
{
|
|
return;
|
|
}
|
|
|
|
p_Config->FeatureMap.remove(FeatureId);
|
|
if (p_Config->FeatureMap.isEmpty())
|
|
{
|
|
p_Config->NextFeatureId = 1;
|
|
}
|
|
else if (FeatureId < p_Config->NextFeatureId)
|
|
{
|
|
p_Config->NextFeatureId = FeatureId;
|
|
}
|
|
|
|
auto It = p_Config->UsageFeatureIdMap.begin();
|
|
while (It != p_Config->UsageFeatureIdMap.end())
|
|
{
|
|
if (It.value() == FeatureId)
|
|
{
|
|
It = p_Config->UsageFeatureIdMap.erase(It);
|
|
}
|
|
else
|
|
{
|
|
++It;
|
|
}
|
|
}
|
|
}
|
|
|
|
void Lgc_FunctionButton_SetFeature(
|
|
Lgc_FunctionButton_Config* p_Config,
|
|
const Lgc_FunctionFeature_Definition& Feature)
|
|
{
|
|
if ((p_Config == nullptr) || (Feature.Id <= 0))
|
|
{
|
|
return;
|
|
}
|
|
|
|
p_Config->FeatureMap.insert(Feature.Id, Feature);
|
|
if (p_Config->NextFeatureId <= Feature.Id)
|
|
{
|
|
p_Config->NextFeatureId = Feature.Id + 1;
|
|
}
|
|
}
|
|
|
|
int Lgc_FunctionButton_GetUsageFeatureId(
|
|
const Lgc_FunctionButton_Config& Config,
|
|
quint16 Usage)
|
|
{
|
|
const int FeatureId = Config.UsageFeatureIdMap.value(Usage, 0);
|
|
return Config.FeatureMap.contains(FeatureId) ? FeatureId : 0;
|
|
}
|
|
|
|
void Lgc_FunctionButton_SetUsageFeatureId(
|
|
Lgc_FunctionButton_Config* p_Config,
|
|
quint16 Usage,
|
|
int FeatureId)
|
|
{
|
|
if (p_Config == nullptr)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ((FeatureId <= 0) || !p_Config->FeatureMap.contains(FeatureId))
|
|
{
|
|
p_Config->UsageFeatureIdMap.remove(Usage);
|
|
return;
|
|
}
|
|
|
|
p_Config->UsageFeatureIdMap.insert(Usage, FeatureId);
|
|
}
|
|
|
|
bool Lgc_FunctionButton_HasUsageFeature(
|
|
const Lgc_FunctionButton_Config& Config,
|
|
quint16 Usage)
|
|
{
|
|
return Lgc_FunctionButton_GetUsageFeatureId(Config, Usage) > 0;
|
|
}
|
|
|
|
bool Lgc_FunctionButton_SendUsageToWindows(quint16 Usage, bool IsPressed)
|
|
{
|
|
const Lgc_FunctionButton_Struct_WindowsKey Key = Lgc_FunctionButton_GetWindowsKey(Usage);
|
|
return Lgc_FunctionButton_SendWindowsKey(Key, IsPressed);
|
|
}
|
|
|
|
bool Lgc_FunctionButton_RunBinding(
|
|
Lgc_Core_Struct_State* p_State,
|
|
quint16 Usage,
|
|
QString* p_TextStatus)
|
|
{
|
|
if ((p_State == nullptr) || (p_TextStatus == nullptr))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
*p_TextStatus = QString();
|
|
const int FeatureId =
|
|
Lgc_FunctionButton_GetUsageFeatureId(p_State->FunctionButtonConfig, Usage);
|
|
if (FeatureId <= 0)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
const Lgc_FunctionFeature_Definition Feature =
|
|
Lgc_FunctionButton_GetFeature(p_State->FunctionButtonConfig, FeatureId);
|
|
if (Feature.Id <= 0)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
switch (Feature.Type)
|
|
{
|
|
case Lgc_FunctionFeature_Type::KeyCombination:
|
|
Lgc_FunctionButton_RunKeyCombination(Feature, Usage, p_TextStatus);
|
|
return true;
|
|
|
|
case Lgc_FunctionFeature_Type::KeySequence:
|
|
Lgc_FunctionButton_RunKeySequence(Feature, Usage, p_TextStatus);
|
|
return true;
|
|
|
|
case Lgc_FunctionFeature_Type::Website:
|
|
Lgc_FunctionButton_RunOpenWebsite(Feature, p_TextStatus);
|
|
return true;
|
|
|
|
default:
|
|
*p_TextStatus = QStringLiteral("%1 绑定了未知功能。")
|
|
.arg(Lgc_FunctionButton_GetFeatureName(Feature));
|
|
return true;
|
|
}
|
|
}
|