diff -r e542c6fb0de7 -r 14db1276218c UIPainter.st --- a/UIPainter.st Wed Aug 27 17:03:18 1997 +0200 +++ b/UIPainter.st Wed Aug 27 17:04:54 1997 +0200 @@ -13,7 +13,8 @@ ApplicationModel subclass:#UIPainter instanceVariableNames:'treeView selectionPanel tabSelection specClass specSelector - specSuperclass aspects layoutCanvas helpCanvas specCanvas' + specSuperclass aspects layoutCanvas helpCanvas specCanvas + transcript' classVariableNames:'IconStepUp IconStepOut IconStepIn IconStepDown' poolDictionaries:'' category:'Interface-UIPainter' @@ -212,6 +213,51 @@ ) ! ! +!UIPainter class methodsFor:'helpers'! + +convertString:aString maxLineSize:maxCharactersPerLine + "converts a string to a string collection with maximum characters + per line + " + |stream + max "{ Class:SmallInteger }" + size "{ Class:SmallInteger }" + start "{ Class:SmallInteger }" + stop "{ Class:SmallInteger }" + cpySz "{ Class:SmallInteger }" + lnSz "{ Class:SmallInteger }"| + + maxCharactersPerLine < 20 ifFalse:[max := maxCharactersPerLine - 1] + ifTrue:[max := 20]. + + (size := aString size) <= max ifTrue:[ + ^ aString + ]. + start := 1. + lnSz := 0. + stream := (String new:size) writeStream. + + [start <= size] whileTrue:[ + (start := aString indexOfNonSeparatorStartingAt:start) == 0 ifTrue:[ + ^ stream contents + ]. + (stop := aString indexOfSeparatorStartingAt:start) == 0 ifTrue:[ + stop := size + 1 + ]. + cpySz := stop - start. + + lnSz == 0 ifFalse:[ + (lnSz := lnSz + cpySz) >= max ifTrue:[stream cr. lnSz := cpySz ] + ifFalse:[stream space. lnSz := lnSz + 1] + ] ifTrue:[ + lnSz := cpySz + ]. + stream nextPutAll:aString startingAt:start to:(stop - 1). + start := stop. + ]. + ^ stream contents +! ! + !UIPainter class methodsFor:'icons'! iconAlignB @@ -447,11 +493,11 @@ #'window:' #(#WindowSpec #'name:' 'Tree-View' - #'layout:' #(#LayoutFrame 199 0 167 0 759 0 616 0) + #'layout:' #(#LayoutFrame 135 0 129 0 648 0 589 0) #'label:' 'Tree-View' #'min:' #(#Point 10 10) #'max:' #(#Point 1160 870) - #'bounds:' #(#Rectangle 199 167 760 617) + #'bounds:' #(#Rectangle 135 129 649 590) ) #'component:' #(#SpecCollection @@ -463,55 +509,6 @@ #'tabable:' true #'menu:' #menuPullDown ) - #(#NoteBookViewSpec - #'name:' 'noteBook' - #'layout:' #(#LayoutFrame 0 0.4 59 0.0 0 1.0 -55 1.0) - #'enableChannel:' #enableChannel - #'tabable:' true - #'menu:' #tabList - #'model:' #tabModel - #'tabWidget:' #Window - #'canvas:' #noteBookView - ) - #(#HorizontalPanelViewSpec - #'name:' 'modifyPanel' - #'layout:' #(#LayoutFrame 0 0.4 -55 1.0 0 1.0 -25 1.0) - #'component:' - #(#SpecCollection - #'collection:' - #( - #(#ActionButtonSpec - #'name:' 'cancelButton' - #'activeHelpKey:' #cancel - #'label:' 'cancel' - #'tabable:' true - #'model:' #cancel - #'enableChannel:' #modifiedChannel - #'extent:' #(#Point 164 24) - ) - #(#ActionButtonSpec - #'name:' 'acceptButton' - #'activeHelpKey:' #accept - #'label:' 'ok' - #'tabable:' true - #'model:' #accept - #'enableChannel:' #modifiedChannel - #'extent:' #(#Point 164 24) - ) - ) - ) - #'level:' 0 - #'horizontalLayout:' #fitSpace - #'verticalLayout:' #fitSpace - #'horizontalSpace:' 3 - #'verticalSpace:' 3 - ) - #(#LabelSpec - #'name:' 'helpInfo' - #'layout:' #(#LayoutFrame 2 0.0 -25 1.0 -2 1.0 -2 1.0) - #'level:' -1 - #'adjust:' #left - ) #(#ToggleSpec #'name:' 'galleryLabel' #'layout:' #(#LayoutFrame -162 1.0 1 0 -82 1.0 23 0) @@ -532,17 +529,6 @@ #'showLamp:' true #'lampColor:' #(#Color 100.0 100.0 0.0) ) - #(#ArbitraryComponentSpec - #'name:' 'treeView' - #'layout:' #(#LayoutFrame 0 0.0 59 0 0 0.4 -25 1.0) - #'menu:' #menuCanvas - #'hasHorizontalScrollBar:' true - #'hasVerticalScrollBar:' true - #'miniScrollerHorizontal:' true - #'miniScrollerVertical:' true - #'component:' #treeView - #'hasBorder:' false - ) #(#HorizontalPanelViewSpec #'name:' 'menuContainer' #'layout:' #(#LayoutFrame 0 0.0 26 0 0 1.0 58 0) @@ -626,6 +612,97 @@ #'horizontalSpace:' 3 #'verticalSpace:' 3 ) + #(#VariableVerticalPanelSpec + #'name:' 'vpanel' + #'layout:' #(#LayoutFrame 0 0.0 59 0.0 0 1.0 0 1.0) + #'component:' + #(#SpecCollection + #'collection:' + #( + #(#VariableHorizontalPanelSpec + #'name:' 'hpanel' + #'component:' + #(#SpecCollection + #'collection:' + #( + #(#ArbitraryComponentSpec + #'name:' 'treeView' + #'menu:' #menuCanvas + #'hasHorizontalScrollBar:' true + #'hasVerticalScrollBar:' true + #'miniScrollerHorizontal:' true + #'miniScrollerVertical:' true + #'component:' #treeView + #'hasBorder:' false + ) + #(#ViewSpec + #'name:' 'specHolderView' + #'component:' + #(#SpecCollection + #'collection:' + #( + #(#NoteBookViewSpec + #'name:' 'noteBook' + #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -30 1.0) + #'enableChannel:' #enableChannel + #'tabable:' true + #'menu:' #tabList + #'model:' #tabModel + #'tabWidget:' #Window + #'canvas:' #noteBookView + ) + #(#HorizontalPanelViewSpec + #'name:' 'modifyPanel' + #'layout:' #(#LayoutFrame 0 0.0 -30 1.0 0 1.0 0 1.0) + #'component:' + #(#SpecCollection + #'collection:' + #( + #(#ActionButtonSpec + #'name:' 'cancelButton' + #'activeHelpKey:' #cancel + #'label:' 'cancel' + #'tabable:' true + #'model:' #cancel + #'enableChannel:' #modifiedChannel + #'extent:' #(#Point 165 24) + ) + #(#ActionButtonSpec + #'name:' 'acceptButton' + #'activeHelpKey:' #accept + #'label:' 'ok' + #'tabable:' true + #'model:' #accept + #'enableChannel:' #modifiedChannel + #'extent:' #(#Point 165 24) + ) + ) + ) + #'horizontalLayout:' #fitSpace + #'verticalLayout:' #fitSpace + #'horizontalSpace:' 3 + #'verticalSpace:' 3 + ) + ) + ) + #'borderWidth:' 1 + ) + ) + ) + #'level:' 1 + #'handles:' #(#Any 0.329435 1.0) + ) + #(#TextEditorSpec + #'name:' 'Transcript' + #'hasHorizontalScrollBar:' true + #'hasVerticalScrollBar:' true + #'miniScrollerHorizontal:' true + #'miniScrollerVertical:' true + ) + ) + ) + #'handles:' #(#Any 0.880597 1.0) + ) ) ) ) @@ -1361,27 +1438,6 @@ "Modified: 31.7.1997 / 14:26:13 / cg" ! ! -!UIPainter methodsFor:'active help'! - -showHelp:aHelpText for:view - "hook to allow an application to display active help - texts in its own info area. - This method may be redefined in a concrete application. - If it returns false, the ActiveHelp manager will popup a - bubble with the help text." - - |l| - - (l := self builder componentAt:#helpInfo) notNil ifTrue:[ - aHelpText replaceAll:(Character cr) by:(Character space). - l label:aHelpText. - ^ true. - ]. - ^ false - - -! ! - !UIPainter methodsFor:'aspects'! canMoveOrAlignSelection @@ -1633,6 +1689,31 @@ ! ! +!UIPainter methodsFor:'printing'! + +show:aText + transcript hideCursor. + transcript contents:aText. + +! + +showHelp:aHelpText for:view + "hook to allow an application to display active help + texts in its own info area. + This method may be redefined in a concrete application. + If it returns false, the ActiveHelp manager will popup a + bubble with the help text." + + |txt| + + txt := self class convertString:(aHelpText asString) + maxLineSize:(transcript width // transcript font width). + + transcript hideCursor. + transcript contents:txt. + ^ true +! ! + !UIPainter methodsFor:'private'! hideUIView:aView @@ -1852,7 +1933,7 @@ list at:(size + 1) put:(UIHelpTool label). list at:(size + 2) put:(UILayoutTool label). self tabList value:list. - self showHelp:(spec class name) for:nil. + self show:(spec class name). tabComponent enabled:true. (tabSelection := tabComponent selection) isNil ifTrue:[ @@ -1862,7 +1943,7 @@ ] ifFalse:[ self helpTool helpKey:nil. tabComponent enabled:false. - self showHelp:'' for:nil. + self show:nil. ]. self modifiedChannel value:false. ! ! @@ -1953,7 +2034,7 @@ treeView model addDependent:self. super openInterface. - + transcript := (self builder componentAt:#Transcript) scrolledView. topView := self window. topView bePartner. topView label:'GUI Builder'.