| 157 | kaklik | 1 | /*
 | 
        
           |  |  | 2 |     AVRcamVIEW: A PC application to test out the functionallity of the
 | 
        
           |  |  | 3 |      AVRcam real-time image processing engine.
 | 
        
           |  |  | 4 |     Copyright (C) 2004    Brent A. Taylor
 | 
        
           |  |  | 5 |   | 
        
           |  |  | 6 |     This program is free software; you can redistribute it and/or
 | 
        
           |  |  | 7 |     modify it under the terms of the GNU General Public
 | 
        
           |  |  | 8 |     License as published by the Free Software Foundation; either
 | 
        
           |  |  | 9 |     version 2 of the License, or (at your option) any later version.
 | 
        
           |  |  | 10 |   | 
        
           |  |  | 11 |     This program is distributed in the hope that it will be useful,
 | 
        
           |  |  | 12 |     but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
        
           |  |  | 13 |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
        
           |  |  | 14 |     General Public License for more details.
 | 
        
           |  |  | 15 |   | 
        
           |  |  | 16 |     You should have received a copy of the GNU General Public
 | 
        
           |  |  | 17 |     License along with this program; if not, write to the Free Software
 | 
        
           |  |  | 18 |     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
        
           |  |  | 19 |   | 
        
           |  |  | 20 |    For more information on the AVRcamVIEW, please contact:
 | 
        
           |  |  | 21 |   | 
        
           |  |  | 22 |    taylorba@comcast.net
 | 
        
           |  |  | 23 |   | 
        
           |  |  | 24 |    or go to www.jrobot.net for more details regarding the system.
 | 
        
           |  |  | 25 | */
 | 
        
           |  |  | 26 |   | 
        
           |  |  | 27 | package avr.swing;
 | 
        
           |  |  | 28 |   | 
        
           |  |  | 29 | import java.awt.*;
 | 
        
           |  |  | 30 | import java.util.*;
 | 
        
           |  |  | 31 | import javax.swing.*;
 | 
        
           |  |  | 32 | import javax.swing.border.*;
 | 
        
           |  |  | 33 |   | 
        
           |  |  | 34 | public class JRegisterPanel extends JPanel {
 | 
        
           |  |  | 35 |   | 
        
           |  |  | 36 |    public static void main(String[] args) throws Exception {
 | 
        
           |  |  | 37 |       UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
 | 
        
           |  |  | 38 |       int option = new JRegisterPanel().showDialog(null);
 | 
        
           |  |  | 39 |       System.out.println(option);
 | 
        
           |  |  | 40 |    }
 | 
        
           |  |  | 41 |   | 
        
           |  |  | 42 |    private static final String WARNING_TEXT = "WARNING!!! Changing the registers may cause the AVRcam to no longer respond.  If this happens, simply power cycle the AVRcam.";
 | 
        
           |  |  | 43 |    private static final int UNKNOWN_OPTION = 0x00;
 | 
        
           |  |  | 44 |    public static final int OK_OPTION = 0x01;
 | 
        
           |  |  | 45 |    public static final int CANCEL_OPTION = 0x02;
 | 
        
           |  |  | 46 |   | 
        
           |  |  | 47 |    private JDialog dialog;
 | 
        
           |  |  | 48 |    private JRegister[] registers;
 | 
        
           |  |  | 49 |    private int option;
 | 
        
           |  |  | 50 |   | 
        
           |  |  | 51 |    private JTabbedPane tabs;
 | 
        
           |  |  | 52 |   | 
        
           |  |  | 53 |    private JRadioButton enableAutoWhiteBalanceRB;
 | 
        
           |  |  | 54 |    private JRadioButton disableAutoWhiteBalanceRB;
 | 
        
           |  |  | 55 |    private JRadioButton enableAutoAdjustModeRB;
 | 
        
           |  |  | 56 |    private JRadioButton disableAutoAdjustModeRB;
 | 
        
           |  |  | 57 |    private JRadioButton enableFlourescentLightFilterRB;
 | 
        
           |  |  | 58 |    private JRadioButton disableFlourescentLightFilterRB;
 | 
        
           |  |  | 59 |   | 
        
           |  |  | 60 |    public JRegisterPanel() {
 | 
        
           |  |  | 61 |       super(new BorderLayout());
 | 
        
           |  |  | 62 |   | 
        
           |  |  | 63 |       tabs = new JTabbedPane();
 | 
        
           |  |  | 64 |   | 
        
           |  |  | 65 |       enableAutoWhiteBalanceRB = new JRadioButton("Enable", true);
 | 
        
           |  |  | 66 |       disableAutoWhiteBalanceRB = new JRadioButton("Disable");
 | 
        
           |  |  | 67 |       enableAutoAdjustModeRB = new JRadioButton("Enable");
 | 
        
           |  |  | 68 |       disableAutoAdjustModeRB = new JRadioButton("Disable", true);
 | 
        
           |  |  | 69 |       enableFlourescentLightFilterRB = new JRadioButton("Enable");
 | 
        
           |  |  | 70 |       disableFlourescentLightFilterRB = new JRadioButton("Disable", true);
 | 
        
           |  |  | 71 |   | 
        
           |  |  | 72 |       ButtonGroup autoWhiteBalanceBG = new ButtonGroup();
 | 
        
           |  |  | 73 |       autoWhiteBalanceBG.add(enableAutoWhiteBalanceRB);
 | 
        
           |  |  | 74 |       autoWhiteBalanceBG.add(disableAutoWhiteBalanceRB);
 | 
        
           |  |  | 75 |   | 
        
           |  |  | 76 |       ButtonGroup autoAdjustModeBG = new ButtonGroup();
 | 
        
           |  |  | 77 |       autoAdjustModeBG.add(enableAutoAdjustModeRB);
 | 
        
           |  |  | 78 |       autoAdjustModeBG.add(disableAutoAdjustModeRB);
 | 
        
           |  |  | 79 |   | 
        
           |  |  | 80 |       ButtonGroup flourescentLightFilterBG = new ButtonGroup();
 | 
        
           |  |  | 81 |       flourescentLightFilterBG.add(enableFlourescentLightFilterRB);
 | 
        
           |  |  | 82 |       flourescentLightFilterBG.add(disableFlourescentLightFilterRB);
 | 
        
           |  |  | 83 |   | 
        
           |  |  | 84 | //      Box generalP = new Box(BoxLayout.Y_AXIS);
 | 
        
           |  |  | 85 |       JPanel generalP = new JPanel();
 | 
        
           |  |  | 86 |       generalP.setLayout(new BoxLayout(generalP, BoxLayout.Y_AXIS));
 | 
        
           |  |  | 87 |   | 
        
           |  |  | 88 |       Border emptyBorder = new EmptyBorder(5, 5, 5, 5);
 | 
        
           |  |  | 89 |   | 
        
           |  |  | 90 |       Box autoWhiteBalanceBox = new Box(BoxLayout.X_AXIS);
 | 
        
           |  |  | 91 |       autoWhiteBalanceBox.setBorder(emptyBorder);
 | 
        
           |  |  | 92 |       autoWhiteBalanceBox.add(new JLabel("Auto White Balance:"));
 | 
        
           |  |  | 93 |       autoWhiteBalanceBox.add(Box.createHorizontalGlue());
 | 
        
           |  |  | 94 |       autoWhiteBalanceBox.add(enableAutoWhiteBalanceRB);
 | 
        
           |  |  | 95 |       autoWhiteBalanceBox.add(disableAutoWhiteBalanceRB);
 | 
        
           |  |  | 96 |   | 
        
           |  |  | 97 |       Box autoAdjustModeBox = new Box(BoxLayout.X_AXIS);
 | 
        
           |  |  | 98 |       autoAdjustModeBox.setBorder(emptyBorder);
 | 
        
           |  |  | 99 |       autoAdjustModeBox.add(new JLabel("Auto Adjust Mode:"));
 | 
        
           |  |  | 100 |       autoAdjustModeBox.add(Box.createHorizontalGlue());
 | 
        
           |  |  | 101 |       autoAdjustModeBox.add(enableAutoAdjustModeRB);
 | 
        
           |  |  | 102 |       autoAdjustModeBox.add(disableAutoAdjustModeRB);
 | 
        
           |  |  | 103 |   | 
        
           |  |  | 104 |       Box flourescentLightFilterBox = new Box(BoxLayout.X_AXIS);
 | 
        
           |  |  | 105 |       flourescentLightFilterBox.setBorder(emptyBorder);
 | 
        
           |  |  | 106 |       flourescentLightFilterBox.add(new JLabel("Flourescent Light Filter:"));
 | 
        
           |  |  | 107 |       flourescentLightFilterBox.add(Box.createHorizontalGlue());
 | 
        
           |  |  | 108 |       flourescentLightFilterBox.add(enableFlourescentLightFilterRB);
 | 
        
           |  |  | 109 |       flourescentLightFilterBox.add(disableFlourescentLightFilterRB);
 | 
        
           |  |  | 110 |   | 
        
           |  |  | 111 |       generalP.add(autoWhiteBalanceBox);
 | 
        
           |  |  | 112 |       generalP.add(autoAdjustModeBox);
 | 
        
           |  |  | 113 |       generalP.add(flourescentLightFilterBox);
 | 
        
           |  |  | 114 |   | 
        
           |  |  | 115 |       JPanel advancedP = new JPanel();
 | 
        
           |  |  | 116 |       advancedP.setLayout(new BoxLayout(advancedP, BoxLayout.Y_AXIS));
 | 
        
           |  |  | 117 |   | 
        
           |  |  | 118 |       JTextArea warningTA = new JTextArea(WARNING_TEXT);
 | 
        
           |  |  | 119 |       warningTA.setEditable(false);
 | 
        
           |  |  | 120 |       warningTA.setWrapStyleWord(true);
 | 
        
           |  |  | 121 |       warningTA.setLineWrap(true);
 | 
        
           |  |  | 122 |       warningTA.setForeground(Color.RED);
 | 
        
           |  |  | 123 |       warningTA.setRows(4);
 | 
        
           |  |  | 124 |       warningTA.setFont(warningTA.getFont().deriveFont(16F));
 | 
        
           |  |  | 125 |       warningTA.setBackground(advancedP.getBackground());
 | 
        
           |  |  | 126 |       warningTA.setBorder(new EmptyBorder(0, 10, 0, 10));
 | 
        
           |  |  | 127 |   | 
        
           |  |  | 128 |       registers = new JRegister[8];
 | 
        
           |  |  | 129 |   | 
        
           |  |  | 130 |       for(int i = 0; i < registers.length; i++) {
 | 
        
           |  |  | 131 |          registers[i] = new JRegister();
 | 
        
           |  |  | 132 |          advancedP.add(registers[i]);
 | 
        
           |  |  | 133 |          advancedP.add(Box.createVerticalStrut(5));
 | 
        
           |  |  | 134 |       }
 | 
        
           |  |  | 135 |       advancedP.add(warningTA);
 | 
        
           |  |  | 136 |   | 
        
           |  |  | 137 |       tabs.addTab("General", generalP);
 | 
        
           |  |  | 138 |       tabs.addTab("Advanced", advancedP);
 | 
        
           |  |  | 139 |   | 
        
           |  |  | 140 |       add(tabs, BorderLayout.CENTER);
 | 
        
           |  |  | 141 |   | 
        
           |  |  | 142 |    }
 | 
        
           |  |  | 143 |   | 
        
           |  |  | 144 |    public int showDialog(Frame owner) {
 | 
        
           |  |  | 145 |       reset();
 | 
        
           |  |  | 146 |   | 
        
           |  |  | 147 |       option = UNKNOWN_OPTION;
 | 
        
           |  |  | 148 |       if(dialog == null) {
 | 
        
           |  |  | 149 |          dialog = new JDialog(owner, "AVRcamVIEW - Set Registers", true);
 | 
        
           |  |  | 150 |   | 
        
           |  |  | 151 |          dialog.getContentPane().add(this, BorderLayout.CENTER);
 | 
        
           |  |  | 152 |          dialog.getContentPane().add(createButtonPanel(), BorderLayout.SOUTH);
 | 
        
           |  |  | 153 |          dialog.pack();
 | 
        
           |  |  | 154 |          dialog.setResizable(false);
 | 
        
           |  |  | 155 |       }
 | 
        
           |  |  | 156 |   | 
        
           |  |  | 157 |       dialog.setLocationRelativeTo(owner);
 | 
        
           |  |  | 158 |       dialog.setVisible(true);
 | 
        
           |  |  | 159 |   | 
        
           |  |  | 160 |       return option;
 | 
        
           |  |  | 161 |   | 
        
           |  |  | 162 |    }
 | 
        
           |  |  | 163 |   | 
        
           |  |  | 164 |    public void reset() {
 | 
        
           |  |  | 165 |       for(int i = 0; i < registers.length; i++) {
 | 
        
           |  |  | 166 |          registers[i].reset();
 | 
        
           |  |  | 167 |       }
 | 
        
           |  |  | 168 |    }
 | 
        
           |  |  | 169 |   | 
        
           |  |  | 170 |    public Map getRegisters() {
 | 
        
           |  |  | 171 |       Map info = new HashMap();
 | 
        
           |  |  | 172 |   | 
        
           |  |  | 173 |       if(tabs.getSelectedIndex() == 0) {
 | 
        
           |  |  | 174 |   | 
        
           |  |  | 175 |          if(enableAutoWhiteBalanceRB.isSelected()) {
 | 
        
           |  |  | 176 |             info.put(new Integer(0x12), new Integer(0x2C));
 | 
        
           |  |  | 177 |          } else {
 | 
        
           |  |  | 178 |             info.put(new Integer(0x12), new Integer(0x28));
 | 
        
           |  |  | 179 |          }
 | 
        
           |  |  | 180 |   | 
        
           |  |  | 181 |          if(enableAutoAdjustModeRB.isSelected()) {
 | 
        
           |  |  | 182 |             info.put(new Integer(0x13), new Integer(0x01));
 | 
        
           |  |  | 183 |          } else {
 | 
        
           |  |  | 184 |             info.put(new Integer(0x13), new Integer(0x00));
 | 
        
           |  |  | 185 |          }
 | 
        
           |  |  | 186 |   | 
        
           |  |  | 187 |          if(enableFlourescentLightFilterRB.isSelected()) {
 | 
        
           |  |  | 188 |             info.put(new Integer(0x2D), new Integer(0x07));
 | 
        
           |  |  | 189 |          } else {
 | 
        
           |  |  | 190 |             info.put(new Integer(0x2D), new Integer(0x03));
 | 
        
           |  |  | 191 |          }
 | 
        
           |  |  | 192 |   | 
        
           |  |  | 193 |       } else {
 | 
        
           |  |  | 194 |          for(int i = 0; i < registers.length; i++) {
 | 
        
           |  |  | 195 |          JRegister r = registers[i];
 | 
        
           |  |  | 196 |             if(r.isChecked()) {
 | 
        
           |  |  | 197 |                info.put(r.getRegister(), r.getValue());
 | 
        
           |  |  | 198 |             }
 | 
        
           |  |  | 199 |          }
 | 
        
           |  |  | 200 |       }
 | 
        
           |  |  | 201 |   | 
        
           |  |  | 202 |       return Collections.unmodifiableMap(info);
 | 
        
           |  |  | 203 |    }
 | 
        
           |  |  | 204 |   | 
        
           |  |  | 205 |    public void ok() {
 | 
        
           |  |  | 206 |       option = OK_OPTION;
 | 
        
           |  |  | 207 |       dialog.setVisible(false);
 | 
        
           |  |  | 208 |    }
 | 
        
           |  |  | 209 |   | 
        
           |  |  | 210 |    public void cancel() {
 | 
        
           |  |  | 211 |       option = CANCEL_OPTION;
 | 
        
           |  |  | 212 |       dialog.setVisible(false);
 | 
        
           |  |  | 213 |    }
 | 
        
           |  |  | 214 |   | 
        
           |  |  | 215 |    private JComponent createButtonPanel() {
 | 
        
           |  |  | 216 |   | 
        
           |  |  | 217 |       JPanel buttonP = new JPanel(new FlowLayout(FlowLayout.RIGHT));
 | 
        
           |  |  | 218 |   | 
        
           |  |  | 219 |       buttonP.setBorder(new EtchedBorder());
 | 
        
           |  |  | 220 |   | 
        
           |  |  | 221 |       buttonP.add(new JButton(new ProxyAction(this, "ok", "OK", 'o')));
 | 
        
           |  |  | 222 |       buttonP.add(new JButton(new ProxyAction(this, "cancel", "Cancel", 'c')));
 | 
        
           |  |  | 223 |   | 
        
           |  |  | 224 |       return buttonP;
 | 
        
           |  |  | 225 |    }
 | 
        
           |  |  | 226 |   | 
        
           |  |  | 227 |    private static final class JRegister extends JPanel {
 | 
        
           |  |  | 228 |   | 
        
           |  |  | 229 |       private JCheckBox enableCB;
 | 
        
           |  |  | 230 |       private JSpinner registerS;
 | 
        
           |  |  | 231 |       private JSpinner valueS;
 | 
        
           |  |  | 232 |   | 
        
           |  |  | 233 |       public JRegister() {
 | 
        
           |  |  | 234 |          super(new FlowLayout(FlowLayout.CENTER));
 | 
        
           |  |  | 235 |   | 
        
           |  |  | 236 |          // remove the default insets of the JPanel
 | 
        
           |  |  | 237 |          setBorder(new EmptyBorder(-5, -5, -5, -5));
 | 
        
           |  |  | 238 |   | 
        
           |  |  | 239 |          enableCB = new JCheckBox(new ProxyAction(this, "setEnabled", "Register"));
 | 
        
           |  |  | 240 |   | 
        
           |  |  | 241 |          registerS = new JSpinner(new SpinnerNumberModel(0, 0, 0x90, 1));
 | 
        
           |  |  | 242 |          valueS = new JSpinner(new SpinnerNumberModel(0, 0, 0xFF, 1));
 | 
        
           |  |  | 243 |   | 
        
           |  |  | 244 |          reset();
 | 
        
           |  |  | 245 |   | 
        
           |  |  | 246 |          add(enableCB);
 | 
        
           |  |  | 247 |          add(registerS);
 | 
        
           |  |  | 248 |          add(new JLabel(" = "));
 | 
        
           |  |  | 249 |          add(valueS);
 | 
        
           |  |  | 250 |       }
 | 
        
           |  |  | 251 |   | 
        
           |  |  | 252 |       public void reset() {
 | 
        
           |  |  | 253 |          enableCB.setSelected(false);
 | 
        
           |  |  | 254 |          registerS.setEnabled(false);
 | 
        
           |  |  | 255 |          valueS.setEnabled(false);
 | 
        
           |  |  | 256 |          registerS.setValue(new Integer(0));
 | 
        
           |  |  | 257 |          valueS.setValue(new Integer(0));
 | 
        
           |  |  | 258 |       }
 | 
        
           |  |  | 259 |   | 
        
           |  |  | 260 |       public boolean isChecked() {
 | 
        
           |  |  | 261 |          return enableCB.isSelected();
 | 
        
           |  |  | 262 |       }
 | 
        
           |  |  | 263 |   | 
        
           |  |  | 264 |       public String getRegister() {
 | 
        
           |  |  | 265 |          return registerS.getValue().toString();
 | 
        
           |  |  | 266 |       }
 | 
        
           |  |  | 267 |   | 
        
           |  |  | 268 |       public String getValue() {
 | 
        
           |  |  | 269 |          return valueS.getValue().toString();
 | 
        
           |  |  | 270 |       }
 | 
        
           |  |  | 271 |   | 
        
           |  |  | 272 |       public void setEnabled() {
 | 
        
           |  |  | 273 |          boolean enabled = enableCB.isSelected();
 | 
        
           |  |  | 274 |          registerS.setEnabled(enabled);
 | 
        
           |  |  | 275 |          valueS.setEnabled(enabled);
 | 
        
           |  |  | 276 |       }
 | 
        
           |  |  | 277 |   | 
        
           |  |  | 278 |    }
 | 
        
           |  |  | 279 |   | 
        
           |  |  | 280 |   | 
        
           |  |  | 281 | }
 |