1 /*
   2  *
   3  * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions
   7  * are met:
   8  *
   9  *   - Redistributions of source code must retain the above copyright
  10  *     notice, this list of conditions and the following disclaimer.
  11  *
  12  *   - Redistributions in binary form must reproduce the above copyright
  13  *     notice, this list of conditions and the following disclaimer in the
  14  *     documentation and/or other materials provided with the distribution.
  15  *
  16  *   - Neither the name of Oracle nor the names of its
  17  *     contributors may be used to endorse or promote products derived
  18  *     from this software without specific prior written permission.
  19  *
  20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  21  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31  */
  32 package java2d;
  33 
  34 
  35 import java.awt.BorderLayout;
  36 import java.awt.Color;
  37 import java.awt.Component;
  38 import java.awt.Dimension;
  39 import java.awt.Font;
  40 import javax.swing.JPanel;
  41 import javax.swing.JScrollPane;
  42 import javax.swing.JTextArea;
  43 import javax.swing.border.BevelBorder;
  44 import javax.swing.border.CompoundBorder;
  45 import javax.swing.border.EmptyBorder;
  46 import javax.swing.border.SoftBevelBorder;
  47 
  48 
  49 /**
  50  * Illustration of how to use the clone feature of the demo.
  51  */
  52 @SuppressWarnings("serial")
  53 public final class CloningFeature extends JPanel implements Runnable {
  54 
  55     private final DemoInstVarsAccessor demoInstVars;
  56     private Thread thread;
  57     private JTextArea ta;
  58 
  59     public CloningFeature(DemoInstVarsAccessor demoInstVars) {
  60         this.demoInstVars = demoInstVars;
  61 
  62         setLayout(new BorderLayout());
  63         EmptyBorder eb = new EmptyBorder(5, 5, 5, 5);
  64         SoftBevelBorder sbb = new SoftBevelBorder(BevelBorder.RAISED);
  65         setBorder(new CompoundBorder(eb, sbb));
  66 
  67         ta = new JTextArea("Cloning Demonstrated\n\nClicking once on a demo\n");
  68         ta.setMinimumSize(new Dimension(300, 500));
  69         JScrollPane scroller = new JScrollPane();
  70         scroller.getViewport().add(ta);
  71         ta.setFont(new Font("Dialog", Font.PLAIN, 14));
  72         ta.setForeground(Color.black);
  73         ta.setBackground(Color.lightGray);
  74         ta.setEditable(false);
  75 
  76         add("Center", scroller);
  77 
  78         start();
  79     }
  80 
  81     public void start() {
  82         thread = new Thread(this);
  83         thread.setPriority(Thread.MAX_PRIORITY);
  84         thread.setName("CloningFeature");
  85         thread.start();
  86     }
  87 
  88     public void stop() {
  89         if (thread != null) {
  90             thread.interrupt();
  91         }
  92         thread = null;
  93     }
  94 
  95     @Override
  96     @SuppressWarnings("SleepWhileHoldingLock")
  97     public void run() {
  98 
  99 
 100         int index = demoInstVars.getTabbedPane().getSelectedIndex();
 101         if (index == 0) {
 102             demoInstVars.getTabbedPane().setSelectedIndex(1);
 103             try {
 104                 Thread.sleep(3333);
 105             } catch (Exception e) {
 106                 return;
 107             }
 108         }
 109 
 110         if (!demoInstVars.getControls().toolBarCB.isSelected()) {
 111             demoInstVars.getControls().toolBarCB.setSelected(true);
 112             try {
 113                 Thread.sleep(2222);
 114             } catch (Exception e) {
 115                 return;
 116             }
 117         }
 118 
 119         index = demoInstVars.getTabbedPane().getSelectedIndex() - 1;
 120         DemoGroup dg = demoInstVars.getGroup()[index];
 121         DemoPanel dp = (DemoPanel) dg.getPanel().getComponent(0);
 122         if (dp.surface == null) {
 123             ta.append("Sorry your zeroth component is not a Surface.");
 124             return;
 125         }
 126 
 127         dg.mouseClicked(dp.surface);
 128 
 129         try {
 130             Thread.sleep(3333);
 131         } catch (Exception e) {
 132             return;
 133         }
 134 
 135         ta.append("Clicking the ToolBar double document button\n");
 136         try {
 137             Thread.sleep(3333);
 138         } catch (Exception e) {
 139             return;
 140         }
 141 
 142         dp = (DemoPanel) dg.clonePanels[0].getComponent(0);
 143 
 144         if (dp.tools != null) {
 145             for (int i = 0; i < 3 && thread != null; i++) {
 146                 ta.append("   Cloning\n");
 147                 dp.tools.cloneB.doClick();
 148                 try {
 149                     Thread.sleep(3333);
 150                 } catch (Exception e) {
 151                     return;
 152                 }
 153             }
 154         }
 155 
 156         ta.append("Changing attributes \n");
 157 
 158         try {
 159             Thread.sleep(3333);
 160         } catch (Exception e) {
 161             return;
 162         }
 163 
 164         Component cmps[] = dg.clonePanels[0].getComponents();
 165         for (int i = 0; i < cmps.length && thread != null; i++) {
 166             if ((dp = (DemoPanel) cmps[i]).tools == null) {
 167                 continue;
 168             }
 169             switch (i) {
 170                 case 0:
 171                     ta.append("   Changing AntiAliasing\n");
 172                     dp.tools.aliasB.doClick();
 173                     break;
 174                 case 1:
 175                     ta.append("   Changing Composite & Texture\n");
 176                     dp.tools.compositeB.doClick();
 177                     dp.tools.textureB.doClick();
 178                     break;
 179                 case 2:
 180                     ta.append("   Changing Screen\n");
 181                     dp.tools.screenCombo.setSelectedIndex(4);
 182                     break;
 183                 case 3:
 184                     ta.append("   Removing a clone\n");
 185                     dp.tools.cloneB.doClick();
 186             }
 187             try {
 188                 Thread.sleep(3333);
 189             } catch (Exception e) {
 190                 return;
 191             }
 192         }
 193 
 194         ta.append("\nAll Done!");
 195     }
 196 }