|
@@ -491,115 +491,6 @@ do: aBlock on: aCollection displaying: aString
|
|
displaying: aString
|
|
displaying: aString
|
|
! !
|
|
! !
|
|
|
|
|
|
-Widget subclass: #HLTabWidget
|
|
|
|
- instanceVariableNames: 'widget label root'
|
|
|
|
- package: 'Helios-Core'!
|
|
|
|
-!HLTabWidget commentStamp!
|
|
|
|
-I am a widget specialized into building another widget as an Helios tab.
|
|
|
|
-
|
|
|
|
-I should not be used directly, `HLWidget class >> #openAsTab` should be used instead.
|
|
|
|
-
|
|
|
|
-## Example
|
|
|
|
-
|
|
|
|
- HLWorkspace openAsTab!
|
|
|
|
-
|
|
|
|
-!HLTabWidget methodsFor: 'accessing'!
|
|
|
|
-
|
|
|
|
-activate
|
|
|
|
- self manager activate: self
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-add
|
|
|
|
- self manager addTab: self
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-cssClass
|
|
|
|
- ^ self widget tabClass
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-displayLabel
|
|
|
|
- ^ self label size > 20
|
|
|
|
- ifTrue: [ (self label first: 20), '...' ]
|
|
|
|
- ifFalse: [ self label ]
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-focus
|
|
|
|
- self widget canHaveFocus ifTrue: [
|
|
|
|
- self widget focus ]
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-label
|
|
|
|
- ^ label ifNil: [ '' ]
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-label: aString
|
|
|
|
- label := aString
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-manager
|
|
|
|
- ^ HLManager current
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-widget
|
|
|
|
- ^ widget
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-widget: aWidget
|
|
|
|
- widget := aWidget
|
|
|
|
-! !
|
|
|
|
-
|
|
|
|
-!HLTabWidget methodsFor: 'actions'!
|
|
|
|
-
|
|
|
|
-hide
|
|
|
|
- root ifNotNil: [ root asJQuery css: 'visibility' put: 'hidden' ]
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-registerBindings
|
|
|
|
- self widget registerBindings
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-remove
|
|
|
|
- self widget unregister.
|
|
|
|
- root ifNotNil: [ root asJQuery remove ]
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-show
|
|
|
|
- root
|
|
|
|
- ifNil: [ self appendToJQuery: 'body' asJQuery ]
|
|
|
|
- ifNotNil: [ root asJQuery css: 'visibility' put: 'visible' ]
|
|
|
|
-! !
|
|
|
|
-
|
|
|
|
-!HLTabWidget methodsFor: 'rendering'!
|
|
|
|
-
|
|
|
|
-renderOn: html
|
|
|
|
- root := html div
|
|
|
|
- class: 'tab';
|
|
|
|
- yourself.
|
|
|
|
- self renderTab
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-renderTab
|
|
|
|
- root contents: [ :html |
|
|
|
|
- html div
|
|
|
|
- class: 'amber_box';
|
|
|
|
- with: [ self widget renderOn: html ] ]
|
|
|
|
-! !
|
|
|
|
-
|
|
|
|
-!HLTabWidget methodsFor: 'testing'!
|
|
|
|
-
|
|
|
|
-isActive
|
|
|
|
- ^ self manager activeTab = self
|
|
|
|
-! !
|
|
|
|
-
|
|
|
|
-!HLTabWidget class methodsFor: 'instance creation'!
|
|
|
|
-
|
|
|
|
-on: aWidget labelled: aString
|
|
|
|
- ^ self new
|
|
|
|
- widget: aWidget;
|
|
|
|
- label: aString;
|
|
|
|
- yourself
|
|
|
|
-! !
|
|
|
|
-
|
|
|
|
Widget subclass: #HLWidget
|
|
Widget subclass: #HLWidget
|
|
instanceVariableNames: 'wrapper'
|
|
instanceVariableNames: 'wrapper'
|
|
package: 'Helios-Core'!
|
|
package: 'Helios-Core'!
|
|
@@ -644,6 +535,13 @@ manager
|
|
^ HLManager current
|
|
^ HLManager current
|
|
!
|
|
!
|
|
|
|
|
|
|
|
+setTabLabel: aString
|
|
|
|
+ self manager announcer announce: (HLTabLabelChanged new
|
|
|
|
+ widget: self;
|
|
|
|
+ label: aString;
|
|
|
|
+ yourself)
|
|
|
|
+!
|
|
|
|
+
|
|
tabClass
|
|
tabClass
|
|
^ self class tabClass
|
|
^ self class tabClass
|
|
!
|
|
!
|
|
@@ -676,7 +574,8 @@ inform: aString
|
|
!
|
|
!
|
|
|
|
|
|
openAsTab
|
|
openAsTab
|
|
- HLManager current addTab: (HLTabWidget on: self labelled: self class tabLabel)
|
|
|
|
|
|
+ (HLTabWidget on: self labelled: self defaultTabLabel)
|
|
|
|
+ add
|
|
!
|
|
!
|
|
|
|
|
|
request: aString do: aBlock
|
|
request: aString do: aBlock
|
|
@@ -695,6 +594,12 @@ unregister
|
|
Widgets subscribing to announcements should unregister there"
|
|
Widgets subscribing to announcements should unregister there"
|
|
! !
|
|
! !
|
|
|
|
|
|
|
|
+!HLWidget methodsFor: 'defaults'!
|
|
|
|
+
|
|
|
|
+defaultTabLabel
|
|
|
|
+ ^ self class tabLabel
|
|
|
|
+! !
|
|
|
|
+
|
|
!HLWidget methodsFor: 'keybindings'!
|
|
!HLWidget methodsFor: 'keybindings'!
|
|
|
|
|
|
bindKeyDown: keyDownBlock keyUp: keyUpBlock
|
|
bindKeyDown: keyDownBlock keyUp: keyUpBlock
|
|
@@ -749,9 +654,9 @@ openAsTab
|
|
| instance |
|
|
| instance |
|
|
|
|
|
|
instance := self new.
|
|
instance := self new.
|
|
- HLManager current addTab: (HLTabWidget
|
|
|
|
|
|
+ (HLTabWidget
|
|
on: instance
|
|
on: instance
|
|
- labelled: self tabLabel).
|
|
|
|
|
|
+ labelled: instance defaultTabLabel) add.
|
|
^ instance
|
|
^ instance
|
|
!
|
|
!
|
|
|
|
|
|
@@ -1259,7 +1164,7 @@ renderContentOn: html
|
|
! !
|
|
! !
|
|
|
|
|
|
HLWidget subclass: #HLManager
|
|
HLWidget subclass: #HLManager
|
|
- instanceVariableNames: 'tabs activeTab environment history'
|
|
|
|
|
|
+ instanceVariableNames: 'tabs activeTab environment history announcer'
|
|
package: 'Helios-Core'!
|
|
package: 'Helios-Core'!
|
|
|
|
|
|
!HLManager methodsFor: 'accessing'!
|
|
!HLManager methodsFor: 'accessing'!
|
|
@@ -1268,6 +1173,10 @@ activeTab
|
|
^ activeTab
|
|
^ activeTab
|
|
!
|
|
!
|
|
|
|
|
|
|
|
+announcer
|
|
|
|
+ ^ announcer ifNil: [ announcer := Announcer new ]
|
|
|
|
+!
|
|
|
|
+
|
|
environment
|
|
environment
|
|
"The default environment used by all Helios objects"
|
|
"The default environment used by all Helios objects"
|
|
|
|
|
|
@@ -2082,3 +1991,133 @@ default
|
|
^ default ifNil: [ default := self new ]
|
|
^ default ifNil: [ default := self new ]
|
|
! !
|
|
! !
|
|
|
|
|
|
|
|
+HLWidget subclass: #HLTabWidget
|
|
|
|
+ instanceVariableNames: 'widget label root'
|
|
|
|
+ package: 'Helios-Core'!
|
|
|
|
+!HLTabWidget commentStamp!
|
|
|
|
+I am a widget specialized into building another widget as an Helios tab.
|
|
|
|
+
|
|
|
|
+I should not be used directly, `HLWidget class >> #openAsTab` should be used instead.
|
|
|
|
+
|
|
|
|
+## Example
|
|
|
|
+
|
|
|
|
+ HLWorkspace openAsTab!
|
|
|
|
+
|
|
|
|
+!HLTabWidget methodsFor: 'accessing'!
|
|
|
|
+
|
|
|
|
+activate
|
|
|
|
+ self manager activate: self
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+cssClass
|
|
|
|
+ ^ self widget tabClass
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+displayLabel
|
|
|
|
+ ^ self label size > 20
|
|
|
|
+ ifTrue: [ (self label first: 20), '...' ]
|
|
|
|
+ ifFalse: [ self label ]
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+focus
|
|
|
|
+ self widget canHaveFocus ifTrue: [
|
|
|
|
+ self widget focus ]
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+label
|
|
|
|
+ ^ label ifNil: [ '' ]
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+label: aString
|
|
|
|
+ label := aString
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+manager
|
|
|
|
+ ^ HLManager current
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+widget
|
|
|
|
+ ^ widget
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+widget: aWidget
|
|
|
|
+ widget := aWidget
|
|
|
|
+! !
|
|
|
|
+
|
|
|
|
+!HLTabWidget methodsFor: 'actions'!
|
|
|
|
+
|
|
|
|
+add
|
|
|
|
+ self manager addTab: self.
|
|
|
|
+ self observeManager
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+hide
|
|
|
|
+ root ifNotNil: [ root asJQuery css: 'visibility' put: 'hidden' ]
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+observeManager
|
|
|
|
+ self manager announcer
|
|
|
|
+ on: HLTabLabelChanged
|
|
|
|
+ send: #onTabLabelChanged:
|
|
|
|
+ to: self
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+registerBindings
|
|
|
|
+ self widget registerBindings
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+remove
|
|
|
|
+ self unregister.
|
|
|
|
+ self widget unregister.
|
|
|
|
+ root ifNotNil: [ root asJQuery remove ]
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+show
|
|
|
|
+ root
|
|
|
|
+ ifNil: [ self appendToJQuery: 'body' asJQuery ]
|
|
|
|
+ ifNotNil: [ root asJQuery css: 'visibility' put: 'visible' ]
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+unregister
|
|
|
|
+ self manager announcer unsubscribe: self
|
|
|
|
+! !
|
|
|
|
+
|
|
|
|
+!HLTabWidget methodsFor: 'reactions'!
|
|
|
|
+
|
|
|
|
+onTabLabelChanged: anAnnouncement
|
|
|
|
+ anAnnouncement widget = self widget ifTrue: [
|
|
|
|
+ self label: anAnnouncement label.
|
|
|
|
+ self manager refresh]
|
|
|
|
+! !
|
|
|
|
+
|
|
|
|
+!HLTabWidget methodsFor: 'rendering'!
|
|
|
|
+
|
|
|
|
+renderOn: html
|
|
|
|
+ root := html div
|
|
|
|
+ class: 'tab';
|
|
|
|
+ yourself.
|
|
|
|
+ self renderTab
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+renderTab
|
|
|
|
+ root contents: [ :html |
|
|
|
|
+ html div
|
|
|
|
+ class: 'amber_box';
|
|
|
|
+ with: [ self widget renderOn: html ] ]
|
|
|
|
+! !
|
|
|
|
+
|
|
|
|
+!HLTabWidget methodsFor: 'testing'!
|
|
|
|
+
|
|
|
|
+isActive
|
|
|
|
+ ^ self manager activeTab = self
|
|
|
|
+! !
|
|
|
|
+
|
|
|
|
+!HLTabWidget class methodsFor: 'instance creation'!
|
|
|
|
+
|
|
|
|
+on: aWidget labelled: aString
|
|
|
|
+ ^ self new
|
|
|
|
+ widget: aWidget;
|
|
|
|
+ label: aString;
|
|
|
|
+ yourself
|
|
|
|
+! !
|
|
|
|
+
|