1: ================================================================================
2:
3: Smalltalk.KSU defineClass: #TextEditor
4: superclass: #{UI.ApplicationModel}
5: indexedType: #none
6: private: false
7: instanceVariableNames: 'textHolder '
8: classInstanceVariableNames: ''
9: imports: ''
10: category: 'KSU-Template'
11:
12: ================================================================================
13:
14: KSU.TextEditor method for 'menu messages'
15:
16: close
17:
18: self closeRequest
19:
20: ------------------------------------------------------------
21:
22: KSU.TextEditor method for 'menu messages'
23:
24: copySelection
25:
26: ^self textEditorController ifNotNil: [:aController | aController copySelection]
27:
28: ------------------------------------------------------------
29:
30: KSU.TextEditor method for 'menu messages'
31:
32: cut
33:
34: ^self textEditorController ifNotNil: [:aController | aController cut]
35:
36: ------------------------------------------------------------
37:
38: KSU.TextEditor method for 'initialize-release'
39:
40: initialize
41:
42: super initialize.
43: textHolder := nil.
44: ^self
45:
46: ------------------------------------------------------------
47:
48: KSU.TextEditor method for 'menu messages'
49:
50: newFile
51:
52: | aModel |
53: aModel := self class new.
54: aModel textHolder value: Text new.
55: ^self textEditorView
56: ifNil: [aModel open]
57: ifNotNil:
58: [:aView |
59: | aRectangle aWindow |
60: aRectangle := aView topComponent displayBox translatedBy: 24 @ 24.
61: aModel allButOpenInterface: #windowSpec.
62: aWindow := aModel builder window.
63: aWindow openIn: (aRectangle origin rounded
64: extent: ((aRectangle extent max: aWindow minimumSize) min: aWindow maximumSize) rounded).
65: aWindow displayPendingInvalidation.
66: aModel postOpenWith: aModel builder.
67: aWindow]
68:
69: ------------------------------------------------------------
70:
71: KSU.TextEditor method for 'menu messages'
72:
73: openFile
74:
75: Dialog warn: 'ごめんなさい、まだ工事中です。'
76:
77: ------------------------------------------------------------
78:
79: KSU.TextEditor method for 'menu messages'
80:
81: paste
82:
83: ^self textEditorController ifNotNil: [:aController | aController paste]
84:
85: ------------------------------------------------------------
86:
87: KSU.TextEditor method for 'interface opening'
88:
89: postOpenWith: aBuilder
90:
91: super postOpenWith: aBuilder.
92: self selectAll
93:
94: ------------------------------------------------------------
95:
96: KSU.TextEditor method for 'menu messages'
97:
98: saveFile
99:
100: Dialog warn: 'ごめんなさい、まだ工事中です。'
101:
102: ------------------------------------------------------------
103:
104: KSU.TextEditor method for 'menu messages'
105:
106: selectAll
107:
108: ^self textEditorController
109: ifNotNil: [:aController | aController selectFrom: 1 to: aController text size]
110:
111: ------------------------------------------------------------
112:
113: KSU.TextEditor method for 'private'
114:
115: textEditorController
116:
117: self textEditorView ifNotNil: [:textEditorView | ^textEditorView controller].
118: ^nil
119:
120: ------------------------------------------------------------
121:
122: KSU.TextEditor method for 'private'
123:
124: textEditorView
125:
126: self builder
127: ifNotNil:
128: [:aBuilder |
129: (aBuilder componentAt: #textHolder)
130: ifNotNil:
131: [:aWrapper |
132: | textEditorView |
133: textEditorView := aWrapper widget.
134: ^textEditorView]].
135: ^nil
136:
137: ------------------------------------------------------------
138:
139: KSU.TextEditor method for 'aspects'
140:
141: textHolder
142:
143: textHolder
144: ifNil:
145: [| aStream aString |
146: aStream := String new writeStream.
147: aStream cr.
148: aStream
149: nextPutAll: '漢字で書くと、';
150: cr;
151: nextPutAll: '「危機」という単語は二つの文字から成り立っています。';
152: cr;
153: nextPutAll: '一つは危険を表して、もう一つは機会を表します。';
154: cr;
155: nextPutAll: 'ジョン・F・ケネディー';
156: cr.
157: aStream cr.
158: aStream
159: nextPutAll: 'When written in Chinese,';
160: cr;
161: nextPutAll: 'the word "crisis" is composed of two characters.';
162: cr;
163: nextPutAll: 'One represents danger, and the other represents opportunity.';
164: cr;
165: nextPutAll: 'John F. Kennedy';
166: cr.
167: aStream cr.
168: aString := aStream contents.
169: aStream close.
170: textHolder := aString asText asValue].
171: ^textHolder
172:
173: ================================================================================
174:
175: KSU.TextEditor class
176: instanceVariableNames: ''
177:
178: ================================================================================
179:
180: KSU.TextEditor class method for 'examples'
181:
182: example1
183: "KSU.TextEditor example1."
184:
185: | anApplication |
186: anApplication := KSU.TextEditor new.
187: anApplication open.
188: ^anApplication
189:
190: ------------------------------------------------------------
191:
192: KSU.TextEditor class method for 'resources'
193:
194: menuBar
195: "Tools.MenuEditor new openOnClass: self andSelector: #menuBar"
196:
197: <resource: #menu>
198: ^#(#{UI.Menu} #(
199: #(#{UI.MenuItem}
200: #rawLabel: 'ファイル'
201: #submenu: #(#{UI.Menu} #(
202: #(#{UI.MenuItem}
203: #rawLabel: '新規'
204: #value: #newFile )
205: #(#{UI.MenuItem}
206: #rawLabel: '開く'
207: #value: #openFile )
208: #(#{UI.MenuItem}
209: #rawLabel: '保存'
210: #value: #saveFile )
211: #(#{UI.MenuItem}
212: #rawLabel: '終了'
213: #value: #close ) ) #(2 1 1 ) nil ) )
214: #(#{UI.MenuItem}
215: #rawLabel: '編集'
216: #submenu: #(#{UI.Menu} #(
217: #(#{UI.MenuItem}
218: #rawLabel: 'カット'
219: #value: #cut )
220: #(#{UI.MenuItem}
221: #rawLabel: 'コピー'
222: #value: #copySelection )
223: #(#{UI.MenuItem}
224: #rawLabel: 'ペースト'
225: #value: #paste )
226: #(#{UI.MenuItem}
227: #rawLabel: 'すべて選択'
228: #value: #selectAll ) ) #(3 1 ) nil ) ) ) #(2 ) nil ) decodeAsLiteralArray
229:
230: ------------------------------------------------------------
231:
232: KSU.TextEditor class method for 'resources'
233:
234: textMenu
235: "Tools.MenuEditor new openOnClass: self andSelector: #textMenu"
236:
237: <resource: #menu>
238: ^#(#{UI.Menu} #(
239: #(#{UI.MenuItem}
240: #rawLabel: 'カット'
241: #value: #cut )
242: #(#{UI.MenuItem}
243: #rawLabel: 'コピー'
244: #value: #copy )
245: #(#{UI.MenuItem}
246: #rawLabel: 'ペースト'
247: #value: #paste )
248: #(#{UI.MenuItem}
249: #rawLabel: 'すべて選択'
250: #value: #selectAll ) ) #(3 1 ) nil ) decodeAsLiteralArray
251:
252: ------------------------------------------------------------
253:
254: KSU.TextEditor class method for 'interface specs'
255:
256: windowSpec
257: "Tools.UIPainter new openOnClass: self andSelector: #windowSpec"
258:
259: <resource: #canvas>
260: ^#(#{UI.FullSpec}
261: #window:
262: #(#{UI.WindowSpec}
263: #label: 'テキストエディタ'
264: #min: #(#{Core.Point} 512 384 )
265: #max: #(#{Core.Point} 0 0 )
266: #bounds: #(#{Graphics.Rectangle} 1080 650 1592 1034 )
267: #flags: 4
268: #menu: #menuBar )
269: #component:
270: #(#{UI.SpecCollection}
271: #collection: #(
272: #(#{UI.TextEditorSpec}
273: #layout: #(#{Graphics.LayoutFrame} 2 0 2 0 -2 1 -2 1 )
274: #name: #textHolder
275: #model: #textHolder
276: #menu: #textMenu
277: #tabRequiresControl: true ) ) ) )
278:
279: ================================================================================
This document was generated by KSU.TextDoclet on 2012/11/10 at 11:06:12.