add assign_methods(...) functionality to the FunctionBase

in make_*() methods you can assing your controller methods in such a way:
  assign_methods(this,
    by_param(L"paramoption",                     &MyController::MyMethod3),
    by_param(L"paramoption1", L"paramoption2",   &MyController::MyMethod2),
    by_param_post(L"paramoption", L"postoption", &MyController::MyMethod1)
  );
This commit is contained in:
2024-06-29 17:23:03 +02:00
parent b3bd9c6cf0
commit 7df78838aa

View File

@@ -250,6 +250,90 @@ protected:
WinixEzcHelper winix_ezc_helper;
/*
*
* in make_*() methods you can assing your controller methods in such a way:
* assign_methods(this,
* by_param(L"paramoption", &MyController::MyMethod3),
* by_param(L"paramoption1", L"paramoption2", &MyController::MyMethod2),
* by_param_post(L"paramoption", L"postoption", &MyController::MyMethod1)
* );
*
*/
template<typename Controller>
struct by_param {
const wchar_t * param1;
const wchar_t * param2; // can be null
void (Controller::*method)();
by_param(const wchar_t * param1, void (Controller::*method)())
{
this->param1 = param1;
this->param2 = nullptr;
this->method = method;
}
by_param(const wchar_t * param1, const wchar_t * param2, void (Controller::*method)())
{
this->param1 = param1;
this->param2 = param2;
this->method = method;
}
};
template<typename Controller>
struct by_param_post {
const wchar_t * param;
const wchar_t * post;
void (Controller::*method)();
by_param_post(const wchar_t * param, const wchar_t * post, void (Controller::*method)())
{
this->param = param;
this->post = post;
this->method = method;
}
};
template<typename ControllerName>
void assign_methods_internal(ControllerName * controller)
{
}
template<typename Controller, typename... AssignMethods>
void assign_methods_internal(Controller * controller, const by_param<Controller> & assign_by, AssignMethods... controller_methods)
{
if( cur->request->IsParam(assign_by.param1) && (!assign_by.param2 || cur->request->IsParam(assign_by.param2)) )
{
(controller->*assign_by.method)();
}
else
{
assign_methods_internal(controller, controller_methods...);
}
}
template<typename Controller, typename... AssignMethods>
void assign_methods_internal(Controller * controller, const by_param_post<Controller> & assign_by, AssignMethods... controller_methods)
{
if( cur->request->IsParam(assign_by.param) && (cur->request->IsPostVar(assign_by.post)) )
{
(controller->*assign_by.method)();
}
else
{
assign_methods_internal(controller, controller_methods...);
}
}
template<typename Controller, typename... AssignMethods>
void assign_methods(Controller * controller, AssignMethods... controller_methods)
{
assign_methods_internal(controller, controller_methods...);
}
};