a whole bunch of stuff
[ephemerata.git] / Toady / src / net / kezvh / toady / Toady.java
blob00845da2d8c374b78fc098ce4a27d8688ad9162e
1 /**
3 */
4 package net.kezvh.toady;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.InputEvent;
8 import java.awt.event.KeyEvent;
9 import java.awt.event.KeyListener;
10 import java.beans.PropertyChangeListener;
11 import java.io.File;
12 import java.io.FileWriter;
13 import java.io.IOException;
14 import java.util.ArrayList;
15 import java.util.List;
17 import javax.swing.Action;
18 import javax.swing.JCheckBoxMenuItem;
19 import javax.swing.JFileChooser;
20 import javax.swing.JFrame;
21 import javax.swing.JMenu;
22 import javax.swing.JMenuBar;
23 import javax.swing.JMenuItem;
24 import javax.swing.JRadioButtonMenuItem;
25 import javax.swing.JScrollPane;
26 import javax.swing.JTextArea;
27 import javax.swing.KeyStroke;
28 import javax.swing.event.CaretEvent;
29 import javax.swing.event.CaretListener;
31 /**
32 * @author afflux
35 public class Toady {
37 private static int dot;
38 private static int mark;
40 private interface ToadyAction {
41 String toString();
44 private static final class AreaDeletedToadyAction implements ToadyAction {
45 /**
46 * @param dot
47 * @param mark
49 public AreaDeletedToadyAction(final int dot, final int mark) {
50 super();
51 this._dot = dot;
52 this._mark = mark;
55 private final int _dot;
56 private final int _mark;
58 /**
59 * @see java.lang.Object#toString()
60 * @return FIXME
62 @Override
63 public String toString() {
64 return "<ToadyAction>" + "<dot>" + this._dot + "</dot>" + "<mark>" + this._mark + "</mark>" + "</ToadyAction>";
68 private static final class KeyPressedToadyAction implements ToadyAction {
69 private final char c;
70 private final int index;
72 public KeyPressedToadyAction(final char c, final int index) {
73 this.c = c;
74 this.index = index;
77 /**
78 * @see java.lang.Object#toString()
79 * @return c
81 @Override
82 public String toString() {
83 return "<ToadyAction>" + "<key>" + Character.toString(this.c) + "</key>" + "<index>" + this.index + "</index>" + "</ToadyAction>";
87 private static final List<ToadyAction> sequenceOfEdits = new ArrayList<ToadyAction>();
89 /**
90 * @param args
92 public static void main(final String[] args) {
93 final JFrame frame = new JFrame("Toady");
95 final JMenuBar menuBar;
96 final JMenu fileMenu, editMenu;
97 final JMenu submenu;
98 final JMenuItem saveMenuItem, openMenuItem, undoMenuItem;
99 final JRadioButtonMenuItem rbMenuItem;
100 final JCheckBoxMenuItem cbMenuItem;
102 //Create the menu bar.
103 menuBar = new JMenuBar();
105 fileMenu = new JMenu("File");
106 fileMenu.setMnemonic(KeyEvent.VK_A);
107 fileMenu.getAccessibleContext().setAccessibleDescription("The only menu in this program that has menu items");
108 menuBar.add(fileMenu);
110 saveMenuItem = new JMenuItem("Save", KeyEvent.VK_S);
111 saveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));
112 saveMenuItem.getAccessibleContext().setAccessibleDescription("Save");
113 saveMenuItem.setAction(new Action() {
115 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
116 * @param e
118 @Override
119 public void actionPerformed(final ActionEvent e) {
120 final JFileChooser chooser = new JFileChooser();
122 // if you ahve a suggested file name to start with, use that
124 final int response = chooser.showSaveDialog(frame);
125 if (response == JFileChooser.APPROVE_OPTION) {// user clicked Save
126 final File file = chooser.getSelectedFile();
127 try {
128 final FileWriter fileWriter = new FileWriter(file);
129 for (final ToadyAction toadyAction: Toady.sequenceOfEdits)
130 fileWriter.write(toadyAction.toString() + "\n");
131 fileWriter.close();
133 } catch (final IOException e1) {
134 // TODO Auto-generated catch block
135 e1.printStackTrace();
138 } else {
139 // user cancelled...
143 private boolean enabled = true;
145 @Override
146 public void addPropertyChangeListener(final PropertyChangeListener listener) {
147 // TODO Auto-generated method stub
151 @Override
152 public Object getValue(final String key) {
153 // TODO Auto-generated method stub
154 return null;
157 @Override
158 public boolean isEnabled() {
159 // TODO Auto-generated method stub
160 return this.enabled;
163 @Override
164 public void putValue(final String key, final Object value) {
165 // TODO Auto-generated method stub
169 @Override
170 public void removePropertyChangeListener(final PropertyChangeListener listener) {
171 // TODO Auto-generated method stub
175 @Override
176 public void setEnabled(final boolean b) {
177 // TODO Auto-generated method stub
178 this.enabled = true;
181 fileMenu.add(saveMenuItem);
183 openMenuItem = new JMenuItem("Open", KeyEvent.VK_O);
184 openMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, ActionEvent.ALT_MASK));
185 openMenuItem.getAccessibleContext().setAccessibleDescription("Open");
186 fileMenu.add(openMenuItem);
188 editMenu = new JMenu("Edit");
189 editMenu.setMnemonic(KeyEvent.VK_E);
190 editMenu.getAccessibleContext().setAccessibleDescription("The only menu in this program that has menu items");
191 menuBar.add(editMenu);
193 undoMenuItem = new JMenuItem("Undo", KeyEvent.VK_Z);
194 undoMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_3, ActionEvent.ALT_MASK));
195 undoMenuItem.getAccessibleContext().setAccessibleDescription("Undo");
196 editMenu.add(undoMenuItem);
198 frame.setJMenuBar(menuBar);
200 final JTextArea textArea = new JTextArea(5, 20);
201 textArea.setLineWrap(true);
203 textArea.addCaretListener(new CaretListener() {
205 * @see javax.swing.event.CaretListener#caretUpdate(javax.swing.event.CaretEvent)
206 * @param e
208 @Override
209 public void caretUpdate(final CaretEvent e) {
210 // TODO Auto-generated method stub
211 Toady.dot = e.getDot();
212 Toady.mark = e.getMark();
216 textArea.addKeyListener(new KeyListener() {
218 * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
219 * @param e
221 @Override
222 public void keyPressed(final KeyEvent e) {
223 // nooop
227 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
228 * @param e
230 @Override
231 public void keyReleased(final KeyEvent e) {
232 // nooop
236 * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
237 * @param e
239 @Override
240 public void keyTyped(final KeyEvent e) {
241 if ((e.getModifiers() & (InputEvent.ALT_DOWN_MASK | InputEvent.CTRL_DOWN_MASK)) != 0)
242 return;
244 final JTextArea component = (JTextArea) e.getComponent();
245 if (Toady.dot != Toady.mark)
246 Toady.sequenceOfEdits.add(new AreaDeletedToadyAction(Toady.dot, Toady.mark));
247 Toady.sequenceOfEdits.add(new KeyPressedToadyAction(e.getKeyChar(), Toady.dot));
251 final JScrollPane scrollPane = new JScrollPane(textArea);
253 frame.getContentPane().add(scrollPane);
255 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
256 frame.pack();
257 frame.setVisible(true);
258 // TODO Auto-generated method stub