Smalltalk createPackage: 'Helios-Layout'! HLWidget subclass: #HLContainer instanceVariableNames: 'splitter' package: 'Helios-Layout'! !HLContainer methodsFor: 'accessing'! splitter ^ splitter ! splitter: aSplitter splitter := aSplitter ! ! !HLContainer methodsFor: 'rendering'! renderOn: html html div class: 'tool_container'; with: self splitter ! ! !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 ! 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 css: 'top') ! resize: anInteger | container size offset percentage | container := firstPane asJQuery parent. offset := firstPane asJQuery offset top. size := container height. percentage := (size - (anInteger - offset)) / size * 100. percentage := 80 min: (percentage max: 20). firstPane asJQuery css: 'bottom' put: percentage asString, '%'. splitter asJQuery css: 'top' put: (100 - percentage) asString, '%'. secondPane asJQuery css: 'top' put: (100 - percentage) asString, '%' ! 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 css: 'left') ! resize: anInteger | container size offset percentage | container := firstPane asJQuery parent. offset := firstPane asJQuery offset left. size := container width. percentage := (size - (anInteger - offset)) / size * 100. percentage := 80 min: (percentage max: 20). firstPane asJQuery css: 'right' put: percentage asString, '%'. splitter asJQuery css: 'left' put: (100 - percentage) asString, '%'. secondPane asJQuery css: 'left' put: (100 - percentage) asString, '%' ! 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 ! !