#pragma execution_character_set("utf-8") #include "DataManager.h" #include "M_ProjectDAO.h" #include "ProjectData.h" #include "global.h" #include "DictItem.h" #include "DictData.h" DataManager& GetDataRoot() { static DataManager dataMgr; return dataMgr; } DataManager::DataManager() { // pTheDBPlatform = new DBPlatformSpace::DBPlatformNew(); platformData.insert(DataType::project, mapProject); platformData.insert(DataType::dataModel, mapDataModel); platformData.insert(DataType::dataPack, mapDataPack); platformData.insert(DataType::dataClass, mapDataClass); platformData.insert(DataType::dataAttribute, mapDataAttribute); } DataManager::~DataManager() { if (pTheDBPlatform) { delete pTheDBPlatform; pTheDBPlatform = nullptr; } // //清空最近打开项目 // while (!lastProject.isEmpty()) // { // DPData* pdata = lastProject.back(); // delete pdata; // pdata = nullptr; // } } //添加一个下层数据对象 bool DataManager::addChild(DPData* pNewData) { //数据存入数据库 if (pNewData->saveSelf()) { pNewData->_id = pNewData->_pDBDAO->_ID; //保存成功 //添加数据到内存数据模型 _childrenMap.insert(pNewData->_id, pNewData); //加入数据map insertDataMap(DataType::project, pNewData->_id, pNewData); return true; } else { //保存失败 return false; } } /*删除一个项目*/ bool DataManager::deleteChild(unsigned int id) { if (_childrenMap.remove(id)) { return true; } return false; } /*获取所有下层数据对象*/ void DataManager::getAllChildren(DPData*, bool) { const int MINCOUNT = 2; //最多显示两个项目 using namespace DBPlatformSpace; //获取所有的项目 std::list projectList; ResultMsg rm = M_ProjectDAO::FindAll(projectList); if (rm.rCode != 0) { LOG(INFO) << CommonHelper::utf8ToStdString("M_ProjectDAO::FindAll failed"); LOG(INFO) << rm.rMsg; return; } LOG(INFO) << CommonHelper::utf8ToStdString("M_ProjectDAO::FindAll success"); //最近打开项目最多两个,如果只有一个显示一个 int listSize = static_cast(projectList.size()); int lastCount = listSize> MINCOUNT ? MINCOUNT : listSize; int addLastlist = 0; lastProject.clear(); for (list::iterator it = projectList.begin(); it != projectList.end(); ++it) { ProjectData* pNew; bool addto = false; if (_childrenMap.contains((*it)->_ID)) { pNew = qobject_cast(_childrenMap.value((*it)->_ID)); } else { pNew = new ProjectData(); addto = true; } pNew->loadData(*it); pNew->_parent = this; if (addto) { _childrenMap.insert(pNew->_id, pNew); insertDataMap(DataType::project, pNew->_id, pNew); } if (addLastlist < lastCount) { lastProject.append(pNew); addLastlist++; } } } void DataManager::insertDataMap(DataType type, unsigned int id, DPData* pData) { platformData[type].insert(id, pData); } void DataManager::deleteInDataMap(DataType type, unsigned int id) { platformData[type].remove(id); } DPData* DataManager::findObjectById(DataType type, int id) { QMap map = platformData.value(type); if (map.contains(id)) { return platformData.value(type).value(id); } else { return nullptr; } } //转换类型 DataManager::DataType DataManager::transformType(int type) { if (type == g_TYPE_DATAPACK) { return DataManager::DataType::dataPack; } else if (type == g_TYPE_DATACLASS) { return DataManager::DataType::dataClass; } else if (type == g_TYPE_DATAATTRUBUTE) { return DataManager::DataType::dataAttribute; } else if (type == g_TYPE_SCENEINFO) { return DataManager::DataType::scene; } return DataManager::DataType::project; } //指定数据模型下,查找数据(type)的指定属性(名称或名称标识)值的数据 //返回同名数据 DPData* DataManager::findobjectByNameInDatamodel(int type, QString propertyName, QString name, int dataModelId) { //目标类型数据map QMap dstDataMap = platformData.value(transformType(type)); QMap::iterator it = dstDataMap.begin(); while (it != dstDataMap.end()) { QString vName = (*it)->property(CommonHelper::qstringToString(propertyName)).toString(); if (vName == name) { DPData* pData = *it; //看是否是同一数据模型 if (pData->getDataModelOwner()->_id == dataModelId ) { return (*it); } } it++; } return nullptr; } void DataManager::getDataMap(DataType type, QMap& map) { map = platformData.value(type); } void DataManager::clearAllProject() { qDeleteAll(_childrenMap); _childrenMap.clear(); }