#ifndef DATAMANAGER_H #define DATAMANAGER_H #include "datahpp/elemPropertyData.h" #include "datahpp/readJsonSrc.h" class DataManager { public: static DataManager* getInstance(); //去除文件路径,获取文件名字 static QString getFileName(QString filePath); //配置模板 ///获取模板中的fields,key为模板名字,name为模板中的某一选项名 QVector getTempFields(QString key,QString name); ///更新模板 void updateTempData(); enum class ListType{Anim,CollAnim,Pool,AnimType,StatusVal,Events,Actions,PoolType,Elem}; ///获取某一元素对应的动画、收集动画、容器列表 QStringList getList(QString elem,ListType listType); ///检查是否存在此元素 bool existElem(QString elemName); void addElem(QString elemName); void delElem(QString elemName); void changeElemName(QString oriName,QString newName); //基础属性值修改 ///修改标识值 void changeMarkValue(QString elem,QString val); ///修改基础属性位置 void changePos(QString elem,QString val); ///修改最大层数 void changeMaxLayer(QString elem,QString val); void changeScore(QString elem,QString val); void changeDropConfig(QString elem,int index); void changeIconPath(QString elem,QString iconPath); void changeLinkedState(QString elem,int state); void changeMoveAwayState(QString elem,int state); void changeIsContainerState(QString elem,int state); void changeBeatByOrderState(QString elem, int state); //基础属性值获取 QString getMarkValue(QString elem); QString getPos(QString elem); QString getMaxLayer(QString elem); QString getScore(QString elem); int getDropConfig(QString elem); QString getIconPath(QString elem); bool getLinkedState(QString elem); bool getMoveAwayState(QString elem); bool getIsContainerState(QString elem); bool getBeatByOrderState(QString elem); //状态与效果动画 QVector getAnimVec(QString elem); QStringList getTimelineList(QString elem,QString filePath); bool existAnim(QString elem,QString animName); void addAnim(QString elem,QString animName); void delAnim(QString elem,int index); void changeAnimTable(QString elem,QString newData,int row,int column); void copyAnim(QString elem,QString animName,int copyIndex); //收集动画 QString getAnimType(QString elem,int index); void setAnimType(QString elem, QString newType, int index); QMap getCollAnimDataMap(QString elem,int index); void setCollAnimDataMapVal(QString elem,int index,QString key,QString val); bool existCollAnim(QString elem,QString collAnimName); void addCollAnim(QString elem,QString collAnimName); void delCollAnim(QString elem,int index); void changeCollAnimName(QString elem,int index,QString newName); //状态配置 ElemPropertyData::StatusConfig getStatusConfigData(QString elem,int index); void changeEventTable(QString elem,QString newData,int statusIndex, int row,int column); void changeAction(QString elem,QString newData,int statusIndex); void changeActionConfigData(QString elem,int statusIndex,QMap data); void setEventTableCheckBox(QString elem,int statusIndex,int row,int column,int state); bool existStatusVal(QString elem,QString statusVal); void addStatus(QString elem,QString statusVal); void delStatus(QString elem,int index); void changeStatusVal(QString elem,int index,QString newVal); enum class StatusDataType {InitAnim,ClickAnim,CollTar,CollAnim}; ///改变基础属性值(表格以外) void changeStatusFundVal(QString elem,StatusDataType type,QString newData,int index); enum class CheckType{MultiHit,Dropable,BeatSubitem,NeedColl,Color,Lattice}; ///改变基础属性中的勾选值 void setFundCheckBox(QString elem,int statusIndex,CheckType checkType,int state); void addEvent(QString elem,int index); void delEvent(QString elem,int statusIndex,int row); void updateAllDropState(QString elem,bool state); void copyStatus(QString elem,QString statusVal,int copyIndex); //容器池 ElemPropertyData::ContainerConfig getContainData(QString elem,int index); void changeContainTable(QString elem,int index,int row,int column,QString data); bool existPool(QString elem,QString poolName); void addPool(QString elem,QString poolName); void delPool(QString elem,int index); void changePoolName(QString elem,int index,QString newName); bool existKey(QString elem,int poolIndex,QString key); void addKey(QString elem,int poolIndex,QString keyName); void delKey(QString elem,int poolIndex,int row); void changeContainType(QString elem,int poolIndex,QString poolType); void copyKey(QString elem,int poolIndex,QString keyName,int copyIndex); //子元素 QVector getChildElemTable(QString elem); void changeChildElemTable(QString elem,int row,int column,QString data); bool existChildElem(QString elem,QString childElemName); void addChildElem(QString elem,QString childElemName); void delChildElem(QString elem,int index); //数据保存 bool loadData(); bool saveData(); void read(const QJsonObject &json); void write(QJsonObject &json) const; //导出数据 bool exportData(QString fileName); QString getExportMessage(); static QVector> getGridPos(QString str); QString getTempId(QString key,QString name); QString getTempFieldId(QString key,QString name,QString fieldName); private: DataManager(); ~DataManager(); DataManager(const DataManager &dataManager); QMap elements; ReadJsonSrc* jsonTemp; QString exportMessage; ///检查当前数据导出是否合法 bool exportIsValid(); ///寻找标识值是否重复出现 bool findElemLabelName(QString elem,QString labelName); }; #endif // DATAMANAGER_H