Repository for OpenCV's extra modules
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

116 lines
2.0 KiB

#include "data_controller.hpp"
#include <stdexcept>
namespace cvv
{
namespace impl
{
namespace
{
class CallEquality
{
public:
CallEquality(size_t Id) : Id{ Id }
{
}
bool operator()(const std::unique_ptr<Call> &call) const
{
return call->getId() == Id;
}
private:
size_t Id;
};
}
void DataController::addCall(std::unique_ptr<Call> call)
{
auto ref = util::makeRef(*call);
calls.push_back(std::move(call));
viewController.addCall(ref);
callUI();
}
void DataController::removeCall(size_t Id)
{
auto it = std::find_if(calls.begin(), calls.end(), CallEquality{ Id });
if (it == calls.end())
{
throw std::invalid_argument{ "there is no call with this id" };
}
calls.erase(it);
}
const Call &DataController::getCall(size_t Id) const
{
auto it = std::find_if(calls.begin(), calls.end(), CallEquality{ Id });
if (it == calls.end())
{
throw std::invalid_argument{ "there is no call with this id" };
}
return **it;
}
Call &DataController::getCall(size_t Id)
{
auto it = std::find_if(calls.begin(), calls.end(), CallEquality{ Id });
if (it == calls.end())
{
throw std::invalid_argument{ "there is no call with this id" };
}
return **it;
}
bool DataController::hasCall(size_t Id)
{
auto it = std::find_if(calls.begin(), calls.end(), CallEquality{ Id });
return it != calls.end();
}
size_t DataController::numCalls() const
{
return calls.size();
}
void DataController::callUI()
{
viewController.exec();
}
void DataController::lastCall()
{
viewController.showExitProgramButton();
callUI();
}
/**
* @brief Actual implementation of the global DataController.
*
* This is required to be able to delete it.
*/
static std::unique_ptr<DataController> &realSingleton()
{
static std::unique_ptr<DataController> var = nullptr;
return var;
}
void deleteDataController()
{
realSingleton().reset();
}
DataController &dataController()
{
auto& controller = realSingleton();
if(!realSingleton().get())
{
controller = util::make_unique<DataController>();
}
return *controller;
}
}
} // namespaces cvv::impl