From 3fcad9637ee3ee8af5e58eedb37bcf4a81fba5ba Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Mon, 9 Sep 2019 14:58:31 +0200 Subject: [PATCH] FileChooser: newFolderIcon, upFolderIcon, homeFolderIcon, detailsViewIcon and listViewIcon added --- .../icons/FlatFileChooserDetailsViewIcon.java | 55 ++++++++++++++++ .../icons/FlatFileChooserHomeFolderIcon.java | 48 ++++++++++++++ .../icons/FlatFileChooserListViewIcon.java | 59 ++++++++++++++++++ .../icons/FlatFileChooserNewFolderIcon.java | 52 +++++++++++++++ .../icons/FlatFileChooserUpFolderIcon.java | 52 +++++++++++++++ .../com/formdev/flatlaf/ui/FlatUIUtils.java | 9 +++ .../com/formdev/flatlaf/FlatLaf.properties | 15 +++++ .../com/formdev/flatlaf/FlatChooserTest.java | 8 +++ .../com/formdev/flatlaf/FlatChooserTest.jfd | 13 +++- .../svg/FileChooserDetailsViewIcon.svg | 8 +++ .../svg/FileChooserHomeFolderIcon.svg | 3 + flatlaf-core/svg/FileChooserListViewIcon.svg | 10 +++ flatlaf-core/svg/FileChooserNewFolderIcon.svg | 6 ++ flatlaf-core/svg/FileChooserUpFolderIcon.svg | 6 ++ flatlaf-core/svg/FlatLaf Icons.sketch | Bin 7861 -> 12810 bytes 15 files changed, 343 insertions(+), 1 deletion(-) create mode 100644 flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserDetailsViewIcon.java create mode 100644 flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserHomeFolderIcon.java create mode 100644 flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserListViewIcon.java create mode 100644 flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserNewFolderIcon.java create mode 100644 flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserUpFolderIcon.java create mode 100644 flatlaf-core/svg/FileChooserDetailsViewIcon.svg create mode 100644 flatlaf-core/svg/FileChooserHomeFolderIcon.svg create mode 100644 flatlaf-core/svg/FileChooserListViewIcon.svg create mode 100644 flatlaf-core/svg/FileChooserNewFolderIcon.svg create mode 100644 flatlaf-core/svg/FileChooserUpFolderIcon.svg diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserDetailsViewIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserDetailsViewIcon.java new file mode 100644 index 00000000..9293124a --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserDetailsViewIcon.java @@ -0,0 +1,55 @@ +/* + * Copyright 2019 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.icons; + +import java.awt.Component; +import java.awt.Graphics2D; +import javax.swing.UIManager; + +/** + * "details view" icon for {@link javax.swing.JFileChooser}. + * + * @uiDefault FileChooser.icon.detailsViewColor Color + * + * @author Karl Tauber + */ +public class FlatFileChooserDetailsViewIcon + extends FlatAbstractIcon +{ + public FlatFileChooserDetailsViewIcon() { + super( 16, 16, UIManager.getColor( "FileChooser.icon.detailsViewColor" ) ); + } + + @Override + protected void paintIcon( Component c, Graphics2D g ) { + /* + + + + + + + + + */ + + g.fillRect( 3, 3, 4, 4 ); + g.fillRect( 3, 9, 4, 4 ); + g.fillRect( 9, 9, 4, 4 ); + g.fillRect( 9, 3, 4, 4 ); + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserHomeFolderIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserHomeFolderIcon.java new file mode 100644 index 00000000..281870c7 --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserHomeFolderIcon.java @@ -0,0 +1,48 @@ +/* + * Copyright 2019 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.icons; + +import java.awt.Component; +import java.awt.Graphics2D; +import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatUIUtils; + +/** + * "home folder" icon for {@link javax.swing.JFileChooser}. + * + * @uiDefault FileChooser.icon.homeFolderColor Color + * + * @author Karl Tauber + */ +public class FlatFileChooserHomeFolderIcon + extends FlatAbstractIcon +{ + public FlatFileChooserHomeFolderIcon() { + super( 16, 16, UIManager.getColor( "FileChooser.icon.homeFolderColor" ) ); + } + + @Override + protected void paintIcon( Component c, Graphics2D g ) { + /* + + + + */ + + g.fill( FlatUIUtils.createPath( 2,8, 8,2, 14,8, 12,8, 12,13, 9,13, 9,10, 7,10, 7,13, 4,13, 4,8 ) ); + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserListViewIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserListViewIcon.java new file mode 100644 index 00000000..cc744b7d --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserListViewIcon.java @@ -0,0 +1,59 @@ +/* + * Copyright 2019 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.icons; + +import java.awt.Component; +import java.awt.Graphics2D; +import javax.swing.UIManager; + +/** + * "list view" icon for {@link javax.swing.JFileChooser}. + * + * @uiDefault FileChooser.icon.listViewColor Color + * + * @author Karl Tauber + */ +public class FlatFileChooserListViewIcon + extends FlatAbstractIcon +{ + public FlatFileChooserListViewIcon() { + super( 16, 16, UIManager.getColor( "FileChooser.icon.listViewColor" ) ); + } + + @Override + protected void paintIcon( Component c, Graphics2D g ) { + /* + + + + + + + + + + + */ + + g.fillRect( 2, 3, 2, 2 ); + g.fillRect( 2, 7, 2, 2 ); + g.fillRect( 2, 11, 2, 2 ); + g.fillRect( 6, 3, 8, 2 ); + g.fillRect( 6, 7, 8, 2 ); + g.fillRect( 6, 11, 8, 2 ); + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserNewFolderIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserNewFolderIcon.java new file mode 100644 index 00000000..efcfaa61 --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserNewFolderIcon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2019 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.icons; + +import java.awt.Component; +import java.awt.Graphics2D; +import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatUIUtils; + +/** + * "new folder" icon for {@link javax.swing.JFileChooser}. + * + * @uiDefault FileChooser.icon.newFolderColor Color + * + * @author Karl Tauber + */ +public class FlatFileChooserNewFolderIcon + extends FlatAbstractIcon +{ + public FlatFileChooserNewFolderIcon() { + super( 16, 16, UIManager.getColor( "FileChooser.icon.newFolderColor" ) ); + } + + @Override + protected void paintIcon( Component c, Graphics2D g ) { + /* + + + + + + + */ + + g.fill( FlatUIUtils.createPath( 2,3, 5.5,3, 7,5, 14,5, 14,8, 11,8, 11,10, 9,10, 9,13, 2,13 ) ); + g.fill( FlatUIUtils.createPath( 14,11, 16,11, 16,13, 14,13, 14,15, 12,15, 12,13, 10,13, 10,11, 12,11, 12,9, 14,9, 14,11 ) ); + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserUpFolderIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserUpFolderIcon.java new file mode 100644 index 00000000..ecbfc647 --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatFileChooserUpFolderIcon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2019 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.icons; + +import java.awt.Component; +import java.awt.Graphics2D; +import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatUIUtils; + +/** + * "up folder" icon for {@link javax.swing.JFileChooser}. + * + * @uiDefault FileChooser.icon.upFolderColor Color + * + * @author Karl Tauber + */ +public class FlatFileChooserUpFolderIcon + extends FlatAbstractIcon +{ + public FlatFileChooserUpFolderIcon() { + super( 16, 16, UIManager.getColor( "FileChooser.icon.upFolderColor" ) ); + } + + @Override + protected void paintIcon( Component c, Graphics2D g ) { + /* + + + + + + + */ + + g.fill( FlatUIUtils.createPath( 2,3, 5.5,3, 7,5, 9,5, 9,9, 13,9, 13,5, 14,5, 14,13, 2,13 ) ); + g.fill( FlatUIUtils.createPath( 12,4, 12,8, 10,8, 10,4, 8,4, 11,1, 14,4, 12,4 ) ); + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java index 5fae4ccb..ef15be0c 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java @@ -168,6 +168,15 @@ public class FlatUIUtils return rect; } + public static Path2D createPath( double... points ) { + Path2D path = new Path2D.Float(); + path.moveTo( points[0], points[1] ); + for( int i = 2; i < points.length; i += 2 ) + path.lineTo( points[i], points[i + 1] ); + path.closePath(); + return path; + } + /** * Replacement for SwingUtilities2.drawStringUnderlineCharAt() */ diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties index 0e7352b8..f9a11c90 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties @@ -104,6 +104,21 @@ EditorPane.background=@textComponentBackground EditorPane.margin=@textComponentMargin +#---- FileChooser ---- + +FileChooser.newFolderIcon=com.formdev.flatlaf.icons.FlatFileChooserNewFolderIcon +FileChooser.upFolderIcon=com.formdev.flatlaf.icons.FlatFileChooserUpFolderIcon +FileChooser.homeFolderIcon=com.formdev.flatlaf.icons.FlatFileChooserHomeFolderIcon +FileChooser.detailsViewIcon=com.formdev.flatlaf.icons.FlatFileChooserDetailsViewIcon +FileChooser.listViewIcon=com.formdev.flatlaf.icons.FlatFileChooserListViewIcon + +FileChooser.icon.newFolderColor=@icon +FileChooser.icon.upFolderColor=@icon +FileChooser.icon.homeFolderColor=@icon +FileChooser.icon.detailsViewColor=@icon +FileChooser.icon.listViewColor=@icon + + #---- FormattedTextField ---- FormattedTextField.border=com.formdev.flatlaf.ui.FlatBorder diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatChooserTest.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatChooserTest.java index 1083a768..c3570cf0 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatChooserTest.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatChooserTest.java @@ -38,6 +38,8 @@ public class FlatChooserTest // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents JLabel colorChooserLabel = new JLabel(); JColorChooser colorChooser1 = new JColorChooser(); + JLabel fileChooserLabel = new JLabel(); + JFileChooser fileChooser1 = new JFileChooser(); //======== this ======== setLayout(new MigLayout( @@ -46,12 +48,18 @@ public class FlatChooserTest "[]" + "[]", // rows + "[top]" + "[top]")); //---- colorChooserLabel ---- colorChooserLabel.setText("JColorChooser:"); add(colorChooserLabel, "cell 0 0"); add(colorChooser1, "cell 1 0"); + + //---- fileChooserLabel ---- + fileChooserLabel.setText("JFileChooser:"); + add(fileChooserLabel, "cell 0 1"); + add(fileChooser1, "cell 1 1"); // JFormDesigner - End of component initialization //GEN-END:initComponents } diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatChooserTest.jfd b/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatChooserTest.jfd index 35dae4ff..24cb7847 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatChooserTest.jfd +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatChooserTest.jfd @@ -9,7 +9,7 @@ new FormModel { add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "insets 0,hidemode 3,gap 5 5,ltr" "$columnConstraints": "[][]" - "$rowConstraints": "[top]" + "$rowConstraints": "[top][top]" } ) { name: "this" add( new FormComponent( "javax.swing.JLabel" ) { @@ -23,6 +23,17 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 0" } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "fileChooserLabel" + "text": "JFileChooser:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1" + } ) + add( new FormComponent( "javax.swing.JFileChooser" ) { + name: "fileChooser1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 1" + } ) }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 0, 0 ) "size": new java.awt.Dimension( 790, 715 ) diff --git a/flatlaf-core/svg/FileChooserDetailsViewIcon.svg b/flatlaf-core/svg/FileChooserDetailsViewIcon.svg new file mode 100644 index 00000000..069275e1 --- /dev/null +++ b/flatlaf-core/svg/FileChooserDetailsViewIcon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flatlaf-core/svg/FileChooserHomeFolderIcon.svg b/flatlaf-core/svg/FileChooserHomeFolderIcon.svg new file mode 100644 index 00000000..e2599d40 --- /dev/null +++ b/flatlaf-core/svg/FileChooserHomeFolderIcon.svg @@ -0,0 +1,3 @@ + + + diff --git a/flatlaf-core/svg/FileChooserListViewIcon.svg b/flatlaf-core/svg/FileChooserListViewIcon.svg new file mode 100644 index 00000000..dda96e57 --- /dev/null +++ b/flatlaf-core/svg/FileChooserListViewIcon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/flatlaf-core/svg/FileChooserNewFolderIcon.svg b/flatlaf-core/svg/FileChooserNewFolderIcon.svg new file mode 100644 index 00000000..59c59a83 --- /dev/null +++ b/flatlaf-core/svg/FileChooserNewFolderIcon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flatlaf-core/svg/FileChooserUpFolderIcon.svg b/flatlaf-core/svg/FileChooserUpFolderIcon.svg new file mode 100644 index 00000000..f5a072ef --- /dev/null +++ b/flatlaf-core/svg/FileChooserUpFolderIcon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flatlaf-core/svg/FlatLaf Icons.sketch b/flatlaf-core/svg/FlatLaf Icons.sketch index 4f5261a286739734b28a8d00d4ac48e2c348eadd..0f1539f7fa39eee9173d9a49ff486da80105b746 100644 GIT binary patch literal 12810 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�~MKY|VR_a>~|Ao>L+V^?5crQj-3 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 literal 7861 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