/* * FontAndColorsDialog.java * * Created on August 6, 2007, 10:49 AM */ package org.autoplot; import org.das2.graph.DasCanvas; import java.awt.Color; import java.awt.Font; import java.util.Arrays; import java.util.List; import javax.swing.DefaultComboBoxModel; import javax.swing.JColorChooser; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.das2.graph.GraphUtil; import org.autoplot.dom.DomUtil; import org.autoplot.dom.Plot; import org.autoplot.dom.PlotElement; /** * Dialog for picking application font and colors. * @author jbf */ public final class FontAndColorsDialog extends javax.swing.JDialog { ApplicationModel app; Color[] fores, backs; private final static int ICON_SIZE=16; public FontAndColorsDialog( java.awt.Frame parent, boolean modal, ApplicationModel app) { super(parent, modal); setTitle("Font and Colors"); initComponents(); this.app = app; DasCanvas c = app.getCanvas(); fores = new Color[]{Color.BLACK, Color.WHITE, Color.WHITE}; backs = new Color[]{Color.WHITE, Color.BLACK, Color.BLUE.darker()}; String[] names = {"black on white", "white on black", "white on blue", "custom"}; final Font f = app.getCanvas().getFont(); fontLabel.setText(DomUtil.encodeFont(f)); Runnable run= () -> { Font f1 = Font.decode(fontLabel.getText()); canEmbedFont(f1); }; new Thread( run, "canEmbedFont" ).start(); //guiFontLabel.setText( parent.getFont().toString()); int index = 3; // custom for (int i = 0; i < fores.length; i++) { if (fores[i].equals(c.getForeground()) && backs[i].equals(c.getBackground())) { index = i; } } jComboBox1.setModel(new DefaultComboBoxModel(names)); if ( index!=-1 ) jComboBox1.setSelectedIndex(index); foregroundColorButton.setIcon( GraphUtil.colorIcon( c.getForeground(), ICON_SIZE, ICON_SIZE ) ); backgroundColorButton.setIcon( GraphUtil.colorIcon( c.getBackground(), ICON_SIZE, ICON_SIZE ) ); setLocationRelativeTo(parent); } /** 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() { jLabel1 = new javax.swing.JLabel(); jComboBox1 = new javax.swing.JComboBox(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); foregroundColorButton = new javax.swing.JButton(); backgroundColorButton = new javax.swing.JButton(); jLabel4 = new javax.swing.JLabel(); pickFontButton = new javax.swing.JButton(); dismissButton = new javax.swing.JButton(); fontLabel = new javax.swing.JLabel(); canEmbedFontTF = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); jLabel1.setText("Fore/Back Colors:"); jComboBox1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jComboBox1ActionPerformed(evt); } }); jLabel2.setText("Foreground:"); jLabel3.setText("Background:"); foregroundColorButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { foregroundColorButtonActionPerformed(evt); } }); backgroundColorButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { backgroundColorButtonActionPerformed(evt); } }); jLabel4.setText("Font:"); pickFontButton.setText("Pick"); pickFontButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { pickFontButtonActionPerformed(evt); } }); dismissButton.setText("OK"); dismissButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { dismissButtonActionPerformed(evt); } }); fontLabel.setText("jLabel5"); canEmbedFontTF.setFont(canEmbedFontTF.getFont().deriveFont(canEmbedFontTF.getFont().getSize()-1f)); canEmbedFontTF.setText(" "); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(12, 12, 12) .add(canEmbedFontTF, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .add(layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(10, 10, 10) .add(jLabel2) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(foregroundColorButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 20, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(jLabel1)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(jLabel3) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(backgroundColorButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 18, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 173, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(0, 0, Short.MAX_VALUE)) .add(layout.createSequentialGroup() .add(jLabel4) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(fontLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 232, Short.MAX_VALUE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(pickFontButton)) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .add(0, 0, Short.MAX_VALUE) .add(dismissButton))) .addContainerGap()) ); layout.linkSize(new java.awt.Component[] {backgroundColorButton, foregroundColorButton}, org.jdesktop.layout.GroupLayout.HORIZONTAL); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabel1) .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabel2) .add(jLabel3) .add(backgroundColorButton) .add(foregroundColorButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 17, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabel4) .add(pickFontButton) .add(fontLabel)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(canEmbedFontTF, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 20, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 103, Short.MAX_VALUE) .add(dismissButton) .addContainerGap()) ); layout.linkSize(new java.awt.Component[] {backgroundColorButton, foregroundColorButton}, org.jdesktop.layout.GroupLayout.VERTICAL); pack(); }// //GEN-END:initComponents private void dismissButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dismissButtonActionPerformed org.das2.util.LoggerManager.logGuiEvent(evt); this.dispose(); }//GEN-LAST:event_dismissButtonActionPerformed private void pickFontButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pickFontButtonActionPerformed org.das2.util.LoggerManager.logGuiEvent(evt); Font f= GuiSupport.pickFont( (JFrame) SwingUtilities.getWindowAncestor(this), app ); if ( f!=null ) { fontLabel.setText( DomUtil.encodeFont(f)); canEmbedFont(f); } }//GEN-LAST:event_pickFontButtonActionPerformed private void backgroundColorButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backgroundColorButtonActionPerformed org.das2.util.LoggerManager.logGuiEvent(evt); Color c = JColorChooser.showDialog(this, "background color", backgroundColorButton.getBackground()); if ( c!=null ) { jComboBox1.setSelectedIndex(fores.length); backgroundColorButton.setIcon( GraphUtil.colorIcon( c, ICON_SIZE, ICON_SIZE ) ); app.getCanvas().setBackground(c); app.getDom().getOptions().setBackground(c); } }//GEN-LAST:event_backgroundColorButtonActionPerformed private void foregroundColorButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_foregroundColorButtonActionPerformed org.das2.util.LoggerManager.logGuiEvent(evt); Color c = JColorChooser.showDialog(this, "foreground color", foregroundColorButton.getBackground()); if ( c!=null ) { jComboBox1.setSelectedIndex(fores.length); List pe= Arrays.asList( app.dom.getPlotElements() ); for ( PlotElement p: pe ) { if ( p.getStyle().getColor().equals(app.getCanvas().getForeground())) { p.getStyle().setColor(c); } } foregroundColorButton.setIcon( GraphUtil.colorIcon( c, ICON_SIZE, ICON_SIZE ) ); app.getCanvas().setForeground(c); app.getDom().getOptions().setForeground(c); app.getDom().getOptions().setColor(c); } }//GEN-LAST:event_foregroundColorButtonActionPerformed private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBox1ActionPerformed org.das2.util.LoggerManager.logGuiEvent(evt); int i = jComboBox1.getSelectedIndex(); if (i < fores.length) { foregroundColorButton.setIcon( GraphUtil.colorIcon( fores[i], ICON_SIZE, ICON_SIZE ) ); backgroundColorButton.setIcon( GraphUtil.colorIcon( backs[i], ICON_SIZE, ICON_SIZE ) ); List pe= Arrays.asList( app.dom.getPlotElements() ); for ( PlotElement p: pe ) { if (p.getStyle().getColor().equals(app.getCanvas().getForeground())) { p.getStyle().setColor(fores[i]); } } for ( Plot p: app.dom.getPlots() ) { if (p.getXaxis().getForeground().equals(app.getCanvas().getForeground())) { p.getXaxis().setForeground(fores[i]); } if (p.getYaxis().getForeground().equals(app.getCanvas().getForeground())) { p.getYaxis().setForeground(fores[i]); } if (p.getZaxis().getForeground().equals(app.getCanvas().getForeground())) { p.getZaxis().setForeground(fores[i]); } } app.getDom().getOptions().setForeground(fores[i]); app.getDom().getOptions().setColor(fores[i]); app.getDom().getOptions().setBackground(backs[i]); } }//GEN-LAST:event_jComboBox1ActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton backgroundColorButton; private javax.swing.JLabel canEmbedFontTF; private javax.swing.JButton dismissButton; private javax.swing.JLabel fontLabel; private javax.swing.JButton foregroundColorButton; private javax.swing.JComboBox jComboBox1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JButton pickFontButton; // End of variables declaration//GEN-END:variables private void canEmbedFont(Font f) { String s= org.das2.util.awt.PdfGraphicsOutput.ttfFromName(f); if ( s!=null ) { canEmbedFontTF.setText("PDF okay"); canEmbedFontTF.setToolTipText("font should work in PDF files"); } else { canEmbedFontTF.setText("font can not be embedded in PDF"); canEmbedFontTF.setToolTipText("TTF file not found or licensing restricts use"); } } }