/*******************************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Tiny Look and Feel * * (C) Copyright 2003 - 2007 Hans Bickel * * For
* licensing information and credits, please refer to the * comment in file
* de.muntjak.tinylookandfeel.TinyLookAndFeel * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
package de.muntjak.tinylookandfeel.controlpanel;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.beans.PropertyVetoException;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Locale;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.Vector;
import javax.swing.AbstractButton;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JPopupMenu;
import javax.swing.JProgressBar;
import javax.swing.JRadioButton;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSlider;
import javax.swing.JSpinner;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.KeyStroke;
import javax.swing.LookAndFeel;
import javax.swing.MenuElement;
import javax.swing.SpinnerDateModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
import javax.swing.plaf.FontUIResource;
import javax.swing.plaf.InsetsUIResource;
import javax.swing.table.AbstractTableModel;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Position;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreePath;
import de.muntjak.tinylookandfeel.Theme;
import de.muntjak.tinylookandfeel.TinyDefaultTheme;
import de.muntjak.tinylookandfeel.TinyLookAndFeel;
import de.muntjak.tinylookandfeel.TinyTitlePane;
/**
* ControlPanel 28.4.06 Added additional font sizes.
*
* @version 1.1
* @author Hans Bickel
*/
@SuppressWarnings (
{ "all" } )
public class ControlPanel
{
private JFrame theFrame;
private static final String WINDOW_TITLE = "TinyLaF "
+ TinyLookAndFeel.VERSION_STRING + " Controlpanel";
private static final int PLAIN_FONT = 1;
private static final int BOLD_FONT = 2;
private static final int SPECIAL_FONT = 3;
// control modes for SpreadPanel
static final int CONTROLS_BUTTON = 1;
static final int CONTROLS_WINDOW_BUTTON = 2;
static final int CONTROLS_COMBO = 3;
static final int CONTROLS_SCROLLBAR = 4;
static final int CONTROLS_SPINNER = 5;
static final int CONTROLS_ACTIVE_FRAME_CAPTION = 6;
static final int CONTROLS_INACTIVE_FRAME_CAPTION = 7;
private static String directoryPath = System.getProperty ( "user.dir" );
private static final Border sbFieldBorder = new LineBorder ( Color.DARK_GRAY,
1 );
private static final Color infoColor = new Color ( 208, 239, 255 );
private static final Border infoBorder = BorderFactory.createCompoundBorder (
BorderFactory.createLineBorder ( new Color ( 108, 108, 147 ) ),
BorderFactory.createEmptyBorder ( 3, 3, 3, 3 ) );
private static final int menuShortcutKeyMask = Toolkit.getDefaultToolkit ()
.getMenuShortcutKeyMask ();
// different targets to repaint
private static Component [] windowButtons;
private Component [] buttons, combos, frames, scrollBars, spinners;
private Icon icon99;
private Image image99;
private String currentFileName;
private ActionListener selectThemeAction = new SelectThemeAction ();
private ActionListener checkAction = new CheckAction ();
private ChangeListener updateAction = new UpdateAction ();
private ChangeListener spinnerUpdateAction = new SpinnerUpdateAction ();
private boolean resistUpdate = false;
private JPanel widgetInfo;
private ExamplePanel.DesktopPane desktopPane;
private JTree tree1, tree2;
private JScrollPane sp1, sp2;
private PopupTrigger trigger;
private JToolBar theToolBar;
private JMenu themesMenu;
private JTabbedPane mainTab, compTab;
private JButton updateThemeButton;
private JCheckBoxMenuItem customStyle;
private FontPanel plainFontPanel, boldFontPanel, specialFontPanel;
private JComboBox fontCombo;
private JRadioButton isPlainFont, isBoldFont;
private ColoredFont [] selectedFont;
private ExamplePanel examplePanel;
private JButton exampleButton, exampleDisabledButton;
private JToggleButton exampleToggleButton;
private Icon buttonIcon;
private JPopupMenu thePopup;
private JInternalFrame internalFrame, palette;
private JPopupMenu hsbPopup, sbPopup;
private ButtonsCP buttonsCP;
private ScrollBarCP scrollsCP;
private SeparatorCP separatorCP;
private TabbedPaneCP tabsCP;
private ComboCP comboCP;
private MenuCP menuCP;
private ListCP listCP;
private SliderCP sliderCP;
private SpinnerCP spinnerCP;
private ProgressCP progressCP;
private TextCP textCP;
private TreeCP treeCP;
private ToolBarCP toolCP;
private TableCP tableCP;
private JTable exampleTable;
private FrameCP frameCP;
private static JCheckBox decoratedFramesCheck;
private IconCP iconCP;
private ToolTipCP tipCP;
private MiscCP miscCP;
private JSlider vertSlider, horzSlider;
private SBField selectedSBField;
private SBField mainField, rollField, backField, frameField, sub1Field,
sub2Field, sub3Field, sub4Field, sub5Field, sub6Field, sub7Field,
sub8Field;
private HSBField selectedHSBField;
// buttonCP
private SBField buttonNormalBg, buttonRolloverBg, buttonPressedBg,
buttonDisabledBg;
private SBField buttonBorder, buttonDark, buttonLight;
private SBField buttonRollover, buttonDefault, buttonCheck,
buttonCheckDisabled;
private SBField buttonDisabledBorder, buttonDisabledDark,
buttonDisabledLight;
private SBField buttonDisabledFg, checkDisabledFg, radioDisabledFg;
SpreadControl buttonSpreadLight, buttonSpreadLightDisabled;
SpreadControl buttonSpreadDark, buttonSpreadDarkDisabled;
// textCP
private SBField textBg, textSelectedBg, textDisabledBg;
private SBField textBorder, textBorderDisabled, textCaret;
private SBField textDark, textDisabledDark, textLight, textDisabledLight;
private SBField textText, textSelectedText;
// comboCP
private SBField comboBg, comboText;
private SBField comboBorder, comboBorderDisabled, comboSelectedBg;
private SBField comboDark, comboDisabledDark, comboLight, comboDisabledLight;
private SBField comboArrowField, comboArrowDisabled;
private SBField comboButt, comboButtRollover, comboButtPressed,
comboButtDisabled;
private SBField comboButtBorder, comboButtDark, comboButtLight;
private SBField comboButtBorderDisabled, comboButtDarkDisabled,
comboButtLightDisabled;
private SBField comboSelectedText;
SpreadControl comboSpreadLight, comboSpreadLightDisabled;
SpreadControl comboSpreadDark, comboSpreadDarkDisabled;
// menuCP
private SBField menuRolloverBg, menuSepDark, menuSepLight;
private SBField menuRolloverFg, menuDisabledFg;
private SBField menuBar, menuItemRollover, menuPopup;
private SBField menuBorder, menuDark, menuLight;
private SBField menuInnerHilight, menuInnerShadow, menuOuterHilight,
menuOuterShadow;
private SBField menuIcon, menuIconRollover, menuIconDisabled, menuIconShadow;
private SBField menuSelectedText;
// listCP
private SBField listBg, listText;
private SBField listSelectedBg, listSelectedText;
// tabsCP
private SBField tabNormalBg, tabSelectedBg, tabRoll;
private SBField tabDisabled, tabDisabledSelected, tabDisabledText;
private SBField tabBorder, tabDark, tabLight;
private SBField tabPaneBorder, tabPaneDark, tabPaneLight;
// scrollsCP
private SBField scrollThumbField, scrollButtField, scrollArrowField,
trackField, scrollThumbRolloverBg, scrollThumbPressedBg,
scrollThumbDisabledBg, scrollButtRolloverBg, scrollButtPressedBg,
scrollButtDisabledBg, trackDisabled, trackBorder, trackBorderDisabled,
scrollArrowDisabled, scrollGripDark, scrollGripLight, scrollPane,
scrollBorder, scrollDark, scrollLight, scrollBorderDisabled,
scrollDarkDisabled, scrollLightDisabled;
SpreadControl scrollSpreadLight, scrollSpreadLightDisabled;
SpreadControl scrollSpreadDark, scrollSpreadDarkDisabled;
// sliderCP
private SBField sliderThumbRolloverBg, sliderThumbPressedBg,
sliderThumbDisabledBg;
private SBField sliderBorder, sliderDark, sliderLight, sliderThumbField;
private SBField sliderDisabledBorder, sliderDisabledDark,
sliderDisabledLight;
private SBField sliderTrack, sliderTrackBorder, sliderTrackDark,
sliderTrackLight;
private SBField sliderTick, sliderTickDisabled, sliderFocusColor;
// spinnerCP
private SBField spinnerButtField, spinnerArrowField;
private SBField spinnerButtRolloverBg, spinnerButtPressedBg,
spinnerButtDisabledBg;
private SBField spinnerBorder, spinnerDark, spinnerLight,
spinnerArrowDisabled;
private SBField spinnerDisabledBorder, spinnerDisabledDark,
spinnerDisabledLight;
SpreadControl spinnerSpreadLight, spinnerSpreadLightDisabled;
SpreadControl spinnerSpreadDark, spinnerSpreadDarkDisabled;
// progressCP
private javax.swing.Timer progressTimer;
private JProgressBar horzProgressBar, vertProgressBar;
private SBField progressField, progressTrack;
private SBField progressBorder, progressDark, progressLight;
private SBField progressSelectFore, progressSelectBack;
// treeCP
private SBField treeBg, treeTextBg, treeSelectedBg, treeText;
private SBField treeSelectedText, treeLine;
// toolCP
private SBField toolBar, toolBarDark, toolBarLight;
private SBField toolButt, toolButtRollover, toolButtPressed,
toolButtSelected;
private SBField toolBorder, toolBorderPressed, toolBorderRollover,
toolBorderSelected;
private SBField toolBorderDark, toolBorderLight;
private SBField toolGripDark, toolGripLight;
private SBField toolSepDark, toolSepLight;
// frameCP
private SBField frameCaption, frameCaptionDisabled;
private SBField frameBorder, frameDark, frameLight;
private SBField frameBorderDisabled, frameDarkDisabled, frameLightDisabled;
private SBField frameTitle, frameTitleDisabled;
private SBField frameButt, frameButtRollover, frameButtPressed,
frameButtDisabled;
SpreadControl frameButtSpreadLight, frameButtSpreadLightDisabled;
SpreadControl frameButtSpreadDark, frameButtSpreadDarkDisabled;
private SBField frameButtClose, frameButtCloseRollover,
frameButtClosePressed, frameButtCloseDisabled;
SpreadControl frameButtCloseSpreadLight, frameButtCloseSpreadLightDisabled;
SpreadControl frameButtCloseSpreadDark, frameButtCloseSpreadDarkDisabled;
private SBField frameButtBorder, frameButtDark, frameButtLight;
private SBField frameButtBorderDisabled, frameButtDarkDisabled,
frameButtLightDisabled;
private SBField frameButtCloseBorder, frameButtCloseDark,
frameButtCloseLight;
private SBField frameButtCloseBorderDisabled, frameButtCloseDarkDisabled,
frameButtCloseLightDisabled;
private SBField frameSymbol, frameSymbolPressed, frameSymbolDisabled;
private SBField frameSymbolDark, frameSymbolLight;
private SBField frameSymbolClose, frameSymbolClosePressed,
frameSymbolCloseDisabled;
private SBField frameSymbolCloseDark, frameSymbolCloseLight;
SpreadControl frameSpreadDark, frameSpreadLight, frameSpreadDarkDisabled,
frameSpreadLightDisabled;
// iconCP
private CheckedIcon [] iconChecks = new CheckedIcon [ 20 ];
private HSBField [] hsb = new HSBField [ 20 ];
// tableCP
private SBField tableBack, tableGrid;
private SBField tableHeaderBack, tableHeaderRolloverBack,
tableHeaderRollover, tableHeaderArrow;
private SBField tableSelectedBack, tableSelectedFore;
private SBField tableBorderDark, tableBorderLight;
private SBField tableHeaderDark, tableHeaderLight;
// separatorCP
private SBField sepDark, sepLight;
// tipCP
private SBField tipBg, tipBorder, tipBgDis, tipBorderDis, tipText,
tipTextDis;
// miscCP
private SBField titledBorderColor, textPaneBg, editorPaneBg, desktopPaneBg;
public ControlPanel ()
{
icon99 = TinyLookAndFeel.loadIcon ( "icon99.gif", null );
image99 = ( ( ImageIcon ) icon99 ).getImage ();
createFrame ();
// showUIVariables("FileChooser");
// showUIValues("167");
// showSystemProperties();
}
private void createFrame ()
{
if ( decoratedFramesCheck != null && decoratedFramesCheck.isSelected () )
{
Toolkit.getDefaultToolkit ().setDynamicLayout ( true );
System.setProperty ( "sun.awt.noerasebackground", "true" );
JFrame.setDefaultLookAndFeelDecorated ( true );
}
else
{
Toolkit.getDefaultToolkit ().setDynamicLayout ( false );
System.setProperty ( "sun.awt.noerasebackground", "false" );
JFrame.setDefaultLookAndFeelDecorated ( false );
}
JDialog.setDefaultLookAndFeelDecorated ( true );
theFrame = new JFrame ( WINDOW_TITLE );
theFrame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
boolean isCustomEnabled = false, isCustomSelected = false;
if ( customStyle != null )
{
isCustomEnabled = customStyle.isEnabled ();
isCustomSelected = customStyle.isSelected ();
}
setupUI ();
customStyle.setEnabled ( isCustomEnabled );
customStyle.setSelected ( isCustomSelected );
createHSBPopup ();
createSBPopup ();
initColors ();
initPanels ();
updateThemeButton.setEnabled ( false );
startProgressTimer ();
try
{
internalFrame.setSelected ( true );
}
catch ( PropertyVetoException ignore )
{
}
}
private void startProgressTimer ()
{
if ( progressTimer == null )
{
progressTimer = new javax.swing.Timer ( 500, new ProgressAction () );
}
vertProgressBar.setIndeterminate ( true );
progressTimer.start ();
}
private void stopProgressTimer ()
{
if ( progressTimer == null )
return;
progressTimer.stop ();
horzProgressBar.setIndeterminate ( false );
vertProgressBar.setIndeterminate ( false );
}
private void showUIVariables ()
{
UIDefaults defaults = UIManager.getDefaults ();
String key;
int c = 0;
TreeMap map = new TreeMap ();
Enumeration e = defaults.keys ();
while ( e.hasMoreElements () )
{
key = e.nextElement ().toString ();
map.put ( key, defaults.get ( key ) );
}
Iterator ii = map.keySet ().iterator ();
while ( ii.hasNext () )
{
key = ii.next ().toString ();
System.out.print ( "#" + ( c++ ) + " : " + key );
System.out.println ( " = " + map.get ( key ) );
}
System.out.println ();
}
void showUIVariables ( String inString )
{
UIDefaults defaults = UIManager.getDefaults ();
String key;
int c = 0;
TreeMap map = new TreeMap ();
Enumeration e = defaults.keys ();
while ( e.hasMoreElements () )
{
key = e.nextElement ().toString ();
if ( inString == null || key.indexOf ( inString ) != -1 )
{
map.put ( key, defaults.get ( key ) );
}
}
Object val;
Iterator ii = map.keySet ().iterator ();
while ( ii.hasNext () )
{
key = ii.next ().toString ();
val = map.get ( key );
System.out.print ( "#" + ( c++ ) + " : " + key );
System.out.println ( " = " + map.get ( key ) );
}
}
private void showUIValues ( String val )
{
UIDefaults defaults = UIManager.getDefaults ();
String key;
int c = 0;
TreeMap map = new TreeMap ();
Enumeration e = defaults.keys ();
while ( e.hasMoreElements () )
{
key = e.nextElement ().toString ();
map.put ( key, defaults.get ( key ) );
}
Object value;
Iterator ii = map.keySet ().iterator ();
while ( ii.hasNext () )
{
key = ii.next ().toString ();
value = map.get ( key );
if ( value != null && value.toString ().indexOf ( val ) != -1 )
{
System.out.print ( "#" + ( c++ ) + " : " + key );
System.out.println ( " = " + value );
}
}
System.out.println ();
}
private void showInsets ()
{
UIDefaults defaults = UIManager.getDefaults ();
Object val;
String key;
int c = 0;
TreeMap map = new TreeMap ();
Enumeration e = defaults.keys ();
while ( e.hasMoreElements () )
{
key = e.nextElement ().toString ();
val = defaults.get ( key );
if ( val instanceof Insets )
{
map.put ( key, val );
}
}
Iterator ii = map.keySet ().iterator ();
while ( ii.hasNext () )
{
key = ii.next ().toString ();
System.out.print ( "#" + ( c++ ) + " : " + key );
System.out.println ( " = " + map.get ( key ) );
}
System.out.println ();
}
private void showSystemProperties ()
{
Object key, value;
Enumeration e = System.getProperties ().keys ();
while ( e.hasMoreElements () )
{
key = e.nextElement ();
value = System.getProperty ( key.toString () );
System.out.println ( key.toString () + " : " + value.toString () );
}
}
private void showMessageDialog ()
{
JOptionPane.showMessageDialog ( theFrame, "No messages today." );
}
private void showConfirmationDialog ()
{
JOptionPane.showConfirmDialog ( theFrame, "Do you really have a choice?" );
}
private void showWarningDialog ()
{
JOptionPane.showMessageDialog ( theFrame, "You have been warned!",
"Warning", JOptionPane.WARNING_MESSAGE );
}
private void showErrorDialog ()
{
JOptionPane.showMessageDialog ( theFrame, "Unknown software error. Panic!",
"Error", JOptionPane.ERROR_MESSAGE );
}
private void showInternalWarningDialog ( String msg )
{
JOptionPane.showMessageDialog ( theFrame, msg, "Warning",
JOptionPane.WARNING_MESSAGE );
}
private void setupUI ()
{
// menu bar
JMenuBar menuBar = new JMenuBar ();
menuBar.add ( createFileMenu () );
menuBar.add ( createThemeMenu () );
menuBar.add ( createStyleMenu () );
menuBar.add ( createDisabledMenu () );
menuBar.add ( createTestMenu () );
menuBar.add ( createHelpMenu () );
theFrame.setJMenuBar ( menuBar );
JPanel p0 = new JPanel ( new BorderLayout () );
JPanel p1 = new JPanel ( new BorderLayout () );
p1.add ( createToolBar (), BorderLayout.NORTH );
// Colors/Fonts/Dekoration
mainTab = new JTabbedPane ( JTabbedPane.LEFT );
mainTab.add ( "Colors", createColorPanel () );
mainTab.add ( "Fonts", createFontPanel () );
mainTab.add ( "Decoration", createDecorationPanel () );
mainTab.addChangeListener ( new ChangeListener ()
{
public void stateChanged ( ChangeEvent e )
{
if ( mainTab.getSelectedIndex () == 2 )
{
( ( CardLayout ) widgetInfo.getLayout () ).show ( widgetInfo, "show" );
}
else
{
( ( CardLayout ) widgetInfo.getLayout () ).show ( widgetInfo, "hide" );
}
}
} );
p1.add ( mainTab, BorderLayout.CENTER );
p0.add ( p1, BorderLayout.NORTH );
// Apply/Init Settings
p1 = new JPanel ( new FlowLayout ( FlowLayout.LEFT, 92, 4 ) );
JPanel p2 = new JPanel ( new BorderLayout ( 3, 0 ) );
p2.setBackground ( infoColor );
p2.setBorder ( infoBorder );
JLabel l = new JLabel ( "<html><b>Note: </b>Properties marked with" );
l.setForeground ( Color.BLACK );
p2.add ( l, BorderLayout.WEST );
p2.add ( new JLabel ( icon99 ), BorderLayout.CENTER );
l = new JLabel ( "apply to 99 Style only." );
l.setForeground ( Color.BLACK );
p2.add ( l, BorderLayout.EAST );
widgetInfo = new JPanel ( new CardLayout () );
widgetInfo.add ( new JLabel (), "hide" );
widgetInfo.add ( p2, "show" );
p1.add ( widgetInfo );
updateThemeButton = new JButton ( "Apply Settings" );
buttons [ 14 ] = updateThemeButton;
theFrame.getRootPane ().setDefaultButton ( updateThemeButton );
updateThemeButton.addActionListener ( new SetThemeAction () );
p1.add ( updateThemeButton );
p0.add ( p1, BorderLayout.SOUTH );
theFrame.getContentPane ().add ( p0, BorderLayout.NORTH );
examplePanel = new ExamplePanel ();
p0 = new JPanel ( new BorderLayout () );
p0.setBorder ( new TitledBorder ( "Examples" ) );
p0.add ( examplePanel, BorderLayout.CENTER );
theFrame.getContentPane ().add ( p0, BorderLayout.CENTER );
Dimension d = Toolkit.getDefaultToolkit ().getScreenSize ();
theFrame.pack ();
theFrame.setLocation ( ( d.width - theFrame.getWidth () ) / 2,
( d.height - theFrame.getHeight () ) / 3 );
theFrame.setVisible ( true );
}
private void decorateFrame ( boolean b )
{
theFrame.dispose ();
createFrame ();
mainTab.setSelectedComponent ( compTab );
compTab.setSelectedComponent ( frameCP );
}
private JPanel createColorPanel ()
{
JPanel p0 = new JPanel ( new BorderLayout () );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Main Color" ), gc );
gc.gridx++ ;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Background Color" ), gc );
gc.gridx++ ;
p1.add ( new JLabel ( "Disabled Color" ), gc );
gc.gridx++ ;
p1.add ( new JLabel ( "Frame Color" ), gc );
gc.gridx = 0;
gc.gridy++ ;
gc.insets = new Insets ( 2, 4, 8, 4 );
mainField = new SBField ( Theme.mainColor, 24 );
p1.add ( mainField, gc );
gc.gridx++ ;
gc.insets = new Insets ( 2, 8, 8, 4 );
backField = new SBField ( Theme.backColor, 24 );
p1.add ( backField, gc );
gc.gridx++ ;
rollField = new SBField ( Theme.disColor, 24 );
p1.add ( rollField, gc );
gc.gridx++ ;
frameField = new SBField ( Theme.frameColor, 24 );
frameField.setName ( "ff" );
p1.add ( frameField, gc );
gc.gridx = 0;
gc.gridy++ ;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Sub1 Color" ), gc );
gc.gridx++ ;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Sub2 Color" ), gc );
gc.gridx++ ;
p1.add ( new JLabel ( "Sub3 Color" ), gc );
gc.gridx++ ;
p1.add ( new JLabel ( "Sub4 Color" ), gc );
gc.gridx = 0;
gc.gridy++ ;
gc.insets = new Insets ( 2, 4, 8, 4 );
sub1Field = new SBField ( Theme.sub1Color, true );
p1.add ( sub1Field, gc );
gc.gridx++ ;
gc.insets = new Insets ( 2, 8, 8, 4 );
sub2Field = new SBField ( Theme.sub2Color, true );
p1.add ( sub2Field, gc );
gc.gridx++ ;
sub3Field = new SBField ( Theme.sub3Color, true );
p1.add ( sub3Field, gc );
gc.gridx++ ;
sub4Field = new SBField ( Theme.sub4Color, true );
p1.add ( sub4Field, gc );
gc.gridx = 0;
gc.gridy++ ;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Sub5 Color" ), gc );
gc.gridx++ ;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Sub6 Color" ), gc );
gc.gridx++ ;
p1.add ( new JLabel ( "Sub7 Color" ), gc );
gc.gridx++ ;
p1.add ( new JLabel ( "Sub8 Color" ), gc );
gc.gridx = 0;
gc.gridy++ ;
gc.insets = new Insets ( 2, 4, 8, 4 );
sub5Field = new SBField ( Theme.sub5Color, true );
p1.add ( sub5Field, gc );
gc.gridx++ ;
gc.insets = new Insets ( 2, 8, 8, 4 );
sub6Field = new SBField ( Theme.sub6Color, true );
p1.add ( sub6Field, gc );
gc.gridx++ ;
sub7Field = new SBField ( Theme.sub7Color, true );
p1.add ( sub7Field, gc );
gc.gridx++ ;
sub8Field = new SBField ( Theme.sub8Color, true );
p1.add ( sub8Field, gc );
JPanel p2 = new JPanel ( new FlowLayout ( FlowLayout.CENTER, 0, 12 ) );
p2.add ( p1 );
p0.add ( p2, BorderLayout.NORTH );
return p0;
}
private JToolBar createToolBar ()
{
theToolBar = new JToolBar ();
ButtonGroup group = new ButtonGroup ();
JToggleButton b = null;
Dimension iconSize = new Dimension ( 16, 18 );
for ( int i = 0 ; i < 6 ; i++ )
{
b = new JToggleButton ( "", new ColorIcon ( iconSize ) );
group.add ( b );
theToolBar.add ( b );
}
theToolBar.addSeparator ();
for ( int i = 0 ; i < 5 ; i++ )
{
b = new JToggleButton ( "", new ColorIcon ( iconSize ) );
group.add ( b );
theToolBar.add ( b );
}
theToolBar.addSeparator ();
for ( int i = 0 ; i < 4 ; i++ )
{
b = new JToggleButton ( "", new ColorIcon ( iconSize ) );
group.add ( b );
theToolBar.add ( b );
}
b = new JToggleButton ( "TB_Button" );
theToolBar.add ( b );
return theToolBar;
}
private StyledDocument createStyledDocument ()
{
StyledDocument doc = new DefaultStyledDocument ();
Style defaultStyle = StyleContext.getDefaultStyleContext ().getStyle (
StyleContext.DEFAULT_STYLE );
Style regular = doc.addStyle ( "regular", defaultStyle );
StyleConstants.setFontFamily ( regular, "SansSerif" );
StyleConstants.setFontSize ( regular, 12 );
StyleConstants.setForeground ( regular, Color.BLACK );
StyleConstants.setUnderline ( regular, false );
StyleConstants.setBold ( regular, false );
StyleConstants.setItalic ( regular, false );
doc.setLogicalStyle ( 0, regular );
try
{
doc.insertString ( 0, " JTextPane with\n", regular );
}
catch ( BadLocationException ignore )
{
}
int position = 24;
Color red = new Color ( 132, 0, 0 );
Style s = doc.addStyle ( "red24", regular );
StyleConstants.setFontSize ( s, 24 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, red );
try
{
doc.insertString ( position++ , "S", s );
}
catch ( BadLocationException ignore )
{
}
s = doc.addStyle ( "red22", s );
StyleConstants.setFontSize ( s, 22 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, red );
try
{
doc.insertString ( position++ , "t", s );
}
catch ( BadLocationException ignore )
{
}
s = doc.addStyle ( "red20", s );
StyleConstants.setFontSize ( s, 20 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, red );
try
{
doc.insertString ( position++ , "y", s );
}
catch ( BadLocationException ignore )
{
}
s = doc.addStyle ( "red18", s );
StyleConstants.setFontSize ( s, 18 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, red );
try
{
doc.insertString ( position++ , "l", s );
}
catch ( BadLocationException ignore )
{
}
s = doc.addStyle ( "red16", s );
StyleConstants.setFontSize ( s, 16 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, red );
try
{
doc.insertString ( position++ , "e", s );
}
catch ( BadLocationException ignore )
{
}
s = doc.addStyle ( "red14", s );
StyleConstants.setFontSize ( s, 14 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, red );
try
{
doc.insertString ( position++ , "d ", s );
}
catch ( BadLocationException ignore )
{
}
position++ ;
Color green = new Color ( 0, 130, 132 );
s = doc.addStyle ( "green12", s );
StyleConstants.setFontSize ( s, 12 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, green );
try
{
doc.insertString ( position++ , "D", s );
}
catch ( BadLocationException ignore )
{
}
s = doc.addStyle ( "green13", s );
StyleConstants.setFontSize ( s, 13 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, green );
try
{
doc.insertString ( position++ , "o", s );
}
catch ( BadLocationException ignore )
{
}
s = doc.addStyle ( "green14", s );
StyleConstants.setFontSize ( s, 14 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, green );
try
{
doc.insertString ( position++ , "c", s );
}
catch ( BadLocationException ignore )
{
}
s = doc.addStyle ( "green16", s );
StyleConstants.setFontSize ( s, 16 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, green );
try
{
doc.insertString ( position++ , "u", s );
}
catch ( BadLocationException ignore )
{
}
s = doc.addStyle ( "green18", s );
StyleConstants.setFontSize ( s, 18 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, green );
try
{
doc.insertString ( position++ , "m", s );
}
catch ( BadLocationException ignore )
{
}
s = doc.addStyle ( "green20", s );
StyleConstants.setFontSize ( s, 20 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, green );
try
{
doc.insertString ( position++ , "e", s );
}
catch ( BadLocationException ignore )
{
}
s = doc.addStyle ( "green22", s );
StyleConstants.setFontSize ( s, 22 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, green );
try
{
doc.insertString ( position++ , "n", s );
}
catch ( BadLocationException ignore )
{
}
s = doc.addStyle ( "green24", s );
StyleConstants.setFontSize ( s, 24 );
StyleConstants.setUnderline ( s, true );
StyleConstants.setForeground ( s, green );
try
{
doc.insertString ( position++ , "t", s );
}
catch ( BadLocationException ignore )
{
}
return doc;
}
private JPopupMenu createSBPopup ()
{
if ( sbPopup != null )
return sbPopup;
ActionListener hsbPopupAction = new SBPopupAction ();
sbPopup = new JPopupMenu ();
JMenuItem item = new JMenuItem ( "Absolute Color" );
item.setActionCommand ( "1" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
sbPopup.addSeparator ();
item = new JMenuItem ( "Derive from Main Color" );
item.setActionCommand ( "2" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
item = new JMenuItem ( "Derive from Back Color" );
item.setActionCommand ( "3" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
item = new JMenuItem ( "Derive from Disabled Color" );
item.setActionCommand ( "4" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
item = new JMenuItem ( "Derive from Frame Color" );
item.setActionCommand ( "5" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub1 Color" );
item.setActionCommand ( "6" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub2 Color" );
item.setActionCommand ( "7" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub3 Color" );
item.setActionCommand ( "8" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub4 Color" );
item.setActionCommand ( "9" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub5 Color" );
item.setActionCommand ( "10" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub6 Color" );
item.setActionCommand ( "11" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub7 Color" );
item.setActionCommand ( "12" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub8 Color" );
item.setActionCommand ( "13" );
item.addActionListener ( hsbPopupAction );
sbPopup.add ( item );
return sbPopup;
}
private void updateSBPopupIcons ()
{
MenuElement [] me = sbPopup.getSubElements ();
( ( JMenuItem ) me [ 0 ] ).setIcon ( ColorReference.getAbsoluteIcon () );
( ( JMenuItem ) me [ 1 ] ).setIcon ( Theme.mainColor [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 2 ] ).setIcon ( Theme.backColor [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 3 ] ).setIcon ( Theme.disColor [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 4 ] ).setIcon ( Theme.frameColor [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 5 ] ).setIcon ( Theme.sub1Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 6 ] ).setIcon ( Theme.sub2Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 7 ] ).setIcon ( Theme.sub3Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 8 ] ).setIcon ( Theme.sub4Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 9 ] ).setIcon ( Theme.sub5Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 10 ] ).setIcon ( Theme.sub6Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 11 ] ).setIcon ( Theme.sub7Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 12 ] ).setIcon ( Theme.sub8Color [ Theme.style ]
.getIcon () );
for ( int i = 0 ; i < 13 ; i++ )
{
( ( JMenuItem ) me [ i ] ).setSelected ( false );
}
for ( int i = 5 ; i < 13 ; i++ )
{
( ( JMenuItem ) me [ i ] ).setEnabled ( true );
}
}
private void showSBPopup ( SBField cf )
{
updateSBPopupIcons ();
selectedSBField = cf;
int index = cf.getColorReference ().getReference () - 1;
MenuElement [] me = sbPopup.getSubElements ();
( ( JMenuItem ) me [ index ] ).setSelected ( true );
if ( cf.equals ( sub1Field ) )
{
( ( JMenuItem ) me [ 5 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub2Field ) )
{
( ( JMenuItem ) me [ 6 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub3Field ) )
{
( ( JMenuItem ) me [ 7 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub4Field ) )
{
( ( JMenuItem ) me [ 8 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub5Field ) )
{
( ( JMenuItem ) me [ 9 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub6Field ) )
{
( ( JMenuItem ) me [ 10 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub7Field ) )
{
( ( JMenuItem ) me [ 11 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub8Field ) )
{
( ( JMenuItem ) me [ 12 ] ).setEnabled ( false );
}
sbPopup.show ( cf, 0, cf.getHeight () + 2 );
}
private JPopupMenu createHSBPopup ()
{
if ( hsbPopup != null )
return hsbPopup;
ActionListener colorizePopupAction = new HSBPopupAction ();
hsbPopup = new JPopupMenu ();
JMenuItem item = new JMenuItem ( "Derive from Main Color" );
item.setActionCommand ( "2" );
item.addActionListener ( colorizePopupAction );
hsbPopup.add ( item );
item = new JMenuItem ( "Derive from Back Color" );
item.setActionCommand ( "3" );
item.addActionListener ( colorizePopupAction );
hsbPopup.add ( item );
item = new JMenuItem ( "Derive from Disabled Color" );
item.setActionCommand ( "4" );
item.addActionListener ( colorizePopupAction );
hsbPopup.add ( item );
item = new JMenuItem ( "Derive from Frame Color" );
item.setActionCommand ( "5" );
item.addActionListener ( colorizePopupAction );
hsbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub1 Color" );
item.setActionCommand ( "6" );
item.addActionListener ( colorizePopupAction );
hsbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub2 Color" );
item.setActionCommand ( "7" );
item.addActionListener ( colorizePopupAction );
hsbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub3 Color" );
item.setActionCommand ( "8" );
item.addActionListener ( colorizePopupAction );
hsbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub4 Color" );
item.setActionCommand ( "9" );
item.addActionListener ( colorizePopupAction );
hsbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub5 Color" );
item.setActionCommand ( "10" );
item.addActionListener ( colorizePopupAction );
hsbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub6 Color" );
item.setActionCommand ( "11" );
item.addActionListener ( colorizePopupAction );
hsbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub7 Color" );
item.setActionCommand ( "12" );
item.addActionListener ( colorizePopupAction );
hsbPopup.add ( item );
item = new JMenuItem ( "Derive from Sub8 Color" );
item.setActionCommand ( "13" );
item.addActionListener ( colorizePopupAction );
hsbPopup.add ( item );
return hsbPopup;
}
private void updateHSBPopupIcons ()
{
MenuElement [] me = hsbPopup.getSubElements ();
( ( JMenuItem ) me [ 0 ] ).setIcon ( Theme.mainColor [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 1 ] ).setIcon ( Theme.backColor [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 2 ] ).setIcon ( Theme.disColor [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 3 ] ).setIcon ( Theme.frameColor [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 4 ] ).setIcon ( Theme.sub1Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 5 ] ).setIcon ( Theme.sub2Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 6 ] ).setIcon ( Theme.sub3Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 7 ] ).setIcon ( Theme.sub4Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 8 ] ).setIcon ( Theme.sub5Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 9 ] ).setIcon ( Theme.sub6Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 10 ] ).setIcon ( Theme.sub7Color [ Theme.style ]
.getIcon () );
( ( JMenuItem ) me [ 11 ] ).setIcon ( Theme.sub8Color [ Theme.style ]
.getIcon () );
for ( int i = 0 ; i < 12 ; i++ )
{
( ( JMenuItem ) me [ i ] ).setSelected ( false );
}
for ( int i = 4 ; i < 12 ; i++ )
{
( ( JMenuItem ) me [ i ] ).setEnabled ( true );
}
}
private void showHSBPopup ( HSBField cf )
{
updateHSBPopupIcons ();
selectedHSBField = cf;
int index = cf.getReference () - 2;
MenuElement [] me = hsbPopup.getSubElements ();
( ( JMenuItem ) me [ index ] ).setSelected ( true );
if ( cf.equals ( sub1Field ) )
{
( ( JMenuItem ) me [ 4 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub2Field ) )
{
( ( JMenuItem ) me [ 5 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub3Field ) )
{
( ( JMenuItem ) me [ 6 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub4Field ) )
{
( ( JMenuItem ) me [ 7 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub5Field ) )
{
( ( JMenuItem ) me [ 8 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub6Field ) )
{
( ( JMenuItem ) me [ 9 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub7Field ) )
{
( ( JMenuItem ) me [ 10 ] ).setEnabled ( false );
}
else if ( cf.equals ( sub8Field ) )
{
( ( JMenuItem ) me [ 11 ] ).setEnabled ( false );
}
hsbPopup.show ( cf, 0, cf.getHeight () + 2 );
}
private JPanel createFontPanel ()
{
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 4, 2, 4, 2 );
plainFontPanel = new FontPanel ( PLAIN_FONT );
p1.add ( plainFontPanel, gc );
gc.gridy++ ;
boldFontPanel = new FontPanel ( BOLD_FONT );
p1.add ( boldFontPanel, gc );
gc.gridy++ ;
gc.insets = new Insets ( 11, 2, 0, 2 );
JPanel p2 = new JPanel ( new FlowLayout ( FlowLayout.LEFT, 0, 0 ) );
p2.add ( createFontCombo () );
p2.add ( new JLabel ( " " ) );
isPlainFont = new JRadioButton ( "is Plain Font" );
isPlainFont.addActionListener ( new DerivedFontAction () );
p2.add ( isPlainFont );
p2.add ( new JLabel ( " " ) );
isBoldFont = new JRadioButton ( "is Bold Font" );
isBoldFont.addActionListener ( new DerivedFontAction () );
p2.add ( isBoldFont );
p1.add ( p2, gc );
gc.gridy++ ;
gc.insets = new Insets ( 2, 2, 0, 2 );
specialFontPanel = new FontPanel ( SPECIAL_FONT );
specialFontPanel.init ( selectedFont [ Theme.style ] );
p1.add ( specialFontPanel, gc );
return p1;
}
private JComboBox createFontCombo ()
{
Vector items = new Vector ();
items.add ( "Button Font" );
items.add ( "CheckBox Font" );
items.add ( "ComboBox Font" );
items.add ( "EditorPane Font" );
items.add ( "FrameTitle Font" );
items.add ( "InternalFrameTitle Font" );
items.add ( "InternalPaletteTitle Font" );
items.add ( "Label Font" );
items.add ( "List Font" );
items.add ( "Menu Font" );
items.add ( "MenuItem Font" );
items.add ( "Password Font" );
items.add ( "ProgressBar Font" );
items.add ( "RadioButton Font" );
items.add ( "Table Font" );
items.add ( "TableHeader Font" );
items.add ( "TextArea Font" );
items.add ( "TextField Font" );
items.add ( "TextPane Font" );
items.add ( "TitledBorder Font" );
items.add ( "ToolTip Font" );
items.add ( "Tree Font" );
items.add ( "TabbedPane Font" );
Collections.sort ( items );
fontCombo = new JComboBox ( items );
fontCombo.addActionListener ( new SelectSpecialFontAction () );
selectedFont = Theme.buttonFont;
return fontCombo;
}
private JTabbedPane createDecorationPanel ()
{
compTab = new JTabbedPane ();
buttonsCP = new ButtonsCP ();
compTab.add ( "Button", buttonsCP );
compTab.setMnemonicAt ( 0, KeyEvent.VK_B );
compTab.setToolTipTextAt ( 0, "<html>JButton<br>" + "JToggleButton<br>"
+ "JRadioButton<br>" + "JCheckBox" );
comboCP = new ComboCP ();
compTab.add ( "ComboBox", comboCP );
compTab.setMnemonicAt ( 1, KeyEvent.VK_C );
frameCP = new FrameCP ();
compTab.add ( "Frame", frameCP );
compTab.setMnemonicAt ( 2, KeyEvent.VK_F );
compTab.setToolTipTextAt ( 2, "<html>JFrame<br>" + "JInternalFrame<br>"
+ "JDialog<br>" + "JOptionPane" );
iconCP = new IconCP ();
compTab.add ( "Icons", iconCP );
compTab.setMnemonicAt ( 3, KeyEvent.VK_I );
listCP = new ListCP ();
compTab.add ( "List", listCP );
compTab.setMnemonicAt ( 4, KeyEvent.VK_L );
menuCP = new MenuCP ();
compTab.add ( "Menu", menuCP );
compTab.setMnemonicAt ( 5, KeyEvent.VK_M );
compTab.setToolTipTextAt ( 5, "<html>JMenu<br>" + "JMenuItem<br>"
+ "JCheckBoxMenuItem<br>" + "JRadioButtonMenuItem" );
miscCP = new MiscCP ();
compTab.add ( "Miscellaneous", miscCP );
progressCP = new ProgressCP ();
compTab.add ( "ProgressBar", progressCP );
compTab.setMnemonicAt ( 7, KeyEvent.VK_P );
scrollsCP = new ScrollBarCP ();
compTab.add ( "ScrollBar", scrollsCP );
compTab.setMnemonicAt ( 8, KeyEvent.VK_S );
compTab.setToolTipTextAt ( 8, "<html>JScrollPane<br>" + "JScrollBar" );
separatorCP = new SeparatorCP ();
compTab.add ( "Separator", separatorCP );
sliderCP = new SliderCP ();
compTab.add ( "Slider", sliderCP );
spinnerCP = new SpinnerCP ();
compTab.add ( "Spinner", spinnerCP );
tabsCP = new TabbedPaneCP ();
compTab.add ( "TabbedPane", tabsCP );
tableCP = new TableCP ();
compTab.add ( "Table", tableCP );
textCP = new TextCP ();
compTab.add ( "Text", textCP );
compTab.setToolTipTextAt ( 14, "<html>JTextField<br>"
+ "JFormattedTextField<br>" + "JTextArea<br>" + "JPasswordField<br>"
+ "JSpinner.Editor<br>" + "JComboBox.Editor" );
toolCP = new ToolBarCP ();
compTab.add ( "ToolBar", toolCP );
compTab.setToolTipTextAt ( 15, "<html>JToolBar<br>" + "ToolBar Button<br>"
+ "JToolBar.Separator" );
tipCP = new ToolTipCP ();
compTab.add ( "ToolTip", tipCP );
treeCP = new TreeCP ();
compTab.add ( "Tree", treeCP );
return compTab;
}
private JMenu createFileMenu ()
{
JMenu menu = new JMenu ( "File" );
menu.setMnemonic ( KeyEvent.VK_F );
JMenuItem item = new JMenuItem ( "Open Theme..." );
item.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
openTheme ();
}
} );
item.setMnemonic ( KeyEvent.VK_O );
item.setAccelerator ( KeyStroke.getKeyStroke ( KeyEvent.VK_O,
menuShortcutKeyMask ) );
menu.add ( item );
menu.addSeparator ();
item = new JMenuItem ( "Save" );
item.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
saveTheme ( false );
}
} );
item.setMnemonic ( KeyEvent.VK_S );
item.setAccelerator ( KeyStroke.getKeyStroke ( KeyEvent.VK_S,
menuShortcutKeyMask ) );
menu.add ( item );
item = new JMenuItem ( "Save as Default" );
item.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
saveDefaults ();
}
} );
item.setMnemonic ( KeyEvent.VK_D );
item.setAccelerator ( KeyStroke.getKeyStroke ( KeyEvent.VK_D,
menuShortcutKeyMask ) );
menu.add ( item );
item = new JMenuItem ( "Save as..." );
item.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
saveTheme ( true );
}
} );
item.setMnemonic ( KeyEvent.VK_A );
item.setDisplayedMnemonicIndex ( 5 );
item.setAccelerator ( KeyStroke.getKeyStroke ( KeyEvent.VK_S,
menuShortcutKeyMask | ActionEvent.SHIFT_MASK ) );
menu.add ( item );
menu.addSeparator ();
item = new JMenuItem ( "Quit" );
item.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
System.exit ( 0 );
}
} );
item.setMnemonic ( KeyEvent.VK_Q );
item.setAccelerator ( KeyStroke.getKeyStroke ( KeyEvent.VK_Q,
menuShortcutKeyMask ) );
menu.add ( item );
return menu;
}
private Vector loadThemes ()
{
Vector names = new Vector ();
File f = new File ( System.getProperty ( "user.dir" ) );
File [] files = f.listFiles ();
for ( int i = 0 ; i < files.length ; i++ )
{
if ( files [ i ].getName ().endsWith ( Theme.FILE_EXTENSION ) )
{
names.add ( files [ i ].getName () );
}
}
return names;
}
private JMenu createThemeMenu ()
{
themesMenu = new JMenu ( "Themes" );
themesMenu.setMnemonic ( KeyEvent.VK_T );
JMenuItem item = null;
String fn = null;
Iterator ii = loadThemes ().iterator ();
while ( ii.hasNext () )
{
fn = ( String ) ii.next ();
item = new JMenuItem ( fn.substring ( 0, fn.lastIndexOf ( "." ) ) );
item.addActionListener ( selectThemeAction );
themesMenu.add ( item );
}
return themesMenu;
}
private void updateThemeMenu ()
{
themesMenu.removeAll ();
JMenuItem item = null;
String fn = null;
Iterator ii = loadThemes ().iterator ();
while ( ii.hasNext () )
{
fn = ( String ) ii.next ();
item = new JMenuItem ( fn.substring ( 0, fn.lastIndexOf ( "." ) ) );
item.addActionListener ( selectThemeAction );
themesMenu.add ( item );
}
}
private JMenu createStyleMenu ()
{
JMenu menu = new JMenu ( "Style" );
menu.setMnemonic ( KeyEvent.VK_S );
ButtonGroup group = new ButtonGroup ();
JCheckBoxMenuItem item = new JCheckBoxMenuItem ( "Tiny",
( Theme.style == Theme.TINY_STYLE ) );
group.add ( item );
item.setEnabled ( false );
item.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
updateStyle ( Theme.TINY_STYLE );
}
} );
// menu.add(item);
item = new JCheckBoxMenuItem ( "99 Style",
( Theme.style == Theme.W99_STYLE ) );
group.add ( item );
item.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
updateStyle ( Theme.W99_STYLE );
}
} );
menu.add ( item );
item = new JCheckBoxMenuItem ( "YQ Style", ( Theme.style == Theme.YQ_STYLE ) );
group.add ( item );
item.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
updateStyle ( Theme.YQ_STYLE );
}
} );
menu.add ( item );
customStyle = new JCheckBoxMenuItem ( "Custom", false );
customStyle.setEnabled ( false );
group.add ( customStyle );
customStyle.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
updateStyle ( Theme.CUSTOM_STYLE );
}
} );
menu.add ( customStyle );
return menu;
}
private JMenu createDisabledMenu ()
{
JMenu menu = new JMenu ( "DisabledMenu" );
menu.setEnabled ( false );
return menu;
}
private JMenu createTestMenu ()
{
JMenu menu = new JMenu ( "Test Menu" );
menu.setMnemonic ( KeyEvent.VK_M );
JMenuItem item = new JMenuItem ( "Open Dialog..." );
item.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
new TestDialog ( theFrame );
}
} );
menu.add ( item );
menu.addSeparator ();
item = new JMenuItem (
"<html><b>Note: </b>For JMenuItems displaying HTML text<br>"
+ "<font color=\"#0000ff\">Decoration | Menu | Selected Foreground<br>"
+ "</font><font color=\"#000000\">will have </font>"
+ "<font color=\"#ff0000\">no</font><font color=\"#000000\"> effect." );
menu.add ( item );
item = new JCheckBoxMenuItem ( "Selected CheckBoxMenuItem", true );
menu.add ( item );
item = new JCheckBoxMenuItem ( "Deselected CheckBoxMenuItem", false );
menu.add ( item );
item = new JCheckBoxMenuItem ( "Disabled Selected CheckBoxMenuItem", true );
item.setEnabled ( false );
menu.add ( item );
item = new JCheckBoxMenuItem ( "Disabled CheckBoxMenuItem", false );
item.setEnabled ( false );
menu.add ( item );
menu.addSeparator ();
ButtonGroup group = new ButtonGroup ();
item = new JRadioButtonMenuItem ( "Selected RadioButtonMenuItem", true );
group.add ( item );
menu.add ( item );
item = new JRadioButtonMenuItem ( "Deselected RadioButtonMenuItem" );
group.add ( item );
menu.add ( item );
item = new JRadioButtonMenuItem ( "Disabled Selected Item", true );
item.setEnabled ( false );
menu.add ( item );
item = new JRadioButtonMenuItem ( "Disabled Item", false );
item.setEnabled ( false );
menu.add ( item );
menu.addSeparator ();
item = new JMenuItem ( "Java version: "
+ System.getProperty ( "java.version" ) );
menu.add ( item );
item = new JMenuItem ( "Disabled MenuItem" );
item.setEnabled ( false );
menu.add ( item );
menu.addSeparator ();
JMenu sub1 = new JMenu ( "Sub-menu 1" );
sub1.setMnemonic ( KeyEvent.VK_1 );
item = new JMenuItem ( "Item 1" );
item.setMnemonic ( KeyEvent.VK_1 );
sub1.add ( item );
item = new JMenuItem ( "Item 2" );
item.setMnemonic ( KeyEvent.VK_2 );
sub1.add ( item );
sub1.addSeparator ();
JMenu sub2 = new JMenu ( "Disabled Submenu" );
sub2.setEnabled ( false );
item = new JMenuItem ( "SubmenuItem" );
sub2.add ( item );
sub1.add ( sub2 );
menu.add ( sub1 );
return menu;
}
private JMenu createHelpMenu ()
{
JMenu menu = new JMenu ( "Help" );
menu.setMnemonic ( KeyEvent.VK_H );
JMenuItem item = new JMenuItem ( "About TinyLaF..." );
item.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
// String msg = "TinyLaF v" + TinyLookAndFeel.VERSION_STRING +
// " (" + TinyLookAndFeel.DATE_STRING + ")" +
// "\nAuthor: Hans Bickel" +
// "\nTinyLaF Home: www.muntjak.de/hans/java/tinylaf/\n ";
//
// JOptionPane.showMessageDialog(theFrame, msg,
// "About TinyLaF", JOptionPane.PLAIN_MESSAGE);
new AboutDialog ();
}
} );
item.setMnemonic ( KeyEvent.VK_A );
menu.add ( item );
menu.addSeparator ();
item = new JMenuItem ( "Check for Updates..." );
item.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
CheckForUpdatesDialog.showDialog ( theFrame );
}
} );
item.setMnemonic ( KeyEvent.VK_C );
menu.add ( item );
return menu;
}
private void addButtonIcons ( boolean b )
{
if ( b && exampleButton.getIcon () == null )
{
if ( buttonIcon == null )
{
buttonIcon = new ImageIcon (
ClassLoader
.getSystemResource ( "de/muntjak/tinylookandfeel/icons/theIcon.gif" ) );
}
exampleButton.setIcon ( buttonIcon );
exampleDisabledButton.setIcon ( buttonIcon );
exampleToggleButton.setIcon ( buttonIcon );
}
else if ( !b && exampleButton.getIcon () != null )
{
exampleButton.setIcon ( ( Icon ) null );
exampleDisabledButton.setIcon ( ( Icon ) null );
exampleToggleButton.setIcon ( ( Icon ) null );
}
}
private void updateFont ( int type )
{
if ( type == PLAIN_FONT )
{
Theme.plainFont [ Theme.style ].setFont ( plainFontPanel
.getCurrentFont () );
}
else if ( type == BOLD_FONT )
{
Theme.boldFont [ Theme.style ].setFont ( boldFontPanel.getCurrentFont () );
}
else
{
selectedFont [ Theme.style ]
.setFont ( specialFontPanel.getCurrentFont () );
}
examplePanel.update ( true );
}
/*
* Alphabetical ordering!
*/
private void updateSpecialFont ()
{
int index = fontCombo.getSelectedIndex ();
switch ( index )
{
case 0 :
selectedFont = Theme.buttonFont;
break;
case 1 :
selectedFont = Theme.checkFont;
break;
case 2 :
selectedFont = Theme.comboFont;
break;
case 3 :
selectedFont = Theme.editorFont;
break;
case 4 :
selectedFont = Theme.frameTitleFont;
break;
case 5 :
selectedFont = Theme.internalFrameTitleFont;
break;
case 6 :
selectedFont = Theme.internalPaletteTitleFont;
break;
case 7 :
selectedFont = Theme.labelFont;
break;
case 8 :
selectedFont = Theme.listFont;
break;
case 9 :
selectedFont = Theme.menuFont;
break;
case 10 :
selectedFont = Theme.menuItemFont;
break;
case 11 :
selectedFont = Theme.passwordFont;
break;
case 12 :
selectedFont = Theme.progressBarFont;
break;
case 13 :
selectedFont = Theme.radioFont;
break;
case 14 :
selectedFont = Theme.tabFont;
break;
case 15 :
selectedFont = Theme.tableFont;
break;
case 16 :
selectedFont = Theme.tableHeaderFont;
break;
case 17 :
selectedFont = Theme.textAreaFont;
break;
case 18 :
selectedFont = Theme.textFieldFont;
break;
case 19 :
selectedFont = Theme.textPaneFont;
break;
case 20 :
selectedFont = Theme.titledBorderFont;
break;
case 21 :
selectedFont = Theme.toolTipFont;
break;
case 22 :
selectedFont = Theme.treeFont;
break;
}
specialFontPanel.init ( selectedFont [ Theme.style ] );
// update all font colors
Theme.buttonFontColor [ Theme.style ].update ();
Theme.labelFontColor [ Theme.style ].update ();
Theme.menuFontColor [ Theme.style ].update ();
Theme.menuItemFontColor [ Theme.style ].update ();
Theme.radioFontColor [ Theme.style ].update ();
Theme.checkFontColor [ Theme.style ].update ();
Theme.tableFontColor [ Theme.style ].update ();
Theme.tableHeaderFontColor [ Theme.style ].update ();
Theme.titledBorderFontColor [ Theme.style ].update ();
Theme.tabFontColor [ Theme.style ].update ();
if ( Theme.toolTipFontColor [ Theme.style ] != null )
{
Theme.toolTipFontColor [ Theme.style ].update ();
}
}
private void setTheme ()
{
updateTheme ();
LookAndFeel currentLookAndFeel = UIManager.getLookAndFeel ();
try
{
UIManager.setLookAndFeel ( currentLookAndFeel );
}
catch ( Exception e )
{
System.err.println ( e.toString () );
}
SwingUtilities.updateComponentTreeUI ( theFrame );
if ( sbPopup != null )
{
SwingUtilities.updateComponentTreeUI ( sbPopup );
}
if ( hsbPopup != null )
{
SwingUtilities.updateComponentTreeUI ( hsbPopup );
}
updateThemeButton.setEnabled ( false );
iconCP.init ( true );
trigger.updateColors ();
sp1.setViewportBorder ( BorderFactory.createLineBorder (
Theme.treeBgColor [ Theme.style ].getColor (), 2 ) );
sp2.setViewportBorder ( BorderFactory.createLineBorder (
Theme.treeBgColor [ Theme.style ].getColor (), 2 ) );
theFrame.pack ();
PSColorChooser.deleteInstance ();
SBChooser.deleteInstance ();
HSBChooser.deleteInstance ();
}
private void updateTheme ()
{
// Theme.mainColor[Theme.style].setColor(mainField.getBackground());
// Theme.disColor[Theme.style].setColor(rollField.getBackground());
// Theme.backColor[Theme.style].setColor(backField.getBackground());
// Theme.frameColor[Theme.style].setColor(frameField.getBackground());
TinyDefaultTheme.secondary3 = Theme.backColor [ Theme.style ].getColor ();
updatePanels ();
updateSpecialFont ();
// UIDefaults table = UIManager.getDefaults();
// table.put("Button.margin", buttonsCP.getButtonMargin());
// table.put("TabbedPane.tabAreaInsets", Theme.tabAreaInsets[Theme.style]);
}
private void updatePanels ()
{
buttonsCP.updateTheme ();
scrollsCP.updateTheme ();
separatorCP.updateTheme ();
tabsCP.updateTheme ();
comboCP.updateTheme ();
listCP.updateTheme ();
sliderCP.updateTheme ();
spinnerCP.updateTheme ();
progressCP.updateTheme ();
menuCP.updateTheme ();
textCP.updateTheme ();
treeCP.updateTheme ();
toolCP.updateTheme ();
tableCP.updateTheme ();
frameCP.updateTheme ();
iconCP.updateTheme ();
tipCP.updateTheme ();
miscCP.updateTheme ();
}
private void updateStyle ( int newStyle )
{
stopProgressTimer ();
Theme.style = newStyle;
initColors ();
initPanels ();
setTheme ();
startProgressTimer ();
}
private String getDescription ()
{
if ( Theme.style == Theme.CUSTOM_STYLE )
{
return currentFileName;
}
else if ( Theme.style == Theme.W99_STYLE )
{
return "99 Style";
}
else if ( Theme.style == Theme.YQ_STYLE )
{
return "YQ Style";
}
else if ( Theme.style == Theme.TINY_STYLE )
{
return "Tiny Style";
}
return "";
}
private void initPanels ()
{
resistUpdate = true;
// initColors();
buttonsCP.init ( true );
scrollsCP.init ( true );
separatorCP.init ( true );
tabsCP.init ( true );
comboCP.init ( true );
menuCP.init ( true );
listCP.init ( true );
sliderCP.init ( true );
spinnerCP.init ( true );
progressCP.init ( true );
textCP.init ( true );
treeCP.init ( true );
toolCP.init ( true );
tableCP.init ( true );
frameCP.init ( true );
iconCP.init ( true );
tipCP.init ( true );
miscCP.init ( true );
initFonts ();
resistUpdate = false;
theFrame.setTitle ( WINDOW_TITLE + " - " + getDescription () );
}
private void initColors ()
{
mainField.setBackground ( Theme.mainColor [ Theme.style ].getColor () );
rollField.setBackground ( Theme.disColor [ Theme.style ].getColor () );
backField.setBackground ( Theme.backColor [ Theme.style ].getColor () );
frameField.setBackground ( Theme.frameColor [ Theme.style ].getColor () );
// bug before 1.3.7: Tooltip text not updated
mainField.update ();
rollField.update ();
backField.update ();
frameField.update ();
// end bug
sub1Field.update ();
sub2Field.update ();
sub3Field.update ();
sub4Field.update ();
sub5Field.update ();
sub6Field.update ();
sub7Field.update ();
sub8Field.update ();
}
private void initFonts ()
{
plainFontPanel.init ( Theme.plainFont [ Theme.style ] );
boldFontPanel.init ( Theme.boldFont [ Theme.style ] );
updateSpecialFont ();
}
private void repaintTargets ( Component [] targets )
{
if ( targets == null )
return;
for ( int i = 0 ; i < targets.length ; i++ )
{
targets [ i ].repaint ();
}
}
public static void setWindowButtons ( JButton [] buttons )
{
windowButtons = buttons;
}
private void openTheme ()
{
JFileChooser ch = new JFileChooser ( directoryPath );
ch.setFileFilter ( new ThemeFileFilter () );
int answer = ch.showOpenDialog ( theFrame );
if ( answer != JFileChooser.APPROVE_OPTION )
return;
File f = ch.getSelectedFile ();
if ( f == null )
return;
if ( !Theme.loadTheme ( f, Theme.CUSTOM_STYLE ) )
{
JOptionPane.showMessageDialog ( theFrame,
"This file is no valid TinyLaF theme.", "Error loading file",
JOptionPane.ERROR_MESSAGE );
return;
}
currentFileName = f.getAbsolutePath ();
if ( f.getParent () != null )
{
directoryPath = f.getParent ();
}
customStyle.setEnabled ( true );
customStyle.setSelected ( true );
updateStyle ( Theme.CUSTOM_STYLE );
}
/**
* Called if user selects theme from Themes menu.
*
* @param fn
*/
private void openTheme ( String fn )
{
File f = new File ( fn );
if ( !Theme.loadTheme ( f, Theme.CUSTOM_STYLE ) )
{
JOptionPane.showMessageDialog ( theFrame,
"This file is no valid TinyLaF theme.", "Error loading file",
JOptionPane.ERROR_MESSAGE );
return;
}
currentFileName = fn;
customStyle.setEnabled ( true );
customStyle.setSelected ( true );
updateStyle ( Theme.CUSTOM_STYLE );
}
private void saveTheme ( boolean showFileChooser )
{
if ( currentFileName != null && !showFileChooser
&& Theme.style == Theme.CUSTOM_STYLE )
{
Theme.saveTheme ( currentFileName );
updateThemeMenu ();
return;
}
JFileChooser ch = new JFileChooser ( System.getProperty ( "user.dir" ) );
ch.setFileFilter ( new ThemeFileFilter () );
ch.setSelectedFile ( new File ( System.getProperty ( "user.dir" )
+ File.separator + "Untitled.theme" ) );
int answer = ch.showSaveDialog ( theFrame );
if ( answer == JFileChooser.CANCEL_OPTION )
return;
File f = ch.getSelectedFile ();
if ( f == null )
return;
currentFileName = createFileExtension ( f, Theme.FILE_EXTENSION );
Theme.saveTheme ( currentFileName );
updateThemeMenu ();
if ( Theme.style != Theme.CUSTOM_STYLE )
{
// load the previously saved file to make it custom
openTheme ( currentFileName );
}
theFrame.setTitle ( WINDOW_TITLE + " - " + getDescription () );
}
private String createFileExtension ( File f, String ext )
{
String fn = f.getAbsolutePath ();
if ( fn.endsWith ( ext ) )
return fn;
if ( fn.lastIndexOf ( "." ) < fn.lastIndexOf ( File.separator ) )
{
return fn + ext;
}
return fn.substring ( 0, fn.lastIndexOf ( "." ) ) + ext;
}
private void saveDefaults ()
{
Theme.saveTheme ( Theme.DEFAULT_THEME );
updateThemeMenu ();
}
public static void main ( String [] args )
{
TinyLookAndFeel.controlPanelInstantiated = true;
// $JAVA_HOME/jre/lib/swing.properties:
// swing.defaultlaf = de.muntjak.tinylookandfeel.TinyLookAndFeel
// System.property: swing.defaultlaf
// the following also works:
// System.setProperty("swing.defaultlaf",
// "de.muntjak.tinylookandfeel.TinyLookAndFeel");
try
{
UIManager.setLookAndFeel ( "de.muntjak.tinylookandfeel.TinyLookAndFeel" );
}
catch ( Exception ex )
{
ex.printStackTrace ();
}
SwingUtilities.invokeLater ( new Runnable ()
{
public void run ()
{
new ControlPanel ();
}
} );
}
public class SBField extends JPanel
{
private boolean forceUpdate = false;
private boolean only99 = false;
private Dimension size = new Dimension ( 64, 18 );
private ColorReference [] ref;
SBField ( ColorReference [] ref )
{
this ( ref, false );
}
SBField ( ColorReference [] ref, boolean forceUpdate )
{
this.ref = ref;
this.forceUpdate = forceUpdate;
setBorder ( sbFieldBorder );
if ( ref == null )
return;
update ();
addMouseListener ( new Mousey () );
}
SBField ( ColorReference [] ref, boolean forceUpdate, boolean only99 )
{
this.ref = ref;
this.forceUpdate = forceUpdate;
this.only99 = only99;
setBorder ( sbFieldBorder );
if ( ref == null )
return;
update ();
addMouseListener ( new Mousey () );
}
SBField ( ColorReference [] ref, int height )
{
this.ref = ref;
forceUpdate = true;
size.height = height;
setBorder ( sbFieldBorder );
if ( ref == null )
return;
update ();
addMouseListener ( new Mousey () );
}
public ColorReference getColorReference ()
{
return ref [ Theme.style ];
}
public void resetReference ()
{
if ( ref == null )
return;
ref [ Theme.style ].reset ();
}
public Color getColor ()
{
return ref [ Theme.style ].getColor ();
}
public void setBackground ( Color bg )
{
if ( ref == null )
{
super.setBackground ( bg );
}
else
{
super.setBackground ( ref [ Theme.style ].getColor () );
}
}
public void update ()
{
if ( ref != null )
{
setBackground ( ref [ Theme.style ].update () );
}
repaint ();
updateTTT ();
}
private void updateTTT ()
{
if ( ref == null )
{
setToolTipText ( null );
return;
}
Color c = ref [ Theme.style ].getColor ();
StringBuffer buff = new StringBuffer ();
if ( ref [ Theme.style ].isAbsoluteColor () )
{
buff.append ( "R:" + c.getRed () );
buff.append ( " G:" + c.getGreen () );
buff.append ( " B:" + c.getBlue () );
}
else
{
buff.append ( "S:" + ref [ Theme.style ].getSaturation () );
buff.append ( " B:" + ref [ Theme.style ].getBrightness () );
buff.append ( " (" + ref [ Theme.style ].getReferenceString () + ")" );
buff.append ( " R:" + c.getRed () );
buff.append ( " G:" + c.getGreen () );
buff.append ( " B:" + c.getBlue () );
}
setToolTipText ( buff.toString () );
}
public void setColorReference ( ColorReference [] ref )
{
this.ref = ref;
update ();
}
public Dimension getPreferredSize ()
{
return size;
}
public void paint ( Graphics g )
{
if ( ref == null )
{
g.setColor ( Theme.backColor [ Theme.style ].getColor () );
g.fillRect ( 0, 0, getWidth (), getHeight () );
return;
}
super.paint ( g );
if ( ref [ Theme.style ].isLocked () )
return;
if ( only99 )
{
g.drawImage ( image99, 1, 1, this );
}
if ( ref [ Theme.style ].isAbsoluteColor () )
{
int x = getWidth () - 19;
float hue = 0.0f;
g.setColor ( Color.BLACK );
g.drawLine ( x - 1, 1, x - 1, getHeight () - 2 );
for ( int i = 0 ; i < 18 ; i++ )
{
g.setColor ( Color.getHSBColor ( hue, 0.5f, 1.0f ) );
g.drawLine ( x + i, 1, x + i, getHeight () - 2 );
hue += 1.0 / 19.0;
}
}
else
{
int x = getWidth () - 19;
int grey = 255;
g.setColor ( Color.BLACK );
g.drawLine ( x - 1, 1, x - 1, getHeight () - 2 );
for ( int i = 0 ; i < 18 ; i++ )
{
g.setColor ( new Color ( grey, grey, grey ) );
g.drawLine ( x + i, 1, x + i, getHeight () - 2 );
grey -= 255 / 18;
}
}
}
class Mousey extends MouseAdapter
{
public void mouseReleased ( MouseEvent e )
{
if ( e.isPopupTrigger () && !ref [ Theme.style ].isLocked () )
{
showSBPopup ( ( SBField ) e.getSource () );
}
}
public void mousePressed ( MouseEvent e )
{
if ( ref == null )
return;
SBField cf = ( SBField ) e.getSource ();
cf.requestFocus ();
if ( e.isPopupTrigger () && !ref [ Theme.style ].isLocked () )
{
showSBPopup ( cf );
return;
}
if ( e.getX () > cf.getWidth () - 19
&& !ref [ Theme.style ].isLocked () )
{
showSBPopup ( cf );
return;
}
if ( e.getButton () != MouseEvent.BUTTON1 )
return;
Color newColor = null;
if ( ref [ Theme.style ].isAbsoluteColor () )
{
newColor = PSColorChooser
.showColorChooser ( theFrame, cf.getColor () );
if ( newColor == null )
return; // cancelled
cf.getColorReference ().setColor ( newColor );
cf.setBackground ( newColor );
}
else
{
newColor = SBChooser.showSBChooser ( theFrame, cf );
if ( newColor == null )
return; // cancelled
cf.getColorReference ().setColor ( SBChooser.getSat (),
SBChooser.getBri () );
cf.setBackground ( newColor );
}
updateTTT ();
initPanels ();
examplePanel.update ( forceUpdate );
}
}
}
class HSBField extends JPanel
{
private ActionListener action;
private int hue, bri, sat = 25, reference;
private boolean preserveGrey;
private boolean forceUpdate = false;
private Dimension size = new Dimension ( 33, 16 );
private HSBReference [] ref;
private int index;
HSBField ( HSBReference [] ref, ActionListener action, int index )
{
this.ref = ref;
this.action = action;
this.index = index;
hue = ref [ Theme.style ].getHue ();
sat = ref [ Theme.style ].getSaturation ();
bri = ref [ Theme.style ].getBrightness ();
preserveGrey = ref [ Theme.style ].isPreserveGrey ();
reference = ref [ Theme.style ].getReference ();
forceUpdate = true;
setBorder ( new LineBorder ( Color.DARK_GRAY, 1 ) );
if ( ref == null )
return;
update ();
addMouseListener ( new Mousey () );
}
public HSBReference getColorReference ()
{
return ref [ Theme.style ];
}
public int getHue ()
{
return hue;
}
public int getSaturation ()
{
return sat;
}
public int getBrightness ()
{
return bri;
}
public boolean isPreserveGrey ()
{
return preserveGrey;
}
public void setPreserveGrey ( boolean b )
{
preserveGrey = b;
}
public int getReference ()
{
return reference;
}
public void setReference ( int newReference, boolean updateHue )
{
reference = newReference;
if ( updateHue )
{
hue = ColorRoutines.calculateHue ( ColorReference
.getReferenceColor ( reference ) );
}
update ();
if ( iconChecks [ index ].isSelected () )
{
ActionEvent ae = new ActionEvent ( this, Event.ACTION_EVENT, "" );
getAction ().actionPerformed ( ae );
}
}
public void setHue ( int newHue )
{
hue = newHue;
}
public void setSaturation ( int newSat )
{
sat = newSat;
}
public void setBrightness ( int newBri )
{
bri = newBri;
}
public void update ()
{
if ( ref != null )
{
setBackground ( calculateBackground ( ColorReference
.getReferenceColor ( reference ) ) );
}
repaint ();
updateTTT ();
}
private Color calculateBackground ( Color c )
{
float [] f = Color.RGBtoHSB ( c.getRed (), c.getGreen (), c.getBlue (),
null );
f [ 0 ] = ( float ) ( ( float ) hue / 360.0 );
return Color.getHSBColor ( f [ 0 ], f [ 1 ], f [ 2 ] );
}
public void calculateHue ()
{
Color c = ref [ Theme.style ].getReferenceColor ();
hue = ColorRoutines.calculateHue ( c );
}
private void updateTTT ()
{
if ( ref == null )
{
setToolTipText ( null );
return;
}
StringBuffer buff = new StringBuffer ();
buff.append ( "H:" + hue );
buff.append ( " S:" + sat );
buff.append ( " B:" + bri );
buff.append ( " (" + ref [ Theme.style ].getReferenceString () + ")" );
setToolTipText ( buff.toString () );
}
public Dimension getPreferredSize ()
{
return size;
}
public void paint ( Graphics g )
{
if ( ref == null )
{
g.setColor ( Theme.backColor [ Theme.style ].getColor () );
g.fillRect ( 0, 0, getWidth (), getHeight () );
return;
}
super.paint ( g );
int x = getWidth () - 17;
int grey = 255;
g.setColor ( Color.BLACK );
g.drawLine ( x - 1, 1, x - 1, getHeight () - 2 );
for ( int i = 0 ; i < 16 ; i++ )
{
g.setColor ( new Color ( grey, grey, grey ) );
g.drawLine ( x + i, 1, x + i, getHeight () - 2 );
grey -= 255 / 16;
}
}
public ActionListener getAction ()
{
return action;
}
class Mousey extends MouseAdapter
{
public void mouseReleased ( MouseEvent e )
{
if ( e.isPopupTrigger () && !ref [ Theme.style ].isLocked () )
{
showSBPopup ( ( SBField ) e.getSource () );
}
}
public void mousePressed ( MouseEvent e )
{
if ( ref == null )
return;
HSBField cf = ( HSBField ) e.getSource ();
cf.requestFocus ();
if ( e.isPopupTrigger () && !ref [ Theme.style ].isLocked () )
{
showHSBPopup ( cf );
return;
}
else if ( e.getX () > cf.getWidth () - 19
&& !ref [ Theme.style ].isLocked () )
{
showHSBPopup ( cf );
return;
}
if ( e.getButton () != MouseEvent.BUTTON1 )
return;
if ( !iconChecks [ cf.index ].isSelected () )
{
iconChecks [ cf.index ].setSelected ( true );
}
int memHue = cf.hue;
int memSat = cf.sat;
int memBri = cf.bri;
boolean memPreserveGrey = cf.preserveGrey;
if ( !HSBChooser.showColorizeDialog ( theFrame, cf ) )
{ // cancelled
cf.hue = memHue;
cf.sat = memSat;
cf.bri = memBri;
cf.preserveGrey = memPreserveGrey;
iconCP.colorizeIcon ( cf, true );
return;
}
hue = HSBChooser.getHue ();
sat = HSBChooser.getSaturation ();
bri = HSBChooser.getBrightness ();
preserveGrey = HSBChooser.isPreserveGrey ();
update ();
updateTTT ();
updateThemeButton.setEnabled ( true );
}
}
}
class SelectSpecialFontAction implements ActionListener
{
public void actionPerformed ( ActionEvent e )
{
updateSpecialFont ();
}
}
class DerivedFontAction implements ActionListener
{
public void actionPerformed ( ActionEvent e )
{
if ( resistUpdate )
return;
if ( e.getSource ().equals ( isPlainFont ) )
{
if ( isPlainFont.isSelected () )
{
isBoldFont.setSelected ( false );
selectedFont [ Theme.style ].setPlainFont ( true );
}
else
{
selectedFont [ Theme.style ].setPlainFont ( false );
}
}
else if ( e.getSource ().equals ( isBoldFont ) )
{
if ( isBoldFont.isSelected () )
{
isPlainFont.setSelected ( false );
selectedFont [ Theme.style ].setBoldFont ( true );
}
else
{
selectedFont [ Theme.style ].setBoldFont ( false );
}
}
specialFontPanel.init ( selectedFont [ Theme.style ] );
updateFont ( SPECIAL_FONT );
}
}
class SBPopupAction implements ActionListener
{
public void actionPerformed ( ActionEvent e )
{
int ref = Integer.parseInt ( e.getActionCommand () );
selectedSBField.getColorReference ().setReference ( ref );
selectedSBField.resetReference ();
selectedSBField.update ();
initPanels ();
examplePanel.update ( selectedSBField.forceUpdate );
}
}
class HSBPopupAction implements ActionListener
{
public void actionPerformed ( ActionEvent e )
{
int ref = Integer.parseInt ( e.getActionCommand () );
if ( !iconChecks [ selectedHSBField.index ].isSelected () )
{
iconChecks [ selectedHSBField.index ].setSelected ( true );
}
selectedHSBField.setReference ( ref, true );
updateThemeButton.setEnabled ( true );
}
}
/*
* Action for "Apply Settings" button
*/
class SetThemeAction implements ActionListener
{
public void actionPerformed ( ActionEvent e )
{
setTheme ();
}
}
class FontPanel extends JPanel
{
private int type;
private JComboBox fontFamilyCombo, fontSizeCombo;
private JCheckBox bold;
private SBField colorField;
FontPanel ( int type )
{
this.type = type;
setupUI ();
}
private void setupUI ()
{
ActionListener updateFontAction = new UpdateFontAction ();
Font theFont = null;
if ( type == PLAIN_FONT )
{
theFont = Theme.plainFont [ Theme.style ].getFont ();
}
else if ( type == BOLD_FONT )
{
theFont = Theme.boldFont [ Theme.style ].getFont ();
}
else
{
theFont = selectedFont [ Theme.style ].getFont ();
}
setLayout ( new FlowLayout ( FlowLayout.LEFT, 3, 1 ) );
if ( type == PLAIN_FONT )
{
setBorder ( new TitledBorder ( "Plain Font" ) );
}
else if ( type == BOLD_FONT )
{
setBorder ( new TitledBorder ( "Bold Font" ) );
}
else
{
setBorder ( new TitledBorder ( "Special Font" ) );
}
add ( new JLabel ( "Family" ) );
fontFamilyCombo = createSchriftarten ( theFont );
fontFamilyCombo.addActionListener ( updateFontAction );
add ( fontFamilyCombo );
add ( new JLabel ( " Size" ) );
fontSizeCombo = createSchriftgroessen ( theFont );
fontSizeCombo.addActionListener ( updateFontAction );
add ( fontSizeCombo );
add ( new JLabel ( " " ) );
bold = new JCheckBox ( "Bold", theFont.isBold () );
bold.addActionListener ( updateFontAction );
add ( bold );
if ( type == SPECIAL_FONT )
{
colorField = new SBField ( selectedFont [ Theme.style ]
.getColorReference (), true );
add ( colorField );
}
}
public String getFontFamily ()
{
return ( String ) fontFamilyCombo.getSelectedItem ();
}
public int getFontSize ()
{
return Integer.parseInt ( ( String ) fontSizeCombo.getSelectedItem () );
}
public int getFontType ()
{
if ( bold.isSelected () )
{
return Font.BOLD;
}
return Font.PLAIN;
}
public FontUIResource getCurrentFont ()
{
return new FontUIResource ( getFontFamily (), getFontType (),
getFontSize () );
}
public void init ( ColoredFont f )
{
resistUpdate = true;
fontSizeCombo
.setSelectedItem ( String.valueOf ( f.getFont ().getSize () ) );
fontFamilyCombo.setSelectedItem ( f.getFont ()
.getFamily ( Locale.GERMANY ) );
bold.setSelected ( f.getFont ().isBold () );
resistUpdate = false;
if ( colorField == null )
return;
resistUpdate = true;
colorField.setColorReference ( f.getColorReference () );
isPlainFont.setSelected ( f.isPlainFont () );
isBoldFont.setSelected ( f.isBoldFont () );
resistUpdate = false;
}
private JComboBox createSchriftarten ( Font font )
{
Font [] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment ()
.getAllFonts ();
TreeSet family = new TreeSet ();
for ( int i = 0 ; i < fonts.length ; i++ )
{
family.add ( fonts [ i ].getFamily ( Locale.GERMANY ) );
}
JComboBox box = new JComboBox ( new Vector ( family ) );
for ( int i = 0 ; i < box.getItemCount () ; i++ )
{
if ( box.getItemAt ( i ).equals ( font.getFamily ( Locale.GERMANY ) ) )
{
box.setSelectedIndex ( i );
break;
}
}
return box;
}
private JComboBox createSchriftgroessen ( Font font )
{
String [] groessen = new String [ 10 ];
groessen [ 0 ] = "10";
groessen [ 1 ] = "11";
groessen [ 2 ] = "12";
groessen [ 3 ] = "13";
groessen [ 4 ] = "14";
groessen [ 5 ] = "16";
groessen [ 6 ] = "18";
groessen [ 7 ] = "20";
groessen [ 8 ] = "22";
groessen [ 9 ] = "24";
JComboBox box = new JComboBox ( groessen );
switch ( font.getSize () )
{
case 10 :
box.setSelectedIndex ( 0 );
break;
case 11 :
box.setSelectedIndex ( 1 );
break;
case 12 :
box.setSelectedIndex ( 2 );
break;
case 13 :
box.setSelectedIndex ( 3 );
break;
case 14 :
box.setSelectedIndex ( 4 );
break;
case 16 :
box.setSelectedIndex ( 5 );
break;
case 18 :
box.setSelectedIndex ( 6 );
break;
case 20 :
box.setSelectedIndex ( 7 );
break;
case 22 :
box.setSelectedIndex ( 8 );
break;
case 24 :
box.setSelectedIndex ( 9 );
break;
}
box.setMaximumRowCount ( 10 );
return box;
}
class UpdateFontAction implements ActionListener
{
public void actionPerformed ( ActionEvent e )
{
if ( resistUpdate )
return;
if ( type == SPECIAL_FONT )
{
selectedFont [ Theme.style ].setPlainFont ( false );
selectedFont [ Theme.style ].setBoldFont ( false );
}
updateFont ( type );
specialFontPanel.init ( selectedFont [ Theme.style ] );
}
}
}
class ExamplePanel extends JPanel
{
private JTabbedPane exampleTb;
ExamplePanel ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new BorderLayout () );
JPanel p0 = new JPanel ( new BorderLayout ( 4, 0 ) );
JPanel p1 = new JPanel ( new GridLayout ( 2, 2, 4, 4 ) );
JPanel p2 = new JPanel ( new BorderLayout ( 4, 4 ) );
scrollBars = new Component [ 7 ];
// Scrollables
SizedPanel sizey = new SizedPanel ( 70, 130 );
JScrollPane sp = new JScrollPane ( sizey,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS );
sp.setPreferredSize ( new Dimension ( 96, 96 ) );
sp.getVerticalScrollBar ().setUnitIncrement ( 4 );
sp.getHorizontalScrollBar ().setUnitIncrement ( 4 );
p1.add ( sp );
scrollBars [ 0 ] = sp;
sizey = new SizedPanel ( 130, 130 );
sp = new JScrollPane ( sizey, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS );
sp.setPreferredSize ( new Dimension ( 96, 96 ) );
sp.getVerticalScrollBar ().setUnitIncrement ( 4 );
sp.getHorizontalScrollBar ().setUnitIncrement ( 4 );
p1.add ( sp );
scrollBars [ 1 ] = sp;
// List
JList list = createList ();
list.setSelectedIndex ( 1 );
list.setVisibleRowCount ( 4 );
sp = new JScrollPane ( list, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
p1.add ( sp );
scrollBars [ 2 ] = sp;
// TextAreas
JPanel p5 = new JPanel ( new GridLayout ( 3, 1 ) );
JTextArea ta = new JTextArea ( " JTextArea\n enabled" );
p5.add ( ta );
ta = new JTextArea ( " JTextArea\n non-editable" );
ta.setEditable ( false );
p5.add ( ta );
ta = new JTextArea ( " JTextArea\n disabled" );
ta.setEnabled ( false );
p5.add ( ta );
sp = new JScrollPane ( p5, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
p1.add ( sp );
scrollBars [ 3 ] = sp;
p2.add ( p1, BorderLayout.CENTER );
// TextPane
JTextPane textPane = new JTextPane ( createStyledDocument () );
textPane.setEditable ( false );
p5 = new JPanel ( new FlowLayout ( FlowLayout.CENTER, 0, 3 ) );
p5.add ( textPane );
p2.add ( p5, BorderLayout.SOUTH );
p0.add ( p2, BorderLayout.WEST );
// Buttons
p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.WEST;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 0, 2, 4, 2 );
exampleButton = new JButton ( "JButton" );
// exampleButton.addActionListener(new ActionListener() {
// public void actionPerformed(ActionEvent e) {
// TableHeaderUI headerUI = exampleTable.getTableHeader().getUI();
//
// if(headerUI instanceof TinyTableHeaderUI) {
// // remove sorting
// ((TinyTableHeaderUI)headerUI).sortColumns(
// new int[] {},
// new int[] {},
// exampleTable);
// }
// }
// });
exampleButton.setToolTipText ( "Enabled JButton" );
buttons [ 0 ] = exampleButton;
p1.add ( exampleButton, gc );
gc.gridx++ ;
exampleDisabledButton = new JButton ( "Disabled" );
exampleDisabledButton.setToolTipText ( "Disabled JButton" );
buttons [ 1 ] = exampleDisabledButton;
exampleDisabledButton.setEnabled ( false );
p1.add ( exampleDisabledButton, gc );
// ToggleButton
gc.gridx = 0;
gc.gridy++ ;
exampleToggleButton = new JToggleButton ( "JToggleButton" );
buttons [ 2 ] = exampleToggleButton;
p1.add ( exampleToggleButton, gc );
gc.gridx++ ;
JCheckBox ch = new JCheckBox ( "Buttons w/icon", false );
buttons [ 3 ] = ch;
ch.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
addButtonIcons ( ( ( AbstractButton ) e.getSource () ).isSelected () );
}
} );
p1.add ( ch, gc );
// CheckBox
gc.gridx = 0;
gc.gridy++ ;
gc.insets = new Insets ( 0, 2, 0, 2 );
ch = new JCheckBox ( "JCheckBox", false );
buttons [ 4 ] = ch;
p1.add ( ch, gc );
gc.gridx++ ;
ch = new JCheckBox ( "Disabled", true );
buttons [ 5 ] = ch;
ch.setEnabled ( false );
p1.add ( ch, gc );
// Radio
gc.gridx = 0;
gc.gridy++ ;
JRadioButton rb = new JRadioButton ( "JRadioButton" );
buttons [ 6 ] = rb;
p1.add ( rb, gc );
gc.gridx++ ;
rb = new JRadioButton ( "Disabled", true );
buttons [ 7 ] = rb;
rb.setEnabled ( false );
p1.add ( rb, gc );
// Separators
gc.fill = gc.HORIZONTAL;
gc.gridx = 0;
gc.gridy++ ;
gc.gridwidth = 2;
gc.insets = new Insets ( 4, 2, 4, 2 );
p1.add ( new JSeparator (), gc );
gc.gridwidth = 1;
gc.fill = gc.NONE;
// Combos
combos = new Component [ 4 ];
gc.gridx = 0;
gc.gridy++ ;
gc.insets = new Insets ( 0, 2, 4, 2 );
JComboBox cb = createCombo ( "JComboBox" );
combos [ 0 ] = cb;
p1.add ( cb, gc );
gc.gridx++ ;
cb = createCombo ( "Disabled Combo" );
combos [ 1 ] = cb;
cb.setEnabled ( false );
p1.add ( cb, gc );
gc.gridx = 0;
gc.gridy++ ;
gc.insets = new Insets ( 0, 2, 1, 2 );
cb = createCombo ( "Editable JComboBox" );
combos [ 2 ] = cb;
cb.setEditable ( true );
p1.add ( cb, gc );
gc.gridx++ ;
cb = createCombo ( "Disabled Editable" );
combos [ 3 ] = cb;
cb.setEditable ( true );
cb.setEnabled ( false );
p1.add ( cb, gc );
// Separators
gc.fill = gc.HORIZONTAL;
gc.gridx = 0;
gc.gridy++ ;
gc.gridwidth = 2;
gc.insets = new Insets ( 4, 2, 4, 2 );
p1.add ( new JSeparator (), gc );
gc.gridwidth = 1;
gc.fill = gc.NONE;
// Text
gc.gridx = 0;
gc.gridy++ ;
gc.insets = new Insets ( 0, 2, 4, 2 );
JTextField tf = new JTextField ( "JTextField" );
p1.add ( tf, gc );
gc.gridx++ ;
tf = new JTextField ( "Disabled" );
tf.setEnabled ( false );
p1.add ( tf, gc );
gc.gridx = 0;
gc.gridy++ ;
tf = new JTextField ( "Non-editable Textfield" );
tf.setEditable ( false );
p1.add ( tf, gc );
gc.gridx++ ;
tf = new JTextField ( "Disabled non-editable" );
tf.setEditable ( false );
tf.setEnabled ( false );
p1.add ( tf, gc );
gc.gridx = 0;
gc.gridy++ ;
tf = new JFormattedTextField ( "JFormattedTextField" );
p1.add ( tf, gc );
gc.gridx++ ;
tf = new JFormattedTextField ( "Disabled" );
tf.setEditable ( false );
tf.setEnabled ( false );
p1.add ( tf, gc );
gc.gridx = 0;
gc.gridy++ ;
gc.insets = new Insets ( 0, 2, 1, 2 );
tf = new JPasswordField ( "JPasswordField" );
p1.add ( tf, gc );
gc.gridx++ ;
tf = new JPasswordField ( "Disabled" );
tf.setEnabled ( false );
p1.add ( tf, gc );
// Separators
gc.fill = gc.HORIZONTAL;
gc.gridx = 0;
gc.gridy++ ;
gc.gridwidth = 2;
gc.insets = new Insets ( 4, 2, 4, 2 );
p1.add ( new JSeparator (), gc );
gc.gridwidth = 1;
gc.fill = gc.NONE;
// Spinners
spinners = new Component [ 4 ];
gc.gridx = 0;
gc.gridy++ ;
gc.insets = new Insets ( 0, 2, 2, 2 );
p2 = new JPanel ( new FlowLayout ( FlowLayout.LEFT, 0, 0 ) );
JSpinner spinner = new JSpinner ( new SpinnerNumberModel ( 42, 0, 99, 1 ) );
spinners [ 0 ] = spinner;
p2.add ( spinner );
p2.add ( new JLabel ( " " ) );
spinner = new JSpinner ( new SpinnerDateModel () );
spinners [ 1 ] = spinner;
p2.add ( spinner );
p1.add ( p2, gc );
gc.gridx++ ;
p2 = new JPanel ( new FlowLayout ( FlowLayout.LEFT, 0, 0 ) );
spinner = new JSpinner ( new SpinnerNumberModel ( 42, 0, 42, 1 ) );
spinners [ 2 ] = spinner;
spinner.setEnabled ( false );
p2.add ( spinner );
p2.add ( new JLabel ( " " ) );
spinner = new JSpinner ( new SpinnerDateModel ( new Date (), null, null,
Calendar.DAY_OF_WEEK ) );
spinners [ 3 ] = spinner;
spinner.setEnabled ( false );
p2.add ( spinner );
p1.add ( p2, gc );
p2 = new JPanel ( new FlowLayout ( FlowLayout.LEFT, 0, 0 ) );
p2.add ( p1 );
p0.add ( p2, BorderLayout.CENTER );
// Tree
JPanel p3 = new JPanel ( new BorderLayout () );
p2 = new JPanel ( new GridLayout ( 1, 2 ) );
tree1 = new JTree ();
tree1.setCellRenderer ( new SwitchTreeIcons ( true ) );
tree1.setEditable ( true );
tree1.expandPath ( tree1.getNextMatch ( "colors", 0,
Position.Bias.Forward ) );
tree1
.expandPath ( tree1.getNextMatch ( "food", 0, Position.Bias.Forward ) );
tree1.setVisibleRowCount ( 10 );
sp1 = new JScrollPane ( tree1, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
sp1
.setViewportBorder ( BorderFactory.createLineBorder ( Color.WHITE, 2 ) );
p2.add ( sp1 );
scrollBars [ 4 ] = sp1;
tree2 = new JTree ();
tree2.setCellRenderer ( new SwitchTreeIcons ( true ) );
DefaultMutableTreeNode root = ( DefaultMutableTreeNode ) tree2
.getModel ().getRoot ();
root.setUserObject ( "JTree disabled" );
tree2.getModel ().valueForPathChanged ( new TreePath ( root.getPath () ),
"JTree disabled" );
tree2.expandPath ( tree2.getNextMatch ( "sports", 0,
Position.Bias.Forward ) );
tree2.setEnabled ( false );
tree2.setVisibleRowCount ( 10 );
sp2 = new JScrollPane ( tree2, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
sp2
.setViewportBorder ( BorderFactory.createLineBorder ( Color.WHITE, 2 ) );
p2.add ( sp2 );
scrollBars [ 5 ] = sp2;
JPanel p4 = new JPanel ( new BorderLayout ( 3, 0 ) );
p4.add ( p2, BorderLayout.CENTER );
// Popup trigger
p5 = new JPanel ( new FlowLayout ( FlowLayout.CENTER, 12, 3 ) );
JCheckBox check = new JCheckBox ( "Show Tree Icons", true );
check.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
SwitchTreeIcons renderer = ( SwitchTreeIcons ) tree1
.getCellRenderer ();
renderer.setShowIcons ( ( ( AbstractButton ) e.getSource () )
.isSelected () );
renderer = ( SwitchTreeIcons ) tree2.getCellRenderer ();
renderer.setShowIcons ( ( ( AbstractButton ) e.getSource () )
.isSelected () );
tree1.revalidate ();
tree2.revalidate ();
repaint ();
}
} );
p5.add ( check );
trigger = new PopupTrigger ();
p5.add ( trigger );
p4.add ( p5, BorderLayout.NORTH );
// Separators
p4.add ( new JSeparator ( SwingConstants.VERTICAL ), BorderLayout.WEST );
// EditorPane
URL page = getClass ().getResource (
"/de/muntjak/tinylookandfeel/html/default.html" );
JEditorPane editorPane = null;
try
{
editorPane = new JEditorPane ( page );
editorPane.setEditable ( false );
editorPane.setPreferredSize ( new Dimension ( 150, 70 ) );
}
catch ( IOException e )
{
editorPane = new JEditorPane ( "text", "Plain Document" );
}
p5 = new JPanel ( new FlowLayout ( FlowLayout.CENTER, 0, 3 ) );
p5.add ( editorPane );
p4.add ( p5, BorderLayout.SOUTH );
p3.add ( p4, BorderLayout.CENTER );
// Progressbar/Slider vert
p1 = new JPanel ( new BorderLayout ( 8, 0 ) );
p2 = new JPanel ( new GridBagLayout () );
gc.anchor = GridBagConstraints.WEST;
gc.fill = GridBagConstraints.VERTICAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 0, 12, 0, 2 );
vertProgressBar = new JProgressBar ( JProgressBar.VERTICAL, 0, 20 );
vertProgressBar.setValue ( 0 );
vertProgressBar.setStringPainted ( true );
vertProgressBar.addMouseListener ( new ProgressBarAction () );
vertProgressBar.setToolTipText ( "Click to start/stop" );
p2.add ( vertProgressBar, gc );
gc.gridx++ ;
vertSlider = new JSlider ( JSlider.VERTICAL, 0, 100, 40 );
vertSlider.setMajorTickSpacing ( 20 );
vertSlider.setMinorTickSpacing ( 10 );
vertSlider.setPaintTicks ( true );
vertSlider.setPaintLabels ( true );
Dimension d = vertSlider.getPreferredSize ();
d.height = 183;
vertSlider.setPreferredSize ( d );
p2.add ( vertSlider, gc );
p1.add ( p2, BorderLayout.WEST );
// Progressbar/Slider horz
p2 = new JPanel ( new GridBagLayout () );
gc.anchor = GridBagConstraints.WEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 0, 2, 0 );
horzProgressBar = new JProgressBar ( 0, 20 );
horzProgressBar.setValue ( 0 );
horzProgressBar.setStringPainted ( true );
horzProgressBar.addMouseListener ( new ProgressBarAction () );
horzProgressBar.setToolTipText ( "Click to start/stop" );
p2.add ( horzProgressBar, gc );
gc.gridy++ ;
horzSlider = new JSlider ( JSlider.HORIZONTAL, 0, 100, 40 );
d = horzSlider.getPreferredSize ();
horzSlider.setPreferredSize ( d );
d.width = 183;
p2.add ( horzSlider, gc );
p1.add ( p2, BorderLayout.NORTH );
// OptionPane Buttons
p2 = new JPanel ( new GridBagLayout () );
gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.WEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 0, 2, 0, 0 );
check = new JCheckBox ( "stringPainted", true );
buttons [ 22 ] = check;
check.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
vertProgressBar.setStringPainted ( ( ( AbstractButton ) e
.getSource () ).isSelected () );
horzProgressBar.setStringPainted ( ( ( AbstractButton ) e
.getSource () ).isSelected () );
}
} );
p2.add ( check, gc );
gc.gridy++ ;
check = new JCheckBox ( "Sliders Enabled", true );
buttons [ 23 ] = check;
check.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
if ( horzSlider.isEnabled () )
{
horzSlider.setEnabled ( false );
vertSlider.setEnabled ( false );
}
else
{
horzSlider.setEnabled ( true );
vertSlider.setEnabled ( true );
}
}
} );
p2.add ( check, gc );
gc.gridy++ ;
// dialog buttons
gc.insets = new Insets ( 6, 2, 0, 0 );
JButton b = new JButton ( "MessageDialog" );
buttons [ 8 ] = b;
b.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
showMessageDialog ();
}
} );
p2.add ( b, gc );
gc.gridy++ ;
b = new JButton ( "ConfirmDialog" );
buttons [ 9 ] = b;
b.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
showConfirmationDialog ();
}
} );
p2.add ( b, gc );
gc.gridy++ ;
b = new JButton ( "WarningDialog" );
buttons [ 10 ] = b;
b.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
showWarningDialog ();
}
} );
p2.add ( b, gc );
gc.gridy++ ;
b = new JButton ( "ErrorDialog" );
buttons [ 11 ] = b;
b.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
showErrorDialog ();
}
} );
p2.add ( b, gc );
p1.add ( p2, BorderLayout.CENTER );
p3.add ( p1, BorderLayout.EAST );
p0.add ( p3, BorderLayout.EAST );
p2 = new JPanel ( new FlowLayout ( FlowLayout.LEFT, 4, 4 ) );
p2.setBorder ( new EtchedBorder () );
p2.add ( p0 );
add ( p2, BorderLayout.NORTH );
desktopPane = new DesktopPane ();
add ( desktopPane, BorderLayout.CENTER );
}
private JList createList ()
{
String [] items = new String [ 7 ];
items [ 0 ] = "A JList";
items [ 1 ] = "can have";
items [ 2 ] = "zero to";
items [ 3 ] = "many items";
items [ 4 ] = "and can be";
items [ 5 ] = "scrolled";
items [ 6 ] = "(or not)";
return new JList ( items );
}
private JComboBox createCombo ( String s )
{
return new JComboBox ( new String []
{ s, "can have", "zero to", "many items", "and can be", "triggered",
"many times" } );
}
public void update ( boolean forceUpdate )
{
updateTheme ();
if ( forceUpdate )
{
updateThemeButton.setEnabled ( true );
}
repaint ( 0 );
}
public void paint ( Graphics g )
{
super.paint ( g );
}
class SwitchTreeIcons extends DefaultTreeCellRenderer
{
private boolean showIcons;
SwitchTreeIcons ( boolean showIcons )
{
this.showIcons = showIcons;
}
void setShowIcons ( boolean b )
{
showIcons = b;
}
public Icon getClosedIcon ()
{
if ( showIcons )
{
return super.getClosedIcon ();
}
return null;
}
public Icon getOpenIcon ()
{
if ( showIcons )
{
return super.getOpenIcon ();
}
return null;
}
public Icon getLeafIcon ()
{
if ( showIcons )
{
return super.getLeafIcon ();
}
return null;
}
public Icon getDisabledIcon ()
{
if ( showIcons )
{
return super.getDisabledIcon ();
}
return null;
}
}
class ContentLabel extends JLabel
{
ContentLabel ()
{
super ( "Content" );
setOpaque ( true );
setBorder ( BorderFactory.createEmptyBorder ( 32, 32, 32, 32 ) );
setBackground ( new Color ( 211, 225, 255 ) );
}
}
class DesktopPane extends JDesktopPane
{
Dimension preferredSize = new Dimension ( 780, 160 );
DesktopPane ()
{
setupUI ();
}
public Dimension getPreferredSize ()
{
return preferredSize;
}
private void setupUI ()
{
JPanel p0 = new JPanel ();
p0.setBounds ( 0, 0, preferredSize.width, preferredSize.height );
// Table
exampleTable = new JTable ( new TinyTableModel () );
exampleTable.setRowSelectionAllowed ( true );
exampleTable.setColumnSelectionAllowed ( true );
exampleTable.setColumnSelectionInterval ( 2, 2 );
exampleTable.setRowSelectionInterval ( 0, 2 );
exampleTable.setDefaultRenderer ( TinyTableModel.TableColorIcon.class,
new IconRenderer () );
JScrollPane sp = new JScrollPane ( exampleTable );
sp.setBounds ( 10, 10, 192, 132 );
add ( sp, JDesktopPane.DEFAULT_LAYER );
scrollBars [ 6 ] = sp;
// Disabled TabbedPane
exampleTb = new JTabbedPane ();
exampleTb.add ( "Disabled", new ContentLabel () );
exampleTb.add ( "Tabbed", new ContentLabel () );
exampleTb.add ( "Pane", new ContentLabel () );
exampleTb.setEnabled ( false );
exampleTb.setPreferredSize ( new Dimension ( 180, 60 ) );
exampleTb.setBounds ( 210, 40, 180, 60 );
add ( exampleTb, JDesktopPane.DEFAULT_LAYER );
// Internal Frame
frames = new Component [ 2 ];
internalFrame = new JInternalFrame ( "InternalFrame", true, true, true,
true );
frames [ 0 ] = internalFrame;
internalFrame.updateUI ();
internalFrame.setDefaultCloseOperation ( JFrame.DO_NOTHING_ON_CLOSE );
internalFrame.addInternalFrameListener ( new InternalFrameAdapter ()
{
public void internalFrameClosing ( InternalFrameEvent e )
{
String msg = "This internal frame cannot be closed.";
JOptionPane.showInternalMessageDialog ( internalFrame, msg );
e.getInternalFrame ().show ();
}
} );
internalFrame.getContentPane ().add ( new SizedPanel ( 200, 100 ) );
internalFrame.pack ();
Dimension frameSize = internalFrame.getPreferredSize ();
internalFrame.setBounds ( 400, 10, frameSize.width, frameSize.height );
internalFrame.show ();
add ( internalFrame, JDesktopPane.PALETTE_LAYER );
// Palette
palette = new JInternalFrame ( "Palette", false, true, true, true );
frames [ 1 ] = palette;
palette.putClientProperty ( "JInternalFrame.isPalette", Boolean.TRUE );
palette.setDefaultCloseOperation ( JFrame.DO_NOTHING_ON_CLOSE );
palette.addInternalFrameListener ( new InternalFrameAdapter ()
{
public void internalFrameClosing ( InternalFrameEvent e )
{
String msg = "This internal palette cannot be closed.";
JOptionPane.showInternalMessageDialog ( palette, msg );
e.getInternalFrame ().show ();
}
} );
JPanel p2 = new JPanel ( new FlowLayout ( FlowLayout.CENTER, 0, 0 ) );
JButton defaultButton = new JButton ( "InternalMessageDialog" );
buttons [ 12 ] = defaultButton;
defaultButton.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
JOptionPane.showInternalMessageDialog ( palette,
"Life is a while(true) loop." );
}
} );
palette.getRootPane ().setDefaultButton ( defaultButton );
JButton b = new JButton ( "InternalConfirmDialog " );
buttons [ 13 ] = b;
b.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
JOptionPane.showInternalConfirmDialog ( palette,
"Is programming art?" );
}
} );
JPanel p3 = new JPanel ( new GridLayout ( 4, 1 ) );
p3.add ( new JLabel () );
p3.add ( defaultButton );
p3.add ( new JLabel () );
p3.add ( b );
p2.add ( p3 );
palette.getContentPane ().add ( p2 );
palette.setBounds ( 400 + internalFrame.getWidth () + 12, 10, 180, 140 );
palette.show ();
add ( palette, JDesktopPane.PALETTE_LAYER );
}
}
}
class ScrollBarCP extends JPanel
{
private JCheckBox rolloverEnabled;
private boolean inited = false;
ScrollBarCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
// Thumb
p1.add ( new JLabel ( "Thumb Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
scrollThumbField = new SBField ( Theme.scrollThumbColor );
p1.add ( scrollThumbField, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Rollover Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
scrollThumbRolloverBg = new SBField ( Theme.scrollThumbRolloverColor );
p1.add ( scrollThumbRolloverBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Presssed Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
scrollThumbPressedBg = new SBField ( Theme.scrollThumbPressedColor );
p1.add ( scrollThumbPressedBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Disabled Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
scrollThumbDisabledBg = new SBField ( Theme.scrollThumbDisabledColor );
p1.add ( scrollThumbDisabledBg, gc );
// Grip
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
JLabel l = new JLabel ( "<html>Grip Dark Color <b>*" );
l.setIconTextGap ( 2 );
l.setHorizontalTextPosition ( JLabel.LEADING );
l.setVerticalTextPosition ( JLabel.TOP );
p1.add ( l, gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollGripDark = new SBField ( Theme.scrollGripDarkColor );
p1.add ( scrollGripDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
l = new JLabel ( "<html>Grip Light Col <b>*" );
l.setIconTextGap ( 2 );
l.setHorizontalTextPosition ( JLabel.LEADING );
l.setVerticalTextPosition ( JLabel.TOP );
p1.add ( l, gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollGripLight = new SBField ( Theme.scrollGripLightColor );
p1.add ( scrollGripLight, gc );
gc.gridy++ ;
gc.gridheight = 3;
gc.insets = new Insets ( 6, 8, 0, 4 );
l = new JLabel ( "<html><b>*</b> Only saturation<br>"
+ "and lightness<br>are considered." );
l.setVerticalTextPosition ( JLabel.TOP );
l.setBackground ( infoColor );
l.setForeground ( Color.BLACK );
l.setOpaque ( true );
l.setIconTextGap ( 2 );
l.setBorder ( infoBorder );
p1.add ( l, gc );
// Button
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 1;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Button Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollButtField = new SBField ( Theme.scrollButtColor );
p1.add ( scrollButtField, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Rollover Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollButtRolloverBg = new SBField ( Theme.scrollButtRolloverColor );
p1.add ( scrollButtRolloverBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Presssed Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollButtPressedBg = new SBField ( Theme.scrollButtPressedColor );
p1.add ( scrollButtPressedBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollButtDisabledBg = new SBField ( Theme.scrollButtDisabledColor );
p1.add ( scrollButtDisabledBg, gc );
// Spread
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollSpreadLight = new SpreadControl ( Theme.scrollSpreadLight, 20,
CONTROLS_SCROLLBAR );
p1.add ( scrollSpreadLight, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollSpreadDark = new SpreadControl ( Theme.scrollSpreadDark, 20,
CONTROLS_SCROLLBAR );
p1.add ( scrollSpreadDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled S. Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollSpreadLightDisabled = new SpreadControl (
Theme.scrollSpreadLightDisabled, 20, CONTROLS_SCROLLBAR );
p1.add ( scrollSpreadLightDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled S. Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollSpreadDarkDisabled = new SpreadControl (
Theme.scrollSpreadDarkDisabled, 20, CONTROLS_SCROLLBAR );
p1.add ( scrollSpreadDarkDisabled, gc );
// Border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollBorder = new SBField ( Theme.scrollBorderColor );
p1.add ( scrollBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollDark = new SBField ( Theme.scrollDarkColor, false, true );
p1.add ( scrollDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollLight = new SBField ( Theme.scrollLightColor );
p1.add ( scrollLight, gc );
gc.gridy = 7;
gc.insets = new Insets ( 0, 8, 0, 4 );
rolloverEnabled = new JCheckBox ( "Paint Rollover", false );
rolloverEnabled.addActionListener ( checkAction );
p1.add ( rolloverEnabled, gc );
// Border disabled
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollBorderDisabled = new SBField ( Theme.scrollBorderDisabledColor );
p1.add ( scrollBorderDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollDarkDisabled = new SBField ( Theme.scrollDarkDisabledColor, false,
true );
p1.add ( scrollDarkDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollLightDisabled = new SBField ( Theme.scrollLightDisabledColor );
p1.add ( scrollLightDisabled, gc );
// Track
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 1;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Track Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
trackField = new SBField ( Theme.scrollTrackColor );
p1.add ( trackField, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Track Disabled" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
trackDisabled = new SBField ( Theme.scrollTrackDisabledColor );
p1.add ( trackDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Track Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
trackBorder = new SBField ( Theme.scrollTrackBorderColor );
p1.add ( trackBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Track Border Disabled" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
trackBorderDisabled = new SBField ( Theme.scrollTrackBorderDisabledColor );
p1.add ( trackBorderDisabled, gc );
// Arrow
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Arrow Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollArrowField = new SBField ( Theme.scrollArrowColor );
p1.add ( scrollArrowField, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Arrow Disabled Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollArrowDisabled = new SBField ( Theme.scrollArrowDisabledColor );
p1.add ( scrollArrowDisabled, gc );
gc.gridy += 3;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "ScrollPane Border Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
scrollPane = new SBField ( Theme.scrollPaneBorderColor );
p1.add ( scrollPane, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
rolloverEnabled.setSelected ( Theme.scrollRollover [ Theme.style ] );
scrollThumbField.update ();
scrollButtField.update ();
scrollArrowField.update ();
trackField.update ();
scrollThumbRolloverBg.update ();
scrollThumbPressedBg.update ();
scrollThumbDisabledBg.update ();
trackBorder.update ();
scrollButtRolloverBg.update ();
scrollButtPressedBg.update ();
scrollButtDisabledBg.update ();
trackDisabled.update ();
trackBorderDisabled.update ();
scrollArrowDisabled.update ();
scrollGripDark.update ();
scrollGripLight.update ();
scrollBorder.update ();
scrollDark.update ();
scrollLight.update ();
scrollBorderDisabled.update ();
scrollDarkDisabled.update ();
scrollLightDisabled.update ();
scrollPane.update ();
scrollSpreadDark.init ();
scrollSpreadLight.init ();
scrollSpreadDarkDisabled.init ();
scrollSpreadLightDisabled.init ();
inited = true;
}
void updateTheme ()
{
if ( !inited || resistUpdate )
return;
Theme.scrollRollover [ Theme.style ] = rolloverEnabled.isSelected ();
}
}
class SliderCP extends JPanel
{
private JCheckBox rolloverEnabled;
private JCheckBox focusEnabled;
private boolean inited = false;
SliderCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
// Thumb
p1.add ( new JLabel ( "Thumb Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
sliderThumbField = new SBField ( Theme.sliderThumbColor );
p1.add ( sliderThumbField, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Rollover Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
sliderThumbRolloverBg = new SBField ( Theme.sliderThumbRolloverColor );
p1.add ( sliderThumbRolloverBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Presssed Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
sliderThumbPressedBg = new SBField ( Theme.sliderThumbPressedColor );
p1.add ( sliderThumbPressedBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Disabled Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
sliderThumbDisabledBg = new SBField ( Theme.sliderThumbDisabledColor );
p1.add ( sliderThumbDisabledBg, gc );
// border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderBorder = new SBField ( Theme.sliderBorderColor );
p1.add ( sliderBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Dark Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderDark = new SBField ( Theme.sliderDarkColor );
p1.add ( sliderDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Light Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderLight = new SBField ( Theme.sliderLightColor );
p1.add ( sliderLight, gc );
// disabled border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderDisabledBorder = new SBField ( Theme.sliderBorderDisabledColor );
p1.add ( sliderDisabledBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Dark Disabled" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderDisabledDark = new SBField ( Theme.sliderDarkDisabledColor );
p1.add ( sliderDisabledDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Light Disabled" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderDisabledLight = new SBField ( Theme.sliderLightDisabledColor );
p1.add ( sliderDisabledLight, gc );
gc.gridy += 2;
gc.insets = new Insets ( 0, 8, 0, 4 );
rolloverEnabled = new JCheckBox ( "Paint Rollover", true );
rolloverEnabled.addActionListener ( checkAction );
p1.add ( rolloverEnabled, gc );
// Track
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Track Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderTrack = new SBField ( Theme.sliderTrackColor );
p1.add ( sliderTrack, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Track Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderTrackBorder = new SBField ( Theme.sliderTrackBorderColor );
p1.add ( sliderTrackBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Track Border Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderTrackDark = new SBField ( Theme.sliderTrackDarkColor );
p1.add ( sliderTrackDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Track Border Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderTrackLight = new SBField ( Theme.sliderTrackLightColor );
p1.add ( sliderTrackLight, gc );
// Ticks
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Ticks Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderTick = new SBField ( Theme.sliderTickColor );
p1.add ( sliderTick, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Ticks Disabled Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderTickDisabled = new SBField ( Theme.sliderTickDisabledColor );
p1.add ( sliderTickDisabled, gc );
// Focus
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Focus Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
sliderFocusColor = new SBField ( Theme.sliderFocusColor );
p1.add ( sliderFocusColor, gc );
gc.gridy = 3;
gc.insets = new Insets ( 1, 8, 0, 4 );
focusEnabled = new JCheckBox ( "Paint Focus", true );
focusEnabled.addActionListener ( checkAction );
p1.add ( focusEnabled, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
rolloverEnabled
.setSelected ( Theme.sliderRolloverEnabled [ Theme.style ] );
focusEnabled.setSelected ( Theme.sliderFocusEnabled [ Theme.style ] );
sliderThumbField.update ();
sliderThumbRolloverBg.update ();
sliderThumbPressedBg.update ();
sliderThumbDisabledBg.update ();
sliderBorder.update ();
sliderDark.update ();
sliderLight.update ();
sliderDisabledBorder.update ();
sliderDisabledDark.update ();
sliderDisabledLight.update ();
sliderTrack.update ();
sliderTrackBorder.update ();
sliderTrackDark.update ();
sliderTrackLight.update ();
sliderTick.update ();
sliderTickDisabled.update ();
sliderFocusColor.update ();
inited = true;
}
void updateTheme ()
{
if ( !inited || resistUpdate )
return;
Theme.sliderRolloverEnabled [ Theme.style ] = rolloverEnabled
.isSelected ();
Theme.sliderFocusEnabled [ Theme.style ] = focusEnabled.isSelected ();
}
}
class ToolBarCP extends JPanel
{
private JCheckBox focusEnabled;
private JSpinner mTop, mLeft, mBottom, mRight;
private boolean inited = false;
ToolBarCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
// ToolBar
p1.add ( new JLabel ( "ToolBar Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
toolBar = new SBField ( Theme.toolBarColor, true );
p1.add ( toolBar, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "ToolBar Light Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
toolBarLight = new SBField ( Theme.toolBarLightColor, true );
p1.add ( toolBarLight, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "ToolBar Dark Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
toolBarDark = new SBField ( Theme.toolBarDarkColor, true );
p1.add ( toolBarDark, gc );
// Button
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Button Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolButt = new SBField ( Theme.toolButtColor, true );
p1.add ( toolButt, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Button Rollover Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolButtRollover = new SBField ( Theme.toolButtRolloverColor );
p1.add ( toolButtRollover, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Button Pressed Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolButtPressed = new SBField ( Theme.toolButtPressedColor );
p1.add ( toolButtPressed, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Button Selected Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolButtSelected = new SBField ( Theme.toolButtSelectedColor, true );
p1.add ( toolButtSelected, gc );
// YQ Button Border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Button Border Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolBorder = new SBField ( Theme.toolBorderColor, true );
p1.add ( toolBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Rollover Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolBorderRollover = new SBField ( Theme.toolBorderRolloverColor );
p1.add ( toolBorderRollover, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Pressed Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolBorderPressed = new SBField ( Theme.toolBorderPressedColor );
p1.add ( toolBorderPressed, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Selected Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolBorderSelected = new SBField ( Theme.toolBorderSelectedColor, true );
p1.add ( toolBorderSelected, gc );
// 99 Button Border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Border Dark Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolBorderDark = new SBField ( Theme.toolBorderDarkColor, true, true );
p1.add ( toolBorderDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Light Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolBorderLight = new SBField ( Theme.toolBorderLightColor, true, true );
p1.add ( toolBorderLight, gc );
gc.gridy += 2;
gc.insets = new Insets ( 0, 8, 0, 4 );
gc.gridheight = 2;
focusEnabled = new JCheckBox ( "Paint Focus", true );
focusEnabled.addActionListener ( checkAction );
p1.add ( focusEnabled, gc );
// grip
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Grip Dark Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolGripDark = new SBField ( Theme.toolGripDarkColor, true );
p1.add ( toolGripDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Grip Light Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolGripLight = new SBField ( Theme.toolGripLightColor, true );
p1.add ( toolGripLight, gc );
// separator
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Separator Dark Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolSepDark = new SBField ( Theme.toolSepDarkColor, true );
p1.add ( toolSepDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Separator Light Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
toolSepLight = new SBField ( Theme.toolSepLightColor, true, true );
p1.add ( toolSepLight, gc );
// Margin
gc.gridx++ ;
gc.gridy = 1;
gc.gridheight = 7;
gc.gridwidth = 1;
gc.insets = new Insets ( 0, 16, 0, 4 );
JPanel p2 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc2 = new GridBagConstraints ();
gc2.anchor = GridBagConstraints.CENTER;
gc2.fill = GridBagConstraints.NONE;
gc2.gridwidth = 3;
gc2.gridx = 0;
gc2.gridy = 0;
gc2.insets = new Insets ( 0, 0, 4, 0 );
p2.add ( new JLabel ( "Button Margin" ), gc2 );
gc2.anchor = GridBagConstraints.NORTHWEST;
gc2.fill = GridBagConstraints.HORIZONTAL;
gc2.gridwidth = 1;
gc2.gridy = 2;
gc2.insets = new Insets ( 0, 2, 0, 2 );
mLeft = new JSpinner ( new SpinnerNumberModel ( 4, 1, 99, 1 ) );
mLeft.addChangeListener ( spinnerUpdateAction );
p2.add ( mLeft, gc2 );
gc2.gridx++ ;
gc2.gridy = 1;
mTop = new JSpinner ( new SpinnerNumberModel ( 4, 1, 99, 1 ) );
mTop.addChangeListener ( spinnerUpdateAction );
p2.add ( mTop, gc2 );
gc2.gridy++ ;
p2.add ( new JLabel ( "Margin" ), gc2 );
gc2.gridy++ ;
mBottom = new JSpinner ( new SpinnerNumberModel ( 4, 1, 99, 1 ) );
mBottom.addChangeListener ( spinnerUpdateAction );
p2.add ( mBottom, gc2 );
gc2.gridx++ ;
gc2.gridy = 2;
mRight = new JSpinner ( new SpinnerNumberModel ( 4, 1, 99, 1 ) );
mRight.addChangeListener ( spinnerUpdateAction );
p2.add ( mRight, gc2 );
p1.add ( p2, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
focusEnabled.setSelected ( Theme.toolFocus [ Theme.style ] );
toolBar.update ();
toolBarDark.update ();
toolBarLight.update ();
toolButt.update ();
toolButtRollover.update ();
toolButtPressed.update ();
toolButtSelected.update ();
toolBorder.update ();
toolBorderRollover.update ();
toolBorderPressed.update ();
toolBorderSelected.update ();
toolBorderDark.update ();
toolBorderLight.update ();
toolGripDark.update ();
toolGripLight.update ();
toolSepDark.update ();
toolSepLight.update ();
mTop.setValue ( new Integer ( Theme.toolMarginTop [ Theme.style ] ) );
mLeft.setValue ( new Integer ( Theme.toolMarginLeft [ Theme.style ] ) );
mBottom
.setValue ( new Integer ( Theme.toolMarginBottom [ Theme.style ] ) );
mRight.setValue ( new Integer ( Theme.toolMarginRight [ Theme.style ] ) );
inited = true;
}
void updateTheme ()
{
if ( !inited || resistUpdate )
return;
Theme.toolFocus [ Theme.style ] = focusEnabled.isSelected ();
Theme.toolMarginTop [ Theme.style ] = ( ( Integer ) mTop.getValue () )
.intValue ();
Theme.toolMarginLeft [ Theme.style ] = ( ( Integer ) mLeft.getValue () )
.intValue ();
Theme.toolMarginBottom [ Theme.style ] = ( ( Integer ) mBottom
.getValue () ).intValue ();
Theme.toolMarginRight [ Theme.style ] = ( ( Integer ) mRight.getValue () )
.intValue ();
}
}
class TableCP extends JPanel
{
private JCheckBox focusEnabled;
private boolean inited = false;
TableCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
// Back
p1.add ( new JLabel ( "Background Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
tableBack = new SBField ( Theme.tableBackColor, true );
p1.add ( tableBack, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Grid Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
tableGrid = new SBField ( Theme.tableGridColor, true );
p1.add ( tableGrid, gc );
// Border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Border Dark Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tableBorderDark = new SBField ( Theme.tableBorderDarkColor );
p1.add ( tableBorderDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Light Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tableBorderLight = new SBField ( Theme.tableBorderLightColor );
p1.add ( tableBorderLight, gc );
// Header Colors
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Header Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tableHeaderBack = new SBField ( Theme.tableHeaderBackColor, true );
p1.add ( tableHeaderBack, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "<html>H. Rollover Background <b>*</b>" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tableHeaderRolloverBack = new SBField (
Theme.tableHeaderRolloverBackColor );
p1.add ( tableHeaderRolloverBack, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "<html>Header Rollover Color <b>*</b>" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tableHeaderRollover = new SBField ( Theme.tableHeaderRolloverColor, true );
p1.add ( tableHeaderRollover, gc );
gc.gridy++ ;
JLabel info = new JLabel ( "<html>"
+ "<b>*</b> Considered only with tables implementing"
+ "<br>de.muntjak.tinylookandfeel.table.SortableTableData" );
info.setOpaque ( true );
info.setBackground ( infoColor );
info.setForeground ( Color.BLACK );
info.setBorder ( infoBorder );
gc.fill = GridBagConstraints.NONE;
gc.gridwidth = 3;
gc.insets = new Insets ( 3, 8, 0, 4 );
p1.add ( info, gc );
// Header Border
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridwidth = 1;
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Header Border Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tableHeaderDark = new SBField ( Theme.tableHeaderDarkColor, true );
p1.add ( tableHeaderDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Header Border Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tableHeaderLight = new SBField ( Theme.tableHeaderLightColor, true );
p1.add ( tableHeaderLight, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "<html>Header Arrow Color <b>*</b>" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tableHeaderArrow = new SBField ( Theme.tableHeaderArrowColor );
p1.add ( tableHeaderArrow, gc );
// Selected
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Selected Cell Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tableSelectedBack = new SBField ( Theme.tableSelectedBackColor, true );
p1.add ( tableSelectedBack, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Selected Cell Foreground" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tableSelectedFore = new SBField ( Theme.tableSelectedForeColor, true );
p1.add ( tableSelectedFore, gc );
// Table model radios
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 16, 0, 4 );
gc.anchor = GridBagConstraints.NORTHWEST;
gc.gridheight = 6;
JPanel p = new JPanel ( new GridLayout ( 3, 1 ) );
p.setBorder ( new TitledBorder ( "Not saved" ) );
JCheckBox check = new JCheckBox ( "Sortable table model", true );
check.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
JCheckBox check = ( JCheckBox ) e.getSource ();
if ( check.isSelected () )
{
exampleTable.setModel ( new TinyTableModel () );
exampleTable.setColumnSelectionInterval ( 2, 2 );
exampleTable.setRowSelectionInterval ( 0, 2 );
}
else
{
exampleTable.setModel ( new NonSortableTableModel () );
exampleTable.setColumnSelectionInterval ( 2, 2 );
exampleTable.setRowSelectionInterval ( 0, 3 );
}
}
} );
p.add ( check );
check = new JCheckBox ( "Column reordering allowed", true );
check.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
JCheckBox check = ( JCheckBox ) e.getSource ();
exampleTable.getTableHeader ().setReorderingAllowed (
check.isSelected () );
}
} );
p.add ( check );
check = new JCheckBox ( "Column resizing allowed", true );
check.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
JCheckBox check = ( JCheckBox ) e.getSource ();
exampleTable.getTableHeader ().setResizingAllowed (
check.isSelected () );
}
} );
p.add ( check );
p1.add ( p, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
tableBack.update ();
tableHeaderBack.update ();
tableHeaderRolloverBack.update ();
tableHeaderRollover.update ();
tableHeaderArrow.update ();
tableGrid.update ();
tableSelectedBack.update ();
tableSelectedFore.update ();
tableBorderDark.update ();
tableBorderLight.update ();
tableHeaderDark.update ();
tableHeaderLight.update ();
inited = true;
}
void updateTheme ()
{
}
}
class SpinnerCP extends JPanel
{
private JCheckBox rolloverEnabled;
private boolean inited = false;
SpinnerCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
// Button
p1.add ( new JLabel ( "Button Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
spinnerButtField = new SBField ( Theme.spinnerButtColor );
p1.add ( spinnerButtField, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Rollover Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
spinnerButtRolloverBg = new SBField ( Theme.spinnerButtRolloverColor );
p1.add ( spinnerButtRolloverBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Presssed Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
spinnerButtPressedBg = new SBField ( Theme.spinnerButtPressedColor );
p1.add ( spinnerButtPressedBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Disabled Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
spinnerButtDisabledBg = new SBField ( Theme.spinnerButtDisabledColor );
p1.add ( spinnerButtDisabledBg, gc );
// Spread
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
spinnerSpreadLight = new SpreadControl ( Theme.spinnerSpreadLight, 20,
CONTROLS_SPINNER );
p1.add ( spinnerSpreadLight, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
spinnerSpreadDark = new SpreadControl ( Theme.spinnerSpreadDark, 20,
CONTROLS_SPINNER );
p1.add ( spinnerSpreadDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled S. Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
spinnerSpreadLightDisabled = new SpreadControl (
Theme.spinnerSpreadLightDisabled, 20, CONTROLS_SPINNER );
p1.add ( spinnerSpreadLightDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled S. Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
spinnerSpreadDarkDisabled = new SpreadControl (
Theme.spinnerSpreadDarkDisabled, 20, CONTROLS_SPINNER );
p1.add ( spinnerSpreadDarkDisabled, gc );
// border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
spinnerBorder = new SBField ( Theme.spinnerBorderColor );
p1.add ( spinnerBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Dark Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
spinnerDark = new SBField ( Theme.spinnerDarkColor, false, true );
p1.add ( spinnerDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Light Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
spinnerLight = new SBField ( Theme.spinnerLightColor, false, true );
p1.add ( spinnerLight, gc );
// disabled border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
spinnerDisabledBorder = new SBField ( Theme.spinnerBorderDisabledColor );
p1.add ( spinnerDisabledBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
spinnerDisabledDark = new SBField ( Theme.spinnerDarkDisabledColor,
false, true );
p1.add ( spinnerDisabledDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
spinnerDisabledLight = new SBField ( Theme.spinnerLightDisabledColor,
false, true );
p1.add ( spinnerDisabledLight, gc );
// arrow
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Arrow Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
spinnerArrowField = new SBField ( Theme.spinnerArrowColor );
p1.add ( spinnerArrowField, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Arrow" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
spinnerArrowDisabled = new SBField ( Theme.spinnerArrowDisabledColor );
p1.add ( spinnerArrowDisabled, gc );
gc.gridy += 2;
gc.gridheight = 2;
gc.insets = new Insets ( 0, 8, 0, 4 );
rolloverEnabled = new JCheckBox ( "Paint Rollover Border", true );
rolloverEnabled.addActionListener ( checkAction );
p1.add ( rolloverEnabled, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
rolloverEnabled.setSelected ( Theme.spinnerRollover [ Theme.style ] );
spinnerButtField.update ();
spinnerArrowField.update ();
spinnerButtRolloverBg.update ();
spinnerButtPressedBg.update ();
spinnerButtDisabledBg.update ();
spinnerBorder.update ();
spinnerDark.update ();
spinnerLight.update ();
spinnerDisabledBorder.update ();
spinnerDisabledDark.update ();
spinnerDisabledLight.update ();
spinnerArrowDisabled.update ();
spinnerSpreadDark.init ();
spinnerSpreadLight.init ();
spinnerSpreadDarkDisabled.init ();
spinnerSpreadLightDisabled.init ();
inited = true;
}
void updateTheme ()
{
if ( !inited || resistUpdate )
return;
Theme.spinnerRollover [ Theme.style ] = rolloverEnabled.isSelected ();
}
}
class MenuCP extends JPanel
{
private JCheckBox rolloverEnabled;
private boolean inited = false;
MenuCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "MenuBar Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
menuBar = new SBField ( Theme.menuBarColor, true );
p1.add ( menuBar, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Popup Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
menuPopup = new SBField ( Theme.menuPopupColor );
p1.add ( menuPopup, gc );
gc.gridy += 2;
gc.insets = new Insets ( 0, 4, 0, 4 );
gc.gridheight = 2;
rolloverEnabled = new JCheckBox ( "Paint Rollover", true );
rolloverEnabled.addActionListener ( checkAction );
p1.add ( rolloverEnabled, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 1;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Popup Inner Hilight" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuInnerHilight = new SBField ( Theme.menuInnerHilightColor );
p1.add ( menuInnerHilight, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Popup Inner Shadow" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuInnerShadow = new SBField ( Theme.menuInnerShadowColor );
p1.add ( menuInnerShadow, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Popup Outer Hilight" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuOuterHilight = new SBField ( Theme.menuOuterHilightColor );
p1.add ( menuOuterHilight, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Popup Outer Shadow" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuOuterShadow = new SBField ( Theme.menuOuterShadowColor );
p1.add ( menuOuterShadow, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 1;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Rollover Back Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuRolloverBg = new SBField ( Theme.menuRolloverBgColor );
p1.add ( menuRolloverBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Rollover Fore Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuRolloverFg = new SBField ( Theme.menuRolloverFgColor );
p1.add ( menuRolloverFg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Fore Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuDisabledFg = new SBField ( Theme.menuDisabledFgColor, true );
p1.add ( menuDisabledFg, gc );
// Menu border
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 1;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Menu Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuBorder = new SBField ( Theme.menuBorderColor );
p1.add ( menuBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Menu Border Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuDark = new SBField ( Theme.menuDarkColor, false, true );
p1.add ( menuDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Menu Border Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuLight = new SBField ( Theme.menuLightColor, false, true );
p1.add ( menuLight, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Selected Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuItemRollover = new SBField ( Theme.menuItemRolloverColor );
p1.add ( menuItemRollover, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Selected Foreground" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuSelectedText = new SBField ( Theme.menuSelectedTextColor );
p1.add ( menuSelectedText, gc );
// Icon
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 1;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Icon Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuIcon = new SBField ( Theme.menuIconColor );
p1.add ( menuIcon, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Icon Rollover Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuIconRollover = new SBField ( Theme.menuIconRolloverColor );
p1.add ( menuIconRollover, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Icon Disabled Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuIconDisabled = new SBField ( Theme.menuIconDisabledColor );
p1.add ( menuIconDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Icon Disabled Shadow Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuIconShadow = new SBField ( Theme.menuIconShadowColor, false, true );
p1.add ( menuIconShadow, gc );
// Separator
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 1;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Separator Dark Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuSepDark = new SBField ( Theme.menuSepDarkColor );
p1.add ( menuSepDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Separator Light Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
menuSepLight = new SBField ( Theme.menuSepLightColor, false, true );
p1.add ( menuSepLight, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
menuSelectedText.update ();
menuRolloverBg.update ();
menuRolloverFg.update ();
menuDisabledFg.update ();
menuBar.update ();
menuBorder.update ();
menuDark.update ();
menuLight.update ();
menuPopup.update ();
menuItemRollover.update ();
menuInnerHilight.update ();
menuInnerShadow.update ();
menuOuterHilight.update ();
menuOuterShadow.update ();
menuIcon.update ();
menuIconRollover.update ();
menuIconDisabled.update ();
menuIconShadow.update ();
menuSepDark.update ();
menuSepLight.update ();
rolloverEnabled.setSelected ( Theme.menuRollover [ Theme.style ] );
inited = true;
}
void updateTheme ()
{
if ( !inited || resistUpdate )
return;
Theme.menuRollover [ Theme.style ] = rolloverEnabled.isSelected ();
}
}
class TreeCP extends JPanel
{
private boolean inited = false;
TreeCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
// p1.setBorder(new EtchedBorder());
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Tree Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
treeBg = new SBField ( Theme.treeBgColor, true );
p1.add ( treeBg, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 1;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Text Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
treeTextBg = new SBField ( Theme.treeTextBgColor, true );
p1.add ( treeTextBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Text Foreground" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
treeText = new SBField ( Theme.treeTextColor, true );
p1.add ( treeText, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Selected Text Bg" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
treeSelectedBg = new SBField ( Theme.treeSelectedBgColor, true );
p1.add ( treeSelectedBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Selected Foreground" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
treeSelectedText = new SBField ( Theme.treeSelectedTextColor, true );
p1.add ( treeSelectedText, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Line Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
treeLine = new SBField ( Theme.treeLineColor, true );
p1.add ( treeLine, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
treeText.update ();
treeSelectedText.update ();
treeBg.update ();
treeTextBg.update ();
treeSelectedBg.update ();
treeLine.update ();
inited = true;
}
void updateTheme ()
{
}
}
class TabbedPaneCP extends JPanel
{
private JCheckBox rolloverEnabled, focusEnabled, ignoreSelectedBg,
fixedTabs;
private JSpinner tabTop, tabLeft, tabBottom, tabRight;
private JSpinner areaTop, areaLeft, areaBottom, areaRight;
private boolean inited = false;
TabbedPaneCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
// Pane Border
p1.add ( new JLabel ( "Pane Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
tabPaneBorder = new SBField ( Theme.tabPaneBorderColor, true );
p1.add ( tabPaneBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Pane Border Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
tabPaneDark = new SBField ( Theme.tabPaneDarkColor, true, true );
p1.add ( tabPaneDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Pane Border Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
tabPaneLight = new SBField ( Theme.tabPaneLightColor, true, true );
p1.add ( tabPaneLight, gc );
// Tab
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Unselected Bg" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tabNormalBg = new SBField ( Theme.tabNormalColor, true );
p1.add ( tabNormalBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Selected Bg" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tabSelectedBg = new SBField ( Theme.tabSelectedColor, true );
p1.add ( tabSelectedBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Rollover Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tabRoll = new SBField ( Theme.tabRolloverColor, true );
p1.add ( tabRoll, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Bg" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tabDisabled = new SBField ( Theme.tabDisabledColor );
p1.add ( tabDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Selected Bg" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tabDisabledSelected = new SBField ( Theme.tabDisabledSelectedColor );
p1.add ( tabDisabledSelected, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Text Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tabDisabledText = new SBField ( Theme.tabDisabledTextColor );
p1.add ( tabDisabledText, gc );
// Tab Border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Tab Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tabBorder = new SBField ( Theme.tabBorderColor, true );
p1.add ( tabBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Tab Border Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tabDark = new SBField ( Theme.tabDarkColor, true, true );
p1.add ( tabDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Tab Border Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
tabLight = new SBField ( Theme.tabLightColor, true, true );
p1.add ( tabLight, gc );
// Tab Insets
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 1;
gc.fill = GridBagConstraints.NONE;
gc.anchor = GridBagConstraints.NORTH;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Tab Insets" ), gc );
gc.gridy = 1;
gc.gridheight = 7;
gc.insets = new Insets ( 4, 8, 0, 4 );
JPanel p2 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc2 = new GridBagConstraints ();
gc2.anchor = GridBagConstraints.NORTHWEST;
gc2.fill = GridBagConstraints.HORIZONTAL;
gc2.gridx = 0;
gc2.gridy = 1;
gc2.insets = new Insets ( 0, 2, 0, 2 );
tabLeft = new JSpinner ( new SpinnerNumberModel ( 6, 0, 99, 1 ) );
tabLeft.addChangeListener ( spinnerUpdateAction );
p2.add ( tabLeft, gc2 );
gc2.gridx++ ;
gc2.gridy = 0;
tabTop = new JSpinner ( new SpinnerNumberModel ( 1, 0, 99, 1 ) );
tabTop.addChangeListener ( spinnerUpdateAction );
p2.add ( tabTop, gc2 );
gc2.gridy += 2;
gc2.gridy++ ;
tabBottom = new JSpinner ( new SpinnerNumberModel ( 4, 0, 99, 1 ) );
tabBottom.addChangeListener ( spinnerUpdateAction );
p2.add ( tabBottom, gc2 );
gc2.gridx++ ;
gc2.gridy = 1;
tabRight = new JSpinner ( new SpinnerNumberModel ( 6, 0, 99, 1 ) );
tabRight.addChangeListener ( spinnerUpdateAction );
p2.add ( tabRight, gc2 );
p1.add ( p2, gc );
// Tab Area Insets
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 1;
gc.fill = GridBagConstraints.NONE;
gc.anchor = GridBagConstraints.NORTH;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Tab Area Insets" ), gc );
gc.gridy = 1;
gc.gridheight = 7;
gc.insets = new Insets ( 4, 8, 0, 4 );
p2 = new JPanel ( new GridBagLayout () );
gc2 = new GridBagConstraints ();
gc2.anchor = GridBagConstraints.NORTHWEST;
gc2.fill = GridBagConstraints.HORIZONTAL;
gc2.gridx = 0;
gc2.gridy = 1;
gc2.insets = new Insets ( 0, 2, 0, 2 );
areaLeft = new JSpinner ( new SpinnerNumberModel ( 2, 0, 99, 1 ) );
areaLeft.addChangeListener ( spinnerUpdateAction );
p2.add ( areaLeft, gc2 );
gc2.gridx++ ;
gc2.gridy = 0;
areaTop = new JSpinner ( new SpinnerNumberModel ( 6, 2, 99, 1 ) );
areaTop.addChangeListener ( spinnerUpdateAction );
p2.add ( areaTop, gc2 );
gc2.gridy += 2;
gc2.gridy++ ;
areaBottom = new JSpinner ( new SpinnerNumberModel ( 0, 0, 99, 1 ) );
areaBottom.setEnabled ( false );
p2.add ( areaBottom, gc2 );
gc2.gridx++ ;
gc2.gridy = 1;
areaRight = new JSpinner ( new SpinnerNumberModel ( 0, 0, 99, 1 ) );
areaRight.addChangeListener ( spinnerUpdateAction );
p2.add ( areaRight, gc2 );
p1.add ( p2, gc );
// Flags
gc.gridx = 0;
gc.gridy = 8;
gc.insets = new Insets ( 8, 4, 0, 4 );
gc.anchor = GridBagConstraints.WEST;
gc.fill = GridBagConstraints.NONE;
gc.gridwidth = 5;
p2 = new JPanel ( new FlowLayout ( FlowLayout.LEFT, 8, 0 ) );
rolloverEnabled = new JCheckBox ( "Paint Rollover", true );
rolloverEnabled.addActionListener ( checkAction );
p2.add ( rolloverEnabled );
focusEnabled = new JCheckBox ( "Paint Focus", true );
focusEnabled.addActionListener ( checkAction );
p2.add ( focusEnabled );
ignoreSelectedBg = new JCheckBox ( "Ignore Selected Bg", true );
ignoreSelectedBg.addActionListener ( new CheckUpdateAction () );
p2.add ( ignoreSelectedBg, BorderLayout.CENTER );
fixedTabs = new JCheckBox ( "Fixed Tab Positions", true );
fixedTabs.addActionListener ( new CheckUpdateAction () );
p2.add ( fixedTabs );
p1.add ( p2, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
rolloverEnabled.setSelected ( Theme.tabRollover [ Theme.style ] );
focusEnabled.setSelected ( Theme.tabFocus [ Theme.style ] );
ignoreSelectedBg.setSelected ( Theme.ignoreSelectedBg [ Theme.style ] );
fixedTabs.setSelected ( Theme.fixedTabs [ Theme.style ] );
tabPaneBorder.update ();
tabPaneDark.update ();
tabPaneLight.update ();
tabNormalBg.update ();
tabSelectedBg.update ();
tabDisabled.update ();
tabDisabledSelected.update ();
tabDisabledText.update ();
tabBorder.update ();
tabDark.update ();
tabLight.update ();
tabRoll.update ();
tabTop.setValue ( new Integer ( Theme.tabInsets [ Theme.style ].top ) );
tabLeft.setValue ( new Integer ( Theme.tabInsets [ Theme.style ].left ) );
tabBottom
.setValue ( new Integer ( Theme.tabInsets [ Theme.style ].bottom ) );
tabRight
.setValue ( new Integer ( Theme.tabInsets [ Theme.style ].right ) );
areaTop
.setValue ( new Integer ( Theme.tabAreaInsets [ Theme.style ].top ) );
areaLeft.setValue ( new Integer (
Theme.tabAreaInsets [ Theme.style ].left ) );
areaBottom.setValue ( new Integer (
Theme.tabAreaInsets [ Theme.style ].bottom ) );
areaRight.setValue ( new Integer (
Theme.tabAreaInsets [ Theme.style ].right ) );
inited = true;
}
void updateTheme ()
{
if ( !inited || resistUpdate )
return;
Theme.tabRollover [ Theme.style ] = rolloverEnabled.isSelected ();
Theme.tabFocus [ Theme.style ] = focusEnabled.isSelected ();
Theme.ignoreSelectedBg [ Theme.style ] = ignoreSelectedBg.isSelected ();
Theme.fixedTabs [ Theme.style ] = fixedTabs.isSelected ();
Theme.tabInsets [ Theme.style ] = new Insets ( ( ( Integer ) tabTop
.getValue () ).intValue (), ( ( Integer ) tabLeft.getValue () )
.intValue (), ( ( Integer ) tabBottom.getValue () ).intValue (),
( ( Integer ) tabRight.getValue () ).intValue () );
Theme.tabAreaInsets [ Theme.style ] = new Insets ( ( ( Integer ) areaTop
.getValue () ).intValue (), ( ( Integer ) areaLeft.getValue () )
.intValue (), ( ( Integer ) areaBottom.getValue () ).intValue (),
( ( Integer ) areaRight.getValue () ).intValue () );
}
int getFirstTabDistance ()
{
return 2;
}
}
class TextCP extends JPanel
{
private JSpinner mTop, mLeft, mBottom, mRight;
private boolean inited = false;
TextCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
// p1.setBorder(new EtchedBorder());
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.WEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
// background
p1.add ( new JLabel ( "Text Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
textBg = new SBField ( Theme.textBgColor, true );
p1.add ( textBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Text Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
textText = new SBField ( Theme.textTextColor, true );
p1.add ( textText, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Caret Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
textCaret = new SBField ( Theme.textCaretColor, true );
p1.add ( textCaret, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Selected Bg" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
textSelectedBg = new SBField ( Theme.textSelectedBgColor, true );
p1.add ( textSelectedBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Selected Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
textSelectedText = new SBField ( Theme.textSelectedTextColor, true );
p1.add ( textSelectedText, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Bg" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
textDisabledBg = new SBField ( Theme.textDisabledBgColor );
p1.add ( textDisabledBg, gc );
// Borders
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
textBorder = new SBField ( Theme.textBorderColor );
p1.add ( textBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
textDark = new SBField ( Theme.textBorderDarkColor, false, true );
p1.add ( textDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
textLight = new SBField ( Theme.textBorderLightColor, false, true );
p1.add ( textLight, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
textBorderDisabled = new SBField ( Theme.textBorderDisabledColor );
p1.add ( textBorderDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
textDisabledDark = new SBField ( Theme.textBorderDarkDisabledColor,
false, true );
p1.add ( textDisabledDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
textDisabledLight = new SBField ( Theme.textBorderLightDisabledColor,
false, true );
p1.add ( textDisabledLight, gc );
// Insets
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 6;
gc.insets = new Insets ( 2, 16, 0, 4 );
JPanel p2 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc2 = new GridBagConstraints ();
gc2.anchor = GridBagConstraints.NORTHWEST;
gc2.fill = GridBagConstraints.HORIZONTAL;
gc2.gridx = 0;
gc2.gridy = 1;
gc2.insets = new Insets ( 0, 2, 0, 2 );
mLeft = new JSpinner ( new SpinnerNumberModel ( 16, 2, 24, 1 ) );
mLeft.addChangeListener ( spinnerUpdateAction );
p2.add ( mLeft, gc2 );
gc2.gridx++ ;
gc2.gridy = 0;
mTop = new JSpinner ( new SpinnerNumberModel ( 2, 1, 8, 1 ) );
mTop.addChangeListener ( spinnerUpdateAction );
p2.add ( mTop, gc2 );
gc2.gridy++ ;
p2.add ( new JLabel ( "Insets" ), gc2 );
gc2.gridy++ ;
mBottom = new JSpinner ( new SpinnerNumberModel ( 3, 1, 8, 1 ) );
mBottom.addChangeListener ( spinnerUpdateAction );
p2.add ( mBottom, gc2 );
gc2.gridx++ ;
gc2.gridy = 1;
mRight = new JSpinner ( new SpinnerNumberModel ( 16, 2, 24, 1 ) );
mRight.addChangeListener ( spinnerUpdateAction );
p2.add ( mRight, gc2 );
p1.add ( p2, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
mTop.setValue ( new Integer ( Theme.textInsets [ Theme.style ].top ) );
mLeft.setValue ( new Integer ( Theme.textInsets [ Theme.style ].left ) );
mBottom
.setValue ( new Integer ( Theme.textInsets [ Theme.style ].bottom ) );
mRight.setValue ( new Integer ( Theme.textInsets [ Theme.style ].right ) );
textText.update ();
textCaret.update ();
textSelectedText.update ();
textBg.update ();
textSelectedBg.update ();
textDisabledBg.update ();
textBorder.update ();
textDark.update ();
textLight.update ();
textDisabledDark.update ();
textDisabledLight.update ();
textBorderDisabled.update ();
inited = true;
}
void updateTheme ()
{
if ( !inited || resistUpdate )
return;
Theme.textInsets [ Theme.style ] = new Insets ( ( ( Integer ) mTop
.getValue () ).intValue (), ( ( Integer ) mLeft.getValue () )
.intValue (), ( ( Integer ) mBottom.getValue () ).intValue (),
( ( Integer ) mRight.getValue () ).intValue () );
}
}
class ListCP extends JPanel
{
private boolean inited = false;
ListCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.WEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
listBg = new SBField ( Theme.listBgColor, true );
p1.add ( listBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Foreground" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
listText = new SBField ( Theme.listTextColor, true );
p1.add ( listText, gc );
gc.gridx++ ;
gc.gridy = 0;
p1.add ( new JLabel ( "Selected Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
listSelectedBg = new SBField ( Theme.listSelectedBgColor, true );
p1.add ( listSelectedBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Selected Foreground" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
listSelectedText = new SBField ( Theme.listSelectedTextColor, true );
p1.add ( listSelectedText, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
listText.update ();
listBg.update ();
listSelectedText.update ();
listSelectedBg.update ();
inited = true;
}
void updateTheme ()
{
}
}
class MiscCP extends JPanel
{
private boolean inited = false;
MiscCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.WEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "TitledBorder Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
titledBorderColor = new SBField ( Theme.titledBorderColor, true );
p1.add ( titledBorderColor, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "EditorPane Bg Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
editorPaneBg = new SBField ( Theme.editorPaneBgColor, true );
p1.add ( editorPaneBg, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "TextPane Bg Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
textPaneBg = new SBField ( Theme.textPaneBgColor, true );
p1.add ( textPaneBg, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "DesktopPane Bg Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
desktopPaneBg = new SBField ( Theme.desktopPaneBgColor, true );
p1.add ( desktopPaneBg, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
titledBorderColor.update ();
editorPaneBg.update ();
textPaneBg.update ();
desktopPaneBg.update ();
inited = true;
}
void updateTheme ()
{
}
}
class ToolTipCP extends JPanel
{
private boolean inited = false;
ToolTipCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.WEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
tipBorder = new SBField ( Theme.tipBorderColor, true );
p1.add ( tipBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Disabled Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
tipBorderDis = new SBField ( Theme.tipBorderDis, true );
p1.add ( tipBorderDis, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Background Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
tipBg = new SBField ( Theme.tipBgColor, true );
p1.add ( tipBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Disabled Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
tipBgDis = new SBField ( Theme.tipBgDis, true );
p1.add ( tipBgDis, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Text Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
tipText = new SBField ( Theme.tipTextColor, true );
p1.add ( tipText, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Disabled Text" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
tipTextDis = new SBField ( Theme.tipTextDis, true );
p1.add ( tipTextDis, gc );
// Test labels
Border b = BorderFactory.createCompoundBorder ( BorderFactory
.createLineBorder ( Color.DARK_GRAY ), BorderFactory
.createEmptyBorder ( 2, 4, 2, 4 ) );
JPanel p2 = new JPanel ( new BorderLayout ( 12, 0 ) );
JLabel l1 = new JLabel ( "Display Enabled TT" );
l1.setFont ( l1.getFont ().deriveFont ( Font.BOLD ) );
l1.setToolTipText ( "Enabled ToolTip" );
l1.setBorder ( b );
p2.add ( l1, BorderLayout.CENTER );
JLabel l2 = new JLabel ( "Display Disabled TT" );
l2.setFont ( l1.getFont ().deriveFont ( Font.BOLD ) );
l2.setToolTipText ( "Disabled ToolTip" );
l2.setBorder ( b );
l2.setEnabled ( false );
p2.add ( l2, BorderLayout.EAST );
gc.gridx = 0;
gc.gridy++ ;
gc.insets = new Insets ( 12, 4, 0, 4 );
gc.gridwidth = 3;
gc.fill = GridBagConstraints.NONE;
gc.anchor = GridBagConstraints.CENTER;
p1.add ( p2, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
tipBg.update ();
tipBgDis.update ();
tipBorder.update ();
tipBorderDis.update ();
tipText.update ();
tipTextDis.update ();
inited = true;
}
void updateTheme ()
{
}
}
class SeparatorCP extends JPanel
{
private boolean inited = false;
SeparatorCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.WEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Separator Dark Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
sepDark = new SBField ( Theme.sepDarkColor, true );
p1.add ( sepDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Separator Light Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
sepLight = new SBField ( Theme.sepLightColor, true, true );
p1.add ( sepLight, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
sepDark.update ();
sepLight.update ();
inited = true;
}
void updateTheme ()
{
}
}
class IconCP extends JPanel
{
private boolean inited = false;
IconCP ()
{
setupUI ();
}
private void setupUI ()
{
ActionListener colorizeAction = new ColorizeAction ();
for ( int i = 0 ; i < 20 ; i++ )
{
hsb [ i ] = new HSBField ( Theme.colorizer [ i ], colorizeAction, i );
iconChecks [ i ] = new CheckedIcon (
Theme.colorize [ Theme.style ] [ i ], hsb [ i ], TinyLookAndFeel
.getSystemIconName ( i ) );
}
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = gc.WEST;
gc.gridx = 0;
gc.gridy = 0;
JPanel p1 = new JPanel ( new FlowLayout ( FlowLayout.LEFT, 8, 6 ) );
p1.add ( new JLabel ( "Tree " ) );
for ( int i = 1 ; i < 6 ; i++ )
{
p1.add ( new CombiPanel ( hsb [ i ], iconChecks [ i ] ) );
}
p.add ( p1, gc );
gc.gridy++ ;
p1 = new JPanel ( new FlowLayout ( FlowLayout.LEFT, 8, 6 ) );
p1.add ( new JLabel ( "FileView " ) );
for ( int i = 6 ; i < 11 ; i++ )
{
p1.add ( new CombiPanel ( hsb [ i ], iconChecks [ i ] ) );
}
p.add ( p1, gc );
gc.gridy++ ;
p1 = new JPanel ( new FlowLayout ( FlowLayout.LEFT, 8, 6 ) );
p1.add ( new JLabel ( "FileChooser " ) );
for ( int i = 11 ; i < 16 ; i++ )
{
p1.add ( new CombiPanel ( hsb [ i ], iconChecks [ i ] ) );
}
p.add ( p1, gc );
gc.gridy++ ;
p1 = new JPanel ( new FlowLayout ( FlowLayout.LEFT, 8, 6 ) );
p1.add ( new JLabel ( "OptionPane " ) );
for ( int i = 16 ; i < 20 ; i++ )
{
p1.add ( new CombiPanel ( hsb [ i ], iconChecks [ i ] ) );
}
p1.add ( new JLabel ( " InternalFrame " ) );
p1.add ( new CombiPanel ( hsb [ 0 ], iconChecks [ 0 ] ) );
p.add ( p1, gc );
add ( p );
}
void init ( boolean always )
{
if ( inited && !always )
return;
for ( int i = 0 ; i < 20 ; i++ )
{
iconChecks [ i ].setIcon ( TinyLookAndFeel
.getUncolorizedSystemIcon ( i ) );
iconChecks [ i ].setSelected ( Theme.colorize [ Theme.style ] [ i ] );
hsb [ i ].setHue ( Theme.colorizer [ i ] [ Theme.style ].getHue () );
hsb [ i ].setSaturation ( Theme.colorizer [ i ] [ Theme.style ]
.getSaturation () );
hsb [ i ].setBrightness ( Theme.colorizer [ i ] [ Theme.style ]
.getBrightness () );
hsb [ i ].setPreserveGrey ( Theme.colorizer [ i ] [ Theme.style ]
.isPreserveGrey () );
hsb [ i ].setReference ( Theme.colorizer [ i ] [ Theme.style ]
.getReference (), false );
hsb [ i ].update ();
}
inited = true;
}
void updateTheme ()
{
if ( !inited || resistUpdate )
return;
for ( int i = 0 ; i < 20 ; i++ )
{
Theme.colorize [ Theme.style ] [ i ] = iconChecks [ i ].isSelected ();
Theme.colorizer [ i ] [ Theme.style ].setHue ( hsb [ i ].getHue () );
Theme.colorizer [ i ] [ Theme.style ].setSaturation ( hsb [ i ]
.getSaturation () );
Theme.colorizer [ i ] [ Theme.style ].setBrightness ( hsb [ i ]
.getBrightness () );
Theme.colorizer [ i ] [ Theme.style ].setPreserveGrey ( hsb [ i ]
.isPreserveGrey () );
Theme.colorizer [ i ] [ Theme.style ].setReference ( hsb [ i ]
.getReference () );
}
}
public void colorizeIcon ( HSBField field, boolean doColorize )
{
for ( int i = 0 ; i < 20 ; i++ )
{
if ( field.equals ( hsb [ i ] ) )
{
if ( doColorize )
{
Icon icon = DrawRoutines.colorize ( ( ( ImageIcon ) TinyLookAndFeel
.getUncolorizedSystemIcon ( i ) ).getImage (), field.hue,
field.sat, field.bri, field.preserveGrey );
iconChecks [ i ].setIcon ( icon );
}
else
{
iconChecks [ i ].setIcon ( TinyLookAndFeel
.getUncolorizedSystemIcon ( i ) );
}
}
}
}
class ColorizeAction implements ActionListener
{
public void actionPerformed ( ActionEvent e )
{
colorizeIcon ( ( HSBField ) e.getSource (), true );
}
}
class CombiPanel extends JPanel
{
CombiPanel ( HSBField field, CheckedIcon check )
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 0, 0 ) );
add ( field );
add ( check );
}
}
}
class ProgressCP extends JPanel
{
private boolean inited = false;
ProgressCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.WEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Track Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
progressTrack = new SBField ( Theme.progressTrackColor, true );
p1.add ( progressTrack, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Display Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
progressField = new SBField ( Theme.progressColor, true );
p1.add ( progressField, gc );
// Border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
progressBorder = new SBField ( Theme.progressBorderColor );
p1.add ( progressBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Dark Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
progressDark = new SBField ( Theme.progressDarkColor );
p1.add ( progressDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Light Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
progressLight = new SBField ( Theme.progressLightColor );
p1.add ( progressLight, gc );
// Text
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Text Forecolor" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
progressSelectFore = new SBField ( Theme.progressSelectForeColor );
p1.add ( progressSelectFore, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Text Backcolor" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
progressSelectBack = new SBField ( Theme.progressSelectBackColor );
p1.add ( progressSelectBack, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
progressField.update ();
progressTrack.update ();
progressBorder.update ();
progressDark.update ();
progressLight.update ();
progressSelectFore.update ();
progressSelectBack.update ();
inited = true;
}
void updateTheme ()
{
}
}
class ComboCP extends JPanel
{
private JCheckBox paintFocus, rolloverEnabled;
private JSpinner mTop, mLeft, mBottom, mRight;
private boolean inited = false;
ComboCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.WEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
// Background
p1.add ( new JLabel ( "Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
comboBg = new SBField ( Theme.comboBgColor, true );
p1.add ( comboBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Foreground" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
comboText = new SBField ( Theme.comboTextColor, true );
p1.add ( comboText, gc );
gc.gridy++ ;
p1.add ( new JLabel ( "Selected Background" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
comboSelectedBg = new SBField ( Theme.comboSelectedBgColor, true );
p1.add ( comboSelectedBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Selected Foreground" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
comboSelectedText = new SBField ( Theme.comboSelectedTextColor, true );
p1.add ( comboSelectedText, gc );
gc.gridy++ ;
// Border
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 1;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboBorder = new SBField ( Theme.comboBorderColor );
p1.add ( comboBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboDark = new SBField ( Theme.comboDarkColor, false, true );
p1.add ( comboDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboLight = new SBField ( Theme.comboLightColor, false, true );
p1.add ( comboLight, gc );
// Border Disabled
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboBorderDisabled = new SBField ( Theme.comboBorderDisabledColor );
p1.add ( comboBorderDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboDisabledDark = new SBField ( Theme.comboDarkDisabledColor, false,
true );
p1.add ( comboDisabledDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboDisabledLight = new SBField ( Theme.comboLightDisabledColor, false,
true );
p1.add ( comboDisabledLight, gc );
// Button
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 16, 0, 4 );
p1.add ( new JLabel ( "Button Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 16, 0, 4 );
comboButt = new SBField ( Theme.comboButtColor );
p1.add ( comboButt, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 16, 0, 4 );
p1.add ( new JLabel ( "Rollover Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 16, 0, 4 );
comboButtRollover = new SBField ( Theme.comboButtRolloverColor );
p1.add ( comboButtRollover, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 16, 0, 4 );
p1.add ( new JLabel ( "Presssed Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 16, 0, 4 );
comboButtPressed = new SBField ( Theme.comboButtPressedColor );
p1.add ( comboButtPressed, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 16, 0, 4 );
p1.add ( new JLabel ( "Disabled Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 16, 0, 4 );
comboButtDisabled = new SBField ( Theme.comboButtDisabledColor );
p1.add ( comboButtDisabled, gc );
// Spread
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboSpreadLight = new SpreadControl ( Theme.comboSpreadLight, 20,
CONTROLS_COMBO );
p1.add ( comboSpreadLight, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboSpreadDark = new SpreadControl ( Theme.comboSpreadDark, 20,
CONTROLS_COMBO );
p1.add ( comboSpreadDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled S. Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboSpreadLightDisabled = new SpreadControl (
Theme.comboSpreadLightDisabled, 20, CONTROLS_COMBO );
p1.add ( comboSpreadLightDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled S. Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboSpreadDarkDisabled = new SpreadControl (
Theme.comboSpreadDarkDisabled, 20, CONTROLS_COMBO );
p1.add ( comboSpreadDarkDisabled, gc );
// Button Border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Button Border Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboButtBorder = new SBField ( Theme.comboButtBorderColor );
p1.add ( comboButtBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Dark Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboButtDark = new SBField ( Theme.comboButtDarkColor, false, true );
p1.add ( comboButtDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Light Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboButtLight = new SBField ( Theme.comboButtLightColor, false, true );
p1.add ( comboButtLight, gc );
// Border disabled
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboButtBorderDisabled = new SBField (
Theme.comboButtBorderDisabledColor );
p1.add ( comboButtBorderDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboButtDarkDisabled = new SBField ( Theme.comboButtDarkDisabledColor,
false, true );
p1.add ( comboButtDarkDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboButtLightDisabled = new SBField ( Theme.comboButtLightDisabledColor,
false, true );
p1.add ( comboButtLightDisabled, gc );
// Arrow
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Arrow Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboArrowField = new SBField ( Theme.comboArrowColor );
p1.add ( comboArrowField, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Arrow" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
comboArrowDisabled = new SBField ( Theme.comboArrowDisabledColor );
p1.add ( comboArrowDisabled, gc );
gc.gridy++ ;
// Flags
gc.insets = new Insets ( 4, 8, 0, 4 );
gc.gridheight = 4;
gc.gridwidth = 3;
JPanel p2 = new JPanel ( new GridLayout ( 2, 1, 0, 2 ) );
rolloverEnabled = new JCheckBox ( "Paint Rollover Border", true );
rolloverEnabled.addActionListener ( checkAction );
p2.add ( rolloverEnabled );
paintFocus = new JCheckBox ( "Paint Focus" );
paintFocus.addActionListener ( checkAction );
p2.add ( paintFocus );
p1.add ( p2, gc );
// Insets
gc.gridx++ ;
gc.gridy = 1;
gc.insets = new Insets ( 8, 8, 0, 4 );
gc.gridheight = 4;
gc.gridwidth = 1;
p2 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc2 = new GridBagConstraints ();
gc2.anchor = GridBagConstraints.WEST;
gc2.fill = GridBagConstraints.HORIZONTAL;
gc2.gridx = 0;
gc2.gridy = 1;
gc2.insets = new Insets ( 0, 2, 0, 2 );
mLeft = new JSpinner ( new SpinnerNumberModel ( 2, 2, 24, 1 ) );
mLeft.addChangeListener ( spinnerUpdateAction );
p2.add ( mLeft, gc2 );
gc2.gridx++ ;
gc2.gridy = 0;
mTop = new JSpinner ( new SpinnerNumberModel ( 2, 2, 8, 1 ) );
mTop.addChangeListener ( spinnerUpdateAction );
p2.add ( mTop, gc2 );
gc2.gridy++ ;
p2.add ( new JLabel ( "Insets" ), gc2 );
gc2.gridy++ ;
mBottom = new JSpinner ( new SpinnerNumberModel ( 2, 2, 8, 1 ) );
mBottom.addChangeListener ( spinnerUpdateAction );
p2.add ( mBottom, gc2 );
gc2.gridx++ ;
gc2.gridy = 1;
mRight = new JSpinner ( new SpinnerNumberModel ( 2, 2, 24, 1 ) );
mRight.addChangeListener ( spinnerUpdateAction );
p2.add ( mRight, gc2 );
p1.add ( p2, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
rolloverEnabled.setSelected ( Theme.comboRollover [ Theme.style ] );
paintFocus.setSelected ( Theme.comboFocus [ Theme.style ] );
comboBg.update ();
comboText.update ();
comboSelectedText.update ();
comboArrowField.update ();
comboSelectedBg.update ();
comboBorder.update ();
comboDark.update ();
comboLight.update ();
comboBorderDisabled.update ();
comboDisabledDark.update ();
comboDisabledLight.update ();
comboButt.update ();
comboButtRollover.update ();
comboButtDisabled.update ();
comboButtPressed.update ();
comboButtBorder.update ();
comboButtDark.update ();
comboButtLight.update ();
comboButtBorderDisabled.update ();
comboButtDarkDisabled.update ();
comboButtLightDisabled.update ();
comboArrowField.update ();
comboArrowDisabled.update ();
comboSpreadDark.init ();
comboSpreadLight.init ();
comboSpreadDarkDisabled.init ();
comboSpreadLightDisabled.init ();
mTop.setValue ( new Integer ( Theme.comboInsets [ Theme.style ].top ) );
mLeft.setValue ( new Integer ( Theme.comboInsets [ Theme.style ].left ) );
mBottom
.setValue ( new Integer ( Theme.comboInsets [ Theme.style ].bottom ) );
mRight
.setValue ( new Integer ( Theme.comboInsets [ Theme.style ].right ) );
inited = true;
}
void updateTheme ()
{
if ( !inited || resistUpdate )
return;
Theme.comboRollover [ Theme.style ] = rolloverEnabled.isSelected ();
Theme.comboFocus [ Theme.style ] = paintFocus.isSelected ();
Theme.comboInsets [ Theme.style ] = new Insets ( ( ( Integer ) mTop
.getValue () ).intValue (), ( ( Integer ) mLeft.getValue () )
.intValue (), ( ( Integer ) mBottom.getValue () ).intValue (),
( ( Integer ) mRight.getValue () ).intValue () );
}
}
class ButtonsCP extends JPanel
{
private JCheckBox rolloverEnabled, focusEnabled, enterEnabled;
private JCheckBox focusBorderEnabled, shiftTextEnabled;
private JSpinner mTop, mLeft, mBottom, mRight;
private JSpinner cTop, cLeft, cBottom, cRight;
private JPanel cardPanel;
private boolean inited = false;
ButtonsCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Normal Bg" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
buttonNormalBg = new SBField ( Theme.buttonNormalColor, true );
p1.add ( buttonNormalBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Rollover Bg" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
buttonRolloverBg = new SBField ( Theme.buttonRolloverBgColor, true );
p1.add ( buttonRolloverBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Presssed Bg" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
buttonPressedBg = new SBField ( Theme.buttonPressedColor, true );
p1.add ( buttonPressedBg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Disabled Bg" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
buttonDisabledBg = new SBField ( Theme.buttonDisabledColor );
p1.add ( buttonDisabledBg, gc );
// Spread
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonSpreadLight = new SpreadControl ( Theme.buttonSpreadLight, 20,
CONTROLS_BUTTON );
p1.add ( buttonSpreadLight, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonSpreadDark = new SpreadControl ( Theme.buttonSpreadDark, 20,
CONTROLS_BUTTON );
p1.add ( buttonSpreadDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled S. Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonSpreadLightDisabled = new SpreadControl (
Theme.buttonSpreadLightDisabled, 20, CONTROLS_BUTTON );
p1.add ( buttonSpreadLightDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled S. Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonSpreadDarkDisabled = new SpreadControl (
Theme.buttonSpreadDarkDisabled, 20, CONTROLS_BUTTON );
p1.add ( buttonSpreadDarkDisabled, gc );
// toolbar button info
gc.gridx++ ;
gc.gridy-- ;
gc.gridwidth = 4;
gc.gridheight = 2;
gc.anchor = GridBagConstraints.CENTER;
gc.fill = GridBagConstraints.NONE;
JLabel info = new JLabel (
"<html>For toolbar buttons choose <b>'ToolBar'</b>" );
p1.add ( info, gc );
// border
gc.gridx++ ;
gc.gridy = 0;
gc.gridwidth = 1;
gc.gridheight = 1;
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonBorder = new SBField ( Theme.buttonBorderColor );
p1.add ( buttonBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Dark Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonDark = new SBField ( Theme.buttonDarkColor, false, true );
p1.add ( buttonDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Light Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonLight = new SBField ( Theme.buttonLightColor, false, true );
p1.add ( buttonLight, gc );
// disabled border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonDisabledBorder = new SBField ( Theme.buttonBorderDisabledColor );
p1.add ( buttonDisabledBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonDisabledDark = new SBField ( Theme.buttonDarkDisabledColor, false,
true );
p1.add ( buttonDisabledDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonDisabledLight = new SBField ( Theme.buttonLightDisabledColor,
false, true );
p1.add ( buttonDisabledLight, gc );
// disabled foreground
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Button Disabled Text" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonDisabledFg = new SBField ( Theme.buttonDisabledFgColor, true );
p1.add ( buttonDisabledFg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "CheckBox Disabled T." ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
checkDisabledFg = new SBField ( Theme.checkDisabledFgColor, true );
p1.add ( checkDisabledFg, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "RadioButton Disabled T." ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
radioDisabledFg = new SBField ( Theme.radioDisabledFgColor, true );
p1.add ( radioDisabledFg, gc );
// default/rollover
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Default Button Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonDefault = new SBField ( Theme.buttonDefaultColor, true );
p1.add ( buttonDefault, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Rollover Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonRollover = new SBField ( Theme.buttonRolloverColor );
p1.add ( buttonRollover, gc );
// Flags
GridBagConstraints gc3 = new GridBagConstraints ();
gc3.anchor = GridBagConstraints.NORTHWEST;
gc3.fill = GridBagConstraints.HORIZONTAL;
gc3.gridx = 0;
gc3.gridy = 0;
JPanel p3 = new JPanel ( new GridBagLayout () );
gc3.insets = new Insets ( 0, 0, 0, 4 );
rolloverEnabled = new JCheckBox ( "Paint Rollover Border", true );
buttons = new Component [ 24 ];
buttons [ 15 ] = rolloverEnabled;
rolloverEnabled.addActionListener ( checkAction );
p3.add ( rolloverEnabled, gc3 );
gc3.gridy++ ;
shiftTextEnabled = new JCheckBox ( "Shift Button Text", true );
buttons [ 16 ] = shiftTextEnabled;
shiftTextEnabled.addActionListener ( checkAction );
p3.add ( shiftTextEnabled, gc3 );
gc3.gridy = 0;
gc3.gridx = 1;
focusEnabled = new JCheckBox ( "Paint Focus", true );
buttons [ 17 ] = focusEnabled;
focusEnabled.addActionListener ( checkAction );
p3.add ( focusEnabled, gc3 );
gc3.gridy = 1;
focusBorderEnabled = new JCheckBox ( "Paint Focus Border", true );
buttons [ 18 ] = focusBorderEnabled;
focusBorderEnabled.addActionListener ( checkAction );
p3.add ( focusBorderEnabled, gc3 );
gc3.gridy = 2;
gc3.gridx = 0;
gc3.gridwidth = 2;
enterEnabled = new JCheckBox ( "ENTER \"presses\" focused button" );
buttons [ 19 ] = enterEnabled;
enterEnabled.addActionListener ( new CheckUpdateAction () );
p3.add ( enterEnabled, gc3 );
gc.gridy = 5;
gc.gridheight = 4;
gc.gridwidth = 3;
gc.fill = GridBagConstraints.NONE;
p1.add ( p3, gc );
// checkmark
gc.gridx++ ;
gc.gridy = 0;
gc.gridwidth = 1;
gc.gridheight = 1;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Checkmark Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonCheck = new SBField ( Theme.buttonCheckColor );
p1.add ( buttonCheck, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Check Disabled" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
buttonCheckDisabled = new SBField ( Theme.buttonCheckDisabledColor );
p1.add ( buttonCheckDisabled, gc );
// Margin
gc.gridx++ ;
gc.gridy = 0;
gc.gridheight = 1;
gc.gridwidth = 1;
gc.insets = new Insets ( 0, 16, 0, 0 );
ButtonGroup group = new ButtonGroup ();
JRadioButton rb = new JRadioButton ( "Button Margin", true );
buttons [ 20 ] = rb;
group.add ( rb );
rb.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
AbstractButton b = ( AbstractButton ) e.getSource ();
if ( !b.isSelected () )
return;
( ( CardLayout ) cardPanel.getLayout () ).show ( cardPanel,
"buttonMargin" );
}
} );
p1.add ( rb, gc );
gc.gridy++ ;
rb = new JRadioButton ( "CheckBox/RadioButton Margin" );
buttons [ 21 ] = rb;
group.add ( rb );
rb.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
AbstractButton b = ( AbstractButton ) e.getSource ();
if ( !b.isSelected () )
return;
( ( CardLayout ) cardPanel.getLayout () ).show ( cardPanel,
"checkMargin" );
}
} );
p1.add ( rb, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 16, 0, 0 );
gc.gridheight = 5;
cardPanel = new JPanel ( new CardLayout () );
cardPanel.add ( createButtonMarginPanel (), "buttonMargin" );
cardPanel.add ( createCheckMarginPanel (), "checkMargin" );
p1.add ( cardPanel, gc );
add ( p1 );
}
void init ( boolean always )
{
if ( inited && !always )
return;
rolloverEnabled.setSelected ( Theme.buttonRollover [ Theme.style ] );
focusEnabled.setSelected ( Theme.buttonFocus [ Theme.style ] );
focusBorderEnabled.setSelected ( Theme.buttonFocusBorder [ Theme.style ] );
enterEnabled.setSelected ( Theme.buttonEnter [ Theme.style ] );
shiftTextEnabled.setSelected ( Theme.shiftButtonText [ Theme.style ] );
buttonNormalBg.update ();
buttonRolloverBg.update ();
buttonPressedBg.update ();
buttonDisabledBg.update ();
buttonBorder.update ();
buttonDark.update ();
buttonLight.update ();
buttonDisabledBorder.update ();
buttonDisabledDark.update ();
buttonDisabledLight.update ();
buttonDisabledFg.update ();
checkDisabledFg.update ();
radioDisabledFg.update ();
buttonRollover.update ();
buttonDefault.update ();
buttonCheck.update ();
buttonCheckDisabled.update ();
buttonSpreadDark.init ();
buttonSpreadLight.init ();
buttonSpreadDarkDisabled.init ();
buttonSpreadLightDisabled.init ();
mTop.setValue ( new Integer ( Theme.buttonMarginTop [ Theme.style ] ) );
mLeft.setValue ( new Integer ( Theme.buttonMarginLeft [ Theme.style ] ) );
mBottom
.setValue ( new Integer ( Theme.buttonMarginBottom [ Theme.style ] ) );
mRight
.setValue ( new Integer ( Theme.buttonMarginRight [ Theme.style ] ) );
cTop.setValue ( new Integer ( Theme.checkMarginTop [ Theme.style ] ) );
cLeft.setValue ( new Integer ( Theme.checkMarginLeft [ Theme.style ] ) );
cBottom
.setValue ( new Integer ( Theme.checkMarginBottom [ Theme.style ] ) );
cRight.setValue ( new Integer ( Theme.checkMarginRight [ Theme.style ] ) );
inited = true;
}
InsetsUIResource getButtonMargin ()
{
return new InsetsUIResource ( ( ( Integer ) mTop.getValue () )
.intValue (), ( ( Integer ) mLeft.getValue () ).intValue (),
( ( Integer ) mBottom.getValue () ).intValue (), ( ( Integer ) mRight
.getValue () ).intValue () );
}
void updateTheme ()
{
if ( !inited || resistUpdate )
return;
Theme.buttonRollover [ Theme.style ] = rolloverEnabled.isSelected ();
Theme.buttonFocus [ Theme.style ] = focusEnabled.isSelected ();
Theme.buttonFocusBorder [ Theme.style ] = focusBorderEnabled
.isSelected ();
Theme.buttonEnter [ Theme.style ] = enterEnabled.isSelected ();
Theme.shiftButtonText [ Theme.style ] = shiftTextEnabled.isSelected ();
Theme.buttonMarginTop [ Theme.style ] = ( ( Integer ) mTop.getValue () )
.intValue ();
Theme.buttonMarginLeft [ Theme.style ] = ( ( Integer ) mLeft.getValue () )
.intValue ();
Theme.buttonMarginBottom [ Theme.style ] = ( ( Integer ) mBottom
.getValue () ).intValue ();
Theme.buttonMarginRight [ Theme.style ] = ( ( Integer ) mRight
.getValue () ).intValue ();
Theme.checkMarginTop [ Theme.style ] = ( ( Integer ) cTop.getValue () )
.intValue ();
Theme.checkMarginLeft [ Theme.style ] = ( ( Integer ) cLeft.getValue () )
.intValue ();
Theme.checkMarginBottom [ Theme.style ] = ( ( Integer ) cBottom
.getValue () ).intValue ();
Theme.checkMarginRight [ Theme.style ] = ( ( Integer ) cRight.getValue () )
.intValue ();
}
private JPanel createButtonMarginPanel ()
{
JPanel p2 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc2 = new GridBagConstraints ();
gc2.anchor = GridBagConstraints.NORTHWEST;
gc2.fill = GridBagConstraints.HORIZONTAL;
gc2.gridx = 0;
gc2.gridy = 1;
gc2.insets = new Insets ( 0, 0, 0, 0 );
mLeft = new JSpinner ( new SpinnerNumberModel ( 16, 0, 99, 1 ) );
mLeft.addChangeListener ( spinnerUpdateAction );
p2.add ( mLeft, gc2 );
gc2.gridx++ ;
gc2.gridy = 0;
mTop = new JSpinner ( new SpinnerNumberModel ( 2, 0, 99, 1 ) );
mTop.addChangeListener ( spinnerUpdateAction );
p2.add ( mTop, gc2 );
gc2.gridy += 2;
mBottom = new JSpinner ( new SpinnerNumberModel ( 3, 0, 99, 1 ) );
mBottom.addChangeListener ( spinnerUpdateAction );
p2.add ( mBottom, gc2 );
gc2.gridx++ ;
gc2.gridy = 1;
mRight = new JSpinner ( new SpinnerNumberModel ( 16, 0, 99, 1 ) );
mRight.addChangeListener ( spinnerUpdateAction );
p2.add ( mRight, gc2 );
return p2;
}
private JPanel createCheckMarginPanel ()
{
JPanel p2 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc2 = new GridBagConstraints ();
gc2.anchor = GridBagConstraints.NORTHWEST;
gc2.fill = GridBagConstraints.HORIZONTAL;
gc2.gridx = 0;
gc2.gridy = 1;
gc2.insets = new Insets ( 0, 0, 0, 0 );
cLeft = new JSpinner ( new SpinnerNumberModel ( 16, 0, 99, 1 ) );
cLeft.addChangeListener ( spinnerUpdateAction );
p2.add ( cLeft, gc2 );
gc2.gridx++ ;
gc2.gridy = 0;
cTop = new JSpinner ( new SpinnerNumberModel ( 2, 0, 99, 1 ) );
cTop.addChangeListener ( spinnerUpdateAction );
p2.add ( cTop, gc2 );
gc2.gridy += 2;
cBottom = new JSpinner ( new SpinnerNumberModel ( 3, 0, 99, 1 ) );
cBottom.addChangeListener ( spinnerUpdateAction );
p2.add ( cBottom, gc2 );
gc2.gridx++ ;
gc2.gridy = 1;
cRight = new JSpinner ( new SpinnerNumberModel ( 16, 0, 99, 1 ) );
cRight.addChangeListener ( spinnerUpdateAction );
p2.add ( cRight, gc2 );
return p2;
}
}
class FrameCP extends JPanel
{
private boolean inited = false;
private CardLayout cardLayout;
private JPanel cardPanel;
FrameCP ()
{
cardLayout = new CardLayout ();
setupUI ();
}
private void setupUI ()
{
setLayout ( new BorderLayout () );
// Radios
JPanel p1 = new JPanel ( new GridLayout ( 5, 1, 0, 0 ) );
JPanel p2 = new JPanel ( new FlowLayout ( FlowLayout.LEFT, 24, 8 ) );
ButtonGroup group = new ButtonGroup ();
JRadioButton radio = new JRadioButton ( "Frame", true );
group.add ( radio );
radio.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
cardLayout.show ( cardPanel, "Frame" );
}
} );
p1.add ( radio );
radio = new JRadioButton ( "Iconify/Maximize Buttons" );
group.add ( radio );
radio.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
cardLayout.show ( cardPanel, "FrameButtons" );
}
} );
p1.add ( radio );
radio = new JRadioButton ( "Close Button" );
group.add ( radio );
radio.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
cardLayout.show ( cardPanel, "FrameCloseButton" );
}
} );
p1.add ( radio );
p1.add ( new JLabel ( "" ) );
JButton b = new JButton ( "Activate/Deactivate Internal Frame" );
b.addActionListener ( new DeactivateInternalFrameAction () );
p1.add ( b );
p2.add ( p1 );
add ( p2, BorderLayout.CENTER );
// CardPanel
cardPanel = new JPanel ( cardLayout );
cardPanel.add ( new FrameFrameCP (), "Frame" );
cardPanel.add ( new FrameButtonsCP (), "FrameButtons" );
cardPanel.add ( new FrameCloseButtonCP (), "FrameCloseButton" );
cardLayout.layoutContainer ( this );
add ( cardPanel, BorderLayout.WEST );
}
void init ( boolean always )
{
if ( inited && !always )
return;
frameCaption.update ();
frameCaptionDisabled.update ();
frameBorder.update ();
frameDark.update ();
frameLight.update ();
frameBorderDisabled.update ();
frameDarkDisabled.update ();
frameLightDisabled.update ();
frameTitle.update ();
frameTitleDisabled.update ();
frameButt.update ();
frameButtRollover.update ();
frameButtPressed.update ();
frameButtDisabled.update ();
frameButtBorder.update ();
frameButtDark.update ();
frameButtLight.update ();
frameButtBorderDisabled.update ();
frameButtDarkDisabled.update ();
frameButtLightDisabled.update ();
frameButtSpreadDark.init ();
frameButtSpreadLight.init ();
frameButtSpreadDarkDisabled.init ();
frameButtSpreadLightDisabled.init ();
frameButtClose.update ();
frameButtCloseRollover.update ();
frameButtClosePressed.update ();
frameButtCloseDisabled.update ();
frameButtCloseBorder.update ();
frameButtCloseDark.update ();
frameButtCloseLight.update ();
frameButtCloseBorderDisabled.update ();
frameButtCloseDarkDisabled.update ();
frameButtCloseLightDisabled.update ();
frameButtCloseSpreadDark.init ();
frameButtCloseSpreadLight.init ();
frameButtCloseSpreadDarkDisabled.init ();
frameButtCloseSpreadLightDisabled.init ();
frameSymbol.update ();
frameSymbolPressed.update ();
frameSymbolDisabled.update ();
frameSymbolDark.update ();
frameSymbolLight.update ();
frameSymbolClose.update ();
frameSymbolClosePressed.update ();
frameSymbolCloseDisabled.update ();
frameSymbolCloseDark.update ();
frameSymbolCloseLight.update ();
frameSpreadDark.init ();
frameSpreadLight.init ();
frameSpreadDarkDisabled.init ();
frameSpreadLightDisabled.init ();
inited = true;
}
void updateTheme ()
{
}
class DeactivateInternalFrameAction implements ActionListener
{
public void actionPerformed ( ActionEvent e )
{
try
{
internalFrame.setSelected ( !internalFrame.isSelected () );
}
catch ( PropertyVetoException ignore )
{
}
}
}
}
class FrameFrameCP extends JPanel
{
FrameFrameCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Caption Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
frameCaption = new SBField ( Theme.frameCaptionColor );
p1.add ( frameCaption, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Disabled Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
frameCaptionDisabled = new SBField ( Theme.frameCaptionDisabledColor );
p1.add ( frameCaptionDisabled, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSpreadDark = new SpreadControl ( Theme.frameSpreadDark, 10,
CONTROLS_ACTIVE_FRAME_CAPTION );
p1.add ( frameSpreadDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSpreadLight = new SpreadControl ( Theme.frameSpreadLight, 10,
CONTROLS_ACTIVE_FRAME_CAPTION );
p1.add ( frameSpreadLight, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "S. Dark Disabled" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSpreadDarkDisabled = new SpreadControl (
Theme.frameSpreadDarkDisabled, 10, CONTROLS_INACTIVE_FRAME_CAPTION );
p1.add ( frameSpreadDarkDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "S. Light Disabled" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSpreadLightDisabled = new SpreadControl (
Theme.frameSpreadLightDisabled, 10, CONTROLS_INACTIVE_FRAME_CAPTION );
p1.add ( frameSpreadLightDisabled, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameBorder = new SBField ( Theme.frameBorderColor );
p1.add ( frameBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Dark Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameDark = new SBField ( Theme.frameDarkColor, false, true );
p1.add ( frameDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Light Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameLight = new SBField ( Theme.frameLightColor );
p1.add ( frameLight, gc );
gc.gridy += 2;
gc.gridwidth = 3;
gc.insets = new Insets ( 0, 8, 0, 4 );
if ( decoratedFramesCheck == null )
{
decoratedFramesCheck = new JCheckBox (
"Decorated Frame (experimental, not saved)" );
decoratedFramesCheck.addActionListener ( new DecorateFrameAction () );
}
p1.add ( decoratedFramesCheck, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.gridwidth = 1;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameBorderDisabled = new SBField ( Theme.frameBorderDisabledColor );
p1.add ( frameBorderDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Dark Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameDarkDisabled = new SBField ( Theme.frameDarkDisabledColor, false,
true );
p1.add ( frameDarkDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Light Col" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameLightDisabled = new SBField ( Theme.frameLightDisabledColor );
p1.add ( frameLightDisabled, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.gridwidth = 1;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Title Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameTitle = new SBField ( Theme.frameTitleColor );
p1.add ( frameTitle, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Title Disabled" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameTitleDisabled = new SBField ( Theme.frameTitleDisabledColor );
p1.add ( frameTitleDisabled, gc );
add ( p1 );
}
}
class FrameButtonsCP extends JPanel
{
FrameButtonsCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Button Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
frameButt = new SBField ( Theme.frameButtColor );
p1.add ( frameButt, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Rollover Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
frameButtRollover = new SBField ( Theme.frameButtRolloverColor );
p1.add ( frameButtRollover, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Pressed Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
frameButtPressed = new SBField ( Theme.frameButtPressedColor );
p1.add ( frameButtPressed, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Disabled Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
frameButtDisabled = new SBField ( Theme.frameButtDisabledColor );
p1.add ( frameButtDisabled, gc );
// Spread
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtSpreadLight = new SpreadControl ( Theme.frameButtSpreadLight,
20, CONTROLS_WINDOW_BUTTON );
p1.add ( frameButtSpreadLight, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtSpreadDark = new SpreadControl ( Theme.frameButtSpreadDark, 20,
CONTROLS_WINDOW_BUTTON );
p1.add ( frameButtSpreadDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled S. Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtSpreadLightDisabled = new SpreadControl (
Theme.frameButtSpreadLightDisabled, 20, CONTROLS_WINDOW_BUTTON );
p1.add ( frameButtSpreadLightDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled S. Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtSpreadDarkDisabled = new SpreadControl (
Theme.frameButtSpreadDarkDisabled, 20, CONTROLS_WINDOW_BUTTON );
p1.add ( frameButtSpreadDarkDisabled, gc );
// Border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtBorder = new SBField ( Theme.frameButtBorderColor );
p1.add ( frameButtBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtDark = new SBField ( Theme.frameButtDarkColor );
p1.add ( frameButtDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtLight = new SBField ( Theme.frameButtLightColor );
p1.add ( frameButtLight, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtBorderDisabled = new SBField (
Theme.frameButtBorderDisabledColor );
p1.add ( frameButtBorderDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtDarkDisabled = new SBField ( Theme.frameButtDarkDisabledColor );
p1.add ( frameButtDarkDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtLightDisabled = new SBField ( Theme.frameButtLightDisabledColor );
p1.add ( frameButtLightDisabled, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Symbol Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSymbol = new SBField ( Theme.frameSymbolColor );
p1.add ( frameSymbol, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Pressed Symbol" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSymbolPressed = new SBField ( Theme.frameSymbolPressedColor );
p1.add ( frameSymbolPressed, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Symbol" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSymbolDisabled = new SBField ( Theme.frameSymbolDisabledColor );
p1.add ( frameSymbolDisabled, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Symbol Dark Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSymbolDark = new SBField ( Theme.frameSymbolDarkColor );
p1.add ( frameSymbolDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Symbol Light Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSymbolLight = new SBField ( Theme.frameSymbolLightColor );
p1.add ( frameSymbolLight, gc );
add ( p1 );
}
}
class FrameCloseButtonCP extends JPanel
{
FrameCloseButtonCP ()
{
setupUI ();
}
private void setupUI ()
{
setLayout ( new FlowLayout ( FlowLayout.LEFT, 2, 2 ) );
JPanel p1 = new JPanel ( new GridBagLayout () );
GridBagConstraints gc = new GridBagConstraints ();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets ( 2, 4, 0, 4 );
p1.add ( new JLabel ( "Button Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
frameButtClose = new SBField ( Theme.frameButtCloseColor );
p1.add ( frameButtClose, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Rollover Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
frameButtCloseRollover = new SBField ( Theme.frameButtCloseRolloverColor );
p1.add ( frameButtCloseRollover, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Pressed Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
frameButtClosePressed = new SBField ( Theme.frameButtClosePressedColor );
p1.add ( frameButtClosePressed, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 4, 0, 4 );
p1.add ( new JLabel ( "Disabled Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 4, 0, 4 );
frameButtCloseDisabled = new SBField ( Theme.frameButtCloseDisabledColor );
p1.add ( frameButtCloseDisabled, gc );
// Spread
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtCloseSpreadLight = new SpreadControl (
Theme.frameButtCloseSpreadLight, 20, CONTROLS_WINDOW_BUTTON );
p1.add ( frameButtCloseSpreadLight, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Spread Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtCloseSpreadDark = new SpreadControl (
Theme.frameButtCloseSpreadDark, 20, CONTROLS_WINDOW_BUTTON );
p1.add ( frameButtCloseSpreadDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled S. Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtCloseSpreadLightDisabled = new SpreadControl (
Theme.frameButtCloseSpreadLightDisabled, 20, CONTROLS_WINDOW_BUTTON );
p1.add ( frameButtCloseSpreadLightDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled S. Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtCloseSpreadDarkDisabled = new SpreadControl (
Theme.frameButtCloseSpreadDarkDisabled, 20, CONTROLS_WINDOW_BUTTON );
p1.add ( frameButtCloseSpreadDarkDisabled, gc );
// Border
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Border Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtCloseBorder = new SBField ( Theme.frameButtCloseBorderColor );
p1.add ( frameButtCloseBorder, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtCloseDark = new SBField ( Theme.frameButtCloseDarkColor );
p1.add ( frameButtCloseDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Border Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtCloseLight = new SBField ( Theme.frameButtCloseLightColor );
p1.add ( frameButtCloseLight, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtCloseBorderDisabled = new SBField (
Theme.frameButtCloseBorderDisabledColor );
p1.add ( frameButtCloseBorderDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Dark" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtCloseDarkDisabled = new SBField (
Theme.frameButtCloseDarkDisabledColor );
p1.add ( frameButtCloseDarkDisabled, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Light" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameButtCloseLightDisabled = new SBField (
Theme.frameButtCloseLightDisabledColor );
p1.add ( frameButtCloseLightDisabled, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Symbol Color" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSymbolClose = new SBField ( Theme.frameSymbolCloseColor );
p1.add ( frameSymbolClose, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Pressed Symbol" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSymbolClosePressed = new SBField (
Theme.frameSymbolClosePressedColor );
p1.add ( frameSymbolClosePressed, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Disabled Symbol" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSymbolCloseDisabled = new SBField (
Theme.frameSymbolCloseDisabledColor );
p1.add ( frameSymbolCloseDisabled, gc );
gc.gridx++ ;
gc.gridy = 0;
gc.insets = new Insets ( 2, 8, 0, 4 );
p1.add ( new JLabel ( "Symbol Dark Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSymbolCloseDark = new SBField ( Theme.frameSymbolCloseDarkColor );
p1.add ( frameSymbolCloseDark, gc );
gc.gridy++ ;
gc.insets = new Insets ( 4, 8, 0, 4 );
p1.add ( new JLabel ( "Symbol Light Border" ), gc );
gc.gridy++ ;
gc.insets = new Insets ( 1, 8, 0, 4 );
frameSymbolCloseLight = new SBField ( Theme.frameSymbolCloseLightColor );
p1.add ( frameSymbolCloseLight, gc );
add ( p1 );
}
}
class SpreadControl extends JPanel implements FocusListener
{
private int controlMode = 0;
private final Color activeColor = Color.WHITE;
private final Color inactiveColor = new Color ( 207, 210, 217 );
private int max = 20;
private Dimension size = new Dimension ( 18, 18 );
private Font font = new Font ( "sansserif", Font.BOLD, 12 );
private int [] spreadRef;
private boolean hasFocus = false;
private int spread;
private int x1 = 7, x2, paintX, y = 7;
SpreadControl ( int [] spreadRef, int max, int controlMode )
{
this.spreadRef = spreadRef;
this.max = max;
this.controlMode = controlMode;
addMouseListener ( new MouseHandler () );
addMouseMotionListener ( new MouseMotionHandler () );
addKeyListener ( new ArrowKeyAction () );
addFocusListener ( this );
init ();
}
public void update ( int spread )
{
this.repaint ();
if ( spread == this.spread )
return;
this.spread = spread;
spreadRef [ Theme.style ] = spread;
if ( internalFrame == null )
return;
if ( controlMode == CONTROLS_BUTTON )
{
repaintTargets ( buttons );
}
else if ( controlMode == CONTROLS_COMBO )
{
repaintTargets ( combos );
}
else if ( controlMode == CONTROLS_ACTIVE_FRAME_CAPTION )
{
if ( decoratedFramesCheck.isSelected () )
{
// to be performant, we repaint title pane only
Component [] cs = theFrame.getLayeredPane ().getComponentsInLayer (
JLayeredPane.FRAME_CONTENT_LAYER.intValue () );
for ( int i = 0 ; i < cs.length ; i++ )
{
if ( cs [ i ] instanceof TinyTitlePane )
{
cs [ i ].repaint ();
break;
}
}
}
repaintTargets ( frames );
}
else if ( controlMode == CONTROLS_INACTIVE_FRAME_CAPTION )
{
repaintTargets ( frames );
}
else if ( controlMode == CONTROLS_SCROLLBAR )
{
repaintTargets ( scrollBars );
}
else if ( controlMode == CONTROLS_SPINNER )
{
repaintTargets ( spinners );
}
else if ( controlMode == CONTROLS_WINDOW_BUTTON )
{
repaintTargets ( windowButtons );
}
}
public void init ()
{
paintX = -1;
update ( spreadRef [ Theme.style ] );
}
public Dimension getPreferredSize ()
{
return size;
}
public void paint ( Graphics g )
{
if ( hasFocus )
{
g.setColor ( activeColor );
}
else
{
g.setColor ( inactiveColor );
}
g.fillRect ( 1, 1, getWidth () - 2, getHeight () - 2 );
g.setColor ( Color.BLACK );
g.drawRect ( 0, 0, getWidth () - 1, getHeight () - 1 );
x2 = getWidth () - 24;
// Track
g.drawLine ( x1, y - 3, x1, y + 3 );
g.drawLine ( x2, y - 3, x2, y + 3 );
g.drawLine ( x1, y, x2, y );
// Thumb
int x = paintX;
if ( x == -1 )
{
x = spread * ( x2 - x1 ) / max + x1;
}
g.drawLine ( x, y + 2, x, y + 2 );
g.drawLine ( x - 1, y + 3, x + 1, y + 3 );
g.drawLine ( x - 2, y + 4, x + 2, y + 4 );
g.drawLine ( x - 3, y + 5, x + 3, y + 5 );
g.drawLine ( x - 4, y + 6, x + 4, y + 6 );
// Number
g.setFont ( font );
FontMetrics fm = g.getFontMetrics ();
int xd = fm.stringWidth ( String.valueOf ( spread ) );
g.drawString ( String.valueOf ( spread ), getWidth () - xd - 3,
getHeight () - 5 );
}
public void focusGained ( FocusEvent e )
{
hasFocus = true;
}
public void focusLost ( FocusEvent e )
{
hasFocus = false;
repaint ( 0 );
}
class MouseHandler extends MouseAdapter
{
public void mousePressed ( MouseEvent e )
{
if ( SpreadControl.this.equals ( frameSpreadDark )
|| SpreadControl.this.equals ( frameSpreadLight ) )
{
if ( !internalFrame.isSelected () )
{
try
{
internalFrame.setSelected ( true );
}
catch ( PropertyVetoException ignore )
{
}
}
}
else if ( SpreadControl.this.equals ( frameSpreadDarkDisabled )
|| SpreadControl.this.equals ( frameSpreadLightDisabled ) )
{
if ( internalFrame.isSelected () )
{
try
{
internalFrame.setSelected ( false );
}
catch ( PropertyVetoException ignore )
{
}
}
}
if ( !hasFocus )
{
requestFocus ();
repaint ( 0 );
}
else
{
int x = e.getX ();
if ( x < x1 )
x = x1;
if ( x > x2 )
x = x2;
int xd = ( x - x1 );
paintX = x;
update ( xd * max / ( x2 - x1 ) );
}
}
public void mouseReleased ( MouseEvent e )
{
repaint ( 0 );
examplePanel.update ( false );
}
}
class MouseMotionHandler extends MouseMotionAdapter
{
public void mouseDragged ( MouseEvent e )
{
int x = e.getX ();
if ( x < x1 )
x = x1;
if ( x > x2 )
x = x2;
int xd = ( x - x1 );
paintX = x;
update ( xd * max / ( x2 - x1 ) );
}
}
class ArrowKeyAction extends KeyAdapter implements ActionListener
{
private javax.swing.Timer keyTimer;
private int step;
ArrowKeyAction ()
{
keyTimer = new javax.swing.Timer ( 20, this );
}
public void keyPressed ( KeyEvent e )
{
if ( e.getKeyCode () == 38 )
{ // up => increase
if ( spread == max )
return;
step = 1;
changeVal ();
keyTimer.setInitialDelay ( 300 );
keyTimer.start ();
}
else if ( e.getKeyCode () == 40 )
{ // up => decrease
if ( spread == 0 )
return;
step = -1;
changeVal ();
keyTimer.setInitialDelay ( 300 );
keyTimer.start ();
}
}
public void keyReleased ( KeyEvent e )
{
keyTimer.stop ();
}
// the keyTimer action
public void actionPerformed ( ActionEvent e )
{
changeVal ();
}
private void changeVal ()
{
if ( spread + step < 0 || spread + step > max )
return;
paintX = -1;
update ( spread + step );
}
}
}
class SizedPanel extends JPanel
{
private Dimension size;
private Color grey = new Color ( 204, 204, 204 );
SizedPanel ( int w, int h )
{
size = new Dimension ( w, h );
setBackground ( Color.WHITE );
}
public Dimension getPreferredSize ()
{
return size;
}
public void paint ( Graphics g )
{
int w = getWidth ();
int h = getHeight ();
int xOffset = 0;
g.setColor ( Color.WHITE );
g.fillRect ( 0, 0, w, h );
g.setColor ( grey );
for ( int y = 0 ; y < h ; y += 8 )
{
for ( int x = 0 ; x < w ; x += 16 )
{
g.fillRect ( x + xOffset, y, 8, 8 );
}
if ( xOffset == 0 )
xOffset = 8;
else
xOffset = 0;
}
}
public void update ( Graphics g )
{
paint ( g );
}
}
class ProgressAction implements ActionListener
{
private int value = 0;
public void actionPerformed ( ActionEvent e )
{
value++ ;
if ( value > 20 )
{
value = 0;
horzProgressBar.setIndeterminate ( !horzProgressBar.isIndeterminate () );
vertProgressBar.setIndeterminate ( !vertProgressBar.isIndeterminate () );
}
horzProgressBar.setValue ( value );
vertProgressBar.setValue ( value );
int v = value % 25;
if ( v < 8 )
{
horzProgressBar.setString ( "Fun" );
vertProgressBar.setString ( "Fun" );
}
else if ( v < 16 )
{
horzProgressBar.setString ( "with" );
vertProgressBar.setString ( "with" );
}
else
{
horzProgressBar.setString ( "Swing" );
vertProgressBar.setString ( "Swing" );
}
}
}
class ProgressBarAction extends MouseAdapter
{
public void mousePressed ( MouseEvent e )
{
if ( progressTimer == null )
{
startProgressTimer ();
}
else if ( progressTimer.isRunning () )
{
stopProgressTimer ();
}
else
{
startProgressTimer ();
}
}
}
class ThemeFileFilter extends javax.swing.filechooser.FileFilter
{
public boolean accept ( File pathname )
{
if ( pathname.isDirectory () )
return true;
if ( pathname.getName ().endsWith ( Theme.FILE_EXTENSION ) )
return true;
return false;
}
public String getDescription ()
{
return Theme.FILE_EXTENSION;
}
}
class SelectThemeAction implements ActionListener
{
public void actionPerformed ( ActionEvent e )
{
openTheme ( ( ( JMenuItem ) e.getSource () ).getText ()
+ Theme.FILE_EXTENSION );
}
}
class CheckedIcon extends JPanel implements ActionListener
{
private HSBField field;
private JLabel iconLabel;
private JCheckBox check;
private Icon icon;
CheckedIcon ( boolean b, HSBField field, String ttt )
{
this.field = field;
setLayout ( new FlowLayout ( FlowLayout.LEFT, 0, 0 ) );
check = new JCheckBox ( "", b );
check.addActionListener ( this );
add ( check );
iconLabel = new JLabel ( "" );
add ( iconLabel );
super.setToolTipText ( ttt );
}
public void setIcon ( Icon i )
{
icon = i;
iconLabel.setIcon ( icon );
}
public void setSelected ( boolean b )
{
check.setSelected ( b );
}
public boolean isSelected ()
{
return check.isSelected ();
}
public Icon getIcon ()
{
return icon;
}
public void actionPerformed ( ActionEvent e )
{
iconCP.colorizeIcon ( field, check.isSelected () );
examplePanel.update ( true );
}
}
class DecorateFrameAction implements ActionListener
{
public void actionPerformed ( ActionEvent e )
{
decorateFrame ( ( ( AbstractButton ) e.getSource () ).isSelected () );
}
}
class CheckAction implements ActionListener
{
public void actionPerformed ( ActionEvent e )
{
examplePanel.update ( false );
}
}
class CheckUpdateAction implements ActionListener
{
public void actionPerformed ( ActionEvent e )
{
examplePanel.update ( true );
}
}
class UpdateAction implements ChangeListener
{
public void stateChanged ( ChangeEvent e )
{
examplePanel.update ( true );
}
}
class SpinnerUpdateAction implements ChangeListener
{
public void stateChanged ( ChangeEvent e )
{
updateThemeButton.setEnabled ( true );
}
}
class PopupTrigger extends JPanel implements MouseListener
{
JLabel label;
PopupTrigger ()
{
setLayout ( new FlowLayout ( FlowLayout.CENTER, 4, 2 ) );
setBackground ( Color.ORANGE );
label = new JLabel ( "Popup trigger" );
label.setForeground ( Color.BLUE );
add ( label );
addMouseListener ( this );
}
void updateColors ()
{
label.setForeground ( Color.BLUE );
}
// MouseListener implementation
public void mousePressed ( MouseEvent e )
{
if ( thePopup != null && thePopup.isShowing () )
return;
thePopup = new JPopupMenu ( "Popup Menu" );
JMenuItem item = new JMenuItem ( "Popup item #1" );
thePopup.add ( item );
item = new JMenuItem ( "Popup item #2" );
thePopup.add ( item );
thePopup.addSeparator ();
item = new JMenuItem ( "Popup item #3" );
thePopup.add ( item );
item = new JMenuItem ( "Popup disabled item" );
item.setEnabled ( false );
thePopup.add ( item );
thePopup.show ( e.getComponent (), 0,
-thePopup.getPreferredSize ().height - 1 );
}
public void mouseClicked ( MouseEvent e )
{
}
public void mouseReleased ( MouseEvent e )
{
}
public void mouseEntered ( MouseEvent e )
{
}
public void mouseExited ( MouseEvent e )
{
}
}
private class SmallTableModel extends AbstractTableModel
{
String [] columnNames =
{ "C1", "C2", "C3", "C4" };
public int getRowCount ()
{
return 50;
}
public int getColumnCount ()
{
return columnNames.length;
}
public String getColumnName ( int column )
{
return columnNames [ column ];
}
public Class getColumnClass ( int column )
{
return Integer.class;
}
public Object getValueAt ( int rowIndex, int columnIndex )
{
return new Integer ( rowIndex * getColumnCount () + columnIndex + 1 );
}
}
private class AboutDialog extends JDialog
{
AboutDialog ()
{
super ( theFrame, "About TinyLaF", true );
setDefaultCloseOperation ( DISPOSE_ON_CLOSE );
String msg = "<html>" + "TinyLaF v" + TinyLookAndFeel.VERSION_STRING
+ " (" + TinyLookAndFeel.DATE_STRING + ")"
+ "<br>Author: Hans Bickel"
+ "<br>TinyLaF Home: www.muntjak.de/hans/java/tinylaf/";
getContentPane ().setLayout ( new BorderLayout () );
JPanel p = new JPanel ( new FlowLayout ( FlowLayout.CENTER, 12, 8 ) );
p.add ( new JLabel ( msg ) );
getContentPane ().add ( p, BorderLayout.CENTER );
p = new JPanel ( new FlowLayout ( FlowLayout.CENTER, 8, 10 ) );
JButton b = new JButton ( "Copy Link" );
b.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
Clipboard cb = Toolkit.getDefaultToolkit ().getSystemClipboard ();
if ( cb == null )
{
JOptionPane.showMessageDialog ( AboutDialog.this,
"System Clipboard not available.", "Error",
JOptionPane.ERROR_MESSAGE );
}
else
{
StringSelection ss = new StringSelection (
"http://www.muntjak.de/hans/java/tinylaf/" );
cb.setContents ( ss, ss );
}
}
} );
p.add ( b );
b = new JButton ( "Close" );
getRootPane ().setDefaultButton ( b );
b.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
AboutDialog.this.dispose ();
}
} );
p.add ( b );
getContentPane ().add ( p, BorderLayout.SOUTH );
pack ();
Point loc = theFrame.getLocationOnScreen ();
loc.x += ( theFrame.getWidth () - getWidth () ) / 2;
loc.y += ( theFrame.getHeight () - getHeight () ) / 2;
setLocation ( loc );
setVisible ( true );
}
}
}