1: ================================================================================
  2: 
  3: Smalltalk.KSU defineClass: #DirectoryTree
  4:     superclass: #{UI.ApplicationModel}
  5:     indexedType: #none
  6:     private: false
  7:     instanceVariableNames: 'selectionInTree '
  8:     classInstanceVariableNames: ''
  9:     imports: ''
 10:     category: 'KSU-Template'
 11: 
 12: ================================================================================
 13: 
 14: KSU.DirectoryTree method for 'defaults'
 15: 
 16: defaultDirectory
 17: 
 18:     | aDirectory |
 19:     aDirectory := 
 20:             [aDirectory := Filename volumes first asFilename construct: 'Users'.
 21:             (aDirectory exists and: [aDirectory isDirectory])
 22:                 ifFalse: [self error: '期待していたディレクトリがありません。'].
 23:             aDirectory yourself]
 24:                     on: self errorSignal
 25:                     do: [:anException | Filename defaultDirectory].
 26:     ^aDirectory
 27: 
 28: ------------------------------------------------------------
 29: 
 30: KSU.DirectoryTree method for 'defaults'
 31: 
 32: defaultDisplayStringSelector
 33: 
 34:     ^#tail
 35: 
 36: ------------------------------------------------------------
 37: 
 38: KSU.DirectoryTree method for 'defaults'
 39: 
 40: defaultSortBlock
 41: 
 42:     | aSelector aBlock |
 43:     aSelector := self defaultDisplayStringSelector.
 44:     aBlock := [:directoryA :directoryB | (directoryA perform: aSelector) < (directoryB perform: aSelector)].
 45:     ^aBlock
 46: 
 47: ------------------------------------------------------------
 48: 
 49: KSU.DirectoryTree method for 'initialize-release'
 50: 
 51: initialize
 52: 
 53:     super initialize.
 54:     selectionInTree := nil.
 55:     ^self
 56: 
 57: ------------------------------------------------------------
 58: 
 59: KSU.DirectoryTree method for 'menu messages'
 60: 
 61: inspectDirectory
 62: 
 63:     | aDirectory |
 64:     (aDirectory := self selectionInTree selection) isNil
 65:         ifTrue: [Dialog warn: 'ディレクトリが選択されていません。']
 66:         ifFalse: 
 67:             [
 68:             [| aFileBrowser |
 69:             (aFileBrowser := #{Tools.FileTools.FileBrowser} value new)
 70:                 open;
 71:                 selectDirectory: aDirectory.
 72:             aFileBrowser isZoomed ifFalse: [aFileBrowser toggleZoom]]
 73:                     on: Object errorSignal
 74:                     do: [:anException | Dialog warn: 'ディレクトリ「' , (aDirectory asString contractTo: 32) , '」はアクセスできません。']]
 75: 
 76: ------------------------------------------------------------
 77: 
 78: KSU.DirectoryTree method for 'interface opening'
 79: 
 80: postOpenWith: aBuilder
 81: 
 82:     | aWrapper |
 83:     super postOpenWith: aBuilder.
 84:     aWrapper := aBuilder componentAt: #selectionInTree.
 85:     aWrapper ifNil: [^nil].
 86:     aWrapper spec useIcons: #folder.
 87:     (aWrapper widget)
 88:         useLines: true;
 89:         useChildImages: true;
 90:         rootExpander: true;
 91:         displayStringSelector: self defaultDisplayStringSelector
 92: 
 93: ------------------------------------------------------------
 94: 
 95: KSU.DirectoryTree method for 'aspects'
 96: 
 97: selectionInTree
 98: 
 99:     selectionInTree
100:         ifNil: 
101:             [selectionInTree := UI.SelectionInTree new.
102:             selectionInTree list
103:                 root: self defaultDirectory
104:                 displayIt: true
105:                 childrenBlock: [:aDirectory | self subDirectoriesOf: aDirectory].
106:             selectionInTree selectionHolder compute: 
107:                     [:aDirectory |
108:                     Transcript
109:                         cr;
110:                         show: aDirectory printString]].
111:     ^selectionInTree
112: 
113: ------------------------------------------------------------
114: 
115: KSU.DirectoryTree method for 'accessing'
116: 
117: subDirectoriesOf: aDirectory
118: 
119:     | aCollection |
120:     aCollection := OrderedCollection new.
121:     aDirectory directoryContents do: 
122:             [:each |
123:             each first = $.
124:                 ifFalse: 
125:                     [
126:                     [| aFilename |
127:                     aFilename := aDirectory constructSafe: each.
128:                     aFilename isDirectory ifTrue: [aCollection add: aFilename]]
129:                             on: self errorSignal
130:                             do: [:anException | anException return]]].
131:     aCollection := aCollection asSortedCollection: self defaultSortBlock.
132:     ^aCollection asArray
133: 
134: ================================================================================
135: 
136: KSU.DirectoryTree class
137:     instanceVariableNames: ''
138: 
139: ================================================================================
140: 
141: KSU.DirectoryTree class method for 'examples'
142: 
143: example1
144:     "KSU.DirectoryTree example1."
145: 
146:     | anApplication |
147:     anApplication := KSU.DirectoryTree new.
148:     anApplication open.
149:     ^anApplication
150: 
151: ------------------------------------------------------------
152: 
153: KSU.DirectoryTree class method for 'resources'
154: 
155: menuBar
156:     "Tools.MenuEditor new openOnClass: self andSelector: #menuBar"
157: 
158:     <resource: #menu>
159:     ^#(#{UI.Menu} #(
160:             #(#{UI.MenuItem} 
161:                 #rawLabel: 'ファイル' 
162:                 #submenu: #(#{UI.Menu} #(
163:                         #(#{UI.MenuItem} 
164:                             #rawLabel: '終了' 
165:                             #value: #closeRequest ) ) #(1 ) nil ) ) ) #(1 ) nil ) decodeAsLiteralArray
166: 
167: ------------------------------------------------------------
168: 
169: KSU.DirectoryTree class method for 'resources'
170: 
171: menuForSelectionInTree
172:     "Tools.MenuEditor new openOnClass: self andSelector: #menuForSelectionInTree"
173: 
174:     <resource: #menu>
175:     ^#(#{UI.Menu} #(
176:             #(#{UI.MenuItem} 
177:                 #rawLabel: '拡張' 
178:                 #value: #expand ) 
179:             #(#{UI.MenuItem} 
180:                 #rawLabel: '縮小' 
181:                 #value: #contractFully ) 
182:             #(#{UI.MenuItem} 
183:                 #rawLabel: '検査' 
184:                 #value: #inspectDirectory ) ) #(1 1 1 ) nil ) decodeAsLiteralArray
185: 
186: ------------------------------------------------------------
187: 
188: KSU.DirectoryTree class method for 'interface specs'
189: 
190: windowSpec
191:     "Tools.UIPainter new openOnClass: self andSelector: #windowSpec"
192: 
193:     <resource: #canvas>
194:     ^#(#{UI.FullSpec} 
195:         #window: 
196:         #(#{UI.WindowSpec} 
197:             #label: 'ディレクトリツリー' 
198:             #min: #(#{Core.Point} 200 300 ) 
199:             #max: #(#{Core.Point} 0 0 ) 
200:             #bounds: #(#{Graphics.Rectangle} 1080 420 1480 1020 ) 
201:             #flags: 4 
202:             #menu: #menuBar ) 
203:         #component: 
204:         #(#{UI.SpecCollection} 
205:             #collection: #(
206:                 #(#{UI.TreeViewSpec} 
207:                     #layout: #(#{Graphics.LayoutFrame} 2 0 2 0 -2 1 -2 1 ) 
208:                     #name: #selectionInTree 
209:                     #flags: 15 
210:                     #model: #selectionInTree 
211:                     #menu: #menuForSelectionInTree 
212:                     #useModifierKeys: true 
213:                     #selectionType: #highlight 
214:                     #displayStringSelector: #tail 
215:                     #useIcons: #folder 
216:                     #rootExpander: true ) ) ) )
217: 
218: ================================================================================

This document was generated by KSU.TextDoclet on 2012/11/10 at 14:13:04.