Theme Editor:

- remember last used preview tab
- sync selected preview tab with all editors
This commit is contained in:
Karl Tauber
2021-09-05 11:13:29 +02:00
parent 4795fe5687
commit c2c79c4676
2 changed files with 20 additions and 2 deletions

View File

@@ -21,6 +21,7 @@ import java.awt.*;
import java.awt.event.HierarchyEvent; import java.awt.event.HierarchyEvent;
import java.util.Map; import java.util.Map;
import java.util.WeakHashMap; import java.util.WeakHashMap;
import java.util.prefs.Preferences;
import javax.swing.*; import javax.swing.*;
import javax.swing.UIDefaults.ActiveValue; import javax.swing.UIDefaults.ActiveValue;
import javax.swing.UIDefaults.LazyValue; import javax.swing.UIDefaults.LazyValue;
@@ -36,20 +37,27 @@ class FlatThemePreview
extends JPanel extends JPanel
implements DocumentListener implements DocumentListener
{ {
private static final String KEY_SELECTED_TAB = "preview.selectedTab";
private final FlatSyntaxTextArea textArea; private final FlatSyntaxTextArea textArea;
private final Timer timer; private final Timer timer;
private final Preferences state;
private final Map<LazyValue, Object> lazyValueCache = new WeakHashMap<>(); private final Map<LazyValue, Object> lazyValueCache = new WeakHashMap<>();
private int runWithUIDefaultsGetterLevel; private int runWithUIDefaultsGetterLevel;
FlatThemePreview( FlatSyntaxTextArea textArea ) { FlatThemePreview( FlatSyntaxTextArea textArea ) {
this.textArea = textArea; this.textArea = textArea;
state = Preferences.userRoot().node( FlatThemeFileEditor.PREFS_ROOT_PATH );
initComponents(); initComponents();
// add tabs
tabbedPane.addTab( "All", createPreviewTab( new FlatThemePreviewAll( this ) ) ); tabbedPane.addTab( "All", createPreviewTab( new FlatThemePreviewAll( this ) ) );
tabbedPane.addTab( "Buttons", createPreviewTab( new FlatThemePreviewButtons() ) ); tabbedPane.addTab( "Buttons", createPreviewTab( new FlatThemePreviewButtons() ) );
tabbedPane.addTab( "Switches", createPreviewTab( new FlatThemePreviewSwitches() ) ); tabbedPane.addTab( "Switches", createPreviewTab( new FlatThemePreviewSwitches() ) );
selectRecentTab();
tabbedPane.addChangeListener( e -> selectedTabChanged() );
// timer used for delayed preview updates // timer used for delayed preview updates
timer = new Timer( 300, e -> update() ); timer = new Timer( 300, e -> update() );
@@ -61,6 +69,7 @@ class FlatThemePreview
// update when showing preview (e.g. activating tab) // update when showing preview (e.g. activating tab)
addHierarchyListener( e -> { addHierarchyListener( e -> {
if( (e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 && isShowing() ) if( (e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 && isShowing() )
selectRecentTab();
updateLater(); updateLater();
} ); } );
} }
@@ -74,6 +83,17 @@ class FlatThemePreview
return scrollPane; return scrollPane;
} }
private void selectRecentTab() {
int selectedTab = state.getInt( KEY_SELECTED_TAB, -1 );
if( selectedTab >= 0 && selectedTab < tabbedPane.getTabCount() )
tabbedPane.setSelectedIndex( selectedTab );
}
private void selectedTabChanged() {
update();
state.putInt( KEY_SELECTED_TAB, tabbedPane.getSelectedIndex() );
}
@Override @Override
public void insertUpdate( DocumentEvent e ) { public void insertUpdate( DocumentEvent e ) {
timer.restart(); timer.restart();
@@ -169,7 +189,6 @@ class FlatThemePreview
{ {
tabbedPane.setLeadingComponent(previewLabel); tabbedPane.setLeadingComponent(previewLabel);
tabbedPane.setTabAreaAlignment(FlatTabbedPane.TabAreaAlignment.trailing); tabbedPane.setTabAreaAlignment(FlatTabbedPane.TabAreaAlignment.trailing);
tabbedPane.addChangeListener(e -> update());
} }
add(tabbedPane, BorderLayout.CENTER); add(tabbedPane, BorderLayout.CENTER);

View File

@@ -9,7 +9,6 @@ new FormModel {
name: "tabbedPane" name: "tabbedPane"
"leadingComponent": new FormReference( "previewLabel" ) "leadingComponent": new FormReference( "previewLabel" )
"tabAreaAlignment": enum com.formdev.flatlaf.extras.components.FlatTabbedPane$TabAreaAlignment trailing "tabAreaAlignment": enum com.formdev.flatlaf.extras.components.FlatTabbedPane$TabAreaAlignment trailing
addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "update", false ) )
}, new FormLayoutConstraints( class java.lang.String ) { }, new FormLayoutConstraints( class java.lang.String ) {
"value": "Center" "value": "Center"
} ) } )