From fa03625eee5b80c2f45aecf4650a324eef9c5fb5 Mon Sep 17 00:00:00 2001 From: cxl Date: Wed, 17 Jun 2009 06:40:36 +0000 Subject: [PATCH] theide: Fixed ordering issue in package import git-svn-id: svn://ultimatepp.org/upp/trunk@1317 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/ide/UppWspc.cpp | 48 +++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/uppsrc/ide/UppWspc.cpp b/uppsrc/ide/UppWspc.cpp index 2e92058d0..e0bed7337 100644 --- a/uppsrc/ide/UppWspc.cpp +++ b/uppsrc/ide/UppWspc.cpp @@ -360,28 +360,35 @@ void WorkspaceWork::DoImport(const String& dir, const String& mask, bool sep, Pr String active = GetActivePackage(); if(active.IsEmpty()) return; FindFile ff(AppendFileName(dir, "*.*")); + Vector files; + Vector dirs; while(ff) { - String ft = ff.GetName(); - String p = AppendFileName(dir, ft); - if(ff.IsFile()) { - if(ff.IsFile() && PatternMatchMulti(mask, ff.GetName())) { - if(pi.StepCanceled()) return; - if(sep) { - Package::File& f = actual.file.Add(); - f = GetFileName(dir); - f.separator = f.readonly = true; - sep = false; - } - SaveFile(PackagePath(ft), LoadFile(p)); - Package::File& f = actual.file.Add(); - f = ft; - f.separator = f.readonly = false; - } - } + String p = AppendFileName(dir, ff.GetName()); + if(ff.IsFile() && PatternMatchMulti(mask, ff.GetName())) + files.Add(p); if(ff.IsFolder()) - DoImport(p, mask, true, pi); + dirs.Add(p); ff.Next(); } + if(sep && files.GetCount()) { + Package::File& f = actual.file.Add(); + f = GetFileTitle(dir); + f.separator = f.readonly = true; + sep = false; + } + Sort(files); + Sort(dirs); + for(int i = 0; i < files.GetCount(); i++) { + if(pi.StepCanceled()) + throw String(); + String name = GetFileName(files[i]); + SaveFile(SourcePath(active, name), LoadFile(files[i])); + Package::File& f = actual.file.Add(); + f = name; + f.separator = f.readonly = false; + } + for(int i = 0; i < dirs.GetCount(); i++) + DoImport(dirs[i], mask, true, pi); } void WorkspaceWork::Import() @@ -395,7 +402,10 @@ void WorkspaceWork::Import() int fci = filelist.GetCursor(); int cs = filelist.GetSbPos(); int ci = fci >= 0 && fci < fileindex.GetCount() ? fileindex[fci] : -1; - DoImport(~dlg.folder, ~dlg.files, false, pi); + try { + DoImport(~dlg.folder, ~dlg.files, false, pi); + } + catch(String) {} SaveLoadPackage(); filelist.SetSbPos(cs); filelist.SetCursor(fci >= 0 ? fci : filelist.GetCount() - 1);