PageRenderTime 36ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/jEdit/tags/jedit-4-5-pre1/org/gjt/sp/jedit/gui/MarkerViewer.java

#
Java | 286 lines | 207 code | 37 blank | 42 comment | 21 complexity | 8af51615b69cfe750a4745d4c7e9bd34 MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0, Apache-2.0, LGPL-2.0, LGPL-3.0, GPL-2.0, CC-BY-SA-3.0, LGPL-2.1, GPL-3.0, MPL-2.0-no-copyleft-exception, IPL-1.0
  1. /*
  2. * MarkerViewer.java - Dockable view of markers in the current buffer
  3. * :tabSize=8:indentSize=8:noTabs=false:
  4. * :folding=explicit:collapseFolds=1:
  5. *
  6. * Copyright (C) 2004 Nicholas O'Leary
  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 org.gjt.sp.jedit.gui;
  23. //{{{ Imports
  24. import java.awt.*;
  25. import java.awt.event.*;
  26. import javax.swing.*;
  27. import org.gjt.sp.jedit.*;
  28. import org.gjt.sp.jedit.EditBus.EBHandler;
  29. import org.gjt.sp.jedit.gui.RolloverButton;
  30. import org.gjt.sp.jedit.textarea.JEditTextArea;
  31. import org.gjt.sp.jedit.msg.BufferUpdate;
  32. import org.gjt.sp.jedit.msg.EditPaneUpdate;
  33. import org.gjt.sp.jedit.msg.ViewUpdate;
  34. //}}}
  35. public class MarkerViewer extends JPanel implements ActionListener
  36. {
  37. //{{{ MarkerViewer constructor
  38. public MarkerViewer(View view)
  39. {
  40. super(new BorderLayout());
  41. this.view = view;
  42. Box toolBar = new Box(BoxLayout.X_AXIS);
  43. toolBar.add(new JLabel(GUIUtilities.prettifyMenuLabel(
  44. jEdit.getProperty("markers.label"))));
  45. toolBar.add(Box.createGlue());
  46. RolloverButton addMarker = new RolloverButton(
  47. GUIUtilities.loadIcon("Plus.png"));
  48. addMarker.setToolTipText(GUIUtilities.prettifyMenuLabel(
  49. jEdit.getProperty("add-marker.label")));
  50. addMarker.addActionListener(this);
  51. addMarker.setActionCommand("add-marker");
  52. toolBar.add(addMarker);
  53. previous = new RolloverButton(GUIUtilities.loadIcon("ArrowL.png"));
  54. previous.setToolTipText(GUIUtilities.prettifyMenuLabel(
  55. jEdit.getProperty("prev-marker.label")));
  56. previous.addActionListener(this);
  57. previous.setActionCommand("prev-marker");
  58. toolBar.add(previous);
  59. next = new RolloverButton(GUIUtilities.loadIcon("ArrowR.png"));
  60. next.setToolTipText(GUIUtilities.prettifyMenuLabel(
  61. jEdit.getProperty("next-marker.label")));
  62. next.addActionListener(this);
  63. next.setActionCommand("next-marker");
  64. toolBar.add(next);
  65. clear = new RolloverButton(GUIUtilities.loadIcon("Clear.png"));
  66. clear.setToolTipText(GUIUtilities.prettifyMenuLabel(
  67. jEdit.getProperty("remove-all-markers.label")));
  68. clear.addActionListener(this);
  69. clear.setActionCommand("clear");
  70. toolBar.add(clear);
  71. add(BorderLayout.NORTH, toolBar);
  72. markerList = new JList();
  73. markerList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  74. markerList.setCellRenderer(new Renderer());
  75. markerList.addMouseListener(new MouseHandler());
  76. add(BorderLayout.CENTER,new JScrollPane(markerList));
  77. refreshList();
  78. } //}}}
  79. //{{{ requestDefaultFocus() method
  80. public boolean requestDefaultFocus()
  81. {
  82. markerList.requestFocus();
  83. return true;
  84. } //}}}
  85. //{{{ actionPerformed() method
  86. public void actionPerformed(ActionEvent evt)
  87. {
  88. String cmd = evt.getActionCommand();
  89. if (cmd.equals("clear"))
  90. view.getBuffer().removeAllMarkers();
  91. else if (cmd.equals("add-marker"))
  92. view.getEditPane().addMarker();
  93. else if (cmd.equals("next-marker"))
  94. {
  95. view.getEditPane().goToNextMarker(false);
  96. updateSelection();
  97. }
  98. else if (cmd.equals("prev-marker"))
  99. {
  100. view.getEditPane().goToPrevMarker(false);
  101. updateSelection();
  102. }
  103. } //}}}
  104. //{{{ handleEditPaneUpdate() method
  105. @EBHandler
  106. public void handleEditPaneUpdate(EditPaneUpdate epu)
  107. {
  108. if (epu.getEditPane().getView().equals(view) &&
  109. epu.getWhat().equals(EditPaneUpdate.BUFFER_CHANGED))
  110. {
  111. refreshList();
  112. }
  113. } //}}}
  114. //{{{ handleViewUpdate() method
  115. @EBHandler
  116. public void handleViewUpdate(ViewUpdate vu)
  117. {
  118. if (vu.getView().equals(view) &&
  119. vu.getWhat().equals(ViewUpdate.EDIT_PANE_CHANGED))
  120. {
  121. refreshList();
  122. }
  123. } //}}}
  124. //{{{ handleBufferUpdate() method
  125. @EBHandler
  126. public void handleBufferUpdate(BufferUpdate bu)
  127. {
  128. if (view.getBuffer().equals(bu.getBuffer()) &&
  129. (bu.getWhat().equals(BufferUpdate.MARKERS_CHANGED) || bu.getWhat().equals(BufferUpdate.LOADED)))
  130. {
  131. refreshList();
  132. }
  133. }//}}}
  134. //{{{ addNotify() method
  135. public void addNotify()
  136. {
  137. super.addNotify();
  138. EditBus.addToBus(this);
  139. } //}}}
  140. //{{{ removeNotify() method
  141. public void removeNotify()
  142. {
  143. super.removeNotify();
  144. EditBus.removeFromBus(this);
  145. } //}}}
  146. //{{{ Private members
  147. //{{{ Instance variables
  148. private JList markerList;
  149. private View view;
  150. private RolloverButton previous;
  151. private RolloverButton next;
  152. private RolloverButton clear;
  153. //}}}
  154. //{{{ refreshList() method
  155. private void refreshList()
  156. {
  157. java.util.Vector markers = view.getBuffer().getMarkers();
  158. if (markers.size() > 0)
  159. {
  160. markerList.setListData(markers);
  161. markerList.setEnabled(true);
  162. next.setEnabled(true);
  163. previous.setEnabled(true);
  164. clear.setEnabled(true);
  165. }
  166. else
  167. {
  168. markerList.setListData(new Object[] {
  169. jEdit.getProperty("no-markers.label") });
  170. markerList.setEnabled(false);
  171. next.setEnabled(false);
  172. previous.setEnabled(false);
  173. clear.setEnabled(false);
  174. }
  175. } //}}}
  176. //{{{ goToSelectedMarker() method
  177. private void goToSelectedMarker()
  178. {
  179. Object value = markerList.getSelectedValue();
  180. if(!(value instanceof Marker))
  181. return;
  182. Marker mark = (Marker)value;
  183. view.getTextArea().setCaretPosition(mark.getPosition());
  184. view.toFront();
  185. view.requestFocus();
  186. view.getTextArea().requestFocus();
  187. } //}}}
  188. //{{{ updateSelection() method
  189. private void updateSelection()
  190. {
  191. ListModel model = markerList.getModel();
  192. int currentLine = view.getTextArea().getCaretLine();
  193. Buffer buffer = view.getBuffer();
  194. for (int i = 0; i < model.getSize(); i++)
  195. {
  196. Object o = model.getElementAt(i);
  197. if (o instanceof Marker)
  198. {
  199. Marker mark = (Marker)model.getElementAt(i);
  200. if (buffer.getLineOfOffset(mark.getPosition()) == currentLine)
  201. {
  202. markerList.setSelectedIndex(i);
  203. break;
  204. }
  205. }
  206. }
  207. } //}}}
  208. //}}}
  209. //{{{ Inner classes
  210. //{{{ Renderer Class
  211. class Renderer extends DefaultListCellRenderer
  212. {
  213. public Component getListCellRendererComponent(
  214. JList list, Object value, int index,
  215. boolean isSelected, boolean cellHasFocus)
  216. {
  217. super.getListCellRendererComponent(list,value,
  218. index,isSelected,cellHasFocus);
  219. if(value instanceof Marker)
  220. {
  221. Marker mark = (Marker)value;
  222. JEditTextArea textArea = view.getTextArea();
  223. int pos = textArea.getLineOfOffset(mark.getPosition());
  224. String txt = view.getTextArea().getLineText(pos);
  225. if (txt.equals(""))
  226. txt = jEdit.getProperty("markers.blank-line");
  227. char shortcut_char = mark.getShortcut();
  228. String shortcut = "";
  229. if (shortcut_char > 0)
  230. shortcut = "["+shortcut_char+"]";
  231. setText((pos+1)+" "+shortcut+": "+txt);
  232. }
  233. return this;
  234. }
  235. } //}}}
  236. //{{{ MouseHandler Class
  237. class MouseHandler extends MouseAdapter
  238. {
  239. public void mousePressed(MouseEvent evt)
  240. {
  241. if(evt.isConsumed())
  242. return;
  243. int index = markerList.locationToIndex(evt.getPoint());
  244. markerList.setSelectedIndex(index);
  245. goToSelectedMarker();
  246. }
  247. } //}}}
  248. //}}}
  249. }