/* * @(#)CMYKChooser.java * * Copyright (c) 2004-2010 Werner Randelshofer, Immensee, Switzerland. * All rights reserved. * * This software is the confidential and proprietary information of * Werner Randelshofer. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entecyan into * with Werner Randelshofer. */ package ch.randelshofer.quaqua.colorchooser; import ch.randelshofer.quaqua.border.VisualMarginBorder; import ch.randelshofer.quaqua.*; import java.awt.*; import java.io.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; import javax.swing.colorchooser.*; import javax.swing.plaf.*; /** * A color chooser with CMYK color sliders. * * @author Werner Randelshofer * @version $Id: CMYKChooser.java 414 2011-07-29 20:55:05Z wrandelshofer $ */ public class CMYKChooser extends AbstractColorChooserPanel implements UIResource { private ColorSliderModel ccModel; private int updateRecursion = 0; /** Creates new form. */ public CMYKChooser() { } protected void buildChooser() { initComponents(); // Font font = UIManager.getFont("ColorChooser.font"); cyanLabel.setFont(font); cyanSlider.setFont(font); cyanField.setFont(font); cyanFieldLabel.setFont(font); magentaLabel.setFont(font); magentaSlider.setFont(font); magentaField.setFont(font); magentaFieldLabel.setFont(font); yellowLabel.setFont(font); yellowSlider.setFont(font); yellowField.setFont(font); yellowFieldLabel.setFont(font); blackLabel.setFont(font); blackSlider.setFont(font); blackField.setFont(font); blackFieldLabel.setFont(font); // int textSliderGap = UIManager.getInt("ColorChooser.textSliderGap"); if (textSliderGap != 0) { Border fieldBorder = new EmptyBorder(0, textSliderGap, 0, 0); cyanFieldPanel.setBorder(fieldBorder); magentaFieldPanel.setBorder(fieldBorder); yellowFieldPanel.setBorder(fieldBorder); blackFieldPanel.setBorder(fieldBorder); } // The NominalCMYKColorSliderModel works fine: // ccModel = new NominalCMYKColorSliderModel(); /* Unfortunately the following does not work due to Java bug #4760025 as * described at http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4760025*/ InputStream in = null; try { //in = new FileInputStream("/System/Library/ColorSync/Profiles/Generic CMYK Profile.icc"); in = getClass().getResourceAsStream("Generic CMYK Profile.icc"); ccModel = new ICC_CMYKColorSliderModel(in); } catch (IOException e) { System.err.println("Warning: " + getClass() + " couldn't load \"Generic CMYK Profile.icc\"."); //e.printStackTrace(); ccModel = new NominalCMYKColorSliderModel(); } finally { try { if (in != null) { in.close(); } } catch (IOException e) { // suppress } } ccModel.configureColorSlider(0, cyanSlider); ccModel.configureColorSlider(1, magentaSlider); ccModel.configureColorSlider(2, yellowSlider); ccModel.configureColorSlider(3, blackSlider); cyanField.setText(Integer.toString(cyanSlider.getValue())); magentaField.setText(Integer.toString(magentaSlider.getValue())); yellowField.setText(Integer.toString(yellowSlider.getValue())); blackField.setText(Integer.toString(blackSlider.getValue())); Insets borderMargin = (Insets) UIManager.getInsets("Component.visualMargin").clone(); borderMargin.left = 3 - borderMargin.left; cyanFieldLabel.putClientProperty("Quaqua.Component.visualMargin", borderMargin); magentaFieldLabel.putClientProperty("Quaqua.Component.visualMargin", borderMargin); yellowFieldLabel.putClientProperty("Quaqua.Component.visualMargin", borderMargin); blackFieldLabel.putClientProperty("Quaqua.Component.visualMargin", borderMargin); new ColorSliderTextFieldHandler(cyanField, ccModel, 0); new ColorSliderTextFieldHandler(magentaField, ccModel, 1); new ColorSliderTextFieldHandler(yellowField, ccModel, 2); new ColorSliderTextFieldHandler(blackField, ccModel, 3); ccModel.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent evt) { if (updateRecursion++ == 0) { setColorToModel(ccModel.getColor()); } updateRecursion--; } }); cyanField.setMinimumSize(cyanField.getPreferredSize()); magentaField.setMinimumSize(magentaField.getPreferredSize()); yellowField.setMinimumSize(yellowField.getPreferredSize()); blackField.setMinimumSize(blackField.getPreferredSize()); VisualMarginBorder bm = new VisualMarginBorder(false, false, true, false); cyanLabel.setBorder(bm); magentaLabel.setBorder(bm); yellowLabel.setBorder(bm); blackLabel.setBorder(bm); } public String getDisplayName() { return UIManager.getString("ColorChooser.cmykSliders"); } public Icon getLargeDisplayIcon() { return UIManager.getIcon("ColorChooser.colorSlidersIcon"); } public Icon getSmallDisplayIcon() { return getLargeDisplayIcon(); } public void updateChooser() { if (updateRecursion++ == 0) { ccModel.setColor(getColorFromModel()); } updateRecursion--; } public void setColorToModel(Color color) { getColorSelectionModel().setSelectedColor(color); } /** 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. */ // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; cyanLabel = new javax.swing.JLabel(); cyanSlider = new javax.swing.JSlider(); cyanFieldPanel = new javax.swing.JPanel(); cyanField = new javax.swing.JTextField(); cyanFieldLabel = new javax.swing.JLabel(); magentaLabel = new javax.swing.JLabel(); magentaSlider = new javax.swing.JSlider(); magentaFieldPanel = new javax.swing.JPanel(); magentaField = new javax.swing.JTextField(); magentaFieldLabel = new javax.swing.JLabel(); yellowLabel = new javax.swing.JLabel(); yellowSlider = new javax.swing.JSlider(); yellowFieldPanel = new javax.swing.JPanel(); yellowField = new javax.swing.JTextField(); yellowFieldLabel = new javax.swing.JLabel(); blackLabel = new javax.swing.JLabel(); blackSlider = new javax.swing.JSlider(); blackFieldPanel = new javax.swing.JPanel(); blackField = new javax.swing.JTextField(); blackFieldLabel = new javax.swing.JLabel(); springPanel = new javax.swing.JPanel(); setLayout(new java.awt.GridBagLayout()); cyanLabel.setText(UIManager.getString("ColorChooser.cmykCyanText")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST; gridBagConstraints.insets = new java.awt.Insets(1, 0, 0, 0); add(cyanLabel, gridBagConstraints); cyanSlider.setMajorTickSpacing(100); cyanSlider.setMinorTickSpacing(50); cyanSlider.setPaintTicks(true); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; add(cyanSlider, gridBagConstraints); cyanFieldPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0)); cyanField.setColumns(3); cyanField.setHorizontalAlignment(javax.swing.JTextField.TRAILING); cyanField.setText("0"); cyanField.addFocusListener(new java.awt.event.FocusAdapter() { public void focusGained(java.awt.event.FocusEvent evt) { fieldFocusGained(evt); } public void focusLost(java.awt.event.FocusEvent evt) { cyanFieldFocusLost(evt); } }); cyanFieldPanel.add(cyanField); cyanFieldLabel.setText("%"); cyanFieldPanel.add(cyanFieldLabel); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.gridheight = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH; add(cyanFieldPanel, gridBagConstraints); magentaLabel.setText(UIManager.getString("ColorChooser.cmykMagentaText")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST; gridBagConstraints.insets = new java.awt.Insets(1, 0, 0, 0); add(magentaLabel, gridBagConstraints); magentaSlider.setMajorTickSpacing(100); magentaSlider.setMinorTickSpacing(50); magentaSlider.setPaintTicks(true); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; add(magentaSlider, gridBagConstraints); magentaFieldPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0)); magentaField.setColumns(3); magentaField.setHorizontalAlignment(javax.swing.JTextField.TRAILING); magentaField.setText("0"); magentaField.addFocusListener(new java.awt.event.FocusAdapter() { public void focusGained(java.awt.event.FocusEvent evt) { fieldFocusGained(evt); } public void focusLost(java.awt.event.FocusEvent evt) { magentaFieldFocusLost(evt); } }); magentaFieldPanel.add(magentaField); magentaFieldLabel.setText("%"); magentaFieldPanel.add(magentaFieldLabel); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.gridheight = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH; add(magentaFieldPanel, gridBagConstraints); yellowLabel.setText(UIManager.getString("ColorChooser.cmykYellowText")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST; gridBagConstraints.insets = new java.awt.Insets(1, 0, 0, 0); add(yellowLabel, gridBagConstraints); yellowSlider.setMajorTickSpacing(100); yellowSlider.setMinorTickSpacing(50); yellowSlider.setPaintTicks(true); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; add(yellowSlider, gridBagConstraints); yellowFieldPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0)); yellowField.setColumns(3); yellowField.setHorizontalAlignment(javax.swing.JTextField.TRAILING); yellowField.setText("0"); yellowField.addFocusListener(new java.awt.event.FocusAdapter() { public void focusGained(java.awt.event.FocusEvent evt) { fieldFocusGained(evt); } public void focusLost(java.awt.event.FocusEvent evt) { yellowFieldFocusLost(evt); } }); yellowFieldPanel.add(yellowField); yellowFieldLabel.setText("%"); yellowFieldPanel.add(yellowFieldLabel); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 4; gridBagConstraints.gridheight = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH; add(yellowFieldPanel, gridBagConstraints); blackLabel.setText(UIManager.getString("ColorChooser.cmykBlackText")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST; gridBagConstraints.insets = new java.awt.Insets(1, 0, 0, 0); add(blackLabel, gridBagConstraints); blackSlider.setMajorTickSpacing(100); blackSlider.setMinorTickSpacing(50); blackSlider.setPaintTicks(true); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; add(blackSlider, gridBagConstraints); blackFieldPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0)); blackField.setColumns(3); blackField.setHorizontalAlignment(javax.swing.JTextField.TRAILING); blackField.setText("0"); blackField.addFocusListener(new java.awt.event.FocusAdapter() { public void focusGained(java.awt.event.FocusEvent evt) { fieldFocusGained(evt); } public void focusLost(java.awt.event.FocusEvent evt) { blackFieldFocusLost(evt); } }); blackFieldPanel.add(blackField); blackFieldLabel.setText("%"); blackFieldPanel.add(blackFieldLabel); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 6; gridBagConstraints.gridheight = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH; add(blackFieldPanel, gridBagConstraints); springPanel.setLayout(new java.awt.BorderLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 100; gridBagConstraints.weighty = 1.0; add(springPanel, gridBagConstraints); }// </editor-fold>//GEN-END:initComponents private void fieldFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_fieldFocusGained ((JTextField) evt.getSource()).selectAll(); }//GEN-LAST:event_fieldFocusGained private void blackFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_blackFieldFocusLost blackField.setText(Integer.toString(ccModel.getBoundedRangeModel(3).getValue())); }//GEN-LAST:event_blackFieldFocusLost private void yellowFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_yellowFieldFocusLost yellowField.setText(Integer.toString(ccModel.getBoundedRangeModel(2).getValue())); }//GEN-LAST:event_yellowFieldFocusLost private void magentaFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_magentaFieldFocusLost magentaField.setText(Integer.toString(ccModel.getBoundedRangeModel(1).getValue())); }//GEN-LAST:event_magentaFieldFocusLost private void cyanFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_cyanFieldFocusLost cyanField.setText(Integer.toString(ccModel.getBoundedRangeModel(0).getValue())); }//GEN-LAST:event_cyanFieldFocusLost // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTextField blackField; private javax.swing.JLabel blackFieldLabel; private javax.swing.JPanel blackFieldPanel; private javax.swing.JLabel blackLabel; private javax.swing.JSlider blackSlider; private javax.swing.JTextField cyanField; private javax.swing.JLabel cyanFieldLabel; private javax.swing.JPanel cyanFieldPanel; private javax.swing.JLabel cyanLabel; private javax.swing.JSlider cyanSlider; private javax.swing.JTextField magentaField; private javax.swing.JLabel magentaFieldLabel; private javax.swing.JPanel magentaFieldPanel; private javax.swing.JLabel magentaLabel; private javax.swing.JSlider magentaSlider; private javax.swing.JPanel springPanel; private javax.swing.JTextField yellowField; private javax.swing.JLabel yellowFieldLabel; private javax.swing.JPanel yellowFieldPanel; private javax.swing.JLabel yellowLabel; private javax.swing.JSlider yellowSlider; // End of variables declaration//GEN-END:variables }