summaryrefslogtreecommitdiff
path: root/UCore.pas
diff options
context:
space:
mode:
Diffstat (limited to 'UCore.pas')
-rw-r--r--UCore.pas42
1 files changed, 24 insertions, 18 deletions
diff --git a/UCore.pas b/UCore.pas
index 79fcd32..9059371 100644
--- a/UCore.pas
+++ b/UCore.pas
@@ -29,6 +29,7 @@ procedure FindNextSelected(ListView: TGTKListView; DataList: TList; var Item1, I
procedure UnselectAll(ListView: TGTKListView; DataList: TList);
procedure FillDirFiles(Engine: TPanelEngine; DestList: TList; InputFiles: TStringList; DoNotRecurse: boolean; InaccessiblePaths: TStringList; CancelFlag: Pboolean);
+procedure FillDirFiles_sort(FList: TList);
function GetFileInfoSL(Engine: TPanelEngine; const APath: string): PDataItemSL;
procedure DebugWriteListSL(List: TList);
@@ -348,8 +349,7 @@ end;
(********************************************************************************************************************************)
(********************************************************************************************************************************)
-procedure FillDirFiles(Engine: TPanelEngine; DestList: TList; InputFiles: TStringList; DoNotRecurse: boolean; InaccessiblePaths: TStringList; CancelFlag: Pboolean);
-var DirStage1List, FilesList, DirStage2List: TList;
+procedure FillDirFiles_sort(FList: TList);
function FillDirFiles_compare_func(Item1, Item2: Pointer): integer;
var DataItem1, DataItem2: PDataItem;
@@ -357,12 +357,16 @@ var DirStage1List, FilesList, DirStage2List: TList;
DataItem1 := PDataItemSL(Item1)^.DataItem;
DataItem2 := PDataItemSL(Item2)^.DataItem;
// sort by inode number
- // also, we want to have directories at the bottom of the list
- if DataItem1^.IsDir and (not DataItem2^.IsDir) then Result := 1 else
- if (not DataItem1^.IsDir) and DataItem2^.IsDir then Result := -1 else
+ // also, we want to have directories at the top of the list
+ if PDataItemSL(Item1)^.Stage1 and (not PDataItemSL(Item2)^.Stage1) then Result := -1 else
+ if (not PDataItemSL(Item1)^.Stage1) and PDataItemSL(Item2)^.Stage1 then Result := 1 else
+ if DataItem1^.IsDir and (not DataItem2^.IsDir) then Result := -1 else
+ if (not DataItem1^.IsDir) and DataItem2^.IsDir then Result := 1 else
if DataItem1^.inode_no > DataItem2^.inode_no then Result := 1 else
if DataItem1^.inode_no < DataItem2^.inode_no then Result := -1 else
- Result := 0;
+ // sort by name, in inverse order for Stage2
+ if PDataItemSL(Item1)^.Stage1 then Result := strcmp(DataItem1^.FName, DataItem2^.FName)
+ else Result := -strcmp(DataItem1^.FName, DataItem2^.FName);
end;
procedure QuickSort(FList: TList; L, R : Longint);
@@ -392,18 +396,20 @@ var DirStage1List, FilesList, DirStage2List: TList;
until I >= R;
end;
- procedure FillDirFiles_sort(FList: TList);
- var i: integer;
- begin
- if FList.Count < 2 then Exit;
- DebugMsg(['before sorting:']);
- for i := 0 to FList.Count - 1 do
- DebugMsg([' ', i, ' [', PDataItemSL(FList[i])^.DataItem^.inode_no, '] ', PDataItemSL(FList[i])^.DataItem^.FName]);
- QuickSort(Flist, 0, FList.Count - 1);
- DebugMsg(['after sorting:']);
- for i := 0 to FList.Count - 1 do
- DebugMsg([' ', i, ' [', PDataItemSL(FList[i])^.DataItem^.inode_no, '] ', PDataItemSL(FList[i])^.DataItem^.FName]);
- end;
+var i: integer;
+begin
+ if FList.Count < 2 then Exit;
+ DebugMsg(['before sorting:']);
+ for i := 0 to FList.Count - 1 do
+ DebugMsg([' ', i, ' [', PDataItemSL(FList[i])^.DataItem^.inode_no, '] ', PDataItemSL(FList[i])^.DataItem^.FName]);
+ QuickSort(Flist, 0, FList.Count - 1);
+ DebugMsg(['after sorting:']);
+ for i := 0 to FList.Count - 1 do
+ DebugMsg([' ', i, ' [', PDataItemSL(FList[i])^.DataItem^.inode_no, '] ', PDataItemSL(FList[i])^.DataItem^.FName]);
+end;
+
+procedure FillDirFiles(Engine: TPanelEngine; DestList: TList; InputFiles: TStringList; DoNotRecurse: boolean; InaccessiblePaths: TStringList; CancelFlag: Pboolean);
+var DirStage1List, FilesList, DirStage2List: TList;
procedure FillDirFiles_Recurse(const LocalPath: string; ALevel: integer);
var LocalList: TList;