/plugins/Console/tags/release-4-3-8/console/options/ErrorsOptionPane.java

# · Java · 291 lines · 185 code · 46 blank · 60 comment · 21 complexity · e94a204b250bbc5efb95afbb6f43309d MD5 · raw file

  1. /*
  2. * ErrorsOptionPane.java - Error pattern option pane
  3. * :tabSize=8:indentSize=8:noTabs=false:
  4. * :folding=explicit:collapseFolds=1:
  5. *
  6. * Copyright (C) 1999, 2003, 2005 Slava Pestov, Alan Ezust
  7. *
  8. * This program is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU General Public License
  10. * as published by the Free Software Foundation; either version 2
  11. * of the License, or any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  21. */
  22. package console.options;
  23. //{{{ Imports
  24. import java.awt.BorderLayout;
  25. import java.awt.Dimension;
  26. import java.awt.event.ActionEvent;
  27. import java.awt.event.ActionListener;
  28. import java.awt.event.MouseAdapter;
  29. import java.awt.event.MouseEvent;
  30. import javax.swing.Box;
  31. import javax.swing.BoxLayout;
  32. import javax.swing.DefaultListModel;
  33. import javax.swing.JButton;
  34. import javax.swing.JList;
  35. import javax.swing.JOptionPane;
  36. import javax.swing.JPanel;
  37. import javax.swing.JScrollPane;
  38. import javax.swing.ListSelectionModel;
  39. import javax.swing.border.EmptyBorder;
  40. import javax.swing.border.TitledBorder;
  41. import javax.swing.event.ListSelectionEvent;
  42. import javax.swing.event.ListSelectionListener;
  43. import org.gjt.sp.jedit.AbstractOptionPane;
  44. import org.gjt.sp.jedit.GUIUtilities;
  45. import org.gjt.sp.jedit.jEdit;
  46. import org.gjt.sp.jedit.gui.RolloverButton;
  47. import console.ErrorListModel;
  48. import console.ErrorMatcher;
  49. import console.gui.PanelStack;
  50. //}}}
  51. //{{{ ErrorsOptionPane class
  52. /**
  53. * A view/editor for an ErrorListModel.
  54. *
  55. * Shows a list of the current ErrorMatchers which can be used, and permits the easy
  56. * editing of them.
  57. */
  58. public class ErrorsOptionPane extends AbstractOptionPane
  59. {
  60. //{{{ Instance variables
  61. // Model for storing all of the ErrorMatchers
  62. private ErrorListModel errorListModel;
  63. // View for the list of errors
  64. private JList errorList;
  65. PanelStack panelStack;
  66. private JButton add;
  67. private JButton remove;
  68. private JButton reset;
  69. private JButton up;
  70. private JButton down;
  71. //}}}
  72. // {{{ Public members
  73. //{{{ ErrorsOptionPane constructor
  74. public ErrorsOptionPane()
  75. {
  76. super("console.errors");
  77. } //}}}
  78. // }}}
  79. //{{{ Protected members
  80. //{{{ _init() method
  81. protected void _init()
  82. {
  83. setLayout(new BorderLayout());
  84. addComponent(Box.createVerticalStrut(6));
  85. errorListModel = ErrorListModel.load();
  86. errorList = new JList();
  87. errorList.setModel(errorListModel);
  88. JScrollPane jsp =new JScrollPane(errorList);
  89. jsp.setMinimumSize(new Dimension(125, 300));
  90. errorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  91. errorList.addListSelectionListener(new ListHandler());
  92. errorList.addMouseListener(new MouseHandler());
  93. errorList.setVisibleRowCount(5);
  94. // JSplitPane errors = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
  95. // errors.add(jsp);
  96. String title = jEdit.getProperty("options.console.errors.caption");
  97. jsp.setBorder(new TitledBorder(title));
  98. Box westBox = new Box(BoxLayout.Y_AXIS);
  99. westBox.add(jsp);
  100. // add(jsp, BorderLayout.WEST);
  101. panelStack = new PanelStack();
  102. // errors.add(panelStack);
  103. //add(errors, BorderLayout.CENTER);
  104. add(panelStack, BorderLayout.CENTER);
  105. JPanel buttons = new JPanel();
  106. buttons.setBorder(new EmptyBorder(6,0,0,0));
  107. buttons.setLayout(new BoxLayout(buttons,BoxLayout.X_AXIS));
  108. /* buttons.add(add = new JButton(jEdit.getProperty(
  109. "options.console.errors.add")));
  110. buttons.add(remove = new JButton(jEdit.getProperty(
  111. "options.console.errors.remove"))); */
  112. add = new RolloverButton(GUIUtilities.loadIcon("Plus.png"));
  113. add.setToolTipText(jEdit.getProperty("common.add"));
  114. buttons.add(add);
  115. remove = new RolloverButton(GUIUtilities.loadIcon("Minus.png"));
  116. remove.setToolTipText(jEdit.getProperty("common.remove"));
  117. buttons.add(remove);
  118. up = new RolloverButton(GUIUtilities.loadIcon("ArrowU.png"));
  119. up.setToolTipText(jEdit.getProperty("common.moveUp"));
  120. buttons.add(up);
  121. down= new RolloverButton(GUIUtilities.loadIcon("ArrowD.png"));
  122. down.setToolTipText(jEdit.getProperty("common.moveDown"));
  123. buttons.add(down);
  124. reset = new RolloverButton(GUIUtilities.loadIcon("Reload.png"));
  125. reset.setToolTipText(jEdit.getProperty("options.console.errors.reload.tooltip"));
  126. buttons.add(reset);
  127. ActionHandler handler = new ActionHandler();
  128. add.addActionListener(handler);
  129. remove.addActionListener(handler);
  130. up.addActionListener(handler);
  131. down.addActionListener(handler);
  132. reset.addActionListener(handler);
  133. westBox.add(buttons);
  134. // add(buttons, BorderLayout.SOUTH);
  135. add(westBox, BorderLayout.WEST);
  136. errorList.setSelectedIndex(0);
  137. updateButtons();
  138. } //}}}
  139. protected void _load()
  140. {
  141. errorListModel.load();
  142. }
  143. //{{{ _save() method
  144. protected void _save()
  145. {
  146. errorListModel.save();
  147. } //}}}
  148. //}}}
  149. //{{{ Private members
  150. //{{{ createMatcherListModel() method
  151. /** @deprecated - use ErrorListModel.load() */
  152. private DefaultListModel createMatcherListModel()
  153. {
  154. return ErrorListModel.load();
  155. } //}}}
  156. //{{{ updateButtons() method
  157. private void updateButtons()
  158. {
  159. ErrorMatcher matcher = (ErrorMatcher)errorList.getSelectedValue();
  160. if (matcher != null)
  161. {
  162. String internalName = matcher.internalName();
  163. if (!panelStack.raise(internalName)) {
  164. ErrorMatcherPanel panel = new ErrorMatcherPanel(internalName, matcher);
  165. panelStack.add(internalName, panel);
  166. panelStack.raise(internalName);
  167. validateTree();
  168. }
  169. }
  170. } //}}}
  171. //}}}
  172. //{{{ ActionHandler class
  173. class ActionHandler implements ActionListener
  174. {
  175. public void actionPerformed(ActionEvent evt)
  176. {
  177. Object source = evt.getSource();
  178. if (source == reset) {
  179. errorListModel.reset();
  180. errorList.setModel(errorListModel);
  181. errorList.repaint();
  182. }
  183. if(source == add)
  184. {
  185. /* Open a dialog and ask for the name: */
  186. String matcherNamePrompt = jEdit.getProperty("options.console.errors.name");
  187. String matcherName = JOptionPane.showInputDialog(matcherNamePrompt);
  188. ErrorMatcher matcher = new ErrorMatcher(matcherName);
  189. matcher.name = matcherName;
  190. matcher.user = true;
  191. int index = errorList.getSelectedIndex() + 1;
  192. errorListModel.insertElementAt(matcher,index);
  193. errorList.setSelectedIndex(index);
  194. errorList.repaint();
  195. }
  196. else if(source == remove)
  197. {
  198. int index = errorList.getSelectedIndex();
  199. errorListModel.removeElementAt(index);
  200. if (errorListModel.size() > index)
  201. errorList.setSelectedIndex(index);
  202. else if (! errorListModel.isEmpty())
  203. errorList.setSelectedIndex(errorListModel.size() - 1);
  204. errorList.repaint();
  205. }
  206. else if(source == up)
  207. {
  208. int index = errorList.getSelectedIndex();
  209. ErrorMatcher selected = errorListModel.get(index);
  210. errorListModel.removeElementAt(index);
  211. errorListModel.insertElementAt(selected,index-1);
  212. errorList.setSelectedIndex(index-1);
  213. errorList.repaint();
  214. }
  215. else if(source == down)
  216. {
  217. int index = errorList.getSelectedIndex();
  218. ErrorMatcher matcher = errorListModel.get(index);
  219. errorListModel.removeElementAt(index);
  220. errorListModel.insertElementAt(matcher, index+1);
  221. errorList.setSelectedIndex(index+1);
  222. errorList.repaint();
  223. }
  224. }
  225. } //}}}
  226. //{{{ ListHandler class
  227. class ListHandler implements ListSelectionListener
  228. {
  229. public void valueChanged(ListSelectionEvent evt)
  230. {
  231. updateButtons();
  232. }
  233. } //}}}
  234. //{{{ MouseHandler class
  235. class MouseHandler extends MouseAdapter
  236. {
  237. public void mouseClicked(MouseEvent evt)
  238. {
  239. if(evt.getClickCount() == 2)
  240. {
  241. updateButtons();
  242. }
  243. }
  244. } //}}}
  245. } //}}}