mirror of
https://github.com/outbackdingo/UltraGrid.git
synced 2026-03-20 17:40:12 +00:00
60 lines
1.3 KiB
C++
60 lines
1.3 KiB
C++
#include "widget_ui.hpp"
|
|
|
|
WidgetUi::WidgetUi(Settings *settings, const std::string &opt) :
|
|
settings(settings),
|
|
opt(opt)
|
|
{
|
|
}
|
|
|
|
WidgetUi::~WidgetUi(){
|
|
for(auto& i : registeredCallbacks){
|
|
settings->getOption(i.first).removeOnChangeCallback(i.second);
|
|
}
|
|
}
|
|
|
|
void WidgetUi::setOpt(const std::string &opt){
|
|
this->opt = opt;
|
|
updateUiState();
|
|
registerCallback();
|
|
}
|
|
|
|
void WidgetUi::optChangeCallbackStatic(Option& opt, bool subopt, void *opaque){
|
|
static_cast<WidgetUi *>(opaque)->optChangeCallback(opt, subopt);
|
|
}
|
|
|
|
void WidgetUi::registerCustomCallback(const std::string &option,
|
|
Option::Callback callback,
|
|
std::unique_ptr<ExtraCallbackData>&& extraDataPtr)
|
|
{
|
|
if(option == "")
|
|
return;
|
|
|
|
std::pair<std::string, Option::Callback> elToInsert(option, callback);
|
|
|
|
auto it = std::find(registeredCallbacks.begin(),
|
|
registeredCallbacks.end(), elToInsert);
|
|
if(it != registeredCallbacks.end()){
|
|
return;
|
|
}
|
|
|
|
|
|
settings->getOption(option).addOnChangeCallback(callback);
|
|
registeredCallbacks.push_back(elToInsert);
|
|
|
|
if(extraDataPtr)
|
|
extraData.emplace_back(std::move(extraDataPtr));
|
|
|
|
}
|
|
|
|
void WidgetUi::registerCallback(const std::string &option){
|
|
if(option == "")
|
|
return;
|
|
|
|
Option::Callback callback(&WidgetUi::optChangeCallbackStatic, this);
|
|
registerCustomCallback(option, callback);
|
|
}
|
|
|
|
void WidgetUi::registerCallback(){
|
|
registerCallback(opt);
|
|
}
|