| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 | 
							- Smalltalk current createPackage: 'Helios-Layout'!
 
- Widget subclass: #HLContainer
 
- 	instanceVariableNames: 'splitter'
 
- 	package: 'Helios-Layout'!
 
- !HLContainer methodsFor: 'accessing'!
 
- splitter
 
- 	^ splitter
 
- !
 
- splitter: aSplitter
 
- 	splitter := aSplitter
 
- ! !
 
- !HLContainer methodsFor: 'rendering'!
 
- renderOn: html
 
- 	html div 
 
-     	id: 'container'; 
 
-         with: self splitter.
 
-         
 
-    (window jQuery: window) bind: 'resize' do: [ self splitter resize ]
 
- ! !
 
- !HLContainer class methodsFor: 'instance creation'!
 
- with: aSplitter
 
- 	^ self new 
 
-     	splitter: aSplitter; 
 
-         yourself
 
- ! !
 
- Widget subclass: #HLSplitter
 
- 	instanceVariableNames: 'firstWidget secondWidget firstPane secondPane splitter'
 
- 	package: 'Helios-Layout'!
 
- !HLSplitter methodsFor: 'accessing'!
 
- cssClass
 
- 	^ 'splitter'
 
- !
 
- firstWidget
 
- 	^ firstWidget
 
- !
 
- firstWidget: aWidget
 
- 	firstWidget := aWidget
 
- !
 
- secondWidget
 
- 	^ secondWidget
 
- !
 
- secondWidget: aWidget
 
- 	secondWidget := aWidget
 
- ! !
 
- !HLSplitter methodsFor: 'rendering'!
 
- panesCssClass
 
- 	^ 'panes'
 
- !
 
- renderOn: html
 
- 	html div class: self panesCssClass; with: [
 
- 		firstPane := html div class: 'pane'; with: self firstWidget.
 
-     	splitter := html div class: self cssClass.
 
-     	secondPane := html div class: 'pane'; with: self secondWidget ].
 
-         
 
- 	self 
 
-     	setupSplitter;
 
-         resize
 
- !
 
- resize
 
- 	self firstWidget isHeliosSplitter ifTrue: [ self firstWidget resize ].
 
-     self secondWidget isHeliosSplitter ifTrue: [ self secondWidget resize ]
 
- !
 
- setupSplitter
 
- ! !
 
- !HLSplitter methodsFor: 'testing'!
 
- isHeliosSplitter
 
- 	^ true
 
- ! !
 
- !HLSplitter class methodsFor: 'instance creation'!
 
- with: aWidget with: anotherWidget
 
- 	^ self new
 
-     		firstWidget: aWidget;
 
-             secondWidget: anotherWidget;
 
-             yourself
 
- ! !
 
- HLSplitter subclass: #HLHorizontalSplitter
 
- 	instanceVariableNames: ''
 
- 	package: 'Helios-Layout'!
 
- !HLHorizontalSplitter methodsFor: 'accessing'!
 
- cssClass
 
- 	^ super cssClass, ' horizontal'
 
- !
 
- panesCssClass
 
- 	^ super panesCssClass, ' horizontal'
 
- ! !
 
- !HLHorizontalSplitter methodsFor: 'actions'!
 
- resize
 
- 	self resize: splitter asJQuery offset top
 
- !
 
- resize: anInteger
 
- 	| container position |
 
-     
 
-     container := firstPane asJQuery parent.
 
-     position := anInteger - container offset top.
 
-     
 
- 	firstPane asJQuery height: ((position min: container height - 100) max: 100).
 
-     secondPane asJQuery height: (((container height - position) min: container height - 100) max: 100) - 6.
 
-     
 
-     super resize
 
- !
 
- startResizing: aSplitter
 
- 	aSplitter width: splitter asJQuery width
 
- ! !
 
- !HLHorizontalSplitter methodsFor: 'rendering'!
 
- setupSplitter
 
- 	splitter asJQuery draggable: #{ 
 
-     	'axis' -> 'y'. 
 
-         'containment' -> splitter asJQuery parent.
 
-         'helper' -> 'clone'.
 
-         'start' -> [ :e :ui | self startResizing: ui helper ].
 
-         'drag' -> [ :e :ui | self resize: ui offset top ] }
 
- ! !
 
- HLSplitter subclass: #HLVerticalSplitter
 
- 	instanceVariableNames: ''
 
- 	package: 'Helios-Layout'!
 
- !HLVerticalSplitter methodsFor: 'accessing'!
 
- cssClass
 
- 	^ super cssClass, ' vertical'
 
- !
 
- panesCssClass
 
- 	^ super panesCssClass, ' vertical'
 
- ! !
 
- !HLVerticalSplitter methodsFor: 'actions'!
 
- resize
 
- 	self resize: splitter asJQuery offset left
 
- !
 
- resize: anInteger
 
- 	| container position |
 
-     
 
-     container := firstPane asJQuery parent.
 
-     position := anInteger - container offset left.
 
-     
 
- 	firstPane asJQuery width: ((position min: container width - 100) max: 100).
 
-     secondPane asJQuery width: (((container width - position) min: container width - 100) max: 100) - 6.
 
-     
 
-     super resize
 
- !
 
- startResizing: aSplitter
 
- 	aSplitter height: splitter asJQuery height
 
- ! !
 
- !HLVerticalSplitter methodsFor: 'rendering'!
 
- setupSplitter
 
- 	splitter asJQuery draggable: #{ 
 
-     	'axis' -> 'x'. 
 
-         'containment' -> splitter asJQuery parent.
 
-         'helper' -> 'clone'.
 
-         'start' -> [ :e :ui | self startResizing: ui helper ].
 
-         'drag' -> [ :e :ui | self resize: ui offset left ] }
 
- ! !
 
- !Object methodsFor: '*Helios-Layout'!
 
- isHeliosSplitter
 
- 	^ false
 
- ! !
 
 
  |