001/* 002 * Copyright 2005,2009 Ivan SZKIBA 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.ini4j.demo; 017 018import bsh.util.JConsole; 019 020import org.ini4j.demo.DemoModel.Mode; 021 022import java.awt.Color; 023import java.awt.Container; 024import java.awt.Dimension; 025import java.awt.event.ActionEvent; 026import java.awt.event.ActionListener; 027 028import java.io.IOException; 029 030import javax.swing.Box; 031import javax.swing.BoxLayout; 032import javax.swing.ButtonGroup; 033import javax.swing.JButton; 034import javax.swing.JLabel; 035import javax.swing.JPanel; 036import javax.swing.JRadioButton; 037import javax.swing.JScrollPane; 038import javax.swing.JTabbedPane; 039import javax.swing.JTextArea; 040 041public class Demo 042{ 043 private enum Command 044 { 045 MODE_INI, 046 MODE_REG, 047 MODE_OPTIONS, 048 LOAD_TEST_DATA, 049 PARSE_DATA, 050 CLEAR_DATA 051 } 052 053 private JConsole _console; 054 private final Container _container; 055 private JTextArea _dataTextArea; 056 private JTextArea _helpTextArea; 057 private DemoModel _model; 058 private JTextArea _tipTextArea; 059 private ActionListener _actionListener = new ActionListener() 060 { 061 public void actionPerformed(ActionEvent event) 062 { 063 Command cmd = Command.valueOf(event.getActionCommand()); 064 065 switch (cmd) 066 { 067 068 case MODE_INI: 069 doMode(Mode.INI); 070 break; 071 072 case MODE_REG: 073 doMode(Mode.REG); 074 break; 075 076 case MODE_OPTIONS: 077 doMode(Mode.OPTIONS); 078 break; 079 080 case LOAD_TEST_DATA: 081 doLoad(); 082 break; 083 084 case PARSE_DATA: 085 doParse(); 086 break; 087 088 case CLEAR_DATA: 089 doClear(); 090 break; 091 } 092 } 093 }; 094 095 public Demo(Container container) 096 { 097 _container = container; 098 } 099 100 public void init() 101 { 102 _container.setBackground(Color.WHITE); 103 _container.setLayout(new BoxLayout(_container, BoxLayout.PAGE_AXIS)); 104 initInputPane(); 105 initButtonsPane(); 106 initOutputPane(); 107 108 // 109 new Thread(_model).start(); 110 doMode(Mode.INI); 111 } 112 113 private void addButton(JPanel panel, String label, Command command) 114 { 115 JButton button = new JButton(); 116 117 button.setText(label); 118 button.setActionCommand(command.name()); 119 button.addActionListener(_actionListener); 120 panel.add(button); 121 } 122 123 private void addModeButton(ButtonGroup group, JPanel panel, Mode mode) 124 { 125 String label = mode.name().charAt(0) + mode.name().toLowerCase().substring(1); 126 JRadioButton button = new JRadioButton(label); 127 128 button.setActionCommand("MODE_" + mode.name()); 129 button.setSelected(mode == Mode.INI); 130 panel.add(button); 131 button.addActionListener(_actionListener); 132 group.add(button); 133 } 134 135 private void doClear() 136 { 137 try 138 { 139 _dataTextArea.setText(""); 140 _model.clear(); 141 } 142 catch (Exception x) 143 { 144 exceptionThrown(x); 145 } 146 } 147 148 private void doLoad() 149 { 150 try 151 { 152 _dataTextArea.setText(_model.load()); 153 _console.println("Test data loaded"); 154 } 155 catch (Exception x) 156 { 157 exceptionThrown(x); 158 } 159 } 160 161 private void doMode(Mode mode) 162 { 163 _model.setMode(mode); 164 try 165 { 166 _tipTextArea.setText(_model.tip()); 167 } 168 catch (Exception x) 169 { 170 exceptionThrown(x); 171 } 172 } 173 174 private void doParse() 175 { 176 try 177 { 178 _model.parse(_dataTextArea.getText()); 179 _console.println("Parse ready"); 180 } 181 catch (Exception x) 182 { 183 exceptionThrown(x); 184 } 185 } 186 187 private void exceptionThrown(Exception exception) 188 { 189 _console.error(exception); 190 _console.error("\n"); 191 exception.printStackTrace(); 192 } 193 194 private void initButtonsPane() 195 { 196 JPanel buttons = new JPanel(); 197 198 buttons.setLayout(new BoxLayout(buttons, BoxLayout.X_AXIS)); 199 buttons.setBackground(Color.WHITE); 200 buttons.add(new JLabel("Mode: ")); 201 ButtonGroup group = new ButtonGroup(); 202 203 addModeButton(group, buttons, Mode.INI); 204 addModeButton(group, buttons, Mode.REG); 205 addModeButton(group, buttons, Mode.OPTIONS); 206 buttons.add(Box.createHorizontalGlue()); 207 addButton(buttons, " C L E A R ", Command.CLEAR_DATA); 208 addButton(buttons, " L O A D ", Command.LOAD_TEST_DATA); 209 addButton(buttons, " P A R S E ", Command.PARSE_DATA); 210 _container.add(buttons); 211 } 212 213 private void initInputPane() 214 { 215 JTabbedPane inputPane = new JTabbedPane(JTabbedPane.TOP); 216 217 inputPane.setPreferredSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE)); 218 inputPane.setBackground(Color.WHITE); 219 _dataTextArea = new JTextArea(); 220 JScrollPane sp = new JScrollPane(_dataTextArea); 221 222 inputPane.addTab("data", sp); 223 _tipTextArea = new JTextArea(); 224 _tipTextArea.setEditable(false); 225 sp = new JScrollPane(_tipTextArea); 226 inputPane.addTab("tip", sp); 227 _helpTextArea = new JTextArea(); 228 _helpTextArea.setEditable(false); 229 sp = new JScrollPane(_helpTextArea); 230 inputPane.addTab("help", sp); 231// 232 _container.add(inputPane); 233 } 234 235 private void initOutputPane() 236 { 237 JTabbedPane output = new JTabbedPane(JTabbedPane.BOTTOM); 238 JConsole console = new JConsole(); 239 240 console.setBackground(Color.WHITE); 241 _model = new DemoModel(console); 242 _console = new JConsole(); 243 244 output.addTab("Console", _console); 245 output.setBackground(Color.WHITE); 246 output.setPreferredSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE)); 247 output.addTab("Interpreter", console); 248 try 249 { 250 251 // 252 _helpTextArea.setText(_model.help()); 253 } 254 catch (IOException x) 255 { 256 exceptionThrown(x); 257 } 258 259 // 260 _container.add(output); 261 } 262}