#include "LOGIC/Lgc_Func_Button.h" #include "LOGIC/Lgc_Core.h" #include "LOGIC/Lgc_Func_Button_Private.h" #include "MID/Mid_Def.h" #include 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 Lgc_FunctionButton_GetConfigurableUsages() { return { 0x0053, 0x0054, 0x0055, 0x0056, 0x005F, 0x0060, 0x0061, 0x0057, 0x005C, 0x005D, 0x005E, 0x0059, 0x005A, 0x005B, 0x0058, 0x0062, 0x0063 }; } QVector Lgc_FunctionButton_GetFeatureIdList(const Lgc_FunctionButton_Config& Config) { QVector 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; } }