FontPanel.st
changeset 5911 c2619d90b1b1
parent 5903 9f80a35511a4
child 5913 9978a04ca957
--- 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