Measure: Reduce boilerplate code by adding some helper methods

This commit is contained in:
hlorus
2024-07-17 17:53:12 +02:00
parent 55bcd109ac
commit 60d69d706d
10 changed files with 93 additions and 190 deletions

View File

@@ -62,6 +62,27 @@ namespace App {
return empty;
}
MeasureHandler MeasureManager::getMeasureHandler(const App::MeasureSelectionItem& selectionItem) {
auto objT = selectionItem.object;
App::DocumentObject* sub = objT.getSubObject();
const char* className = sub->getTypeId().getName();
std::string mod = Base::Type::getModuleName(className);
return getMeasureHandler(mod.c_str());
}
MeasureElementType MeasureManager::getMeasureElementType(const App::MeasureSelectionItem& selectionItem) {
auto handler = getMeasureHandler(selectionItem);
if (handler.module.empty()) {
return App::MeasureElementType::INVALID;
}
auto objT = selectionItem.object;
return handler.typeCb(objT.getObject(), objT.getSubName().c_str());
}
void MeasureManager::addMeasureType(MeasureType* measureType) {
_mMeasureTypes.push_back(measureType);
}

View File

@@ -93,6 +93,8 @@ public:
static void addMeasureHandler(const char* module, MeasureTypeMethod typeCb);
static bool hasMeasureHandler(const char* module);
static MeasureHandler getMeasureHandler(const char* module);
static MeasureHandler getMeasureHandler(const App::MeasureSelectionItem& selectionItem);
static MeasureElementType getMeasureElementType(const App::MeasureSelectionItem& selectionItem);
static void addMeasureType(MeasureType* measureType);
static void addMeasureType(std::string id, std::string label, std::string measureObj, MeasureValidateMethod validatorCb, MeasurePrioritizeMethod prioritizeCb);
static void addMeasureType(const char* id, const char* label, const char* measureObj, MeasureValidateMethod validatorCb, MeasurePrioritizeMethod prioritizeCb);