EOS 2  1.1.0
Einfache Objektbasierte Sprache
MainWindow.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.gui;
2 
3 import java.awt.BorderLayout;
4 import java.awt.Color;
5 import java.awt.Dimension;
6 import java.awt.Font;
7 import java.awt.GridBagConstraints;
8 import java.awt.GridBagLayout;
9 import java.awt.GridLayout;
10 import java.awt.KeyEventDispatcher;
11 import java.awt.KeyboardFocusManager;
12 import java.awt.Rectangle;
13 import java.awt.event.KeyEvent;
14 import java.awt.event.WindowEvent;
15 import java.awt.event.WindowListener;
16 import java.io.BufferedWriter;
17 import java.io.File;
18 import java.io.FileOutputStream;
19 import java.io.IOException;
20 import java.io.OutputStreamWriter;
21 import java.text.MessageFormat;
22 
23 import javax.swing.JButton;
24 import javax.swing.JFileChooser;
25 import javax.swing.JFrame;
26 import javax.swing.JMenu;
27 import javax.swing.JMenuBar;
28 import javax.swing.JMenuItem;
29 import javax.swing.JOptionPane;
30 import javax.swing.JPanel;
31 import javax.swing.JScrollPane;
32 import javax.swing.JSlider;
33 import javax.swing.JSplitPane;
34 import javax.swing.JTextPane;
35 import javax.swing.JToolBar;
36 import javax.swing.Scrollable;
37 import javax.swing.WindowConstants;
38 import javax.swing.event.ChangeEvent;
39 import javax.swing.filechooser.FileNameExtensionFilter;
40 import javax.swing.filechooser.FileSystemView;
41 
42 import de.lathanda.eos.base.ResourceLoader;
43 import de.lathanda.eos.base.util.GuiToolkit;
44 import de.lathanda.eos.common.gui.BackgroundCompiler;
45 import de.lathanda.eos.common.gui.CodeColoring;
46 import de.lathanda.eos.common.gui.ConfigFrame;
47 import de.lathanda.eos.common.gui.GuiConfiguration;
48 import de.lathanda.eos.common.gui.GuiConfiguration.GuiConfigurationListener;
49 import de.lathanda.eos.common.gui.HtmlExport;
50 import de.lathanda.eos.common.gui.PrintFrame;
51 import de.lathanda.eos.common.gui.SideInformation;
52 import de.lathanda.eos.common.gui.SourceCode;
53 import de.lathanda.eos.config.Language;
54 import de.lathanda.eos.common.gui.Messages;
55 import de.lathanda.eos.gui.classchart.ClassChart;
56 import de.lathanda.eos.gui.diagram.DiagramFrame;
57 import de.lathanda.eos.gui.flowchart.FlowChart;
58 import de.lathanda.eos.gui.objectchart.ObjectChart;
59 import de.lathanda.eos.gui.structogram.Structogram;
60 import static de.lathanda.eos.base.icons.Icons.*;
61 import static de.lathanda.eos.gui.icons.Icons.*;
62 
68 public class MainWindow extends JFrame implements WindowListener, GuiConfigurationListener {
69  private static final long serialVersionUID = -5517007240148560239L;
73  private final SourceCode data;
77  private final JFileChooser filechooser;
81  private final JFileChooser exportfilechooser;
85  private final ConfigFrame configFrame = new ConfigFrame();
89  private File activeFile = null;
93  private final BackgroundCompiler compiler;
94 
98  public MainWindow() {
99  data = new SourceCode();
100  compiler = new BackgroundCompiler(data);
101  compiler.addCompilerListener(data);
102  data.setSpeed(10);
103  filechooser = new JFileChooser();
104  filechooser.setFileFilter(new FileNameExtensionFilter(Messages.getString("File.EOS"), "eos"));
105  filechooser.setCurrentDirectory(new File(FileSystemView.getFileSystemView().getDefaultDirectory().getPath()));
106  exportfilechooser = new JFileChooser();
107  exportfilechooser.addChoosableFileFilter(new FileNameExtensionFilter(Messages.getString("File.Html"), "html"));
108  exportfilechooser.setCurrentDirectory(new File("."));
109  initComponents();
110  data.init(new AutoCompletion(txtProgram, this), new CodeColoring());
111  sliderSpeed.setToolTipText(MessageFormat.format(Messages.getString("Speed.Tooltip"), data.getSpeed()));
112  setIconImage(LOGO);
113 
114  txtProgram.setDocument(data);
115  txtOutput.setDocument(data.getOutput());
116  txtProgram.requestFocus();
118  KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new FunctionKeyDispatcher());
119  }
120 
124  public void startCompiler() {
125  new Thread(compiler).start();
126  }
127 
131  private void initComponents() {
132  setIconImage(LOGO);
133  mainMenu = new JMenuBar();
134  mainToolbar = new JToolBar();
135  jSeparator1 = new JToolBar.Separator();
136  jSeparator2 = new JToolBar.Separator();
137  jSeparator3 = new JToolBar.Separator();
138  jSeparator4 = new JToolBar.Separator();
139  mainSplit = new JSplitPane();
140  scrollProgram = new JScrollPane();
141  txtProgram = new JTextPane();
142  sideInformation = new SideInformation(txtProgram, data);
143  scrollOutput = new JScrollPane();
144  txtOutput = new JTextPane();
145  runToolbar = new JToolBar();
146  toolbarGroup = new JPanel();
147  sliderSpeed = new JSlider();
148 
149  setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
150 
151  setTitle(Messages.getString("Title"));
152  addWindowListener(this);
153 
154  toolbarGroup.setLayout(new GridLayout(2, 1));
155 
156  mainToolbar.setFloatable(false);
157  mainToolbar.setRollover(true);
158  mainToolbar.setBackground(new Color(0xEEEEEE));
159  toolbarGroup.add(mainToolbar);
160 
161  btnSave = GuiToolkit.createButton(SAVE, Messages.getString("Menu.Save.Tooltip"),
162  evt -> SaveActionPerformed(evt));
163  mainToolbar.add(btnSave);
164 
165  btnOpen = GuiToolkit.createButton(OPEN, Messages.getString("Menu.Open.Tooltip"),
166  evt -> OpenActionPerformed(evt));
167  mainToolbar.add(btnOpen);
168 
169  mainToolbar.add(jSeparator1);
170 
171  btnCopy = GuiToolkit.createButton(COPY, Messages.getString("Menu.Copy.Tooltip"),
172  evt -> CopyActionPerformed(evt));
173  mainToolbar.add(btnCopy);
174 
175  btnCut = GuiToolkit.createButton(CUT, Messages.getString("Menu.Cut.Tooltip"),
176  evt -> CutActionPerformed(evt));
177  mainToolbar.add(btnCut);
178 
179  btnPaste = GuiToolkit.createButton(PASTE, Messages.getString("Menu.Paste.Tooltip"),
180  evt -> PasteActionPerformed(evt));
181  mainToolbar.add(btnPaste);
182 
183  mainToolbar.add(jSeparator2);
184 
185  btnUndo = GuiToolkit.createButton(UNDO, Messages.getString("Menu.Undo.Tooltip"),
186  evt -> UndoActionPerformed(evt));
187  mainToolbar.add(btnUndo);
188 
189  btnRedo = GuiToolkit.createButton(REDO, Messages.getString("Menu.Redo.Tooltip"),
190  evt -> RedoActionPerformed(evt));
191  mainToolbar.add(btnRedo);
192 
193  mainToolbar.add(jSeparator3);
194 
195  btnBreakpoint = GuiToolkit.createButton(STOP, Messages.getString("Tooltip.Breakpoint"),
196  evt -> BreakpointActionPerformed(evt));
197  mainToolbar.add(btnBreakpoint);
198 
199  mainToolbar.add(jSeparator4);
200 
201  btnClassDoc = GuiToolkit.createButton(BOOKS, Messages.getString("Menu.Classbook.Tooltip"),
202  evt -> ClassDocActionPerformed(evt));
203  mainToolbar.add(btnClassDoc);
204 
205  btnHelp = GuiToolkit.createButton(HELP, Messages.getString("Menu.Handbook.Tooltip"),
206  evt -> HelpActionPerformed(evt));
207  mainToolbar.add(btnHelp);
208 
209  mainSplit.setOrientation(JSplitPane.VERTICAL_SPLIT);
210  mainSplit.setResizeWeight(1.0);
211 
212  txtProgram.setFont(GuiToolkit.createFont(Font.MONOSPACED, Font.PLAIN, GuiConfiguration.def.getFontsize()));
213  scrollProgram.setViewportView(new NoTextWrapContainer(txtProgram));
214  scrollProgram.getViewport().setBackground(Color.WHITE);
215  scrollProgram.setRowHeaderView(sideInformation);
216 
217  mainSplit.setTopComponent(scrollProgram);
218 
219  txtOutput.setEditable(false);
220  txtOutput.setFont(GuiToolkit.createFont("Courier New", Font.PLAIN, 12));
221  txtOutput.setFocusable(false);
222  scrollOutput.setViewportView(txtOutput);
223 
224  mainSplit.setRightComponent(scrollOutput);
225 
226  runToolbar.setFloatable(false);
227  runToolbar.setRollover(true);
228  runToolbar.setBackground(new Color(0xEEEEEE));
229  runToolbar.setLayout(new GridBagLayout());
230 
231  GridBagConstraints LAST = new GridBagConstraints();
232  LAST.fill = GridBagConstraints.BOTH;
233  LAST.weightx = 1;
234  LAST.weighty = 1;
235  toolbarGroup.add(runToolbar);
236 
237  btnStart = GuiToolkit.createButton(PLAY, Messages.getString("Tooltip.Start"),
238  evt -> StartActionPerformed(evt));
239  runToolbar.add(btnStart);
240 
241  btnSingleStep = GuiToolkit.createButton(STOP, Messages.getString("Tooltip.SingleStep"),
242  evt -> SingleStepActionPerformed(evt));
243  runToolbar.add(btnSingleStep);
244 
245  btnPause = GuiToolkit.createButton(PAUSE, Messages.getString("Tooltip.Pause"),
246  evt -> PauseActionPerformed(evt));
247  runToolbar.add(btnPause);
248 
249  btnStop = GuiToolkit.createButton(STOP, Messages.getString("Tooltip.Stop"),
250  evt -> StopActionPerformed(evt));
251  runToolbar.add(btnStop);
252 
253  btnSkip = GuiToolkit.createButton(FAST, Messages.getString("Tooltip.Skip"),
254  evt -> SkipActionPerformed(evt));
255  runToolbar.add(btnSkip);
256 
257  sliderSpeed = GuiToolkit.createSlider(Messages.getString("Run.Speed.Slider"),
258  evt -> sliderSpeedStateChanged(evt));
259  sliderSpeed.setValue(10);
260  runToolbar.add(sliderSpeed, LAST);
261 
262  menuFile = GuiToolkit.createMenue(Messages.getString("Menu.File"));
263 
264  mitNew = GuiToolkit.createMenuItem(Messages.getString("Menu.New"), Messages.getString("Menu.New.Tooltip"),
265  evt -> NewActionPerformed(evt), KeyEvent.VK_N);
266  menuFile.add(mitNew);
267 
268  mitOpen = GuiToolkit.createMenuItem(Messages.getString("Menu.Open"), Messages.getString("Menu.Open.Tooltip"),
269  evt -> OpenActionPerformed(evt), KeyEvent.VK_O);
270  menuFile.add(mitOpen);
271 
272  mitSave = GuiToolkit.createMenuItem(Messages.getString("Menu.Save"), Messages.getString("Menu.Save.Tooltip"),
273  evt -> SaveActionPerformed(evt), KeyEvent.VK_S);
274  menuFile.add(mitSave);
275 
276  mitSaveAs = GuiToolkit.createMenuItem(Messages.getString("Menu.SaveAs"),
277  Messages.getString("Menu.SaveAs.Tooltip"), evt -> SaveAsActionPerformed(evt));
278  menuFile.add(mitSaveAs);
279 
280  mitSaveAsHtml = GuiToolkit.createMenuItem(Messages.getString("Menu.SaveAs.Html"),
281  Messages.getString("Menu.SaveAs.Html.Tooltip"), evt -> SaveAsHtmlActionPerformed(evt));
282  menuFile.add(mitSaveAsHtml);
283 
284  mitPrint = GuiToolkit.createMenuItem(Messages.getString("Menu.Print"), Messages.getString("Menu.Print.Tooltip"),
285  evt -> PrintActionPerformed(evt), KeyEvent.VK_P);
286  menuFile.add(mitPrint);
287 
288  mitConfig = GuiToolkit.createMenuItem(Messages.getString("Menu.Config"),
289  Messages.getString("Menu.Config.Tooltip"), evt -> ConfigActionPerformed(evt));
290  menuFile.add(mitConfig);
291 
292  mitExit = GuiToolkit.createMenuItem(Messages.getString("Menu.Close"), Messages.getString("Menu.Close.Tooltip"),
293  evt -> ExitActionPerformed(evt));
294  menuFile.add(mitExit);
295 
296  mainMenu.add(menuFile);
297 
298  editMenu = GuiToolkit.createMenue(Messages.getString("Menu.Edit"));
299 
300  mitCopy = GuiToolkit.createMenuItem(Messages.getString("Menu.Copy"), Messages.getString("Menu.Copy.Tooltip"),
301  evt -> CopyActionPerformed(evt), KeyEvent.VK_C);
302  editMenu.add(mitCopy);
303 
304  mitCut = GuiToolkit.createMenuItem(Messages.getString("Menu.Cut"), Messages.getString("Menu.Cut.Tooltip"),
305  evt -> CutActionPerformed(evt), KeyEvent.VK_X);
306  editMenu.add(mitCut);
307 
308  mitPaste = GuiToolkit.createMenuItem(Messages.getString("Menu.Paste"), Messages.getString("Menu.Paste.Tooltip"),
309  evt -> PasteActionPerformed(evt), KeyEvent.VK_V);
310  editMenu.add(mitPaste);
311 
312  mitUndo = GuiToolkit.createMenuItem(Messages.getString("Menu.Undo"), Messages.getString("Menu.Undo.Tooltip"),
313  evt -> UndoActionPerformed(evt), KeyEvent.VK_Z);
314  editMenu.add(mitUndo);
315 
316  mitRedo = GuiToolkit.createMenuItem(Messages.getString("Menu.Redo"), Messages.getString("Menu.Redo.Tooltip"),
317  evt -> RedoActionPerformed(evt), KeyEvent.VK_Y);
318  editMenu.add(mitRedo);
319 
320  mitPretty = GuiToolkit.createMenuItem(Messages.getString("Menu.Pretty"),
321  Messages.getString("Menu.Pretty.Tooltip"), evt -> PrettyActionPerformed(evt), KeyEvent.VK_F);
322  editMenu.add(mitPretty);
323 
324  mainMenu.add(editMenu);
325 
326  diagramMenu = GuiToolkit.createMenue(Messages.getString("Menu.Visualization"));
327 
328  mitStructogram = GuiToolkit.createMenuItem(Messages.getString("Menu.Structogram"),
329  Messages.getString("Menu.Structogram.Tooltip"), evt -> StructogramActionPerformed(evt));
330  diagramMenu.add(mitStructogram);
331 
332  mitFlowChart = GuiToolkit.createMenuItem(Messages.getString("Menu.Flowchart"),
333  Messages.getString("Menu.Flowchart.Tooltip"), evt -> FlowChartActionPerformed(evt));
334  diagramMenu.add(mitFlowChart);
335 
336  mitObjectChart = GuiToolkit.createMenuItem(Messages.getString("Menu.Objectchart"),
337  Messages.getString("Menu.Objectchart.Tooltip"), evt -> ObjectChartActionPerformed(evt));
338  diagramMenu.add(mitObjectChart);
339 
340  mitClassChart = GuiToolkit.createMenuItem(Messages.getString("Menu.Classchart"),
341  Messages.getString("Menu.Classchart.Tooltip"), evt -> ClassChartActionPerformed(evt));
342  diagramMenu.add(mitClassChart);
343 
344  mainMenu.add(diagramMenu);
345 
346  Language.def.addPluginMenues(mainMenu);
347 
348  helpMenu = GuiToolkit.createMenue(Messages.getString("Menu.Help"));
349 
350  mitClassDoc = GuiToolkit.createMenuItem(Messages.getString("Menu.Classbook"),
351  Messages.getString("Menu.Classbook.Tooltip"), evt -> ClassDocActionPerformed(evt));
352  helpMenu.add(mitClassDoc);
353 
354  mitHelp = GuiToolkit.createMenuItem(Messages.getString("Menu.Handbook"),
355  Messages.getString("Menu.Handbook.Tooltip"), evt -> HelpActionPerformed(evt), KeyEvent.VK_F1);
356  helpMenu.add(mitHelp);
357 
358  mainMenu.add(helpMenu);
359 
360  setJMenuBar(mainMenu);
361 
362  getContentPane().setLayout(new BorderLayout());
363  getContentPane().add(toolbarGroup, BorderLayout.NORTH);
364  getContentPane().add(mainSplit, BorderLayout.CENTER);
365  mainSplit.setPreferredSize(GuiToolkit.scaledDimension(500, 600));
366  pack();
367  mainSplit.setDividerLocation(mainSplit.getHeight() - GuiToolkit.scaledSize(100));
368  }
369 
375  private void StartActionPerformed(java.awt.event.ActionEvent evt) {
376  data.run();
377  }
378 
384  private void SaveActionPerformed(java.awt.event.ActionEvent evt) {
385  save();
386  }
387 
393  private boolean save() {
394  try {
395  if (activeFile != null) {
396  data.saveProgram(activeFile);
397  ResourceLoader.setWorkingDirectory(activeFile.getParent());
398  return true;
399  } else {
400  return saveAs();
401  }
402  } catch (IOException io) {
403  JOptionPane.showMessageDialog(this, Messages.getString("Save.Error.Title"), io.getLocalizedMessage(),
404  JOptionPane.ERROR_MESSAGE);
405  return false;
406  }
407  }
408 
414  private boolean saveAs() {
415  try {
416  if (filechooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
417  File target = filechooser.getSelectedFile();
418  if (!target.getName().contains(".")) {
419  target = new File(target.toString() + ".eos");
420  }
421  if (!overwriteSafetyCheck(target)) {
422  return false;
423  }
424  data.saveProgram(target);
425  activeFile = target;
426  ResourceLoader.setWorkingDirectory(activeFile.getParent());
427  return true;
428  } else {
429  return false;
430  }
431  } catch (IOException io) {
432  JOptionPane.showMessageDialog(this, Messages.getString("Save.Error.Title"), io.getLocalizedMessage(),
433  JOptionPane.ERROR_MESSAGE);
434  return false;
435  }
436  }
437 
443  private void OpenActionPerformed(java.awt.event.ActionEvent evt) {
444  try {
445  if (filechooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
446  if (dirtySafetyCheck()) {
447  data.loadProgram(filechooser.getSelectedFile());
448  activeFile = filechooser.getSelectedFile();
449  ResourceLoader.setWorkingDirectory(activeFile.getParent());
450  }
451  }
452  } catch (IOException io) {
453  JOptionPane.showMessageDialog(this, Messages.getString("Open.Error.Title"), io.getLocalizedMessage(),
454  JOptionPane.ERROR_MESSAGE);
455  }
456  }
457 
465  public void load(File file) {
466 
467  try {
468  filechooser.setSelectedFile(file);
469  data.loadProgram(file);
470  activeFile = file;
471  ResourceLoader.setWorkingDirectory(file.getParent());
472  } catch (IOException io) {
473  JOptionPane.showMessageDialog(this, Messages.getString("Open.Error.Title"), io.getLocalizedMessage(),
474  JOptionPane.ERROR_MESSAGE);
475  }
476  }
477 
483  private void UndoActionPerformed(java.awt.event.ActionEvent evt) {
484  data.undo();
485  }
486 
492  private void RedoActionPerformed(java.awt.event.ActionEvent evt) {
493  data.redo();
494  }
495 
501  private void PrettyActionPerformed(java.awt.event.ActionEvent evt) {
502  data.prettyPrint();
503  }
504 
510  private void CopyActionPerformed(java.awt.event.ActionEvent evt) {
511  txtProgram.copy();
512  }
513 
519  private void CutActionPerformed(java.awt.event.ActionEvent evt) {
520  txtProgram.cut();
521  }
522 
528  private void PasteActionPerformed(java.awt.event.ActionEvent evt) {
529  txtProgram.paste();
530  }
531 
537  private void NewActionPerformed(java.awt.event.ActionEvent evt) {
538  if (dirtySafetyCheck()) {
539  data.clear();
540  activeFile = null;
541  data.discardAllEdits();
542  }
543  }
544 
550  private void HelpActionPerformed(java.awt.event.ActionEvent evt) {
551  Help.showHelp();
552  }
553 
559  private void ClassDocActionPerformed(java.awt.event.ActionEvent evt) {
560  ClassDoc.showDoc();
561  }
562 
568  private void SingleStepActionPerformed(java.awt.event.ActionEvent evt) {
569  data.singleStep();
570  }
571 
577  private void PauseActionPerformed(java.awt.event.ActionEvent evt) {
578  data.pause();
579  }
580 
586  private void StopActionPerformed(java.awt.event.ActionEvent evt) {
587  data.stop();
588  }
589 
595  private void SkipActionPerformed(java.awt.event.ActionEvent evt) {
596  data.skip();
597  }
598 
604  private void sliderSpeedStateChanged(ChangeEvent evt) {
605  data.setSpeed(sliderSpeed.getValue());
606  sliderSpeed.setToolTipText(MessageFormat.format(Messages.getString("Speed.Tooltip"), data.getSpeed()));
607  }
608 
614  private void SaveAsActionPerformed(java.awt.event.ActionEvent evt) {
615  saveAs();
616  }
617 
623  private void BreakpointActionPerformed(java.awt.event.ActionEvent evt) {
624  data.setToggleBreakpoint(txtProgram.getCaretPosition());
625  sideInformation.repaint();
626  }
627 
633  private void PrintActionPerformed(java.awt.event.ActionEvent evt) {
634  PrintFrame pf = new PrintFrame(
635  (activeFile != null) ? activeFile.getName() : Messages.getString("Print.Noname"));
636  pf.init(data.getProgram());
637  pf.setVisible(true);
638  }
639 
645  private void ConfigActionPerformed(java.awt.event.ActionEvent evt) {
646  configFrame.setVisible(true);
647  }
648 
654  private void ExitActionPerformed(java.awt.event.ActionEvent evt) {
655  closeApp();
656  }
657 
663  private void SaveAsHtmlActionPerformed(java.awt.event.ActionEvent evt) {
664 
665  if (exportfilechooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
666  File file = exportfilechooser.getSelectedFile();
667  if (!overwriteSafetyCheck(file)) {
668  return;
669  }
670  String text = HtmlExport.export2html(data.getProgram(), file.getName());
671  try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "Utf-8"))) {
672  bw.append(text);
673  } catch (IOException ioe) {
674  JOptionPane.showMessageDialog(this, Messages.getString("Export.Error.Title"), ioe.getLocalizedMessage(),
675  JOptionPane.ERROR_MESSAGE);
676  }
677  }
678  }
679 
685  private void StructogramActionPerformed(java.awt.event.ActionEvent evt) {
686  new DiagramFrame(new Structogram(), compiler).setVisible(true);
687  }
688 
694  private void FlowChartActionPerformed(java.awt.event.ActionEvent evt) {
695  new DiagramFrame(new FlowChart(), compiler).setVisible(true);
696  }
697 
703  private void ObjectChartActionPerformed(java.awt.event.ActionEvent evt) {
704  new DiagramFrame(new ObjectChart(), compiler).setVisible(true);
705  }
706 
712  private void ClassChartActionPerformed(java.awt.event.ActionEvent evt) {
713  new DiagramFrame(new ClassChart(), compiler).setVisible(true);
714  }
715 
719  private void closeApp() {
720  if (dirtySafetyCheck()) {
721  System.exit(0);
722  }
723  }
724 
725  private boolean overwriteSafetyCheck(File file) {
726  if (!file.exists()) {
727  return true;
728  }
729  int answer = JOptionPane.showConfirmDialog(this, Messages.getString("Save.Overwrite.Text"),
730  Messages.getString("Save.Overwrite.Title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
731  return answer == JOptionPane.OK_OPTION;
732  }
733 
734  private boolean dirtySafetyCheck() {
735  if (data.isSourceDirty()) {
736  int answer = JOptionPane.showConfirmDialog(this, Messages.getString("Closing.Save.Text"),
737  Messages.getString("Closing.Save.Title"), JOptionPane.YES_NO_CANCEL_OPTION,
738  JOptionPane.QUESTION_MESSAGE);
739  switch (answer) {
740  case JOptionPane.YES_OPTION:
741  if (save()) {
742  return true;
743  } else {
744  return false;
745  }
746  case JOptionPane.NO_OPTION:
747  return true;
748  case JOptionPane.CANCEL_OPTION:
749  return false;
750  default:
751  return false;
752  }
753  } else {
754  return true;
755  }
756  }
757 
758  @Override
759  public void fontsizeChanged(int fontsize) {
760  txtProgram.setFont(GuiToolkit.createFont(Font.MONOSPACED, Font.PLAIN, fontsize));
761  }
762 
763  private JButton btnCopy;
764  private JButton btnCut;
765  private JButton btnHelp;
766  private JButton btnClassDoc;
767  private JButton btnOpen;
768  private JButton btnPaste;
769  private JButton btnPause;
770  private JButton btnRedo;
771  private JButton btnSave;
772  private JButton btnBreakpoint;
773  private JButton btnSingleStep;
774  private JButton btnSkip;
775  private JButton btnStart;
776  private JButton btnStop;
777  private JButton btnUndo;
778  private JMenu diagramMenu;
779  private JMenu editMenu;
780  private JMenu helpMenu;
781  private JToolBar.Separator jSeparator1;
782  private JToolBar.Separator jSeparator2;
783  private JToolBar.Separator jSeparator3;
784  private JToolBar.Separator jSeparator4;
785  private JMenuBar mainMenu;
786  private JSplitPane mainSplit;
787  private JToolBar mainToolbar;
788  private JPanel toolbarGroup;
789  private JMenu menuFile;
790  private JMenuItem mitConfig;
791  private JMenuItem mitCopy;
792  private JMenuItem mitCut;
793  private JMenuItem mitPretty;
794  private JMenuItem mitExit;
795  private JMenuItem mitFlowChart;
796  private JMenuItem mitObjectChart;
797  private JMenuItem mitClassChart;
798  private JMenuItem mitHelp;
799  private JMenuItem mitClassDoc;
800  private JMenuItem mitNew;
801  private JMenuItem mitOpen;
802  private JMenuItem mitPaste;
803  private JMenuItem mitPrint;
804  private JMenuItem mitRedo;
805  private JMenuItem mitSave;
806  private JMenuItem mitSaveAs;
807  private JMenuItem mitSaveAsHtml;
808  private JMenuItem mitStructogram;
809 
810  private JMenuItem mitUndo;
811  private JToolBar runToolbar;
812  private JScrollPane scrollOutput;
813  private JScrollPane scrollProgram;
814  private JSlider sliderSpeed;
815  private JTextPane txtOutput;
816  private JTextPane txtProgram;
817  private SideInformation sideInformation;
818 
819  // Window Listener
820  @Override
821  public void windowActivated(WindowEvent we) {
822  }
823 
824  @Override
825  public void windowClosed(WindowEvent we) {
826  }
827 
828  @Override
829  public void windowClosing(WindowEvent arg0) {
830  closeApp();
831  }
832 
833  @Override
834  public void windowDeactivated(WindowEvent we) {
835  }
836 
837  @Override
838  public void windowDeiconified(WindowEvent we) {
839  }
840 
841  @Override
842  public void windowIconified(WindowEvent we) {
843  }
844 
845  @Override
846  public void windowOpened(WindowEvent we) {
847  }
848 
859  private static class NoTextWrapContainer extends JPanel implements Scrollable {
860  private static final long serialVersionUID = 1687707567072204851L;
861  private Scrollable scrollable;
862 
863  public NoTextWrapContainer(JTextPane textpane) {
864  super(new BorderLayout());
865  scrollable = textpane;
866  add(textpane);
867  }
868 
869  @Override
870  public Dimension getPreferredScrollableViewportSize() {
871  return scrollable.getPreferredScrollableViewportSize();
872  }
873 
874  @Override
875  public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
876  return scrollable.getScrollableBlockIncrement(visibleRect, orientation, direction);
877  }
878 
879  @Override
880  public boolean getScrollableTracksViewportHeight() {
881  return scrollable.getScrollableTracksViewportHeight();
882  }
883 
884  @Override
885  public boolean getScrollableTracksViewportWidth() {
886  return scrollable.getScrollableTracksViewportWidth();
887  }
888 
889  @Override
890  public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
891  return scrollable.getScrollableUnitIncrement(visibleRect, orientation, direction);
892  }
893 
894  }
895 
896  private class FunctionKeyDispatcher implements KeyEventDispatcher {
897 
898  @Override
899  public boolean dispatchKeyEvent(KeyEvent ke) {
900  if (ke.getID() == KeyEvent.KEY_PRESSED) {
901  switch (ke.getKeyCode()) {
902  case KeyEvent.VK_F5:
903  data.run();
904  break;
905  case KeyEvent.VK_F6:
906  data.singleStep();
907  break;
908  case KeyEvent.VK_F7:
909  data.pause();
910  break;
911  case KeyEvent.VK_F8:
912  data.stop();
913  break;
914  case KeyEvent.VK_F9:
915  data.skip();
916  break;
917  }
918  }
919  return false;
920  }
921 
922  }
923 }
static void setWorkingDirectory(String workingDirectory)
static Dimension scaledDimension(int width, int height)
static JMenu createMenue(String text)
static JButton createButton(Image image, String tooltip, ActionListener action)
static Font createFont(String name, int style, int size)
Definition: GuiToolkit.java:89
static JSlider createSlider(String text, ChangeListener change)
static JMenuItem createMenuItem(String text, String tooltip, ActionListener action)
synchronized void addConfigurationListener(GuiConfigurationListener cf)
static String getString(String id)
Definition: Messages.java:29
DefaultStyledDocument getOutput()
void init(AutoCompleteHook autoCompleteHook, CodeColorHook codeColorHook)
Definition: SourceCode.java:77
void addPluginMenues(JMenuBar mainMenu)
Definition: Language.java:107
void windowIconified(WindowEvent we)
void windowOpened(WindowEvent we)
void windowClosing(WindowEvent arg0)
void fontsizeChanged(int fontsize)
void windowClosed(WindowEvent we)
void windowDeactivated(WindowEvent we)
void windowDeiconified(WindowEvent we)
void windowActivated(WindowEvent we)
Impressum