>From 33ece139cc23ee7afed6e449598551cceb2eadac Mon Sep 17 00:00:00 2001
From: Gwenael Casaccio
Date: Mon, 2 Dec 2013 11:38:06 +0100
Subject: [PATCH] Migrate the widgets to the new events that uses the
announcement framework to be more coherent.
---
packages/visualgst/ChangeLog | 20 ++++++++
packages/visualgst/Debugger/GtkDebugger.st | 14 ++---
packages/visualgst/GtkHistoryWidget.st | 10 ++--
packages/visualgst/GtkLauncher.st | 31 +++++------
packages/visualgst/Image/GtkImageWidget.st | 14 ++---
.../Inspector/GtkInspectorBrowserWidget.st | 22 +++-----
packages/visualgst/Inspector/GtkInspectorWidget.st | 7 +--
packages/visualgst/SUnit/GtkSUnit.st | 8 +--
packages/visualgst/StBrowser/GtkCategoryWidget.st | 6 ++-
.../visualgst/StBrowser/GtkClassBrowserWidget.st | 30 +++--------
packages/visualgst/StBrowser/GtkMethodWidget.st | 19 ++++++-
packages/visualgst/Widget/Compoment.st | 3 ++
packages/visualgst/Widget/Entry.st | 5 +-
.../Widget/Events/SelectionChangedAnnouncement.st | 50 ++++++++++++++++++
.../Widget/Events/TextChangedAnnouncement.st | 44 ++++++++++++++++
.../visualgst/Widget/Events/WidgetAnnouncement.st | 60 ++++++++++++++++++++++
packages/visualgst/Widget/List.st | 10 ++--
packages/visualgst/Widget/Widget.st | 4 +-
packages/visualgst/package.xml | 3 ++
19 files changed, 262 insertions(+), 98 deletions(-)
create mode 100644 packages/visualgst/Widget/Events/SelectionChangedAnnouncement.st
create mode 100644 packages/visualgst/Widget/Events/TextChangedAnnouncement.st
create mode 100644 packages/visualgst/Widget/Events/WidgetAnnouncement.st
diff --git a/packages/visualgst/ChangeLog b/packages/visualgst/ChangeLog
index 8bc960c..6185ad2 100644
--- a/packages/visualgst/ChangeLog
+++ b/packages/visualgst/ChangeLog
@@ -1,5 +1,25 @@
2013-12-02 Gwenael Casaccio
+ * Debugger/GtkDebugger.st: Migrate to new events.
+ * GtkHistoryWidget.st: Migrate to new events.
+ * GtkLauncher.st: Migrate to new events.
+ * Image/GtkImageWidget.st: Migrate to new events.
+ * Inspector/GtkInspectorBrowserWidget.st: Migrate to new events.
+ * Inspector/GtkInspectorWidget.st: Migrate to new events.
+ * SUnit/GtkSUnit.st: Migrate to new events.
+ * StBrowser/GtkCategoryWidget.st: Migrate to new events.
+ * StBrowser/GtkClassBrowserWidget.st: Migrate to new events.
+ * StBrowser/GtkMethodWidget.st: Migrate to new events.
+ * Widget/Compoment.st: Migrate to new events.
+ * Widget/Entry.st: Migrate to new events.
+ * Widget/List.st: Migrate to new events.
+ * Widget/Widget.st: Migrate to new events.
+ * Widget/Events/SelectionChangedAnnouncement.st: Selection event.
+ * Widget/Events/TextChangedAnnouncement.st: Text changed event.
+ * Widget/Events/WidgetAnnouncement.st: Widget event.
+
+2013-10-23 Gwenael Casaccio
+
* Commands/WorkspaceMenus/DeleteItemCommand.st: New UI support.
* Commands/WorkspaceMenus/InspectItemCommand.st: New UI support.
* Debugger/Extensions.st: Disable the debugger.
diff --git a/packages/visualgst/Debugger/GtkDebugger.st b/packages/visualgst/Debugger/GtkDebugger.st
index 7576bb0..17789bb 100644
--- a/packages/visualgst/Debugger/GtkDebugger.st
+++ b/packages/visualgst/Debugger/GtkDebugger.st
@@ -92,7 +92,7 @@ GtkBrowsingTool subclass: GtkDebugger [
^ contextWidget := (GtkContextWidget parentWindow: window)
- whenSelectionChangedSend: #contextChanged to: self;
+ whenSelectionChangedSend: #contextChanged: to: self;
yourself
]
@@ -266,20 +266,20 @@ GtkBrowsingTool subclass: GtkDebugger [
^codeWidget hasSelection
]
- contextChanged [
+ contextChanged: aSelectionChanged [
self checkCodeWidgetAndUpdate: [
| line |
- contextWidget hasSelectedContext ifFalse: [ ^ self ].
- codeWidget source: (BrowserMethodSource on: contextWidget selectedContext method).
- contextWidget selectedContext currentLine ~= 0
- ifTrue: [ line := contextWidget selectedContext currentLine ]
+ aSelectionChanged hasSelection ifFalse: [ ^ self ].
+ codeWidget source: (BrowserMethodSource on: aSelectionChanged selection method).
+ aSelectionChanged selection currentLine ~= 0
+ ifTrue: [ line := aSelectionChanged selection currentLine ]
ifFalse: [ line := 1 ].
codeWidget
applyTag: #debug forLine: line;
centerViewAtLine: line.
- self updateInspectorWidget: contextWidget selectedContext ]
+ self updateInspectorWidget: aSelectionChanged selection ]
]
stepInto [
diff --git a/packages/visualgst/GtkHistoryWidget.st b/packages/visualgst/GtkHistoryWidget.st
index 0a297e4..c522b21 100644
--- a/packages/visualgst/GtkHistoryWidget.st
+++ b/packages/visualgst/GtkHistoryWidget.st
@@ -57,7 +57,7 @@ Compoment subclass: GtkHistoryWidget [
{'Open in new tab'. self. #browseTabbedClass}.
{'Open in new window'. self. #browseClass}}".
widget singleSelection.
- widget whenSelectionChangedSend: #onSelectionChanged to: self.
+ widget whenSelectionChangedSend: #onSelectionChanged: to: self.
]
refresh: historyStack [
@@ -97,12 +97,12 @@ Compoment subclass: GtkHistoryWidget [
InspectItCommand executeOn: self
]
- onSelectionChanged [
+ onSelectionChanged: aSelectionChanged [
- widget hasSelection ifFalse: [ ^ self ].
- stack selectedIndex = widget selectionIndex ifTrue: [^self].
- stack selectItem: widget selectionIndex.
+ aSelectionChanged hasSelection ifFalse: [ ^ self ].
+ stack selectedIndex = aSelectionChanged widget selectionIndex ifTrue: [ ^ self ].
+ stack selectItem: aSelectionChanged widget selectionIndex.
]
browseTabbedClass [
diff --git a/packages/visualgst/GtkLauncher.st b/packages/visualgst/GtkLauncher.st
index fb62e3d..41ec9f6 100644
--- a/packages/visualgst/GtkLauncher.st
+++ b/packages/visualgst/GtkLauncher.st
@@ -400,7 +400,7 @@ GtkVisualGSTTool subclass: GtkLauncher [
^ implementorWidget := self buildImageView
- whenSelectionChangedSend: #implementorSelected to: self;
+ whenSelectionChangedSend: #implementorSelected: to: self;
yourself.
]
@@ -408,7 +408,7 @@ GtkVisualGSTTool subclass: GtkLauncher [
^ senderWidget := self buildImageView
- whenSelectionChangedSend: #senderSelected to: self;
+ whenSelectionChangedSend: #senderSelected: to: self;
yourself.
]
@@ -430,7 +430,7 @@ GtkVisualGSTTool subclass: GtkLauncher [
^ implementorResultWidget := GtkImplementorResultsWidget new
- whenSelectionChangedSend: #resultImplementorSelected to: self;
+ whenSelectionChangedSend: #resultImplementorSelected: to: self;
yourself
]
@@ -438,7 +438,7 @@ GtkVisualGSTTool subclass: GtkLauncher [
^ senderResultWidget := GtkSenderResultsWidget new
- whenSelectionChangedSend: #resultSenderSelected to: self;
+ whenSelectionChangedSend: #resultSenderSelected: to: self;
yourself
]
@@ -928,25 +928,18 @@ GtkVisualGSTTool subclass: GtkLauncher [
topSidebar hideAll
]
- senderSelected [
+ implementorSelected: aSelectionChanged [
- senderWidget hasSelection ifFalse: [ ^ self ].
- self findInMethod: (senderWidget matchSelector: senderWidget selection) values first element
+ aSelectionChanged hasSelection ifFalse: [ ^ self ].
+ self imageSelectorForImplementor: aSelectionChanged selection
]
- implementorSelected [
-
-
- implementorWidget hasSelection ifFalse: [ ^ self ].
- self imageSelectorForImplementor: implementorWidget selection
- ]
-
- senderSelected [
+ senderSelected: aSelectionChanged [
- senderWidget hasSelection ifFalse: [ ^ self ].
- self imageSelectorForSender: senderWidget selection
+ aSelectionChanged hasSelection ifFalse: [ ^ self ].
+ self imageSelectorForSender: aSelectionChanged selection
]
imageSelectorForImplementor: aSymbol [
@@ -961,13 +954,13 @@ GtkVisualGSTTool subclass: GtkLauncher [
senderResultWidget appendSenderResults: (senderWidget matchSelector: aSymbol)
]
- resultImplementorSelected [
+ resultImplementorSelected: aSelectionChanged [
implementorResultWidget selectedResult: self currentWidgetOfBrowser
]
- resultSenderSelected [
+ resultSenderSelected: aSelectionChanged [
senderResultWidget selectedResult: self currentWidgetOfBrowser
diff --git a/packages/visualgst/Image/GtkImageWidget.st b/packages/visualgst/Image/GtkImageWidget.st
index 15c8782..76cf471 100644
--- a/packages/visualgst/Image/GtkImageWidget.st
+++ b/packages/visualgst/Image/GtkImageWidget.st
@@ -56,7 +56,7 @@ Compoment subclass: GtkImageWidget [
searchEntry := Entry new
- whenTextChangedSend: #searchValidate to: self;
+ whenTextChangedSend: #searchValidate: to: self;
yourself.
^ HBox new
add: (Label text: 'Class or method :');
@@ -79,12 +79,6 @@ Compoment subclass: GtkImageWidget [
imageTree whenSelectionChangedSend: aSelector to: anObject
]
- whenTextChangedSend: aSelector to: anObject [
-
-
- searchEntry connectSignal: 'activate' to: anObject selector: aSelector
- ]
-
grabFocus [
@@ -97,12 +91,12 @@ Compoment subclass: GtkImageWidget [
^ searchEntry text
]
- searchValidate [
+ searchValidate: aTextChanged [
- searchEntry text isEmpty
+ aTextChanged text isEmpty
ifTrue: [ imageTree item: image ]
- ifFalse: [ imageTree item: (image matchRegex: searchEntry text) ].
+ ifFalse: [ imageTree item: (image matchRegex: aTextChanged text) ].
imageTree refresh
]
diff --git a/packages/visualgst/Inspector/GtkInspectorBrowserWidget.st b/packages/visualgst/Inspector/GtkInspectorBrowserWidget.st
index 98eb66a..2cc7335 100644
--- a/packages/visualgst/Inspector/GtkInspectorBrowserWidget.st
+++ b/packages/visualgst/Inspector/GtkInspectorBrowserWidget.st
@@ -94,7 +94,7 @@ Compoment subclass: GtkInspectorBrowserWidget [
^ cMethodWidget := GtkMethodWidget new
- whenSelectionChangedSend: #onClassSideMethodChanged to: self;
+ whenSelectionChangedSend: #onMethodChanged: to: self;
yourself.
]
@@ -102,13 +102,14 @@ Compoment subclass: GtkInspectorBrowserWidget [
^ iMethodWidget := GtkMethodWidget new
- whenSelectionChangedSend: #onInstanceSideMethodChanged to: self;
+ whenSelectionChangedSend: #onMethodChanged: to: self;
yourself.
]
initialize [
+ super initialize.
classHierarchyUpdate := false.
checkCode := true.
state := NamespaceState on: self with: Smalltalk.
@@ -146,24 +147,13 @@ Compoment subclass: GtkInspectorBrowserWidget [
state := CategoryState on: self with: classHierarchyWidget selectedClass -> '*' ]
]
- onInstanceSideMethodChanged [
+ onMethodChanged: aSelectionChanged [
| method |
self checkCodeWidgetAndUpdate: [
- iMethodWidget hasSelectedMethod ifFalse: [ ^ self ].
- method := iMethodWidget selectedMethod.
- codeWidget source: (BrowserMethodSource on: method).
- state := MethodState on: self with: method ]
- ]
-
- onClassSideMethodChanged [
-
-
- | method |
- self checkCodeWidgetAndUpdate: [
- cMethodWidget hasSelectedMethod ifFalse: [ ^ self ].
- method := cMethodWidget selectedMethod.
+ aSelectionChanged hasSelection ifFalse: [ ^ self ].
+ method := aSelectionChanged selection.
codeWidget source: (BrowserMethodSource on: method).
state := MethodState on: self with: method ]
]
diff --git a/packages/visualgst/Inspector/GtkInspectorWidget.st b/packages/visualgst/Inspector/GtkInspectorWidget.st
index 74f5342..5a255e9 100644
--- a/packages/visualgst/Inspector/GtkInspectorWidget.st
+++ b/packages/visualgst/Inspector/GtkInspectorWidget.st
@@ -48,9 +48,10 @@ Compoment subclass: GtkInspectorWidget [
initialize [
+ super initialize.
stack := OrderedCollection new.
self buildView.
- inspectorTree whenSelectionChangedSend: #onVariableChanged to: self.
+ inspectorTree whenSelectionChangedSend: #onVariableChanged: to: self.
]
postInitialize [
@@ -112,10 +113,10 @@ Compoment subclass: GtkInspectorWidget [
^ inspectorTree hasSelection
]
- onVariableChanged [
+ onVariableChanged: aSelectionChanged [
- self hasSelectedValue ifFalse: [ workspaceWidget text: ''. ^ self ].
+ aSelectionChanged hasSelection ifFalse: [ workspaceWidget text: ''. ^ self ].
workspaceWidget text: self selectedValue displayString
]
diff --git a/packages/visualgst/SUnit/GtkSUnit.st b/packages/visualgst/SUnit/GtkSUnit.st
index 4bd167a..938f087 100644
--- a/packages/visualgst/SUnit/GtkSUnit.st
+++ b/packages/visualgst/SUnit/GtkSUnit.st
@@ -152,7 +152,7 @@ GtkBrowsingTool subclass: GtkSUnit [
^ methodWidget := GtkMethodSUnitWidget new
- whenSelectionChangedSend: #onMethodChanged to: self;
+ whenSelectionChangedSend: #onMethodChanged: to: self;
yourself.
]
@@ -221,12 +221,12 @@ GtkBrowsingTool subclass: GtkSUnit [
state := CategoryState on: self with: class -> '*'
]
- onMethodChanged [
+ onMethodChanged: aSelectionChanged [
self checkCodeWidgetAndUpdate: [
- methodWidget hasSelectedMethod ifFalse: [^self].
- self selectAnInstanceMethod: methodWidget selectedMethodSymbol ]
+ aSelectionChanged hasSelection ifFalse: [^self].
+ self selectAnInstanceMethod: aSelectionChanged selection selector ]
]
selectAnInstanceMethod: aSymbol [
diff --git a/packages/visualgst/StBrowser/GtkCategoryWidget.st b/packages/visualgst/StBrowser/GtkCategoryWidget.st
index adbecce..0fcccca 100644
--- a/packages/visualgst/StBrowser/GtkCategoryWidget.st
+++ b/packages/visualgst/StBrowser/GtkCategoryWidget.st
@@ -48,6 +48,7 @@ Compoment subclass: GtkCategoryWidget [
initialize [
+ super initialize.
self initializeCategories.
self buildTreeView.
self registerNotifier
@@ -120,7 +121,10 @@ Compoment subclass: GtkCategoryWidget [
whenSelectionChangedSend: aSelector to: anObject [
- widget whenSelectionChangedSend: aSelector to: anObject
+ (events includes: #'selection-changed') ifFalse:
+ [ events add: #'selection-changed'.
+ widget whenSelectionChangedSend: #value: to: [ :ann | announcer announce: (SelectionChangedAnnouncement widget: self) ] ].
+ announcer on: SelectionChangedAnnouncement do: [ :ann | anObject perform: aSelector with: ann ].
]
state [
diff --git a/packages/visualgst/StBrowser/GtkClassBrowserWidget.st b/packages/visualgst/StBrowser/GtkClassBrowserWidget.st
index e51e6ff..7bc2366 100644
--- a/packages/visualgst/StBrowser/GtkClassBrowserWidget.st
+++ b/packages/visualgst/StBrowser/GtkClassBrowserWidget.st
@@ -143,19 +143,19 @@ Compoment subclass: GtkClassBrowserWidget [
buildInstanceCategoryView [
- ^ (iCategoryWidget := self buildWidget: GtkCategoryWidget whenSelectionChangedSend: #onInstanceSideCategoryChanged)
+ ^ (iCategoryWidget := self buildWidget: GtkCategoryWidget whenSelectionChangedSend: #onCategoryOrMethodChanged:)
]
buildClassCategoryView [
- ^ (cCategoryWidget := self buildWidget: GtkCategoryWidget whenSelectionChangedSend: #onClassSideCategoryChanged)
+ ^ (cCategoryWidget := self buildWidget: GtkCategoryWidget whenSelectionChangedSend: #onCategoryOrMethodChanged:)
]
buildClassMethodView [
- ^ (cMethodWidget := self buildWidget: GtkMethodWidget whenSelectionChangedSend: #onClassSideMethodChanged)
+ ^ (cMethodWidget := self buildWidget: GtkMethodWidget whenSelectionChangedSend: #onCategoryOrMethodChanged:)
browser: self;
yourself
]
@@ -163,7 +163,7 @@ Compoment subclass: GtkClassBrowserWidget [
buildInstanceMethodView [
- ^ (iMethodWidget := self buildWidget: GtkMethodWidget whenSelectionChangedSend: #onInstanceSideMethodChanged)
+ ^ (iMethodWidget := self buildWidget: GtkMethodWidget whenSelectionChangedSend: #onCategoryOrMethodChanged:)
browser: self;
yourself
]
@@ -270,28 +270,10 @@ Compoment subclass: GtkClassBrowserWidget [
ensure: [classHierarchyUpdate := false ]
]
- onInstanceSideCategoryChanged [
+ onCategoryOrMethodChanged: aSelectionChanged [
- self updateState: iCategoryWidget state
- ]
-
- onClassSideCategoryChanged [
-
-
- self updateState: cCategoryWidget state
- ]
-
- onInstanceSideMethodChanged [
-
-
- self updateState: iMethodWidget state
- ]
-
- onClassSideMethodChanged [
-
-
- self updateState: cMethodWidget state
+ self updateState: aSelectionChanged widget state
]
undoStack [
diff --git a/packages/visualgst/StBrowser/GtkMethodWidget.st b/packages/visualgst/StBrowser/GtkMethodWidget.st
index d28d6e5..22441a4 100644
--- a/packages/visualgst/StBrowser/GtkMethodWidget.st
+++ b/packages/visualgst/StBrowser/GtkMethodWidget.st
@@ -48,6 +48,7 @@ Compoment subclass: GtkMethodWidget [
initialize [
+ super initialize.
self
buildTreeView;
registerNotifier
@@ -144,7 +145,10 @@ Compoment subclass: GtkMethodWidget [
whenSelectionChangedSend: aSelector to: anObject [
- widget whenSelectionChangedSend: aSelector to: anObject
+ (events includes: #'selection-changed') ifFalse:
+ [ events add: #'selection-changed'.
+ widget whenSelectionChangedSend: #value: to: [ :ann | announcer announce: (SelectionChangedAnnouncement widget: self) ] ].
+ announcer on: SelectionChangedAnnouncement do: [ :ann | anObject perform: aSelector with: ann ].
]
launcher [
@@ -179,6 +183,12 @@ Compoment subclass: GtkMethodWidget [
ifFalse: [ category ]
]
+ hasSelection [
+
+
+ ^ widget hasSelection
+ ]
+
hasSelectedMethod [
@@ -197,6 +207,13 @@ Compoment subclass: GtkMethodWidget [
^ self selectedMethod selector
]
+ selection [
+
+
+ self ifNoSelection: [ self error: 'nothing is selected' ].
+ ^ widget selection
+ ]
+
selectedMethod [
diff --git a/packages/visualgst/Widget/Compoment.st b/packages/visualgst/Widget/Compoment.st
index 752d220..48f3b18 100644
--- a/packages/visualgst/Widget/Compoment.st
+++ b/packages/visualgst/Widget/Compoment.st
@@ -40,6 +40,8 @@ Widget subclass: Compoment [
initialize [
+ announcer := Announcer new.
+ events := Set new.
]
widget: aWidget [
@@ -63,3 +65,4 @@ Widget subclass: Compoment [
widget hideAll
]
]
+
diff --git a/packages/visualgst/Widget/Entry.st b/packages/visualgst/Widget/Entry.st
index 251f46c..440ab24 100644
--- a/packages/visualgst/Widget/Entry.st
+++ b/packages/visualgst/Widget/Entry.st
@@ -61,7 +61,10 @@ Widget subclass: Entry [
whenTextChangedSend: aSelector to: anObject [
- child connectSignal: 'activate' to: anObject selector: aSelector
+ (events includes: #activate) ifFalse:
+ [ events add: #activate.
+ child connectSignal: 'activate' to: [ announcer announce: (TextChangedAnnouncement widget: self) ] selector: #value ].
+ announcer on: TextChangedAnnouncement do: [ :ann | anObject perform: aSelector with: ann ]
]
]
diff --git a/packages/visualgst/Widget/Events/SelectionChangedAnnouncement.st b/packages/visualgst/Widget/Events/SelectionChangedAnnouncement.st
new file mode 100644
index 0000000..24eb336
--- /dev/null
+++ b/packages/visualgst/Widget/Events/SelectionChangedAnnouncement.st
@@ -0,0 +1,50 @@
+"======================================================================
+|
+| SelectionChangedAnnouncement class definition
+|
+======================================================================"
+
+"======================================================================
+|
+| Copyright (c) 2013
+| Gwenael Casaccio ,
+|
+|
+| This file is part of VisualGST.
+|
+| Permission is hereby granted, free of charge, to any person obtaining
+| a copy of this software and associated documentation files (the
+| 'Software'), to deal in the Software without restriction, including
+| without limitation the rights to use, copy, modify, merge, publish,
+| distribute, sublicense, and/or sell copies of the Software, and to
+| permit persons to whom the Software is furnished to do so, subject to
+| the following conditions:
+|
+| The above copyright notice and this permission notice shall be
+| included in all copies or substantial portions of the Software.
+|
+| THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+| IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+| CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+| TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+| SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+|
+======================================================================"
+
+WidgetAnnouncement subclass: SelectionChangedAnnouncement [
+
+ hasSelection [
+
+
+ ^ self widget hasSelection
+ ]
+
+ selection [
+
+
+ ^ self widget selection
+ ]
+]
+
diff --git a/packages/visualgst/Widget/Events/TextChangedAnnouncement.st b/packages/visualgst/Widget/Events/TextChangedAnnouncement.st
new file mode 100644
index 0000000..12c53a3
--- /dev/null
+++ b/packages/visualgst/Widget/Events/TextChangedAnnouncement.st
@@ -0,0 +1,44 @@
+"======================================================================
+|
+| TextChangedAnnouncement class definition
+|
+======================================================================"
+
+"======================================================================
+|
+| Copyright (c) 2013
+| Gwenael Casaccio ,
+|
+|
+| This file is part of VisualGST.
+|
+| Permission is hereby granted, free of charge, to any person obtaining
+| a copy of this software and associated documentation files (the
+| 'Software'), to deal in the Software without restriction, including
+| without limitation the rights to use, copy, modify, merge, publish,
+| distribute, sublicense, and/or sell copies of the Software, and to
+| permit persons to whom the Software is furnished to do so, subject to
+| the following conditions:
+|
+| The above copyright notice and this permission notice shall be
+| included in all copies or substantial portions of the Software.
+|
+| THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+| IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+| CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+| TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+| SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+|
+======================================================================"
+
+WidgetAnnouncement subclass: TextChangedAnnouncement [
+
+ text [
+
+
+ ^ self widget text
+ ]
+]
+
diff --git a/packages/visualgst/Widget/Events/WidgetAnnouncement.st b/packages/visualgst/Widget/Events/WidgetAnnouncement.st
new file mode 100644
index 0000000..63fbebc
--- /dev/null
+++ b/packages/visualgst/Widget/Events/WidgetAnnouncement.st
@@ -0,0 +1,60 @@
+"======================================================================
+|
+| WidgetAnnouncement class definition
+|
+======================================================================"
+
+"======================================================================
+|
+| Copyright (c) 2013
+| Gwenael Casaccio ,
+|
+|
+| This file is part of VisualGST.
+|
+| Permission is hereby granted, free of charge, to any person obtaining
+| a copy of this software and associated documentation files (the
+| 'Software'), to deal in the Software without restriction, including
+| without limitation the rights to use, copy, modify, merge, publish,
+| distribute, sublicense, and/or sell copies of the Software, and to
+| permit persons to whom the Software is furnished to do so, subject to
+| the following conditions:
+|
+| The above copyright notice and this permission notice shall be
+| included in all copies or substantial portions of the Software.
+|
+| THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+| IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+| CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+| TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+| SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+|
+======================================================================"
+
+Announcement subclass: WidgetAnnouncement [
+
+ | widget |
+
+ WidgetAnnouncement class >> widget: aWidget [
+
+
+ ^ self new
+ widget: aWidget;
+ yourself
+ ]
+
+ widget [
+
+
+ ^ widget
+ ]
+
+ widget: aWidget [
+
+
+ widget := aWidget
+ ]
+]
+
diff --git a/packages/visualgst/Widget/List.st b/packages/visualgst/Widget/List.st
index 7ede3fc..de761bb 100644
--- a/packages/visualgst/Widget/List.st
+++ b/packages/visualgst/Widget/List.st
@@ -154,7 +154,10 @@ Widget subclass: List [
whenSelectionChangedSend: aSymbol to: anObject [
- list getSelection connectSignal: 'changed' to: anObject selector: aSymbol
+ (events includes: #changed) ifFalse:
+ [ events add: #changed.
+ list getSelection connectSignal: 'changed' to: [ announcer announce: (SelectionChangedAnnouncement widget: self) ] selector: #value ].
+ announcer on: SelectionChangedAnnouncement do: [ :ann | anObject perform: aSymbol with: ann ]
]
onPress: aGtkWidget event: aGdkEvent [
@@ -169,10 +172,5 @@ Widget subclass: List [
menu showAll.
^ true
]
-
- list [
-
- ^ list
- ]
]
diff --git a/packages/visualgst/Widget/Widget.st b/packages/visualgst/Widget/Widget.st
index 594b053..11979a3 100644
--- a/packages/visualgst/Widget/Widget.st
+++ b/packages/visualgst/Widget/Widget.st
@@ -35,7 +35,7 @@
Object subclass: Widget [
- | child parent parentWindow popupMenu |
+ | child parent parentWindow popupMenu announcer events |
Widget class >> new [
@@ -64,6 +64,8 @@ Object subclass: Widget [
initialize [
+ announcer := Announcer new.
+ events := Set new.
self showAll
]
diff --git a/packages/visualgst/package.xml b/packages/visualgst/package.xml
index 4fc96eb..611a812 100644
--- a/packages/visualgst/package.xml
+++ b/packages/visualgst/package.xml
@@ -165,6 +165,9 @@
Category/AbstractNamespace.st
Category/Class.st
GtkConcreteWidget.st
+ Widget/Events/WidgetAnnouncement.st
+ Widget/Events/TextChangedAnnouncement.st
+ Widget/Events/SelectionChangedAnnouncement.st
Widget/Widget.st
Widget/Compoment.st
Widget/Label.st
--
1.8.3.2