From 27a24235d5c0a1cbcb01d2d5fdbc71fcf82e5107 Mon Sep 17 00:00:00 2001 From: Clochard Pagan Date: Sun, 22 Mar 2015 06:13:56 +0300 Subject: [PATCH] Mass refactoring and refresh. Now we know how to set tab-colors. Also some more keys retrieved - maybe they will be useful in future. Added skeleton for editor panel, also added cool-looking button for it :) NFY - let me sleep a little. --- ...wheel_dock_icon_by_andybaumgar-d3ezjgc.png | Bin 0 -> 22888 bytes icon/wh.png | Bin 0 -> 3412 bytes icon/wh24.png | Bin 0 -> 3998 bytes icon/wheel.png | Bin 0 -> 74962 bytes manifest.mf | 2 +- nbproject/genfiles.properties | 4 +- nbproject/project.xml | 8 + src/org/idp/laf/{settings => }/Color.java | 21 +- src/org/idp/laf/Installer.java | 17 +- src/org/idp/laf/Kernel.java | 259 ++++++++ src/org/idp/laf/Keys.java | 369 ++++++++++- src/org/idp/laf/LAF_killer.java | 575 ------------------ src/org/idp/laf/gui/Bundle.properties | 5 + .../laf/gui/ColorEditorActionListener.java | 44 ++ .../idp/laf/gui/ColorEditorTopComponent.form | 28 + .../idp/laf/gui/ColorEditorTopComponent.java | 97 +++ src/org/idp/laf/gui/wh.png | Bin 0 -> 3412 bytes src/org/idp/laf/gui/wh24.png | Bin 0 -> 3998 bytes src/org/idp/laf/settings/Font.java | 116 ---- src/org/idp/laf/settings/Gradient.java | 62 -- 20 files changed, 821 insertions(+), 786 deletions(-) create mode 100644 icon/color_wheel_dock_icon_by_andybaumgar-d3ezjgc.png create mode 100644 icon/wh.png create mode 100644 icon/wh24.png create mode 100644 icon/wheel.png rename src/org/idp/laf/{settings => }/Color.java (84%) create mode 100644 src/org/idp/laf/Kernel.java delete mode 100644 src/org/idp/laf/LAF_killer.java create mode 100644 src/org/idp/laf/gui/Bundle.properties create mode 100644 src/org/idp/laf/gui/ColorEditorActionListener.java create mode 100644 src/org/idp/laf/gui/ColorEditorTopComponent.form create mode 100644 src/org/idp/laf/gui/ColorEditorTopComponent.java create mode 100644 src/org/idp/laf/gui/wh.png create mode 100644 src/org/idp/laf/gui/wh24.png delete mode 100644 src/org/idp/laf/settings/Font.java delete mode 100644 src/org/idp/laf/settings/Gradient.java diff --git a/icon/color_wheel_dock_icon_by_andybaumgar-d3ezjgc.png b/icon/color_wheel_dock_icon_by_andybaumgar-d3ezjgc.png new file mode 100644 index 0000000000000000000000000000000000000000..ef7e92bbc1b30775194f5f66807ea243b40c2a56 GIT binary patch literal 22888 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 literal 0 HcmV?d00001 diff --git a/icon/wh.png b/icon/wh.png new file mode 100644 index 0000000000000000000000000000000000000000..4dd873b86b84201a47d15d34d4baf3dab0b7a255 GIT binary patch literal 3412 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.51.1 + + org.openide.awt + + + + 7.62.1 + + org.openide.explorer diff --git a/src/org/idp/laf/settings/Color.java b/src/org/idp/laf/Color.java similarity index 84% rename from src/org/idp/laf/settings/Color.java rename to src/org/idp/laf/Color.java index cae7550..656c867 100644 --- a/src/org/idp/laf/settings/Color.java +++ b/src/org/idp/laf/Color.java @@ -1,20 +1,19 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. +/* Copyright (C) Edward M. Kagan - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Edward M. Kagan , 2015 */ -package org.idp.laf.settings; +package org.idp.laf; import java.io.Serializable; import javax.swing.plaf.ColorUIResource; -import static org.idp.laf.settings.Color.ColorClass.AT; -import static org.idp.laf.settings.Color.ColorClass.SF; -import static org.idp.laf.settings.Color.ColorClass.SS; +import static org.idp.laf.Color.ColorClass.AT; +import static org.idp.laf.Color.ColorClass.SF; +import static org.idp.laf.Color.ColorClass.SS; import sun.swing.PrintColorUIResource; /** - * - * @author Edward M. Kagan + * @author Edward M. Kagan */ public class Color implements Serializable{ @@ -54,7 +53,7 @@ public class Color implements Serializable{ this.cls = SF; } - public Color(String pname, ColorClass cls, int red, int green, int blue, int alpha) { + public Color(String pname, ColorClass cls, int red, int green, int blue, int alpha) { this.A = alpha; this.B = blue; this.G = green; diff --git a/src/org/idp/laf/Installer.java b/src/org/idp/laf/Installer.java index 985ae07..15cdeec 100644 --- a/src/org/idp/laf/Installer.java +++ b/src/org/idp/laf/Installer.java @@ -1,7 +1,7 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. +/* Copyright (C) Edward M. Kagan - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Edward M. Kagan , 2015 */ package org.idp.laf; @@ -9,8 +9,7 @@ import javax.swing.SwingUtilities; import org.openide.modules.ModuleInstall; /** - * - * @author Edward M. Kagan + * @author Edward M. Kagan */ public class Installer extends ModuleInstall { @@ -22,11 +21,9 @@ public class Installer extends ModuleInstall @Override public void run() { - LAF_killer.load_ui(); + Kernel.load_kernel(); } }); } - - - + } diff --git a/src/org/idp/laf/Kernel.java b/src/org/idp/laf/Kernel.java new file mode 100644 index 0000000..1842cd9 --- /dev/null +++ b/src/org/idp/laf/Kernel.java @@ -0,0 +1,259 @@ +/* Copyright (C) Edward M. Kagan - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Edward M. Kagan , 2015 + */ +package org.idp.laf; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.plaf.ColorUIResource; +import javax.swing.plaf.metal.DefaultMetalTheme; +import javax.swing.plaf.metal.MetalLookAndFeel; +import org.openide.util.Exceptions; +import org.openide.windows.WindowManager; + +/** + * @author Edward M. Kagan + */ +public class Kernel { + + public static void load_kernel () + { + if (prepare_metal_laf ()) + { + String nb_etc = retrieve_netbeans_etc_dir(); + setup_font_antialiaing_hints(nb_etc); + load_setup (nb_etc); + } + else + { + System.err.println("Unable to set Metall Look And Feel - no " + + "modifications done. Follow your ugly way of live."); + } + + } + + private static boolean prepare_metal_laf () + { + try { + UIManager.getDefaults().clear(); + MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme()); + UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); + return true; + } catch (ClassNotFoundException ex) { + Exceptions.printStackTrace(ex); + return false; + } catch (InstantiationException ex) { + Exceptions.printStackTrace(ex); + return false; + } catch (IllegalAccessException ex) { + Exceptions.printStackTrace(ex); + return false; + } catch (UnsupportedLookAndFeelException ex) { + Exceptions.printStackTrace(ex); + return false; + } + } + + + private static String retrieve_netbeans_etc_dir () + { + String nb_home = System.getProperty("netbeans.home"); + String nb_conf = nb_home.substring(0, nb_home.length() - "platform".length()) + "etc" + File.separator; + return nb_conf; + } + + + private static boolean setup_font_antialiaing_hints (String nb_etc) + { + try + { + System.setProperty("awt.useSystemAAFontSettings","lcd"); + System.setProperty("swing.aatext", "true"); + System.setProperty("nb.useSwingHtmlRendering", "true"); + + Path path = FileSystems.getDefault().getPath(nb_etc, "netbeans.conf"); + List linesL = Files.readAllLines(path); + String [] lines = new String[linesL.size()]; + + int i = 0; + for (String str : linesL) + { + lines[i] = str; + i++; + } + + for (i =0; i < lines.length; i ++) + { + if (lines[i].contains("netbeans_default_options=")) + { + if (!lines[i].contains("-J-Dawt.useSystemAAFontSettings")) + { + System.err.println("No rendering hints defined - fixing..."); + String [] parts = lines[i].split("\""); + String new_line = parts[0] + "\"" + parts[1] + " -J-Dswing.aatext=true -J-Dawt.useSystemAAFontSettings=lcd" + "\""; + lines[i] = new_line; + write_scheme(nb_etc + "netbeans.conf", lines); + System.out.println("Reload Netbeans to update hints!"); + } + } + } + return true; + } + catch (IOException ex) + { + Exceptions.printStackTrace(ex); + System.err.println("Unable to apply rendering hints :( Sorry..."); + return false; + } + } + + private static boolean load_setup (String nb_etc) + { + File scheme_file = new File(nb_etc + File.separator + ".idp_scheme"); + String path = scheme_file.getAbsolutePath(); + + if (!scheme_file.exists()) + { + + if (save_scheme(path)) + { + return read_scheme (path); + } + else + { + return false; + } + } + else + { + return read_scheme (path); + } + + + } + + private static boolean save_scheme(String scheme_file) { + + ArrayList color_map = new ArrayList(); + for (int i = 0; i < Keys.color_keys.length; i ++) + { + + Object o = UIManager.get(Keys.color_keys[i]); + if (o != null) + { + if (o.getClass().equals(javax.swing.plaf.ColorUIResource.class)) + { + ColorUIResource oo = (ColorUIResource) o; + Color c = new Color(Keys.color_keys[i], Color.ColorClass.SF, oo.getRed(), oo.getGreen(), oo.getBlue(), oo.getAlpha()); + color_map.add(c); + //System.out.println( "\"" + Keys.color_keys[i] + "\","); + } + else if (o.getClass().equals(java.awt.Color.class)) + { + java.awt.Color oo = (java.awt.Color) o; + Color c = new Color(Keys.color_keys[i], Color.ColorClass.AT, oo.getRed(), oo.getGreen(), oo.getBlue(), oo.getAlpha()); + color_map.add(c); + //System.out.println( "\"" + Keys.color_keys[i] + "\","); + } + } +// else +// { +// System.out.println( " \"" + Keys.color_keys[i] + "\","); +// } + } + + try + { + PrintWriter writer = new PrintWriter(scheme_file , "UTF-8"); + for (int i = 0; i < color_map.size(); i ++) + { + writer.println(color_map.get(i)); + } + writer.close(); + return true; + } + catch (FileNotFoundException ex) + { + Exceptions.printStackTrace(ex); + return false; + } + catch (UnsupportedEncodingException ex) + { + Exceptions.printStackTrace(ex); + return false; + } + + } + + private static boolean read_scheme(String scheme_file) { + + try + { + ArrayList color_map = new ArrayList(); + List C = Files.readAllLines(Paths.get(scheme_file), Charset.forName("UTF-8")); + + for (String s : C) + { + color_map.add(new Color (s)); + } + + for (int i = 0; i < color_map.size(); i ++) + { + UIManager.put(color_map.get(i).getName(), color_map.get(i).getObject()); + } + + repaintUI(); + + return true; + } + catch (IOException ex) + { + Exceptions.printStackTrace(ex); + return false; + } + } + + + public static void repaintUI() + { + SwingUtilities.updateComponentTreeUI(WindowManager.getDefault().getMainWindow()); + WindowManager.getDefault().getMainWindow().pack(); + WindowManager.getDefault().getMainWindow().repaint(); + } + + private static void write_scheme(String path, String [] data) throws IOException + { + + File fout = new File(path); + FileOutputStream fos = new FileOutputStream(fout); + + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos)); + + for (int i = 0; i < data.length; i ++) + { + bw.write(data[i]); + bw.newLine(); + } + + bw.close(); + } + +} diff --git a/src/org/idp/laf/Keys.java b/src/org/idp/laf/Keys.java index ab9f81d..fb9a852 100644 --- a/src/org/idp/laf/Keys.java +++ b/src/org/idp/laf/Keys.java @@ -1,16 +1,302 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. +/* Copyright (C) Edward M. Kagan - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Edward M. Kagan , 2015 */ package org.idp.laf; /** - * - * @author pagan + * @author Edward M. Kagan */ public class Keys { - public static String [] keys = { "AbstractButton.clickText", + + public static String [] color_keys = + { + "Button.background", + "Button.darkShadow", + "Button.disabledText", + "Button.foreground", + "Button.highlight", + "Button.light", + "Button.select", + "Button.shadow", + "CheckBox.background", + "CheckBox.disabledText", + "CheckBox.foreground", + "CheckBoxMenuItem.acceleratorForeground", + "CheckBoxMenuItem.acceleratorSelectionForeground", + "CheckBoxMenuItem.background", + "CheckBoxMenuItem.disabledForeground", + "CheckBoxMenuItem.foreground", + "CheckBoxMenuItem.selectionBackground", + "CheckBoxMenuItem.selectionForeground", + "ColorChooser.background", + "ColorChooser.foreground", + "ColorChooser.swatchesDefaultRecentColor", + "ComboBox.background", + "ComboBox.buttonBackground", + "ComboBox.buttonDarkShadow", + "ComboBox.buttonHighlight", + "ComboBox.buttonShadow", + "ComboBox.disabledBackground", + "ComboBox.disabledForeground", + "ComboBox.foreground", + "ComboBox.selectionBackground", + "ComboBox.selectionForeground", + "Desktop.background", + "EditorPane.background", + "EditorPane.caretForeground", + "EditorPane.foreground", + "EditorPane.inactiveForeground", + "EditorPane.selectionBackground", + "EditorPane.selectionForeground", + "FormattedTextField.background", + "FormattedTextField.caretForeground", + "FormattedTextField.foreground", + "FormattedTextField.inactiveBackground", + "FormattedTextField.inactiveForeground", + "FormattedTextField.selectionBackground", + "FormattedTextField.selectionForeground", + "InternalFrame.activeTitleBackground", + "InternalFrame.activeTitleForeground", + "InternalFrame.borderColor", + "InternalFrame.borderDarkShadow", + "InternalFrame.borderHighlight", + "InternalFrame.borderLight", + "InternalFrame.borderShadow", + "InternalFrame.inactiveTitleBackground", + "InternalFrame.inactiveTitleForeground", + "Label.background", + "Label.disabledForeground", + "Label.disabledShadow", + "Label.foreground", + "List.background", + "List.dropLineColor", + "List.foreground", + "List.selectionBackground", + "List.selectionForeground", + "Menu.acceleratorForeground", + "Menu.acceleratorSelectionForeground", + "Menu.background", + "Menu.disabledForeground", + "Menu.foreground", + "Menu.selectionBackground", + "Menu.selectionForeground", + "MenuBar.background", + "MenuBar.foreground", + "MenuBar.highlight", + "MenuBar.shadow", + "MenuItem.acceleratorForeground", + "MenuItem.acceleratorSelectionForeground", + "MenuItem.background", + "MenuItem.disabledForeground", + "MenuItem.foreground", + "MenuItem.selectionBackground", + "MenuItem.selectionForeground", + "OptionPane.background", + "OptionPane.foreground", + "OptionPane.messageForeground", + "Panel.background", + "Panel.foreground", + "PasswordField.background", + "PasswordField.caretForeground", + "PasswordField.foreground", + "PasswordField.inactiveBackground", + "PasswordField.inactiveForeground", + "PasswordField.selectionBackground", + "PasswordField.selectionForeground", + "PopupMenu.background", + "PopupMenu.foreground", + "ProgressBar.background", + "ProgressBar.foreground", + "ProgressBar.selectionBackground", + "ProgressBar.selectionForeground", + "RadioButton.background", + "RadioButton.darkShadow", + "RadioButton.disabledText", + "RadioButton.foreground", + "RadioButton.highlight", + "RadioButton.light", + "RadioButton.select", + "RadioButton.shadow", + "RadioButtonMenuItem.acceleratorForeground", + "RadioButtonMenuItem.acceleratorSelectionForeground", + "RadioButtonMenuItem.background", + "RadioButtonMenuItem.disabledForeground", + "RadioButtonMenuItem.foreground", + "RadioButtonMenuItem.selectionBackground", + "RadioButtonMenuItem.selectionForeground", + "ScrollBar.background", + "ScrollBar.foreground", + "ScrollBar.thumb", + "ScrollBar.thumbDarkShadow", + "ScrollBar.thumbHighlight", + "ScrollBar.thumbShadow", + "ScrollBar.track", + "ScrollBar.trackHighlight", + "ScrollPane.background", + "ScrollPane.foreground", + "Separator.foreground", + "Separator.highlight", + "Separator.shadow", + "Slider.background", + "Slider.focus", + "Slider.foreground", + "Slider.highlight", + "Slider.shadow", + "Slider.tickColor", + "Spinner.background", + "Spinner.foreground", + "SplitPane.background", + "SplitPane.darkShadow", + "SplitPane.highlight", + "SplitPane.shadow", + "SplitPaneDivider.draggingColor", + "TabbedPane.background", + "TabbedPane.darkShadow", + "TabbedPane.focus", + "TabbedPane.foreground", + "TabbedPane.highlight", + "TabbedPane.light", + "TabbedPane.shadow", + "Table.background", + "Table.dropLineColor", + "Table.dropLineShortColor", + "Table.focusCellBackground", + "Table.focusCellForeground", + "Table.gridColor", + "Table.selectionBackground", + "Table.selectionForeground", + "Table.sortIconColor", + "TableHeader.background", + "TableHeader.focusCellBackground", + "TableHeader.foreground", + "TextArea.background", + "TextArea.caretForeground", + "TextArea.foreground", + "TextArea.inactiveForeground", + "TextArea.selectionBackground", + "TextArea.selectionForeground", + "TextField.background", + "TextField.caretForeground", + "TextField.darkShadow", + "TextField.foreground", + "TextField.highlight", + "TextField.inactiveBackground", + "TextField.inactiveForeground", + "TextField.light", + "TextField.selectionBackground", + "TextField.selectionForeground", + "TextField.shadow", + "TextPane.background", + "TextPane.caretForeground", + "TextPane.foreground", + "TextPane.inactiveForeground", + "TextPane.selectionBackground", + "TextPane.selectionForeground", + "TitledBorder.titleColor", + "ToggleButton.background", + "ToggleButton.darkShadow", + "ToggleButton.disabledText", + "ToggleButton.foreground", + "ToggleButton.highlight", + "ToggleButton.light", + "ToggleButton.shadow", + "ToolBar.background", + "ToolBar.darkShadow", + "ToolBar.dockingBackground", + "ToolBar.dockingForeground", + "ToolBar.floatingBackground", + "ToolBar.floatingForeground", + "ToolBar.foreground", + "ToolBar.highlight", + "ToolBar.light", + "ToolBar.shadow", + "ToolTip.background", + "ToolTip.foreground", + "Tree.background", + "Tree.dropLineColor", + "Tree.foreground", + "Tree.hash", + "Tree.line", + "Tree.selectionBackground", + "Tree.selectionBorderColor", + "Tree.selectionForeground", + "Tree.textBackground", + "Tree.textForeground", + "Viewport.background", + "Viewport.foreground", + "activeCaption", + "activeCaptionBorder", + "activeCaptionText", + "control", + "controlDkShadow", + "controlHighlight", + "controlLtHighlight", + "controlShadow", + "controlText", + "desktop", + "inactiveCaption", + "inactiveCaptionBorder", + "inactiveCaptionText", + "info", + "infoText", + "menu", + "menuText", + "scrollbar", + "text", + "textHighlight", + "textHighlightText", + "textInactiveText", + "textText", + "window", + "windowBorder", + "windowText", + "PropSheet.setBackground", + "PropSheet.selectedSetBackground", + "PropSheet.setForeground", + "PropSheet.selectedSetForeground", + "PropSheet.disabledForeground", + "PropSheet.selectionBackground", + "PropSheet.selectionForeground", + "CheckBoxMenuItem.disabledBackground", + "EditorPane.inactiveBackground", + "Focus.color", + "InternalFrame.background", + "InternalFrame.optionDialogBackground", + "InternalFrame.paletteBackground", + "Menu.disabledBackground", + "MenuBar.disabledBackground", + "MenuBar.disabledForeground", + "MenuBar.selectionBackground", + "MenuBar.selectionForeground", + "MenuItem.disabledBackground", + "PopupMenu.selectionBackground", + "PopupMenu.selectionForeground", + "RadioButtonMenuItem.disabledBackground", + "TextArea.inactiveBackground", + "TextComponent.selectionBackgroundInactive", + "TextPane.inactiveBackground", + "nb_workplace_fill", + "Nb.Desktop.background", + "nb.output.selectionBackground", + "nb.hyperlink.foreground", + "nb.output.background", + "nb.output.foreground", + "Tree.altbackground", + "PropSheet.customButtonForeground", + "netbeans.ps.buttonColor", + "netbeans.ps.background", + "nb.errorForeground", + "nb.warningForeground", + "TabRenderer.selectedActivatedBackground", + "TabRenderer.selectedActivatedForeground", + "TabRenderer.selectedForeground", + "TabRenderer.selectedBackground" +}; + + + private static String [] keys = { "AbstractButton.clickText", "AbstractDocument.additionText", "AbstractDocument.deletionText", "AbstractDocument.redoText", @@ -713,6 +999,71 @@ public class Keys { "textText", "window", "windowBorder", -"windowText"}; +"windowText", + +"nb_workplace_fill", +"customFontSize", +"nbDefaultFontSize", +"Nb.Editor.Status.leftBorder", +"Nb.Editor.Status.innerBorder", +"Nb.Editor.Status.rightBorder", +"Nb.Editor.Status.onlyOneBorder", +"Nb.Editor.Toolbar.border", +"Nb.Editor.ErrorStripe.ScrollBar.Insets", +"Nb.Explorer.Status.border", +"Nb.Explorer.Folder.icon", +"Nb.Explorer.Folder.openedIcon", +"Nb.Desktop.border", +"Nb.Toolbar.ui", +"Nb.Desktop.background", +"nb.output.selectionBackground", +"nb.hyperlink.foreground", +"nb.output.background", +"nb.output.foreground", +"Tree.altbackground", +"PropSheet.setBackground", +"PropSheet.selectedSetBackground", +"PropSheet.setForeground", +"PropSheet.selectedSetForeground", +"PropSheet.disabledForeground", +"PropSheet.selectionBackground", +"PropSheet.selectionForeground", +"PropSheet.customButtonForeground", +"netbeans.ps.buttonColor", +"netbeans.ps.background", +"netbeans.ps.iconmargin", +"netbeans.ps.rowheight", +"nb.errorForeground", +"nb.warningForeground", +"TabbedContainerUI", +"EditorTabDisplayerUI", +"ViewTabDisplayerUI", +"SlidingTabDisplayerUI", +"IndexButtonUI", +"SlidingButtonUI", +"TabbedContainer.editor.contentBorder", +"TabbedContainer.editor.tabsBorder", +"TabbedContainer.editor.outerBorder", +"TabbedContainer.view.contentBorder", +"TabbedContainer.view.tabsBorder", +"TabbedContainer.view.outerBorder", +"TabbedContainer.sliding.contentBorder", +"TabbedContainer.sliding.tabsBorder", +"TabbedContainer.sliding.outerBorder", +"TabRenderer.selectedActivatedBackground", +"TabRenderer.selectedActivatedForeground", +"TabRenderer.selectedForeground", +"TabRenderer.selectedBackground", +"nb.explorer.ministatusbar.border", +"nb.desktop.splitpane.border", +"nb.propertysheet", +"Nb.SplitPane.dividerSize.vertical", +"Nb.SplitPane.dividerSize.horizontal" + }; + +} + + + + -} \ No newline at end of file diff --git a/src/org/idp/laf/LAF_killer.java b/src/org/idp/laf/LAF_killer.java deleted file mode 100644 index d07b52d..0000000 --- a/src/org/idp/laf/LAF_killer.java +++ /dev/null @@ -1,575 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.idp.laf; - - -import java.awt.Insets; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.nio.charset.Charset; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; -import javax.swing.border.Border; -import javax.swing.plaf.ColorUIResource; -import javax.swing.plaf.metal.DefaultMetalTheme; -import javax.swing.plaf.metal.MetalLookAndFeel; -import org.idp.laf.settings.Color; -import static org.idp.laf.settings.Color.ColorClass.AT; -import static org.idp.laf.settings.Color.ColorClass.SS; -import static org.idp.laf.settings.Color.ColorClass.SF; -import org.idp.laf.settings.Font; -import static org.idp.laf.settings.Font.FontClass.FA; -import static org.idp.laf.settings.Font.FontClass.FS; -import org.idp.laf.settings.Gradient; -import org.openide.util.Exceptions; -import org.openide.windows.WindowManager; - -/** - * - * @author Edward M. Kagan - */ -public class LAF_killer { - - private static void printColor (ColorUIResource cc) - { - System.out.println(cc.getRed() + " : " + cc.getGreen() + " : " + cc.getBlue()); - } - - - public static void load_ui(){ - - try { -// if (UIManager.getLookAndFeel().getName().equals("Metal")) -// { -// System.out.println(">>> Hmmm... You smart enought to use Metal theme - OK."); -// MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme()); -// System.out.println(">>>> l&f NAME = " + UIManager.getLookAndFeel().getName() + " / " + javax.swing.plaf.metal.MetalLookAndFeel.getCurrentTheme().getName()); -// } -// else -// { - - System.out.println(">>>> TRYING TO CHANGE L&F"); - MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme()); - UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); - System.out.println(">>>> l&f NAME = " + UIManager.getLookAndFeel().getName() + " / " + javax.swing.plaf.metal.MetalLookAndFeel.getCurrentTheme().getName()); - - - - - printColor(MetalLookAndFeel.getAcceleratorForeground()); - printColor(MetalLookAndFeel.getAcceleratorSelectedForeground()); - printColor(MetalLookAndFeel.getBlack()); - printColor(MetalLookAndFeel.getControl()); - printColor(MetalLookAndFeel.getControlDarkShadow()); - printColor(MetalLookAndFeel.getControlDisabled()); - printColor(MetalLookAndFeel.getControlHighlight()); - printColor(MetalLookAndFeel.getControlInfo()); - printColor(MetalLookAndFeel.getControlShadow()); - printColor(MetalLookAndFeel.getControlTextColor()); - printColor(MetalLookAndFeel.getDesktopColor()); - printColor(MetalLookAndFeel.getFocusColor()); - printColor(MetalLookAndFeel.getHighlightedTextColor()); - printColor(MetalLookAndFeel.getInactiveControlTextColor()); - printColor(MetalLookAndFeel.getInactiveControlTextColor()); - printColor(MetalLookAndFeel.getInactiveSystemTextColor()); - printColor(MetalLookAndFeel.getMenuBackground()); - printColor(MetalLookAndFeel.getMenuDisabledForeground()); - printColor(MetalLookAndFeel.getMenuForeground()); - printColor(MetalLookAndFeel.getMenuSelectedBackground()); - printColor(MetalLookAndFeel.getMenuSelectedForeground()); - printColor(MetalLookAndFeel.getPrimaryControl()); - printColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - printColor(MetalLookAndFeel.getPrimaryControlHighlight()); - printColor(MetalLookAndFeel.getPrimaryControlInfo()); - printColor(MetalLookAndFeel.getSeparatorBackground()); - printColor(MetalLookAndFeel.getSeparatorForeground()); - printColor(MetalLookAndFeel.getSystemTextColor()); - printColor(MetalLookAndFeel.getTextHighlightColor()); - printColor(MetalLookAndFeel.getUserTextColor()); - printColor(MetalLookAndFeel.getWhite()); - printColor(MetalLookAndFeel.getWindowBackground()); - printColor(MetalLookAndFeel.getWindowTitleBackground()); - printColor(MetalLookAndFeel.getWindowTitleForeground()); - printColor(MetalLookAndFeel.getWindowTitleInactiveBackground()); - printColor(MetalLookAndFeel.getWindowTitleInactiveForeground()); - - - - - - - - - - - - - //} - - Object [] keys = new Object[UIManager.getLookAndFeelDefaults().keySet().size()]; - - String settings = ""; - - UIManager.getLookAndFeelDefaults().keySet().toArray(keys); - -//dump (keys); -load (); - - - - - - } catch (ClassNotFoundException ex) { - Logger.getLogger(LAF_killer.class.getName()).log(Level.SEVERE, null, ex); - } catch (InstantiationException ex) { - Logger.getLogger(LAF_killer.class.getName()).log(Level.SEVERE, null, ex); - } catch (IllegalAccessException ex) { - Logger.getLogger(LAF_killer.class.getName()).log(Level.SEVERE, null, ex); - } catch (UnsupportedLookAndFeelException ex) { - Logger.getLogger(LAF_killer.class.getName()).log(Level.SEVERE, null, ex); - } - - - } - - - private static void dump(Object [] keys) - { - - ArrayList color_map = new ArrayList(); - ArrayList font_map = new ArrayList(); - ArrayList gradient_map = new ArrayList(); - - for (int i = 0; i < keys.length; i ++) - { - - if (UIManager.getDefaults().get(keys[i]) != null){ - //This check is needed to overcome null_pointer on first run for this shitty icons - // 269 >> Menu.checkIcon : null - // 272 >> MenuItem.checkIcon : null - - - // - if (UIManager.getDefaults().get(keys[i]).getClass().equals(javax.swing.plaf.ColorUIResource.class)) - { - javax.swing.plaf.ColorUIResource color = (javax.swing.plaf.ColorUIResource) UIManager.getDefaults().get(keys[i]); - Color c = new Color (keys[i].toString(), SF, color.getRed(),color.getGreen(),color.getBlue(),color.getAlpha()); - color_map.add(c); - } - else if (UIManager.getDefaults().get(keys[i]).getClass().equals(sun.swing.PrintColorUIResource.class)) - { - sun.swing.PrintColorUIResource color = (sun.swing.PrintColorUIResource) UIManager.getDefaults().get(keys[i]); - Color c = new Color (keys[i].toString(), SS, color.getRed(),color.getGreen(),color.getBlue(),color.getAlpha()); - color_map.add(c); - } - else if (UIManager.getDefaults().get(keys[i]).getClass().equals(java.awt.Color.class)) - { - java.awt.Color color = (java.awt.Color) UIManager.getDefaults().get(keys[i]); - Color c = new Color (keys[i].toString(), AT, color.getRed(),color.getGreen(),color.getBlue(),color.getAlpha()); - color_map.add(c); - } - // - - // - - else if (UIManager.getDefaults().get(keys[i]).getClass().equals(javax.swing.plaf.FontUIResource.class)) - { - javax.swing.plaf.FontUIResource fnt = (javax.swing.plaf.FontUIResource) UIManager.getDefaults().get(keys[i]); - Font f = new Font (keys[i].toString(), FS, fnt.getFamily(), fnt.getName(), fnt.getStyle(), fnt.getSize()); - font_map.add(f); - - // System.out.println(i + " FX>> " + keys[i] + " : " + UIManager.getDefaults().get(keys[i])); - } - else if (UIManager.getDefaults().get(keys[i]).getClass().equals(java.awt.Font.class)) - { - java.awt.Font fnt = (java.awt.Font) UIManager.getDefaults().get(keys[i]); - Font f = new Font (keys[i].toString(), FA, fnt.getFamily(), fnt.getName(), fnt.getStyle(), fnt.getSize()); - font_map.add(f); - //System.out.println(i + " FY>> " + keys[i] + " : " + UIManager.getDefaults().get(keys[i])); - } - - // - - // -// - else if (keys[i].equals("MenuBar.gradient") || - keys[i].equals("ScrollBar.gradient") || - keys[i].equals("ToggleButton.gradient") || - keys[i].equals("CheckBoxMenuItem.gradient") || - keys[i].equals("Slider.gradient") || - keys[i].equals("Button.gradient") || - keys[i].equals("CheckBox.gradient") || - keys[i].equals("RadioButtonMenuItem.gradient") || - keys[i].equals("Slider.focusGradient") || - keys[i].equals("RadioButton.gradient") || - keys[i].equals("InternalFrame.activeTitleGradient") - ) - { - //ArrayList always - //System.out.println(i + " GY>> " + UIManager.getDefaults().get(keys[i])); - List grad = (List) UIManager.getDefaults().get(keys[i]); -// for (int j = 0; j < grad.size(); j ++) -// { -// System.out.println(i + " >> " + grad.get(j).getClass()); -// } - - Gradient g = new Gradient(keys[i].toString(), ((Float)grad.get(0)), ((Float)grad.get(1)), - new Color ((javax.swing.plaf.ColorUIResource) grad.get(2)), - new Color ((javax.swing.plaf.ColorUIResource) grad.get(3)), - new Color ((javax.swing.plaf.ColorUIResource) grad.get(4))); - gradient_map.add(g); - } - - // - - } - else // Shitty test for unknown values - dont bother at all - { - System.out.println(i + " >> " + keys[i] + " : " + UIManager.getDefaults().get(keys[i])); - } - - } -// Looks scientific? Yeah, it's a formal test :) -// -// System.out.println("=============== ==============="); -// for (int i = 0; i < color_map.size(); i ++) -// { -// System.out.println(i + " : " + color_map.get(i)); -// } -// System.out.println("=============== ==============="); -// for (int i = 0; i < font_map.size(); i ++) -// { -// System.out.println(i + " : " + font_map.get(i)); -// } -// System.out.println("=============== ==============="); -// for (int i = 0; i < gradient_map.size(); i ++) -// { -// System.out.println(i + " : " + gradient_map.get(i)); -// } - - if (!new File (System.getProperty("user.home") + File.separator + ".idp_scheme").exists()) - { - new File (System.getProperty("user.home") + File.separator + ".idp_scheme").mkdir(); - } - -// File fileC = new File (); -// File fileF = new File (System.getProperty("user.home") + File.separator + ".idp_scheme/.ui_fonts"); -// File fileG = new File (System.getProperty("user.home") + File.separator + ".idp_scheme/.ui_gradients"); - - - try { - PrintWriter writer = new PrintWriter(System.getProperty("user.home") + File.separator + ".idp_scheme/.ui_colors", "UTF-8"); - for (int i = 0; i < color_map.size(); i ++) - { - writer.println(color_map.get(i)); - } - writer.close(); - - writer = new PrintWriter(System.getProperty("user.home") + File.separator + ".idp_scheme/.ui_fonts", "UTF-8"); - for (int i = 0; i < font_map.size(); i ++) - { - writer.println(font_map.get(i)); - } - writer.close(); - - writer = new PrintWriter(System.getProperty("user.home") + File.separator + ".idp_scheme/.ui_gradients", "UTF-8"); - for (int i = 0; i < gradient_map.size(); i ++) - { - System.out.println(gradient_map.get(i)); - writer.println(gradient_map.get(i)); - } - writer.close(); - - } catch (FileNotFoundException ex) { - Exceptions.printStackTrace(ex); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } - - - - - - - - } - - private static void load() - { - - ArrayList color_map = new ArrayList(); - ArrayList font_map = new ArrayList(); - ArrayList gradient_map = new ArrayList(); - - - - try { - if (!new File (System.getProperty("user.home") + File.separator + ".idp_scheme").exists()) - { - System.err.println("FUCK OFF!"); - } - else - { - List C = Files.readAllLines(Paths.get(System.getProperty("user.home") + File.separator + ".idp_scheme/.ui_colors"), Charset.forName("UTF-8")); - for (String s : C) - { - color_map.add(new Color (s)); - } - - List F = Files.readAllLines(Paths.get(System.getProperty("user.home") + File.separator + ".idp_scheme/.ui_fonts"), Charset.forName("UTF-8")); - for (String s : F) - { - font_map.add(new Font (s)); - } - - List G = Files.readAllLines(Paths.get(System.getProperty("user.home") + File.separator + ".idp_scheme/.ui_gradients"), Charset.forName("UTF-8")); - for (String s : G) - { - gradient_map.add(new Gradient (s)); - } - - - System.out.println("=============== ==============="); - for (int i = 0; i < color_map.size(); i ++) - { - System.out.println(i + " : " + color_map.get(i)); - UIManager.put(color_map.get(i).getName(), color_map.get(i).getObject()); - } - System.out.println("=============== ==============="); - for (int i = 0; i < font_map.size(); i ++) - { - System.out.println(i + " : " + font_map.get(i)); - UIManager.put(font_map.get(i).getName(), font_map.get(i).getObject()); - } - System.out.println("=============== ==============="); - for (int i = 0; i < gradient_map.size(); i ++) - { - System.out.println(i + " : " + gradient_map.get(i)); - } - - -// CheckBox.border CLASS: -//javax.swing.plaf.BorderUIResource$CompoundBorderUIResource -// -//VALUE: -//javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@60e359e2 - - Object borderGP = UIManager.get("Button.border"); - System.err.println("bgp = " + borderGP); - System.err.println("bgp2 = " + borderGP.getClass()); - System.err.println("bgp3 = " + borderGP.getClass().getSuperclass()); - - Border inner_border = new javax.swing.border.LineBorder(new java.awt.Color(48, 48, 48), 1); - Border outter_border = new javax.swing.border.LineBorder(new java.awt.Color(16, 16, 16), 2); - - javax.swing.border.AbstractBorder brd = new javax.swing.border.CompoundBorder(outter_border,inner_border); - - UIManager.put("Button.border", brd); - - Object [] keys = new Object[UIManager.getLookAndFeelDefaults().keySet().size()]; - // UIManager.put("Tree.textForeground", new javax.swing.plaf.ColorUIResource(0,255,0)); - // This is F*CKIN VOODOO MAGIC... aaaaaaaaa, I'm just as black cat in a night - - //System.setProperty("awt.useSystemAAFontSettings", "on"); - - System.setProperty("awt.useSystemAAFontSettings","lcd"); - System.setProperty("swing.aatext", "true"); - System.setProperty("nb.useSwingHtmlRendering", "true"); - - String nb_home = System.getProperty("netbeans.home"); - String nb_conf = nb_home.substring(0, nb_home.length() - "platform".length()) + "etc" + File.separator; - - File conf = new File (nb_conf); - Path path = FileSystems.getDefault().getPath(nb_conf, "netbeans.conf"); - List linesL = Files.readAllLines(path); - String [] lines = new String[linesL.size()]; - - int i = 0; - for (String str : linesL) - { - lines[i] = str; - i++; - } - - for (i =0; i < lines.length; i ++) - { - if (lines[i].contains("netbeans_default_options=")) - { - System.out.println("Fond default settings line!"); - if (!lines[i].contains("-J-Dawt.useSystemAAFontSettings")) - { - System.out.println("No rendering hints defined - fixing..."); - String [] parts = lines[i].split("\""); - String new_line = parts[0] + "\"" + parts[1] + " -J-Dswing.aatext=true -J-Dawt.useSystemAAFontSettings=lcd" + "\""; - lines[i] = new_line; - System.out.println(">>> " + lines[i]); - - writeFile1(nb_conf + "netbeans.conf", lines); - - } - else - { - System.out.println("Font redering hints already set - OK"); - } - } - } - - - -// Properties properties = System.getProperties(); -// for (Object o : properties.keySet()) -// { -// System.out.println( o + " : " + properties.getProperty((String) o)); -// } - // NodeRenderer nr = NodeRenderer.sharedInstance(); -// Field[] fields = nr.getClass().getFields(); -// for (int i = 0; i < fields.length; i ++) -// { -// System.out.println(">>> " + fields[i]); -// } - //public static NodeRenderer sharedInstance() - // - - -UIManager.put("TabbedPane.borderColor", java.awt.Color.RED); -UIManager.put("TabbedPane.darkShadow", ColorUIResource.RED); -UIManager.put("TabbedPane.light", ColorUIResource.RED); -UIManager.put("TabbedPane.highlight", ColorUIResource.RED); -UIManager.put("TabbedPane.focus", ColorUIResource.RED); -UIManager.put("TabbedPane.unselectedBackground", ColorUIResource.RED); -UIManager.put("TabbedPane.selectHighlight", ColorUIResource.RED); -UIManager.put("TabbedPane.tabAreaBackground", ColorUIResource.RED); -UIManager.put("TabbedPane.borderHightlightColor", ColorUIResource.RED); - -UIManager.put("Focus.color", ColorUIResource.RED); - - -UIManager.put("TabbedPane.contentBorderInsets", new Insets(0, 0, 0, 0)); - - -//"window" theme.getWindowBackground() -//"windowBorder" theme.getControl() -//"windowText" theme.getUserTextColor() -//"menu" theme.getMenuBackground() -//"menuText" theme.getMenuForeground() -//"text" theme.getWindowBackground() -//"textText" theme.getUserTextColor() -//"textHighlight" theme.getTextHighlightColor() -//"textHighlightText" theme.getHighlightedTextColor() -//"textInactiveText" theme.getInactiveSystemTextColor() -//"control" theme.getControl() -//"controlText" theme.getControlTextColor() -//"controlHighlight" theme.getControlHighlight() -//"controlLtHighlight" theme.getControlHighlight() -//"controlShadow" theme.getControlShadow() -//"controlDkShadow" theme.getControlDarkShadow() -//"scrollbar" theme.getControl() -//"info" theme.getPrimaryControl() -//"infoText" theme.getPrimaryControlInfo() -//The value theme corresponds to the current MetalTheme. - -// UIManager.put("desktop", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("activeCaption", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("activeCaptionText", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("activeCaptionBorder", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("inactiveCaption", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("inactiveCaptionText", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("inactiveCaptionBorder", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("window", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("windowBorder", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("windowText", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("menu", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("menuText", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("text", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("textText", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("textHighlight", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("textHighlightText", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("textInactiveText", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("control", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("controlText", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("controlHighlight", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("controlLtHighlight", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("controlShadow", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("controlDkShadow", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("scrollbar", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("info", new ColorUIResource(java.awt.Color.red)); -// UIManager.put("infoText", new ColorUIResource(java.awt.Color.red)); - - - System.out.println("==================================="); - System.out.println("==================================="); - System.out.println("==================================="); - - for (int k = 0; k < Keys.keys.length; k ++) - { - - Object o = UIManager.get(Keys.keys[k]); - if (o != null) - { -// if (o.getClass() == javax.swing.plaf.ColorUIResource.class) -// { -// -// } -// else -// { - System.out.println(Keys.keys[k] + " : " + o.getClass() + " >> " + o ); - //} - } - else - { - System.err.println(Keys.keys[k] + " >> NULL"); - } - } - - System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^"); - - repaintUI(); - - } - - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } - - } - - public static void writeFile1(String path, String [] data) throws IOException { - - File fout = new File(path); - FileOutputStream fos = new FileOutputStream(fout); - - BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos)); - - for (int i = 0; i < data.length; i ++) { - bw.write(data[i]); - bw.newLine(); - } - - bw.close(); -} - - private static void repaintUI() -{ -SwingUtilities.updateComponentTreeUI(WindowManager.getDefault().getMainWindow()); -WindowManager.getDefault().getMainWindow().pack(); -WindowManager.getDefault().getMainWindow().repaint(); -} - -} diff --git a/src/org/idp/laf/gui/Bundle.properties b/src/org/idp/laf/gui/Bundle.properties new file mode 100644 index 0000000..03671be --- /dev/null +++ b/src/org/idp/laf/gui/Bundle.properties @@ -0,0 +1,5 @@ +# To change this license header, choose License Headers in Project Properties. +# To change this template file, choose Tools | Templates +# and open the template in the editor. + +Editor.title=[idp!] Color Editor diff --git a/src/org/idp/laf/gui/ColorEditorActionListener.java b/src/org/idp/laf/gui/ColorEditorActionListener.java new file mode 100644 index 0000000..c4eeb85 --- /dev/null +++ b/src/org/idp/laf/gui/ColorEditorActionListener.java @@ -0,0 +1,44 @@ +/* Copyright (C) Edward M. Kagan - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Edward M. Kagan , 2015 + */ +package org.idp.laf.gui; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.NbBundle.Messages; +import org.openide.windows.WindowManager; + +/** + * @author Edward M. Kagan + */ + +@ActionID( + category = "File", + id = "org.idp.laf.ColorEditorActionListener" +) +@ActionRegistration( + iconBase = "org/idp/laf/gui/wh.png", + displayName = "#CTL_ColorEditorActionListener" +) +@ActionReference(path = "Toolbars/File", position = -100) +@Messages("CTL_ColorEditorActionListener=[idp!] Color Editor") +public final class ColorEditorActionListener implements ActionListener { + + @Override + public void actionPerformed(ActionEvent e) { + ColorEditorTopComponent editor = (ColorEditorTopComponent) WindowManager.getDefault().findTopComponent("ColorEditorTopComponent"); + if (editor.isOpened()) + { + editor.close(); + } + else + { + editor.open(); + } + } +} diff --git a/src/org/idp/laf/gui/ColorEditorTopComponent.form b/src/org/idp/laf/gui/ColorEditorTopComponent.form new file mode 100644 index 0000000..5f3eab1 --- /dev/null +++ b/src/org/idp/laf/gui/ColorEditorTopComponent.form @@ -0,0 +1,28 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/org/idp/laf/gui/ColorEditorTopComponent.java b/src/org/idp/laf/gui/ColorEditorTopComponent.java new file mode 100644 index 0000000..4ad1b49 --- /dev/null +++ b/src/org/idp/laf/gui/ColorEditorTopComponent.java @@ -0,0 +1,97 @@ +/* Copyright (C) Edward M. Kagan - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Edward M. Kagan , 2015 + */ +package org.idp.laf.gui; + +import org.netbeans.api.settings.ConvertAsProperties; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.windows.TopComponent; +import org.openide.util.NbBundle.Messages; + +/** + * @author Edward M. Kagan + */ + +/** + * Top component which displays something. + */ +@ConvertAsProperties( + dtd = "-//org.idp.laf.gui//ColorEditor//EN", + autostore = false +) +@TopComponent.Description( + preferredID = "ColorEditorTopComponent", + iconBase = "org/idp/laf/gui/wh.png", + persistenceType = TopComponent.PERSISTENCE_ALWAYS +) +@TopComponent.Registration(mode = "editor", openAtStartup = false) +@ActionID(category = "Window", id = "org.idp.laf.gui.ColorEditorTopComponent") +@ActionReference(path = "Menu/Window" /*, position = 333 */) +@TopComponent.OpenActionRegistration( + displayName = "#CTL_ColorEditorAction", + preferredID = "ColorEditorTopComponent" +) +@Messages({ + "CTL_ColorEditorAction=ColorEditor", + "CTL_ColorEditorTopComponent=ColorEditor Window", + "HINT_ColorEditorTopComponent=This is a ColorEditor window" +}) +public final class ColorEditorTopComponent extends TopComponent { + + public ColorEditorTopComponent() { + initComponents(); + setName(Bundle.CTL_ColorEditorTopComponent()); + setToolTipText(Bundle.HINT_ColorEditorTopComponent()); + putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE); + putClientProperty(TopComponent.PROP_DRAGGING_DISABLED, Boolean.TRUE); + putClientProperty(TopComponent.PROP_MAXIMIZATION_DISABLED, Boolean.TRUE); + putClientProperty(TopComponent.PROP_UNDOCKING_DISABLED, Boolean.TRUE); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 400, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 300, Short.MAX_VALUE) + ); + }// //GEN-END:initComponents + + // Variables declaration - do not modify//GEN-BEGIN:variables + // End of variables declaration//GEN-END:variables + @Override + public void componentOpened() { + // TODO add custom code on component opening + } + + @Override + public void componentClosed() { + // TODO add custom code on component closing + } + + void writeProperties(java.util.Properties p) { + // better to version settings since initial version as advocated at + // http://wiki.apidesign.org/wiki/PropertyFiles + p.setProperty("version", "1.0"); + // TODO store your settings + } + + void readProperties(java.util.Properties p) { + String version = p.getProperty("version"); + // TODO read your settings according to their version + } +} diff --git a/src/org/idp/laf/gui/wh.png b/src/org/idp/laf/gui/wh.png new file mode 100644 index 0000000000000000000000000000000000000000..4dd873b86b84201a47d15d34d4baf3dab0b7a255 GIT binary patch literal 3412 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 - */ -public class Font implements Serializable{ - - public enum FontClass { - FS (javax.swing.plaf.FontUIResource.class), - FA (java.awt.Font.class); - - private final Class cls; - - FontClass(Class cls) { - this.cls = cls; - } - - public Class getClazz() - { - return this.cls; - } - } - - String family; - String name; - int style; - int size; - String pname; - FontClass cls; - - - public Font(String pname, FontClass cls, String family, String name, int style, int size) { - this.family = family; - this.name = name; - this.size = size; - this.style = style; - this.pname = pname; - this.cls = cls; - } - - @Override - public String toString() { - return "F[" + this.pname + ":" + this.cls + ":" + family + "," + name + "," + size + "," + style + "]"; - } - - public Font (String str) - { - if (str.startsWith("F")) - { - String real = str.substring(2, str.length() - 1); - String [] vals = real.split(":"); - - this.pname = vals[0]; - if (vals[1].equals("FS")) - { - this.cls = FS; - } - else if (vals[1].equals("FA")) - { - this.cls = FA; - } - - vals = vals[2].split(","); - - - this.family = vals[0]; - this.name = vals[1]; - this.size = Integer.parseInt(vals[2]); - this.style = Integer.parseInt(vals[3]); - - - } - else - { - System.err.println("FUCK OFF - poor format"); - } - } - - public Object getObject () - { - java.awt.Font ff = new java.awt.Font(name, style, size); - - switch (this.cls) - { - case FS : { - javax.swing.plaf.FontUIResource res = new FontUIResource(ff); - return res; - } - case FA : { - return ff; - } - } - return null; - } - - public Object getName() { - return this.pname; - } - -} diff --git a/src/org/idp/laf/settings/Gradient.java b/src/org/idp/laf/settings/Gradient.java deleted file mode 100644 index 112d6a0..0000000 --- a/src/org/idp/laf/settings/Gradient.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.idp.laf.settings; - -import java.io.Serializable; -import static org.idp.laf.settings.Font.FontClass.FA; -import static org.idp.laf.settings.Font.FontClass.FS; - -/** - * - * @author Edward M. Kagan - */ -public class Gradient implements Serializable{ - - String pname; - float I; - float J; - Color A; - Color B; - Color C; - - public Gradient(String pname, float I, float J, Color A, Color B, Color C) { - this.pname = pname; - this.I = I; - this.J = J; - this.A = A; - this.B = B; - this.C = C; - } - - @Override - public String toString() { - return "G[" + this.pname + ";" + I + ";" + J + ";" + A.toString() + ";" + B.toString() + ";" + C.toString() + "]"; - } - - public Gradient (String str) - { - if (str.startsWith("G")) - { - String real = str.substring(2, str.length() - 1); - String [] vals = real.split(";"); - - this.pname = vals[0]; - System.out.println(">>" + vals[1]); - this.I = Float.parseFloat(vals[1]); - this.J = Float.parseFloat(vals[2]); - this.A = new Color(vals[3]); - this.B = new Color(vals[4]); - this.C = new Color(vals[5]); - } - else - { - System.err.println("FUCK OFF - poor format"); - } - - - } - -}