mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2025-12-06 22:10:54 +03:00
Theme Editor:
- remember last used preview tab - sync selected preview tab with all editors
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
} )
|
} )
|
||||||
|
|||||||
Reference in New Issue
Block a user