001    /* steelme theme manager for Java
002     * Copyright (C) 2000 - 2004 T.J. Willis
003     * 
004     * This program is free software; you can redistribute it and/or
005     * modify it under the terms of the GNU General Public License
006     * as published by the Free Software Foundation; either version 2
007     * of the License, or (at your option) any later version.
008     *      
009     * This program is distributed in the hope that it will be useful,
010     * but WITHOUT ANY WARRANTY; without even the implied warranty of
011     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012     * GNU General Public License for more details.
013     *          
014     * You should have received a copy of the GNU General Public License
015     * along with this program; if not, write to the Free Software
016     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
017     *  
018     * $Header: /cvsroot/steelme/steelme/src/net/sourceforge/steelme/ThemeEditor.java,v 1.4 2004/05/27 23:11:09 tj_willis Exp $
019     */
020    package net.sourceforge.steelme;
021    
022    import java.awt.*;
023    import javax.swing.*;
024    import javax.swing.plaf.metal.*;
025    import javax.swing.plaf.*;
026    import org.apache.log4j.*;
027    
028    /**
029     * Describe class <code>ThemeEditor</code> here.
030     *
031     * @author <a href="mailto:tj_willis@users.sourceforge.net">T.J. Willis</a>
032     * @version 1.0
033     * @has 1 Has - net.sourceforge.steelme.SteelmeTheme
034     * @has 1 Has - net.sourceforge.steelme.SteelmeThemeManager
035     * @has 1..n Has - net.sourceforge.steelme.ThemeResistantJButton
036     * @has 1 Has - net.sourceforge.steelme.FontChooserPanel
037     * @has 1 Has - net.sourceforge.steelme.ThemeFileFilter
038    
039    
040     */
041    public class ThemeEditor 
042        extends javax.swing.JFrame
043        implements ThemeChangedListener 
044    {
045        Category cat = Category.getInstance(ThemeEditor.class.getName());
046    
047        // FIXED: minimize access
048        private Color cp1;
049        private Color cp2;
050        private Color cp3;
051        private Color cs1;
052        private Color cs2;
053        private Color cs3;
054        private Font font;
055        private Color ct1;
056        private Color ct2;
057        private Color cw,cb;
058        private SteelmeTheme def;
059        private JRootPane target;
060    
061        /** Creates new ThemeEditor */
062        public ThemeEditor() {
063                super("steelme Theme Editor");
064                init();
065        }
066    
067        public ThemeEditor(JComponent target) {
068          this();
069          this.target = target.getRootPane();
070        }
071    
072    
073        private final void init(){
074            def = SteelmeThemeManager.getCurrentTheme();
075    //         if(def==null) {
076    //             MetalTheme m = MetalLookAndFeel.getCurrentTheme();
077    //             def = new SteelmeTheme(m);
078    //         }
079            if(def==null) {
080                def = new SteelmeTheme();
081            }
082            SteelmeThemeManager.addListener(this);
083            initComponents();
084            if(def!=null) {
085                setColors(def);
086                setButtons(def);
087            }
088        }
089    
090        /**
091         * Describe <code>setTheme</code> method here.
092         *
093         * @param p a <code>SteelmeTheme</code> value
094         */
095        public void setTheme(SteelmeTheme p) {
096            //PavlovMetalThemeManager.setCurrentTheme(def);
097            setColors(p);
098            setButtons(p);
099        }
100    
101        /**
102         * Describe <code>setButtons</code> method here.
103         *
104         * @param p a <code>SteelmeTheme</code> value
105         */
106        protected void setButtons(SteelmeTheme p) {
107            p1.setMyBackground(cp1);
108            p2.setMyBackground(cp2);
109            p3.setMyBackground(cp3);
110            s1.setMyBackground(cs1);
111            s2.setMyBackground(cs2);
112            s3.setMyBackground(cs3);
113            t1.setMyBackground(ct1);
114            t2.setMyBackground(ct2);
115            w.setMyBackground(cw);
116            b.setMyBackground(cb);
117            fontChooser.setThemeFont(font);
118        }
119        /**
120         * Describe <code>setColors</code> method here.
121         *
122         * @param p a <code>SteelmeTheme</code> value
123         */
124        protected void setColors(SteelmeTheme p) {
125            cp1 = (Color)p.getP1();
126            cp2 = (Color)p.getP2();
127            cp3 = (Color)p.getP3();
128            cs1 = (Color)p.getS1();
129            cs2 = (Color)p.getS2();
130            cs3 = (Color)p.getS3();
131            font = (Font)p.getUserTextFont();
132            ct1 = (Color)p.getT1();
133            ct2 = (Color)p.getT2();
134            cw = (Color)p.getW();
135            cb = (Color)p.getB();
136        }
137    
138    
139    
140        private void initComponents() {
141            jLabel1 = new JLabel();
142            jPanel1 = new JPanel();
143            jLabel6 = new JLabel();
144            p1 = new ThemeResistantJButton();
145            jLabel7 = new JLabel();
146            s1 = new ThemeResistantJButton();
147            jLabel9 = new JLabel();
148            p2 = new ThemeResistantJButton();
149            jLabel8 = new JLabel();
150            s2 = new ThemeResistantJButton();
151            jLabel10 = new JLabel();
152            p3 = new ThemeResistantJButton();
153            jLabel11 = new JLabel();
154            s3 = new ThemeResistantJButton();
155            jLabel12 = new JLabel();
156            t1 = new ThemeResistantJButton();
157            jLabel13 = new JLabel();
158            t2 = new ThemeResistantJButton();
159    
160            jLabel14 = new JLabel();
161            w = new ThemeResistantJButton();
162            jLabel15 = new JLabel();
163            b = new ThemeResistantJButton();
164    
165            jLabel18 = new JLabel();
166            jTextField1 = new JTextField();
167            jLabel19 = new JLabel();
168            //jButton13 = new JButton();
169            fontChooser = new FontChooserPanel(font);
170            jPanel3 = new JPanel();
171            save = new JButton();
172            apply = new JButton();
173            done = new JButton();
174    
175            getContentPane().setLayout(new java.awt.GridBagLayout());
176            java.awt.GridBagConstraints gridBagConstraints1;
177    
178            jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
179            jLabel1.setText("");
180            gridBagConstraints1 = new java.awt.GridBagConstraints();
181            gridBagConstraints1.gridwidth = 4;
182            gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
183            getContentPane().add(jLabel1, gridBagConstraints1);
184    
185            jPanel1.setLayout(new java.awt.GridLayout(5, 4));
186    
187            jLabel6.setText("Active Window Border:");
188            jPanel1.add(jLabel6);
189    
190            p1.setText("Choose...");
191            p1.addActionListener(new java.awt.event.ActionListener() {
192                                     public void actionPerformed(java.awt.event.ActionEvent evt) {
193                                         p1ActionPerformed(evt);
194                                     }
195                                 }
196                                );
197    
198            jPanel1.add(p1);
199    
200            jLabel7.setText("Inactive Window Border:");
201            jPanel1.add(jLabel7);
202    
203            s1.setText("Choose...");
204            s1.addActionListener(new java.awt.event.ActionListener() {
205                                     public void actionPerformed(java.awt.event.ActionEvent evt) {
206                                         s1ActionPerformed(evt);
207                                     }
208                                 }
209                                );
210    
211            jPanel1.add(s1);
212    
213            jLabel9.setText("Desktop Background:");   //desktop ref OK
214            jPanel1.add(jLabel9);
215    
216            p2.setText("Choose...");
217            p2.addActionListener(new java.awt.event.ActionListener() {
218                                     public void actionPerformed(java.awt.event.ActionEvent evt) {
219                                         p2ActionPerformed(evt);
220                                     }
221                                 }
222                                );
223    
224            jPanel1.add(p2);
225    
226            jLabel8.setText("Borders:");
227            jPanel1.add(jLabel8);
228    
229            s2.setText("Choose...");
230            s2.addActionListener(new java.awt.event.ActionListener() {
231                                     public void actionPerformed(java.awt.event.ActionEvent evt) {
232                                         s2ActionPerformed(evt);
233                                     }
234                                 }
235                                );
236    
237            jPanel1.add(s2);
238    
239            jLabel10.setText("Active Window Title Bkgd:");
240            jPanel1.add(jLabel10);
241    
242            p3.setText("Choose...");
243            p3.addActionListener(new java.awt.event.ActionListener() {
244                                     public void actionPerformed(java.awt.event.ActionEvent evt) {
245                                         p3ActionPerformed(evt);
246                                     }
247                                 }
248                                );
249    
250            jPanel1.add(p3);
251    
252            jLabel11.setText("Frame and Menu Background:");
253            jPanel1.add(jLabel11);
254    
255            s3.setText("Choose...");
256            s3.addActionListener(new java.awt.event.ActionListener() {
257                                     public void actionPerformed(java.awt.event.ActionEvent evt) {
258                                         s3ActionPerformed(evt);
259                                     }
260                                 }
261                                );
262    
263            jPanel1.add(s3);
264    
265            jLabel12.setText("Active Text Color:");
266            jPanel1.add(jLabel12);
267    
268            t1.setText("Choose...");
269            t1.addActionListener(new java.awt.event.ActionListener() {
270                                     public void actionPerformed(java.awt.event.ActionEvent evt) {
271                                         t1ActionPerformed(evt);
272                                     }
273                                 }
274                                );
275    
276            jPanel1.add(t1);
277    
278            jLabel13.setText("Inactive Text Color:");
279            jPanel1.add(jLabel13);
280    
281            t2.setText("Choose...");
282            t2.addActionListener(new java.awt.event.ActionListener() {
283                                     public void actionPerformed(java.awt.event.ActionEvent evt) {
284                                         t2ActionPerformed(evt);
285                                     }
286                                 }
287                                );
288    
289            jPanel1.add(t2);
290    
291    
292            jLabel14.setText("Widget Background Color:");
293            jPanel1.add(jLabel14);
294    
295            w.setText("Choose...");
296            w.addActionListener(new java.awt.event.ActionListener() {
297                                    public void actionPerformed(java.awt.event.ActionEvent evt) {
298                                        wActionPerformed(evt);
299                                    }
300                                }
301                               );
302    
303            jPanel1.add(w);
304    
305            jLabel15.setText("System Text Color:");
306            jPanel1.add(jLabel15);
307    
308            b.setText("Choose...");
309            b.addActionListener(new java.awt.event.ActionListener() {
310                                    public void actionPerformed(java.awt.event.ActionEvent evt) {
311                                        bActionPerformed(evt);
312                                    }
313                                }
314                               );
315    
316            jPanel1.add(b);
317    
318    
319    
320    
321            gridBagConstraints1 = new java.awt.GridBagConstraints();
322            gridBagConstraints1.gridx = 0;
323            gridBagConstraints1.gridy = 2;
324            gridBagConstraints1.gridwidth = 4;
325            gridBagConstraints1.gridheight = 3;
326            gridBagConstraints1.weightx = 1.0;
327            getContentPane().add(jPanel1, gridBagConstraints1);
328    
329            jLabel18.setHorizontalAlignment(SwingConstants.RIGHT);
330            jLabel18.setText("Theme Name:");
331            jLabel18.setVerticalAlignment(SwingConstants.BOTTOM);
332            gridBagConstraints1 = new java.awt.GridBagConstraints();
333            gridBagConstraints1.gridx = 2;
334            gridBagConstraints1.gridy = 5;
335            gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
336            gridBagConstraints1.anchor = java.awt.GridBagConstraints.EAST;
337            getContentPane().add(jLabel18, gridBagConstraints1);
338    
339            jTextField1.setColumns(20);
340            jTextField1.setText("Unnamed Theme");
341            gridBagConstraints1 = new java.awt.GridBagConstraints();
342            gridBagConstraints1.gridx = 3;
343            gridBagConstraints1.gridy = 5;
344            gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
345            getContentPane().add(jTextField1, gridBagConstraints1);
346    
347            jLabel19.setText("Font:");
348            gridBagConstraints1 = new java.awt.GridBagConstraints();
349            gridBagConstraints1.gridx = 2;
350            gridBagConstraints1.gridy = 6;
351            getContentPane().add(jLabel19, gridBagConstraints1);
352    
353            //jButton13.setText("Choose...");
354            fontChooser.setMaximumSize(new java.awt.Dimension(235, 235));
355            fontChooser.setMinimumSize(new java.awt.Dimension(235, 235));
356            gridBagConstraints1 = new java.awt.GridBagConstraints();
357            gridBagConstraints1.gridx = 3;
358            gridBagConstraints1.gridy = 6;
359            gridBagConstraints1.gridheight = 3;
360            gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
361            gridBagConstraints1.weightx = 1.0;
362            gridBagConstraints1.weighty = 1.0;
363            getContentPane().add(fontChooser, gridBagConstraints1);
364    
365            save.setText("Save");
366            //save.setEnabled(false);
367            save.addActionListener(new java.awt.event.ActionListener() {
368                                       public void actionPerformed(java.awt.event.ActionEvent evt) {
369                                           saveActionPerformed(evt);
370                                       }
371                                   }
372                                  );
373            jPanel3.add(save);
374    
375            apply.setText("Apply");
376            apply.addActionListener(new java.awt.event.ActionListener() {
377                                        public void actionPerformed(java.awt.event.ActionEvent evt) {
378                                            applyActionPerformed(evt);
379                                        }
380                                    }
381                                   );
382    
383            jPanel3.add(apply);
384    
385            done.setText("Done");
386            done.addActionListener(new java.awt.event.ActionListener() {
387                                       public void actionPerformed(java.awt.event.ActionEvent evt) {
388                                           doneActionPerformed(evt);
389                                       }
390                                   }
391                                  );
392    
393            jPanel3.add(done);
394    
395            gridBagConstraints1 = new java.awt.GridBagConstraints();
396            gridBagConstraints1.gridx = 3;
397            gridBagConstraints1.gridy = 9;
398            gridBagConstraints1.gridwidth = 2;
399            gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
400            getContentPane().add(jPanel3, gridBagConstraints1);
401    
402            this.pack();
403        }
404    
405        private void doneActionPerformed(java.awt.event.ActionEvent evt) {
406            this.setVisible(false);
407            // Add your handling code here:
408        }
409    
410        private void saveActionPerformed(java.awt.event.ActionEvent evt) {
411            font = fontChooser.getSelectedFont();  // NPE's
412            SteelmeTheme p = new SteelmeTheme(cp1,cp2,cp3,cs1,cs2,cs3,font,ct1,ct2,cw,cb);
413            p.setName(jTextField1.getText());
414            p.applyTheme(target);
415            SteelmeThemeManager.setCurrentTheme(p);
416            p.save();
417        }
418    
419        private void applyActionPerformed(java.awt.event.ActionEvent evt) {
420            font = fontChooser.getSelectedFont();  // NPE's
421            SteelmeTheme p = new SteelmeTheme(cp1,cp2,cp3,cs1,cs2,cs3,font,ct1,ct2,cw,cb);
422            p.applyTheme(target);
423            SteelmeThemeManager.setCurrentTheme(p);
424        }
425    
426        private void s3ActionPerformed(java.awt.event.ActionEvent evt) {
427            cs3 = JColorChooser.showDialog(this,"Choose Color",cs3);
428            s3.setMyBackground(cs3);
429        }
430    
431        private void s2ActionPerformed(java.awt.event.ActionEvent evt) {
432            cs2 = JColorChooser.showDialog(this,"Choose Color",cs2);
433            // Add your handling code here:
434            s2.setMyBackground(cs2);
435        }
436    
437        private void t1ActionPerformed(java.awt.event.ActionEvent evt) {
438            ct1 = JColorChooser.showDialog(this,"Choose Color",ct1);
439            t1.setMyBackground(ct1);
440        }
441    
442        private void t2ActionPerformed(java.awt.event.ActionEvent evt) {
443            ct2 = JColorChooser.showDialog(this,"Choose Color",ct2);
444            // Add your handling code here:
445            t2.setMyBackground(ct2);
446        }
447    
448        private void s1ActionPerformed(java.awt.event.ActionEvent evt) {
449            // Add your handling code here:
450            cs1 = JColorChooser.showDialog(this,"Choose Color",cs1);
451            s1.setMyBackground(cs1);
452        }
453    
454        private void p3ActionPerformed(java.awt.event.ActionEvent evt) {
455            cp3 = JColorChooser.showDialog(this,"Choose Color",cp3);
456            // Add your handling code here:
457            p3.setMyBackground(cp3);
458        }
459    
460        private void p1ActionPerformed(java.awt.event.ActionEvent evt) {
461            cp1 = JColorChooser.showDialog(this,"Choose Color",cp1);
462            // Add your handling code here:
463            p1.setMyBackground(cp1);
464        }
465    
466        private void p2ActionPerformed(java.awt.event.ActionEvent evt) {
467            cp2 = JColorChooser.showDialog(this,"Choose Color",cp2);
468            // Add your handling code here:
469            p2.setMyBackground(cp2);
470        }
471    
472        private void wActionPerformed(java.awt.event.ActionEvent evt) {
473            cw = JColorChooser.showDialog(this,"Choose Color",cw);
474            // Add your handling code here:
475            w.setMyBackground(cw);
476        }
477    
478        private void bActionPerformed(java.awt.event.ActionEvent evt) {
479            cb = JColorChooser.showDialog(this,"Choose Color",cb);
480            // Add your handling code here:
481            b.setMyBackground(cb);
482        }
483    
484        // Variables declaration - do not modify
485        private JLabel jLabel1;
486        private JPanel jPanel1;
487        private JLabel jLabel6;
488        private ThemeResistantJButton p1;
489        private JLabel jLabel7;
490        private ThemeResistantJButton s1;
491        private JLabel jLabel9;
492        private ThemeResistantJButton p2;
493        private JLabel jLabel8;
494        private ThemeResistantJButton s2;
495        private JLabel jLabel10;
496        private ThemeResistantJButton p3;
497        private JLabel jLabel11;
498        private ThemeResistantJButton s3;
499        private JLabel jLabel12;
500        private ThemeResistantJButton t1;
501        private JLabel jLabel13;
502        private ThemeResistantJButton t2;
503        private JLabel jLabel14;
504        private ThemeResistantJButton w;
505        private JLabel jLabel15;
506        private ThemeResistantJButton b;
507        private JLabel jLabel18;
508        private JTextField jTextField1;
509        private JLabel jLabel19;
510        //private JButton jButton13;
511        private FontChooserPanel fontChooser;
512        private JPanel jPanel3;
513        private JButton save;
514        private JButton apply;
515        private JButton done;
516        // End of variables declaration
517    
518    
519    
520        /**
521         * Describe <code>themeChanged</code> method here.
522         *
523         * @param newTheme a <code>SteelmeTheme</code> value
524         */
525        public void themeChanged(SteelmeTheme newTheme) {
526            setTheme(newTheme);
527        }
528    
529    }