mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2025-12-06 14:00:55 +03:00
Theme Editor:
- special renderer for directory history combobox list that dimes path parts - disable menu items and buttons if no directory or editor is open - set editor font size when opening new editor if increased/decreased
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
package com.formdev.flatlaf.themeeditor;
|
package com.formdev.flatlaf.themeeditor;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.awt.Container;
|
import java.awt.Container;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
@@ -86,6 +87,7 @@ class FlatThemeFileEditor
|
|||||||
private boolean inLoadDirectory;
|
private boolean inLoadDirectory;
|
||||||
|
|
||||||
private final FlatThemePropertiesBaseManager propertiesBaseManager = new FlatThemePropertiesBaseManager();
|
private final FlatThemePropertiesBaseManager propertiesBaseManager = new FlatThemePropertiesBaseManager();
|
||||||
|
private final JButton newButton;
|
||||||
|
|
||||||
static void main( String[] args ) {
|
static void main( String[] args ) {
|
||||||
File dir = (args.length > 0)
|
File dir = (args.length > 0)
|
||||||
@@ -118,12 +120,14 @@ class FlatThemeFileEditor
|
|||||||
|
|
||||||
initComponents();
|
initComponents();
|
||||||
|
|
||||||
|
directoryField.setRenderer( new DirectoryRenderer() );
|
||||||
|
|
||||||
openDirectoryButton.setIcon( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/menu-open.svg" ) );
|
openDirectoryButton.setIcon( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/menu-open.svg" ) );
|
||||||
if( UIManager.getLookAndFeel() instanceof FlatDarkLaf )
|
if( UIManager.getLookAndFeel() instanceof FlatDarkLaf )
|
||||||
darkLafMenuItem.setSelected( true );
|
darkLafMenuItem.setSelected( true );
|
||||||
|
|
||||||
// add "+" button to tabbed pane
|
// add "+" button to tabbed pane
|
||||||
JButton newButton = new JButton( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/add.svg" ) );
|
newButton = new JButton( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/add.svg" ) );
|
||||||
newButton.setToolTipText( "New Properties File" );
|
newButton.setToolTipText( "New Properties File" );
|
||||||
newButton.addActionListener( e -> newPropertiesFile() );
|
newButton.addActionListener( e -> newPropertiesFile() );
|
||||||
JToolBar trailingToolBar = new JToolBar();
|
JToolBar trailingToolBar = new JToolBar();
|
||||||
@@ -144,6 +148,10 @@ class FlatThemeFileEditor
|
|||||||
dir = null;
|
dir = null;
|
||||||
if( dir != null )
|
if( dir != null )
|
||||||
loadDirectory( dir );
|
loadDirectory( dir );
|
||||||
|
else if( directoryField.getSelectedItem() != null )
|
||||||
|
loadDirectory( (File) directoryField.getSelectedItem() );
|
||||||
|
|
||||||
|
enableDisableActions();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openDirectory() {
|
private void openDirectory() {
|
||||||
@@ -223,16 +231,15 @@ class FlatThemeFileEditor
|
|||||||
if( inLoadDirectory )
|
if( inLoadDirectory )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Object selectedItem = directoryField.getSelectedItem();
|
File dir = (File) directoryField.getSelectedItem();
|
||||||
if( selectedItem == null )
|
if( dir == null )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
File dir = new File( (String) selectedItem );
|
|
||||||
if( checkDirectory( this, dir ) )
|
if( checkDirectory( this, dir ) )
|
||||||
loadDirectory( dir );
|
loadDirectory( dir );
|
||||||
else {
|
else {
|
||||||
// remove from directories history
|
// remove from directories history
|
||||||
directoryField.removeItem( selectedItem );
|
directoryField.removeItem( dir );
|
||||||
directoryField.setSelectedItem( this.dir.getAbsolutePath() );
|
directoryField.setSelectedItem( this.dir.getAbsolutePath() );
|
||||||
saveState();
|
saveState();
|
||||||
}
|
}
|
||||||
@@ -258,12 +265,11 @@ class FlatThemeFileEditor
|
|||||||
tabbedPane.removeTabAt( i );
|
tabbedPane.removeTabAt( i );
|
||||||
|
|
||||||
// update directory field
|
// update directory field
|
||||||
DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) directoryField.getModel();
|
DefaultComboBoxModel<File> model = (DefaultComboBoxModel<File>) directoryField.getModel();
|
||||||
String dirStr = dir.getAbsolutePath();
|
int indexOf = model.getIndexOf( dir );
|
||||||
int indexOf = model.getIndexOf( dirStr );
|
|
||||||
if( indexOf < 0 )
|
if( indexOf < 0 )
|
||||||
model.addElement( dirStr );
|
model.addElement( dir );
|
||||||
directoryField.setSelectedItem( dirStr );
|
directoryField.setSelectedItem( dir );
|
||||||
|
|
||||||
// open all properties files in directory
|
// open all properties files in directory
|
||||||
String recentFile = state.get( KEY_RECENT_FILE, null );
|
String recentFile = state.get( KEY_RECENT_FILE, null );
|
||||||
@@ -271,8 +277,8 @@ class FlatThemeFileEditor
|
|||||||
openFile( file, file.getName().equals( recentFile ) );
|
openFile( file, file.getName().equals( recentFile ) );
|
||||||
|
|
||||||
activateEditor();
|
activateEditor();
|
||||||
|
|
||||||
saveState();
|
saveState();
|
||||||
|
enableDisableActions();
|
||||||
|
|
||||||
inLoadDirectory = false;
|
inLoadDirectory = false;
|
||||||
}
|
}
|
||||||
@@ -335,6 +341,7 @@ class FlatThemeFileEditor
|
|||||||
|
|
||||||
private void openFile( File file, boolean select ) {
|
private void openFile( File file, boolean select ) {
|
||||||
FlatThemeEditorPane themeEditorPane = new FlatThemeEditorPane();
|
FlatThemeEditorPane themeEditorPane = new FlatThemeEditorPane();
|
||||||
|
themeEditorPane.updateFontSize( getFontSizeIncr() );
|
||||||
try {
|
try {
|
||||||
themeEditorPane.load( file );
|
themeEditorPane.load( file );
|
||||||
} catch( IOException ex ) {
|
} catch( IOException ex ) {
|
||||||
@@ -366,11 +373,30 @@ class FlatThemeFileEditor
|
|||||||
if( inLoadDirectory )
|
if( inLoadDirectory )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
enableDisableActions();
|
||||||
|
|
||||||
FlatThemeEditorPane themeEditorPane = (FlatThemeEditorPane) tabbedPane.getSelectedComponent();
|
FlatThemeEditorPane themeEditorPane = (FlatThemeEditorPane) tabbedPane.getSelectedComponent();
|
||||||
String filename = (themeEditorPane != null) ? themeEditorPane.getFile().getName() : null;
|
String filename = (themeEditorPane != null) ? themeEditorPane.getFile().getName() : null;
|
||||||
putPrefsString( state, KEY_RECENT_FILE, filename );
|
putPrefsString( state, KEY_RECENT_FILE, filename );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void enableDisableActions() {
|
||||||
|
boolean dirOpen = (directoryField.getSelectedItem() != null);
|
||||||
|
boolean editorOpen = (dirOpen &&tabbedPane.getSelectedIndex() >= 0);
|
||||||
|
|
||||||
|
// enable/disable buttons
|
||||||
|
newButton.setEnabled( dirOpen );
|
||||||
|
|
||||||
|
// enable/disable menu items
|
||||||
|
newPropertiesFileMenuItem.setEnabled( dirOpen );
|
||||||
|
saveAllMenuItem.setEnabled( editorOpen );
|
||||||
|
findMenuItem.setEnabled( editorOpen );
|
||||||
|
insertColorMenuItem.setEnabled( editorOpen );
|
||||||
|
activateEditorMenuItem.setEnabled( editorOpen );
|
||||||
|
nextEditorMenuItem.setEnabled( editorOpen );
|
||||||
|
previousEditorMenuItem.setEnabled( editorOpen );
|
||||||
|
}
|
||||||
|
|
||||||
private boolean newPropertiesFile() {
|
private boolean newPropertiesFile() {
|
||||||
return newPropertiesFile( dir );
|
return newPropertiesFile( dir );
|
||||||
}
|
}
|
||||||
@@ -716,7 +742,12 @@ class FlatThemeFileEditor
|
|||||||
|
|
||||||
// restore directories history
|
// restore directories history
|
||||||
String[] directories = getPrefsStrings( state, KEY_DIRECTORIES );
|
String[] directories = getPrefsStrings( state, KEY_DIRECTORIES );
|
||||||
SortedComboBoxModel<String> model = new SortedComboBoxModel<>( directories );
|
SortedComboBoxModel<File> model = new SortedComboBoxModel<>( new File[0] );
|
||||||
|
for( String dirStr : directories ) {
|
||||||
|
File dir = new File( dirStr );
|
||||||
|
if( dir.isDirectory() )
|
||||||
|
model.addElement( dir );
|
||||||
|
}
|
||||||
directoryField.setModel( model );
|
directoryField.setModel( model );
|
||||||
|
|
||||||
// restore overlay color models
|
// restore overlay color models
|
||||||
@@ -731,10 +762,10 @@ class FlatThemeFileEditor
|
|||||||
|
|
||||||
private void saveState() {
|
private void saveState() {
|
||||||
// save directories history
|
// save directories history
|
||||||
ComboBoxModel<String> model = directoryField.getModel();
|
ComboBoxModel<File> model = directoryField.getModel();
|
||||||
String[] directories = new String[model.getSize()];
|
String[] directories = new String[model.getSize()];
|
||||||
for( int i = 0; i < directories.length; i++ )
|
for( int i = 0; i < directories.length; i++ )
|
||||||
directories[i] = model.getElementAt( i );
|
directories[i] = model.getElementAt( i ).getAbsolutePath();
|
||||||
putPrefsStrings( state, KEY_DIRECTORIES, directories );
|
putPrefsStrings( state, KEY_DIRECTORIES, directories );
|
||||||
|
|
||||||
// save recent directory
|
// save recent directory
|
||||||
@@ -1053,6 +1084,7 @@ class FlatThemeFileEditor
|
|||||||
//---- directoryField ----
|
//---- directoryField ----
|
||||||
directoryField.setEditable(false);
|
directoryField.setEditable(false);
|
||||||
directoryField.setFocusable(false);
|
directoryField.setFocusable(false);
|
||||||
|
directoryField.setMaximumRowCount(30);
|
||||||
directoryField.addActionListener(e -> directoryChanged());
|
directoryField.addActionListener(e -> directoryChanged());
|
||||||
controlPanel.add(directoryField, "cell 1 0");
|
controlPanel.add(directoryField, "cell 1 0");
|
||||||
|
|
||||||
@@ -1105,7 +1137,7 @@ class FlatThemeFileEditor
|
|||||||
private JMenuItem aboutMenuItem;
|
private JMenuItem aboutMenuItem;
|
||||||
private JPanel controlPanel;
|
private JPanel controlPanel;
|
||||||
private JLabel directoryLabel;
|
private JLabel directoryLabel;
|
||||||
private JComboBox<String> directoryField;
|
private JComboBox<File> directoryField;
|
||||||
private JButton openDirectoryButton;
|
private JButton openDirectoryButton;
|
||||||
private FlatTabbedPane tabbedPane;
|
private FlatTabbedPane tabbedPane;
|
||||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||||
@@ -1170,4 +1202,41 @@ class FlatThemeFileEditor
|
|||||||
return -(low + 1);
|
return -(low + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---- class DirectoryRenderer --------------------------------------------
|
||||||
|
|
||||||
|
private static class DirectoryRenderer
|
||||||
|
extends DefaultListCellRenderer
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public Component getListCellRendererComponent( JList<?> list, Object value,
|
||||||
|
int index, boolean isSelected, boolean cellHasFocus )
|
||||||
|
{
|
||||||
|
if( index > 0 && !isSelected ) {
|
||||||
|
File dir = (File) value;
|
||||||
|
File previousDir = (File) list.getModel().getElementAt( index - 1 );
|
||||||
|
String path = dir.getAbsolutePath();
|
||||||
|
String previousPath = previousDir.getAbsolutePath();
|
||||||
|
for( File d = dir.getParentFile(); d != null; d = d.getParentFile() ) {
|
||||||
|
String p = d.getAbsolutePath();
|
||||||
|
if( previousPath.startsWith( p ) && d.getParent() != null ) {
|
||||||
|
value = "<html>" + toDimmedText( p ) + path.substring( p.length() ) + "</html>";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String toDimmedText( String text ) {
|
||||||
|
Color color = UIManager.getColor( "Label.disabledForeground" );
|
||||||
|
if( color == null )
|
||||||
|
color = UIManager.getColor( "Label.disabledText" );
|
||||||
|
if( color == null )
|
||||||
|
color = Color.GRAY;
|
||||||
|
return String.format( "<span color=\"#%06x\">%s</span>",
|
||||||
|
color.getRGB() & 0xffffff, text );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,8 +28,9 @@ new FormModel {
|
|||||||
name: "directoryField"
|
name: "directoryField"
|
||||||
"editable": false
|
"editable": false
|
||||||
"focusable": false
|
"focusable": false
|
||||||
|
"maximumRowCount": 30
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.typeParameters": "String"
|
"JavaCodeGenerator.typeParameters": "File"
|
||||||
}
|
}
|
||||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "directoryChanged", false ) )
|
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "directoryChanged", false ) )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
|
|||||||
Reference in New Issue
Block a user