mirror of
https://github.com/hyprwm/hyprlang.git
synced 2024-11-16 18:25:57 +01:00
API: add a few convenience funcs needed by hyprland
This commit is contained in:
parent
26d2638f74
commit
ff30ccf3cb
3 changed files with 65 additions and 0 deletions
|
@ -151,6 +151,15 @@ namespace Hyprlang {
|
||||||
CConfigCustomValueType(PCONFIGCUSTOMVALUEHANDLERFUNC handler_, PCONFIGCUSTOMVALUEDESTRUCTOR dtor_, const char* defaultValue);
|
CConfigCustomValueType(PCONFIGCUSTOMVALUEHANDLERFUNC handler_, PCONFIGCUSTOMVALUEDESTRUCTOR dtor_, const char* defaultValue);
|
||||||
~CConfigCustomValueType();
|
~CConfigCustomValueType();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\since 0.3.0
|
||||||
|
|
||||||
|
get the data pointer for the custom value type.
|
||||||
|
*/
|
||||||
|
void* getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PCONFIGCUSTOMVALUEHANDLERFUNC handler = nullptr;
|
PCONFIGCUSTOMVALUEHANDLERFUNC handler = nullptr;
|
||||||
PCONFIGCUSTOMVALUEDESTRUCTOR dtor = nullptr;
|
PCONFIGCUSTOMVALUEDESTRUCTOR dtor = nullptr;
|
||||||
|
@ -210,6 +219,14 @@ namespace Hyprlang {
|
||||||
return {}; // unreachable
|
return {}; // unreachable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\since 0.3.0
|
||||||
|
|
||||||
|
a flag to notify whether this value has been set explicitly by the user,
|
||||||
|
or not.
|
||||||
|
*/
|
||||||
|
bool m_bSetByUser = false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// remember to also edit config.hpp if editing
|
// remember to also edit config.hpp if editing
|
||||||
enum eDataType {
|
enum eDataType {
|
||||||
|
@ -249,6 +266,13 @@ namespace Hyprlang {
|
||||||
*/
|
*/
|
||||||
void registerHandler(PCONFIGHANDLERFUNC func, const char* name, SHandlerOptions options);
|
void registerHandler(PCONFIGHANDLERFUNC func, const char* name, SHandlerOptions options);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\since 0.3.0
|
||||||
|
|
||||||
|
Unregister a handler.
|
||||||
|
*/
|
||||||
|
void unregisterHandler(const char* name);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Commence the config state. Config becomes immutable, as in
|
Commence the config state. Config becomes immutable, as in
|
||||||
no new values may be added or removed. Required for parsing.
|
no new values may be added or removed. Required for parsing.
|
||||||
|
@ -260,6 +284,13 @@ namespace Hyprlang {
|
||||||
*/
|
*/
|
||||||
void addSpecialCategory(const char* name, SSpecialCategoryOptions options);
|
void addSpecialCategory(const char* name, SSpecialCategoryOptions options);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\since 0.3.0
|
||||||
|
|
||||||
|
Remove a special category. Can be done dynamically.
|
||||||
|
*/
|
||||||
|
void removeSpecialCategory(const char* name);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Add a config value to a special category.
|
Add a config value to a special category.
|
||||||
*/
|
*/
|
||||||
|
@ -318,6 +349,13 @@ namespace Hyprlang {
|
||||||
return val->getValue();
|
return val->getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Check whether a special category with the provided key value exists
|
||||||
|
|
||||||
|
\since 0.3.0
|
||||||
|
*/
|
||||||
|
bool specialCategoryExistsForKey(const char* category, const char* key);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_bCommenced = false;
|
bool m_bCommenced = false;
|
||||||
|
|
||||||
|
|
|
@ -118,6 +118,8 @@ void CConfigValue::defaultFrom(SConfigDefaultValue& ref) {
|
||||||
throw "bad defaultFrom type";
|
throw "bad defaultFrom type";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_bSetByUser = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConfigValue::setFrom(std::any value) {
|
void CConfigValue::setFrom(std::any value) {
|
||||||
|
|
|
@ -110,6 +110,11 @@ void CConfig::addSpecialCategory(const char* name, SSpecialCategoryOptions optio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CConfig::removeSpecialCategory(const char* name) {
|
||||||
|
std::erase_if(impl->specialCategories, [name](const auto& other) { return other->name == name; });
|
||||||
|
std::erase_if(impl->specialCategoryDescriptors, [name](const auto& other) { return other->name == name; });
|
||||||
|
}
|
||||||
|
|
||||||
void CConfig::applyDefaultsToCat(SSpecialCategory& cat) {
|
void CConfig::applyDefaultsToCat(SSpecialCategory& cat) {
|
||||||
for (auto& [k, v] : cat.descriptor->defaultValues) {
|
for (auto& [k, v] : cat.descriptor->defaultValues) {
|
||||||
cat.values[k].defaultFrom(v);
|
cat.values[k].defaultFrom(v);
|
||||||
|
@ -340,6 +345,8 @@ CParseResult CConfig::configSetValueSafe(const std::string& command, const std::
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VALUEIT->second.m_bSetByUser = true;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -594,4 +601,22 @@ CConfigValue* CConfig::getSpecialConfigValuePtr(const char* category, const char
|
||||||
|
|
||||||
void CConfig::registerHandler(PCONFIGHANDLERFUNC func, const char* name, SHandlerOptions options) {
|
void CConfig::registerHandler(PCONFIGHANDLERFUNC func, const char* name, SHandlerOptions options) {
|
||||||
impl->handlers.push_back(SHandler{name, options, func});
|
impl->handlers.push_back(SHandler{name, options, func});
|
||||||
|
}
|
||||||
|
|
||||||
|
void CConfig::unregisterHandler(const char* name) {
|
||||||
|
std::erase_if(impl->handlers, [name](const auto& other) { return other.name == name; });
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CConfig::specialCategoryExistsForKey(const char* category, const char* key) {
|
||||||
|
for (auto& sc : impl->specialCategories) {
|
||||||
|
if (sc->isStatic)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (sc->name != category || std::string{std::any_cast<const char*>(sc->values[sc->key].getValue())} != key)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
Loading…
Reference in a new issue