/******************************************************************************* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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 ); } } }