|
1 "{ Package: 'stx:libbasic2' }" |
|
2 |
|
3 Object subclass:#FileSorter |
|
4 instanceVariableNames:'directoriesBeforeFiles selector sortCaseless sortReverse' |
|
5 classVariableNames:'' |
|
6 poolDictionaries:'' |
|
7 category:'Interface-Tools-File' |
|
8 ! |
|
9 |
|
10 |
|
11 !FileSorter class methodsFor:'instance creation'! |
|
12 |
|
13 directoriesBeforeFiles:arg1 selector:arg2 sortCaseless:arg3 sortReverse:arg4 |
|
14 ^ self new directoriesBeforeFiles:arg1 selector:arg2 sortCaseless:arg3 sortReverse:arg4 |
|
15 ! ! |
|
16 |
|
17 !FileSorter methodsFor:'accessing'! |
|
18 |
|
19 directoriesBeforeFiles |
|
20 ^ directoriesBeforeFiles |
|
21 ! |
|
22 |
|
23 directoriesBeforeFiles:something |
|
24 directoriesBeforeFiles := something. |
|
25 ! |
|
26 |
|
27 directoriesBeforeFiles:directoriesBeforeFilesArg selector:selectorArg sortCaseless:sortCaselessArg sortReverse:sortReverseArg |
|
28 "set instance variables (automatically generated)" |
|
29 |
|
30 directoriesBeforeFiles := directoriesBeforeFilesArg. |
|
31 selector := selectorArg. |
|
32 sortCaseless := sortCaselessArg. |
|
33 sortReverse := sortReverseArg. |
|
34 ! |
|
35 |
|
36 selector |
|
37 ^ selector |
|
38 ! |
|
39 |
|
40 selector:something |
|
41 selector := something. |
|
42 ! |
|
43 |
|
44 sortCaseless |
|
45 ^ sortCaseless |
|
46 ! |
|
47 |
|
48 sortCaseless:something |
|
49 sortCaseless := something. |
|
50 ! |
|
51 |
|
52 sortReverse |
|
53 ^ sortReverse ? false |
|
54 ! |
|
55 |
|
56 sortReverse:something |
|
57 sortReverse := something. |
|
58 ! ! |
|
59 |
|
60 !FileSorter methodsFor:'action'! |
|
61 |
|
62 sortItemList:aList |
|
63 |
|
64 |selectorSymbol instanceSortBlock cmpOp sortBlock| |
|
65 |
|
66 selectorSymbol := selector asSymbol. |
|
67 sortReverse ifTrue:[ |
|
68 cmpOp := #'>' |
|
69 ] ifFalse:[ |
|
70 cmpOp := #'<' |
|
71 ]. |
|
72 instanceSortBlock := [:a :b | |
|
73 |entry1 entry2| |
|
74 |
|
75 entry1 := (a perform:selectorSymbol). |
|
76 entry2 := (b perform:selectorSymbol). |
|
77 ((entry1 isNil) or:[entry2 isNil]) ifTrue:[ |
|
78 ((entry1 isNil) and:[entry2 isNil]) ifTrue:[ |
|
79 true |
|
80 ] ifFalse:[ |
|
81 ((entry1 notNil) and:[entry2 isNil]) ifTrue:[ |
|
82 sortReverse |
|
83 ] ifFalse:[ |
|
84 sortReverse not |
|
85 ] |
|
86 ] |
|
87 ] ifFalse:[ |
|
88 ((selector = #baseName) and:[sortCaseless]) ifTrue:[ |
|
89 entry1 := entry1 asLowercase. |
|
90 entry2 := entry2 asLowercase. |
|
91 ]. |
|
92 entry1 perform:cmpOp with:entry2 |
|
93 ] |
|
94 ]. |
|
95 directoriesBeforeFiles ifTrue:[ |
|
96 sortBlock := [:a :b| |
|
97 |aIsDir bIsDir res| |
|
98 |
|
99 aIsDir := a isDirectory. |
|
100 bIsDir := b isDirectory. |
|
101 (aIsDir ~~ bIsDir) ifTrue:[ |
|
102 res := aIsDir |
|
103 ] ifFalse:[ |
|
104 res := instanceSortBlock value:a value:b. |
|
105 ]. |
|
106 res |
|
107 ]. |
|
108 ] ifFalse:[ |
|
109 sortBlock := instanceSortBlock. |
|
110 ]. |
|
111 |
|
112 aList sort:sortBlock. |
|
113 ^ aList |
|
114 ! ! |
|
115 |
|
116 !FileSorter class methodsFor:'documentation'! |
|
117 |
|
118 version |
|
119 ^ '$Header: /cvs/stx/stx/libbasic2/FileSorter.st,v 1.1 2003-12-01 11:06:50 penk Exp $' |
|
120 ! ! |