--- a/FontPanel.st Wed Oct 12 20:09:25 2016 +0200
+++ b/FontPanel.st Thu Oct 13 01:00:41 2016 +0200
@@ -604,6 +604,81 @@
!FontPanel methodsFor:'initialization'!
+createFontSelectionBrowserIn:aView
+ |topSelectionBox fontLabelAndSizeSelectionBox
+ l hLabel v1 v2 v3 familyLabel faceLabel sizeLabel fH mm|
+
+ mm := ViewSpacing.
+ hLabel := 30.
+
+ l := (0@0 corner:1@1) asFractionalLayout.
+ l bottomInset:hLabel.
+ topSelectionBox := (View in:aView) layout:l.
+
+ l := (1@0 corner:1@1) asFractionalLayout.
+ l topOffset:hLabel negated.
+ l rightInset:mm.
+
+ fontLabelAndSizeSelectionBox := (HorizontalPanelView in:aView) layout:l.
+ fontLabelAndSizeSelectionBox horizontalLayout:#rightFit.
+
+ v1 := View origin:0.0@0.0 corner:0.3@1.0 in:topSelectionBox.
+
+ familyLabel := Label label:(resources string:'Family') in:v1.
+ familyLabel borderWidth:0.
+ familyLabel origin:(0.0 @ 0.0) extent:(1.0 @ nil).
+ fH := familyLabel preferredHeight.
+
+ familyList := ScrollableView for:SelectionInListView in:v1.
+ familyList origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+ familyList inset:mm.
+ familyList topInset:fH.
+
+ familyList := familyList scrolledView.
+ self makeTabable:familyList.
+
+ v2 := View origin:0.3@0.0 corner:0.8@1.0 in:topSelectionBox.
+
+ faceLabel := Label label:(resources string:'Typeface') in:v2.
+ faceLabel borderWidth:0.
+ faceLabel origin:(0.0 @ 0.0) extent:(1.0 @ nil).
+
+ faceList := ScrollableView for:SelectionInListView in:v2.
+ faceList origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+ faceList inset:mm.
+ faceList topInset:fH.
+ faceList := faceList scrolledView.
+ self makeTabable:faceList.
+
+ v3 := View origin:0.8@0.0 corner:1.0@1.0 in:topSelectionBox.
+
+ sizeLabelHolder := (resources string:'Size') asValue.
+ sizeLabel := Label in:v3.
+ sizeLabel labelChannel:sizeLabelHolder.
+ sizeLabel borderWidth:0.
+ sizeLabel origin:(0.0 @ 0.0)extent:(1.0 @ nil).
+
+ sizeList := ScrollableView for:SelectionInListView in:v3.
+ sizeList origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+ sizeList inset:mm.
+ sizeList topInset:fH.
+ sizeList := sizeList scrolledView.
+ self makeTabable:sizeList.
+
+ familyList action:[:lineNr | self familySelected:(familyList selectionValue)].
+ faceList action:[:lineNr | self faceSelected:(faceList selectionValue)].
+ sizeList action:[:lineNr | self sizeSelected:(sizeList selectionValue)].
+
+ nameLabel := Label label:'' in:fontLabelAndSizeSelectionBox.
+ nameLabel level:0; adjust:#left.
+
+ pixelPointSwitch := ComboListView in:fontLabelAndSizeSelectionBox.
+ pixelPointSwitch level:-1.
+ pixelPointSwitch contents:'pt'.
+ pixelPointSwitch list:#(#pt #px).
+ pixelPointSwitch action:[:sizeUnit | self sizeUnitSelected:sizeUnit].
+!
+
enabled:aBoolean
familyList enabled:aBoolean.
faceList enabled:aBoolean.
@@ -629,118 +704,93 @@
initialize
"sigh: hand-crafted box creation; TODO: rewrite using UI painter"
- |familyLabel faceLabel sizeLabel panel panel2 fontBrowserView fp v1 v2 v3
- mm fH l box1 box2 box3 box4 showFontNameLabel xftCheckBox vPanel changeInAllCheckBox
+ |everythingExceptOkCancelButtonsPanel fontBrowserView mm l encodingAndXFTOnlyBox box3 box4 xftCheckBox
+ previewAndFontSelectionPanel filterBox changeInAllCheckBox updateHeight
xftFlushFontList decorativeCheckBox nonDecorativeCheckBox monospacedCheckBox nonMonospacedCheckBox|
super initialize.
- showFontNameLabel := device isWindowsPlatform not.
+ label := resources string:'Font dialog'.
sizeUnit := #pt.
-
mm := ViewSpacing.
self addAbortAndOkButtons.
- panel := View origin:0.0@0.0 corner:1.0@1.0 in:self.
- panel bottomInset:(buttonPanel preferredHeight
- + (mm)
- "+ (showFontNameLabel ifTrue:24 ifFalse:0)" ).
-
- vPanel := VariableVerticalPanel in:panel.
- vPanel origin:0.0@0.0 corner:1.0@1.0.
-
- previewField := HVScrollableView for:TextView in:vPanel.
- fontBrowserView := View in:vPanel.
- fp := View in:fontBrowserView.
- fp layout:(0.0@0.0 corner:1.0@1.0) asFractionalLayout.
- fp layout bottomOffset:-150.
-
- label := resources string:'Font dialog'.
+ everythingExceptOkCancelButtonsPanel := View origin:0.0@0.0 corner:1.0@1.0 in:self.
+ everythingExceptOkCancelButtonsPanel bottomInset:(buttonPanel preferredHeight + (mm)).
- panel2 := VerticalPanelView in:fontBrowserView.
- panel2 layout:(0.0@1.0 corner:1.0@1.0) asFractionalLayout.
- panel2 layout topOffset:-150.
-
- panel2 horizontalLayout:#fit.
- panel2 verticalLayout:#top.
-
- box1 := HorizontalPanelView in:panel2.
- box1 height:25.
- box1 horizontalLayout:#rightFit.
-
- showFontNameLabel ifTrue:[
- nameLabel := Label label:'' in:box1.
- "/ nameLabel origin:0.0@1.0 corner:1.0@1.0.
- "/ nameLabel bottomInset:(buttonPanel preferredHeight + (mm*2)).
- "/ nameLabel topInset:(buttonPanel preferredHeight + (mm*2) + 24) negated; horizontalInset:mm.
- nameLabel level:0; adjust:#left.
- ].
+ previewAndFontSelectionPanel := VariableVerticalPanel in:everythingExceptOkCancelButtonsPanel.
+ previewAndFontSelectionPanel layout:(LayoutFrame
+ leftFraction:0 offset:0
+ rightFraction:1 offset:0
+ topFraction:0 offset:0
+ bottomFraction:1 offset:-150).
+
+ filterBox := VerticalPanelView in:everythingExceptOkCancelButtonsPanel.
+ filterBox layout:(LayoutFrame
+ leftFraction:0 offset:0
+ rightFraction:1 offset:0
+ topFraction:1 offset:-150
+ bottomFraction:1 offset:0).
+ filterBox horizontalLayout:#fit verticalLayout:#top.
- pixelPointSwitch := ComboListView in:box1.
- "/ encodingFilter font:l font.
- pixelPointSwitch level:-1.
- pixelPointSwitch contents:'pt'.
- pixelPointSwitch list:#(#pt #px).
- pixelPointSwitch action:[:sizeUnit | self sizeUnitSelected:sizeUnit].
- "/ box2 topInset:(pixelPointSwitch preferredHeight negated-4); horizontalInset:mm.
- "/ encodingFilter editor font:l font.
+ previewField := HVScrollableView for:TextView in:previewAndFontSelectionPanel.
+ previewField menuHolder:self previewMenu.
+ previewField autoHideScrollBars:true.
+ previewField := previewField scrolledView.
+"/ previewField inset:mm.
+"/ self is3D ifTrue:[
+"/ previewField level:-1.
+"/ ] ifFalse:[
+"/ previewField borderWidth:1.
+"/ ].
- panel2 add:(View new height:8).
-
- "/ self showEncodingFilter ifFalse:[
- "/ encodingFilter beInvisible
- "/ ].
+ fontBrowserView := View in:previewAndFontSelectionPanel.
+ self createFontSelectionBrowserIn:fontBrowserView.
- box2 := HorizontalPanelView in:panel2.
- box2 height:25.
- box2 horizontalLayout:#leftSpace.
-
- l := Label label:(resources string:'Encoding:') in:box2.
- l borderWidth:0.
- l adjust:#left.
+ encodingAndXFTOnlyBox := HorizontalPanelView in:filterBox.
+ encodingAndXFTOnlyBox height:32.
+ encodingAndXFTOnlyBox horizontalLayout:#leftSpace.
- encodingFilterField := ComboBoxView in:box2.
- "/ encodingFilterField font:l font.
- encodingFilterField level:-1.
- encodingFilterField contents:'*'.
- encodingFilterField list:(self listOfEncodingsInFilterCombo).
- encodingFilterField action:[:pattern | self encodingFilterSelected:pattern].
- encodingFilterField immediateAccept:true.
- "/ encodingFilterField editor font:l font.
+ l := Label label:(resources string:'Encoding:') in:encodingAndXFTOnlyBox.
+ l borderWidth:0.
+ l adjust:#left.
- self showEncodingFilter ifFalse:[
- encodingFilterField beInvisible
- ].
-
+ encodingFilterField := ComboBoxView in:encodingAndXFTOnlyBox.
+ encodingFilterField level:-1.
+ encodingFilterField contents:'*'.
+ encodingFilterField list:(self listOfEncodingsInFilterCombo).
+ encodingFilterField action:[:pattern | self encodingFilterSelected:pattern].
+ encodingFilterField immediateAccept:true.
"/ encodingFilterField acceptOnReturn:true.
"/ encodingFilterField acceptOnTab:true.
"/ encodingFilterField acceptOnLeave:true.
"/ encodingFilterField acceptOnLostFocus:true.
"/ encodingFilterField acceptOnPointerLeave:true.
- encodingLabel := Label label:' ' in:box2.
-
- encodingLabel level:0; adjust:#left.
- encodingLabel adjust:#right.
- self showEncodingFilter ifFalse:[
- encodingLabel beInvisible
- ].
+ encodingLabel := Label label:' ' in:encodingAndXFTOnlyBox.
+ encodingLabel level:0; adjust:#left.
+ encodingLabel adjust:#right.
+
+ self showEncodingFilter ifFalse:[
+ encodingFilterField beInvisible.
+ encodingLabel beInvisible
+ ].
- device supportsXftFonts ifTrue:[
- self xftFontsOnlyHolder value: (UserPreferences current useXftFontsOnly).
- xftCheckBox := CheckBox label:(resources string:'XFT Fonts Only') in:box2.
- xftCheckBox model:xftFontsOnlyHolder.
- xftFontsOnlyHolder onChangeEvaluate:[ self xftFontsOnlyChanged ].
+ device supportsXftFonts ifTrue:[
+ self xftFontsOnlyHolder value: (UserPreferences current useXftFontsOnly).
+ xftCheckBox := CheckBox label:(resources string:'XFT Fonts Only') in:encodingAndXFTOnlyBox.
+ xftCheckBox model:xftFontsOnlyHolder.
+ xftFontsOnlyHolder onChangeEvaluate:[ self xftFontsOnlyChanged ].
- xftFlushFontList := Button label:(resources string:'Flush Cached List of Fonts') in:box2.
- xftFlushFontList action:[ self flushListOfAvailableFonts].
- ].
+ xftFlushFontList := Button label:(resources string:'Flush Cached List of Fonts') in:encodingAndXFTOnlyBox.
+ xftFlushFontList action:[ self flushListOfAvailableFonts].
+ ].
false ifTrue:[
decorativeCheckBox := CheckBox label:(resources string:'Decorative Fonts Only').
box3 := View new height:(decorativeCheckBox preferredHeight).
- panel2 add:box3.
+ filterBox add:box3.
decorativeCheckBox origin:0.0@0.0 corner:0.5@1.0.
box3 add:decorativeCheckBox.
@@ -754,7 +804,7 @@
monospacedCheckBox := CheckBox label:(resources string:'Monospaced Fonts Only').
box4 := View new height:(monospacedCheckBox preferredHeight).
- panel2 add:box4.
+ filterBox add:box4.
monospacedCheckBox origin:0.0@0.0 corner:0.5@1.0.
box4 add:monospacedCheckBox.
@@ -767,70 +817,24 @@
self nonMonospacedOnlyHolder onChangeEvaluate:[ self filterChanged ].
].
- changeInAllCheckBox := CheckBox label:(resources string:'Change all Textviews and Default for New Views') in:panel2.
+ changeInAllCheckBox := CheckBox label:(resources string:'Change all Textviews and Default for New Views') in:filterBox.
changeInAllCheckBox model:self changeFontInAllViewsHolder.
changeInAllCheckBox visibilityChannel:self withChangeFontInAllViewsCheckBoxVisibleHolder.
- "/ previewField origin:0.0@0.0 corner:1.0@0.4.
- previewField autoHideScrollBars:true.
- previewField := previewField scrolledView.
- previewField inset:mm.
-
- self is3D ifTrue:[
- previewField level:-1.
- ] ifFalse:[
- previewField borderWidth:1.
- ].
-
- v1 := View origin:0.0@0.0 corner:0.4@1.0 in:fp.
+ updateHeight :=
+ [
+ |filterBoxHeight|
+
+ filterBoxHeight := filterBox preferredHeight.
+ previewAndFontSelectionPanel layout bottomOffset:(filterBoxHeight negated).
+ filterBox layout topOffset:(filterBoxHeight negated).
+ previewAndFontSelectionPanel layoutChanged.
+ filterBox layoutChanged.
+ ].
+
+ updateHeight value.
+ self withChangeFontInAllViewsCheckBoxVisibleHolder onChangeEvaluate:updateHeight.
- familyLabel := Label label:(resources string:'Family') in:v1.
- familyLabel borderWidth:0.
- familyLabel origin:(0.0 @ 0.0) extent:(1.0 @ nil).
- fH := familyLabel preferredHeight.
-
- familyList := ScrollableView for:SelectionInListView in:v1.
- familyList origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
- familyList inset:mm.
- familyList topInset:fH.
-
- familyList := familyList scrolledView.
- self makeTabable:familyList.
-
- v2 := View origin:0.4@0.0 corner:0.8@1.0 in:fp.
-
- faceLabel := Label label:(resources string:'Typeface') in:v2.
- faceLabel borderWidth:0.
- faceLabel origin:(0.0 @ 0.0) extent:(1.0 @ nil).
-
- faceList := ScrollableView for:SelectionInListView in:v2.
- faceList origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
- faceList inset:mm.
- faceList topInset:fH.
- faceList := faceList scrolledView.
- self makeTabable:faceList.
-
- v3 := View origin:0.8@0.0 corner:1.0@1.0 in:fp.
-
- sizeLabelHolder := (resources string:'Size') asValue.
- sizeLabel := Label in:v3.
- sizeLabel labelChannel:sizeLabelHolder.
- sizeLabel borderWidth:0.
- sizeLabel origin:(0.0 @ 0.0)extent:(1.0 @ nil).
-
- sizeList := ScrollableView for:SelectionInListView in:v3.
- sizeList origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
- sizeList inset:mm.
- sizeList topInset:fH.
- sizeList := sizeList scrolledView.
- self makeTabable:sizeList.
-
- familyList action:[:lineNr | self familySelected:(familyList selectionValue)].
- faceList action:[:lineNr | self faceSelected:(faceList selectionValue)].
- sizeList action:[:lineNr | self sizeSelected:(sizeList selectionValue)].
-
- previewField menuHolder:self previewMenu.
-
"
FontPanel new showAtPointer
FontPanel fontFromUser