/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}