PageRenderTime 44ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/jEdit/tags/jedit-4-3-pre5/org/gjt/sp/jedit/gui/MarkerViewer.java

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