--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__EditService.st Sat Aug 24 22:15:09 2013 +0100
@@ -0,0 +1,121 @@
+"{ Package: 'jv:smallsense' }"
+
+"{ NameSpace: SmallSense }"
+
+Tools::CodeViewService subclass:#EditService
+ instanceVariableNames:'support'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'SmallSense-Services'
+!
+
+!EditService class methodsFor:'accessing'!
+
+label
+ "Answers a short label - for UI"
+
+ ^'SmallSense - Edit Support'
+
+ "Created: / 27-07-2013 / 22:35:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!EditService class methodsFor:'queries'!
+
+isUsefulFor:aCodeView
+ "this filters useful services.
+ must be redefined to return true in subclasses (but each class must do it only
+ for itself - not for subclasses"
+
+ ^ self == EditService
+
+ "Created: / 27-07-2013 / 22:35:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!EditService methodsFor:'accessing-views'!
+
+codeView
+ ^ codeView
+!
+
+gutterView
+ ^ gutterView
+!
+
+textView
+ ^ textView
+! !
+
+!EditService methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+ "Invoked when an object that I depend upon sends a change notification."
+
+ | lang |
+
+
+ changedObject == codeView ifTrue:[
+ (#(methodHolder classHolder languageHolder) includes: something) ifTrue:[
+ aParameter key removeDependent: self.
+ aParameter value addDependent: self.
+ ]
+ ].
+
+ (changedObject == codeView languageHolder
+ or:[something == codeView classHolder
+ or:[something == codeView methodHolder]]) ifTrue:[
+ UserPreferences current smallSenseElectricEditSupportEnabled ifTrue:[
+ support language ~~ (lang := codeView language) ifTrue:[
+ support := EditSupport forLanguage: lang.
+ support service: self.
+ ].
+ ].
+ ^self.
+ ].
+
+ super update:something with:aParameter from:changedObject
+
+ "Modified: / 27-07-2013 / 22:32:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!EditService methodsFor:'event handling'!
+
+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."
+
+ ^support notNil
+ ifTrue:[support keyPress: key x:x y:y in: view]
+ ifFalse:[false]
+
+ "Created: / 07-03-2010 / 09:36:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 24-07-2013 / 23:28:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!EditService methodsFor:'registering'!
+
+registerIn: aCodeView
+
+ super registerIn: aCodeView.
+ aCodeView languageHolder addDependent: self.
+ aCodeView classHolder addDependent: self.
+ aCodeView methodHolder addDependent: self.
+ support := EditSupport forLanguage: aCodeView language.
+ support service: self.
+
+ "Created: / 24-07-2013 / 23:13:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+unregister
+
+ "Uninstall myself from my codeView"
+
+ super unregister.
+ codeView languageHolder removeDependent: self.
+ codeView classHolder removeDependent: self.
+ codeView methodHolder removeDependent: self.
+
+ "Created: / 24-07-2013 / 23:14:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+