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