SmallSense__EditSupport.st
changeset 64 2257d7223898
child 67 020b7461b15e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__EditSupport.st	Sat Aug 24 22:15:09 2013 +0100
@@ -0,0 +1,109 @@
+"{ Package: 'jv:smallsense' }"
+
+"{ NameSpace: SmallSense }"
+
+Object subclass:#EditSupport
+	instanceVariableNames:'service textView'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Services'
+!
+
+!EditSupport class methodsFor:'instance creation'!
+
+forLanguage: aProgrammingLanguage
+    aProgrammingLanguage notNil ifTrue:[
+        aProgrammingLanguage isSmalltalk ifTrue:[
+            ^ SmalltalkEditSupport new
+        ].
+        aProgrammingLanguage isJava ifTrue:[    
+            ^ JavaEditSupport new
+        ]
+    ].
+
+    ^GenericEditSupport new.
+
+    "Created: / 24-07-2013 / 23:20:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-08-2013 / 02:06:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!EditSupport methodsFor:'accessing'!
+
+language
+    ^ self subclassResponsibility.
+
+    "Created: / 24-07-2013 / 23:44:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+service
+    ^ service
+!
+
+service:aSmallSenseService
+    service := aSmallSenseService.
+    textView := aSmallSenseService textView.
+
+    "Modified: / 25-07-2013 / 00:11:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!EditSupport methodsFor:'editing'!
+
+insertElectricBlockOpenedBy: openText closedBy: closeText
+    | line col indent |
+
+    indent := self indentAtCursorLine.
+
+    textView undoableDo:[
+        textView insertStringAtCursor: (openText ? '') , Character cr , Character cr, (String new:indent withAll:Character space) , closeText , Character cr.
+        line := textView cursorLine - 1.
+        col := textView cursorCol  + 3.
+        textView cursorLine: line col: col.
+    ].
+
+    "Created: / 25-07-2013 / 10:41:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-08-2013 / 02:15:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!EditSupport methodsFor:'event handling'!
+
+doKeyPressKeyComplete                                                  
+    "Not supported in generic edit support"
+
+    textView flash.
+    ^ true
+
+    "Created: / 04-08-2013 / 02:31:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+keyPress: key x:x y:y in: view
+
+    "Handles an event in given view (a subview of codeView).
+     If the method returns true, the event will not be processed
+     by the view."
+
+    key == #CodeCompletion  ifTrue: [
+        ^ self doKeyPressKeyComplete. 
+    ].
+
+    ^false
+
+    "Created: / 24-07-2013 / 23:31:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-08-2013 / 02:32:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!EditSupport methodsFor:'private'!
+
+indentAtCursorLine
+    | line |
+
+    line := service textView listAt: service textView cursorLine.
+    ^ line isNil ifTrue:[
+        service textView cursorCol - 1.
+    ] ifFalse:[
+        line indexOfNonSeparator - 1.
+    ]
+
+    "Created: / 25-07-2013 / 00:13:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-08-2013 / 02:13:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+