#ifndef PB_STEPEXPORTATTRIBUTESASASCII_H #define PB_STEPEXPORTATTRIBUTESASASCII_H #include #include "ct_step/abstract/ct_abstractstep.h" #include "ct_itemdrawable/ct_loopcounter.h" class PB_StepExportAttributesAsASCII: public CT_AbstractStep { Q_OBJECT using SuperClass = CT_AbstractStep; public: PB_StepExportAttributesAsASCII(); QString description() const final; QString detailledDescription() const final; QString inputDescription() const final; QString outputDescription() const final; QString detailsDescription() const final; CT_VirtualAbstractStep* createNewInstance() const final; protected: void declareInputModels(CT_StepInModelStructureManager& manager) final; void fillPostInputConfigurationDialog(CT_StepConfigurableDialog* postInputConfigDialog) final; void declareOutputModels(CT_StepOutModelStructureManager& manager) final; void compute() final; private: CT_HandleInResultGroup<> mInResult; CT_HandleInStdZeroOrMoreGroup mInRootGroup; CT_HandleInStdGroup<> mInGroupMain; CT_HandleInSingularItem mInItemWithAttribute; // multiple CT_HandleInStdItemAttribute mInItemAttribute; // multiple CT_HandleInResultGroup<0,1> mInResultCounter; CT_HandleInStdGroup<> mInGroupCounter; CT_HandleInSingularItem mInLoopCounter; QList _modelsKeys; QList _modelsKeysWithoutXOrYAttribute; QMap _names; QMap _shortNames; QMap _itemNames; bool _inLoop; // Step parameters bool _replaceSpecialCharacters; bool _shortenNames; QStringList _outASCIIFileName; QString createExportBaseName(bool& first, bool &inLoop) const; template void computeModelsKeysAndNames(InHandleT& handle) { auto it = handle.template iterateSelectedOutputModels(mInResult); auto begin = it.begin(); auto end = it.end(); while(begin != end) { if(isStopped()) return; const CT_OutAbstractItemAttributeModel* attModel = (*begin); const CT_OutAbstractModel* itemModel = static_cast(attModel->parentModel()); computeModelsKeysAndNamesForModels(itemModel, attModel); ++begin; } } void computeModelsKeysAndNamesForModels(const CT_OutAbstractModel* itemModel, const CT_OutAbstractItemAttributeModel* attModel); QString computeKeyForModels(const CT_OutAbstractModel* itemModel, const CT_OutAbstractModel* attModel) const; bool exportInAscii(QScopedPointer& fileASCII, QScopedPointer& streamASCII, const bool firstTurnFromCounter); void addToIndexedAttributesCollection(const CT_AbstractSingularItemDrawable* item, const CT_AbstractItemAttribute* attribute, QMap >& indexedAttributes) const; void replaceSpecialCharacters(QMap &names) const; }; #endif // PB_STEPEXPORTATTRIBUTESASASCII_H