SmallSense__EditService.st
changeset 64 2257d7223898
child 67 020b7461b15e
--- /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>"
+! !
+