diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fba87998..1dd8774a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,7 +19,7 @@ FILE(GLOB_RECURSE CPP_FILES ./*.cpp common/*.cpp model/*.cpp app/*.cpp) FILE(GLOB_RECURSE CC_FILES ./*.cc) FILE(GLOB_RECURSE UI_FILES ./*.ui) FILE(GLOB_RECURSE QRC_FILES ./*.qrc) -FILE(GLOB_RECURSE RC_FILES res/*.rc) +FILE(GLOB_RECURSE RC_FILES ./res/*.rc) SET( TS_FILES diff --git a/src/res/dyt.rc b/src/res/dyt.rc index e69de29b..94305d7c 100644 --- a/src/res/dyt.rc +++ b/src/res/dyt.rc @@ -0,0 +1 @@ +IDI_ICON ICON DISCARDABLE ".\\res\\sys_icon.ico" diff --git a/src/res/sys_icon.ico b/src/res/sys_icon.ico new file mode 100644 index 00000000..1e673f96 Binary files /dev/null and b/src/res/sys_icon.ico differ diff --git a/src/translations/Dyt_zh_CN.ts b/src/translations/Dyt_zh_CN.ts index 908a6616..47e41ac9 100644 --- a/src/translations/Dyt_zh_CN.ts +++ b/src/translations/Dyt_zh_CN.ts @@ -1704,43 +1704,47 @@ - - 1 - - - - + Path - - d:/hysw + + input workspace name - + + select workspace save path + + + + ... - + describe - + Sure - + Cancel - + + + + + warning @@ -1750,12 +1754,32 @@ - + + current path is contains current folder, do you want to overwrite it? + + + + + removeRecursively failed + + + + + mkpath failed + + + + name is exits - + + create workSpace failed + + + + save spaceWork directory diff --git a/src/ui/WorkSpace/WorkSpaceDlg.cpp b/src/ui/WorkSpace/WorkSpaceDlg.cpp index a1ecd957..df3d4283 100644 --- a/src/ui/WorkSpace/WorkSpaceDlg.cpp +++ b/src/ui/WorkSpace/WorkSpaceDlg.cpp @@ -50,6 +50,30 @@ void WorkSpaceDlg::OnSure() { return; } + QString workspacePath = QString("%1/%2").arg(savePath).arg(name); + QDir dir(workspacePath); + if (dir.exists()) { + LOG_WARN("current path is contains current folder, {}", workspacePath.toStdString()); + if (QMessageBox::warning(this, tr("warning"), tr("current path is contains current folder, do you want to overwrite it?"), + QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) { + return; + } + + if (!dir.removeRecursively()) { + LOG_WARN("removeRecursively {} failed", workspacePath.toStdString()); + QMessageBox::warning(this, tr("warning"), tr("removeRecursively failed")); + return; + } + + WorkSpaceManager::Get().Remove(name); + } + + if (!dir.mkpath(workspacePath)) { + LOG_WARN("mkpath {} failed", workspacePath.toStdString()); + QMessageBox::warning(this, tr("warning"), tr("mkpath failed")); + return; + } + if (WorkSpaceManager::Get().Contains(name)) { LOG_WARN("name is exits"); QMessageBox::warning(this, tr("warning"), tr("name is exits")); @@ -58,10 +82,14 @@ void WorkSpaceDlg::OnSure() { WorkSpace* workSpace = WorkSpaceManager::Get().GetOrCreate(name); workSpace->SetDescribe(ui->etDescribe->toPlainText()); - //workSpace->Save(savePath); + workspacePath += QString("/%1.dyt").arg(name); + if (!workSpace->Save(workspacePath)) { + LOG_ERROR("save workSpace failed"); + QMessageBox::warning(this, tr("warning"), tr("create workSpace failed")); + return; + } emit WorkSpaceManager::Get().WorkSpaceChanged(workSpace); - workSpace->BuildDefault(); accept(); } diff --git a/src/ui/WorkSpace/WorkSpaceDlg.ui b/src/ui/WorkSpace/WorkSpaceDlg.ui index aea009e8..cc58cbd1 100644 --- a/src/ui/WorkSpace/WorkSpaceDlg.ui +++ b/src/ui/WorkSpace/WorkSpaceDlg.ui @@ -26,7 +26,10 @@ - 1 + + + + input workspace name @@ -44,11 +47,14 @@ - d:/hysw + true + + select workspace save path + diff --git a/src/workspace/WorkSpace.cpp b/src/workspace/WorkSpace.cpp index 8306cc37..74cf36c0 100644 --- a/src/workspace/WorkSpace.cpp +++ b/src/workspace/WorkSpace.cpp @@ -157,18 +157,6 @@ bool WorkSpace::Save() { return xmlWrite.Save(path_); } -bool WorkSpace::BuildDefault() { - /* WorkSpaceItemGroup* item = new WorkSpaceItemGroup("root", this); - AddItem(item, nullptr); - WorkSpaceItemGroup* subItem = new WorkSpaceRiverGroup(tr("River0")); - AddItem(subItem, item); - item = subItem; - subItem = new WorkSpaceRiverNetGroup(tr("RiverNet0")); - AddItem(subItem, item);*/ - - return true; -} - bool WorkSpace::Load(const QString& dyt) { WorkSpaceXMLParse parse(this); bool success = parse.Load(dyt); diff --git a/src/workspace/WorkSpace.h b/src/workspace/WorkSpace.h index a82e75df..5301f331 100644 --- a/src/workspace/WorkSpace.h +++ b/src/workspace/WorkSpace.h @@ -70,7 +70,6 @@ public: bool Save(const QString& path); bool Save(); - bool BuildDefault(); bool Load(const QString& dyt); void Unlaod(); diff --git a/src/workspace/WorkSpaceManager.cpp b/src/workspace/WorkSpaceManager.cpp index b6ae588c..aa8d9c87 100644 --- a/src/workspace/WorkSpaceManager.cpp +++ b/src/workspace/WorkSpaceManager.cpp @@ -28,6 +28,19 @@ bool WorkSpaceManager::Contains(const QString& name) const { return false; } +bool WorkSpaceManager::Remove(const QString& name) { + auto itor = workSpaces_.find(name); + if (workSpaces_.end() == itor) { + return true; + } + + WorkSpace* workspace = itor->second; + if (nullptr != workspace) { + workspace->deleteLater(); + } + workSpaces_.erase(itor); +} + WorkSpace* WorkSpaceManager::LoadDyt(const QString& dyt, class OsgView* view) { WorkSpace* workspace = new WorkSpace(view, this); if (!workspace->Load(dyt)) { diff --git a/src/workspace/WorkSpaceManager.h b/src/workspace/WorkSpaceManager.h index e77d575a..1e485152 100644 --- a/src/workspace/WorkSpaceManager.h +++ b/src/workspace/WorkSpaceManager.h @@ -20,6 +20,7 @@ public: void OnDestory(); bool Contains(const QString& name) const; + bool Remove(const QString& name); WorkSpace* LoadDyt(const QString& dyt, class OsgView* view); WorkSpace* GetOrCreate(const QString& path); void SetCurrent(WorkSpace* workspace);