KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > gjt > sp > jedit > gui > RegisterViewer


1 /*
2  * RegisterViewer.java - Dockable view of register contents
3  * :tabSize=8:indentSize=8:noTabs=false:
4  * :folding=explicit:collapseFolds=1:
5  *
6  * Copyright (C) 2004, 2005 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
23 package org.gjt.sp.jedit.gui;
24
25 //{{{ Imports
26
import java.awt.*;
27 import java.awt.event.*;
28 import javax.swing.*;
29 import javax.swing.border.EmptyBorder JavaDoc;
30 import javax.swing.event.*;
31 import org.gjt.sp.jedit.*;
32 import org.gjt.sp.jedit.msg.RegisterChanged;
33 import org.gjt.sp.jedit.msg.PropertiesChanged;
34 //}}}
35

36 public class RegisterViewer extends JPanel implements EBComponent, ActionListener
37 {
38     //{{{ RegisterViewer constructor
39
public RegisterViewer(View view, String JavaDoc position)
40     {
41         super(new BorderLayout());
42         this.view = view;
43         Box toolBar = new Box(BoxLayout.X_AXIS);
44         JLabel label = new JLabel(
45             jEdit.getProperty("view-registers.title"));
46         label.setBorder(new EmptyBorder JavaDoc(0,0,3,0));
47         toolBar.add(label);
48         
49         toolBar.add(Box.createGlue());
50
51         RolloverButton pasteRegister = new RolloverButton(
52             GUIUtilities.loadIcon("Paste.png"));
53         pasteRegister.setToolTipText(GUIUtilities.prettifyMenuLabel(
54             jEdit.getProperty("paste-string-register.label")));
55         pasteRegister.addActionListener(this);
56         pasteRegister.setActionCommand("paste-string-register");
57         toolBar.add(pasteRegister);
58
59         RolloverButton clearRegister = new RolloverButton(
60             GUIUtilities.loadIcon("Clear.png"));
61         clearRegister.setToolTipText(GUIUtilities.prettifyMenuLabel(
62             jEdit.getProperty("clear-string-register.label")));
63         clearRegister.addActionListener(this);
64         clearRegister.setActionCommand("clear-string-register");
65         toolBar.add(clearRegister);
66
67         
68         add(BorderLayout.NORTH,toolBar);
69
70         DefaultListModel registerModel = new DefaultListModel();
71         registerList = new JList(registerModel);
72         registerList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
73         registerList.setCellRenderer(new Renderer());
74         registerList.addListSelectionListener(new ListHandler());
75         registerList.addMouseListener(new MouseHandler());
76
77         contentTextArea = new JTextArea(10,20);
78         contentTextArea.setEditable(true);
79         documentHandler = new DocumentHandler();
80         //contentTextArea.getDocument().addDocumentListener(documentHandler);
81
contentTextArea.addFocusListener(new FocusHandler());
82
83         int orientation = JSplitPane.HORIZONTAL_SPLIT;
84         if (position.equals(DockableWindowManager.LEFT) ||
85             position.equals(DockableWindowManager.RIGHT))
86             orientation = JSplitPane.VERTICAL_SPLIT;
87
88         add(BorderLayout.CENTER,splitPane = new JSplitPane(orientation,
89             jEdit.getBooleanProperty("appearance.continuousLayout"),
90             new JScrollPane(registerList),
91             new JScrollPane(contentTextArea)));
92
93         refreshList();
94     } //}}}
95

96     //{{{ actionPerformed() method
97
public void actionPerformed(ActionEvent evt)
98     {
99         String JavaDoc cmd = evt.getActionCommand();
100         if (cmd.equals("paste-string-register"))
101             insertRegister();
102         else if (cmd.equals("clear-string-register"))
103         {
104             Object JavaDoc o = registerList.getSelectedValue();
105             if (o == null)
106                 return;
107             else if (o instanceof Character JavaDoc)
108             {
109                 Registers.clearRegister(((Character JavaDoc)o).charValue());
110                 refreshList();
111             }
112         }
113     } //}}}
114

115     //{{{ handleMessage
116
public void handleMessage(EBMessage msg)
117     {
118         if (msg instanceof RegisterChanged)
119         {
120             if (((RegisterChanged)msg).getRegisterName() != '%')
121                 refreshList();
122         }
123         else if (msg instanceof PropertiesChanged)
124         {
125             GUIUtilities.initContinuousLayout(splitPane);
126         }
127
128     }//}}}
129

130     //{{{ addNotify() method
131
public void addNotify()
132     {
133         super.addNotify();
134         EditBus.addToBus(this);
135     } //}}}
136

137     //{{{ removeNotify() method
138
public void removeNotify()
139     {
140         super.removeNotify();
141         EditBus.removeFromBus(this);
142     } //}}}
143

144     //{{{ Private members
145

146     //{{{ Instance variables
147
private JList registerList;
148     private JTextArea contentTextArea;
149     private DocumentHandler documentHandler;
150     private View view;
151     private boolean editing;
152     private JSplitPane splitPane;
153     //}}}
154

155     //{{{ refreshList
156
private void refreshList()
157     {
158         DefaultListModel registerModel = (DefaultListModel)registerList.getModel();
159         Object JavaDoc o = registerList.getSelectedValue();
160         int selected = -1;
161         if (o != null && o instanceof Character JavaDoc)
162             selected = ((Character JavaDoc)o).charValue();
163
164         registerModel.removeAllElements();
165         Registers.Register[] registers = Registers.getRegisters();
166
167         int index = 0;
168         for(int i = 0; i < registers.length; i++)
169         {
170             Registers.Register reg = registers[i];
171             if(reg == null)
172                 continue;
173             if (i == '%')
174                 continue;
175
176             String JavaDoc value = reg.toString();
177             if(value == null) // || value.length() == 0)
178
continue;
179             if (i == selected)
180                 index = registerModel.size();
181             registerModel.addElement(new Character JavaDoc((char)i));
182         }
183
184         if(registerModel.getSize() == 0)
185         {
186             registerModel.addElement(jEdit.getProperty("view-registers.none"));
187             registerList.setEnabled(false);
188         }
189         else
190             registerList.setEnabled(true);
191         registerList.setSelectedIndex(index);
192     } //}}}
193

194     //{{{ updateSelected
195
private void updateSelected()
196     {
197         Object JavaDoc o = registerList.getSelectedValue();
198         if (o == null)
199             return;
200         else if (o instanceof Character JavaDoc)
201         {
202             Registers.Register reg = Registers.getRegister(((Character JavaDoc)o).charValue());
203             if (!editing)
204             {
205                 contentTextArea.setText(reg.toString());
206                 contentTextArea.setEditable(true);
207             }
208         }
209         else
210         {
211             if (!editing)
212             {
213                 contentTextArea.setText("");
214                 contentTextArea.setEditable(false);
215             }
216         }
217         if (!editing)
218             contentTextArea.setCaretPosition(0);
219     }//}}}
220

221     //{{{ insertRegister
222
private void insertRegister()
223     {
224         Object JavaDoc o = registerList.getSelectedValue();
225         if (o == null || !(o instanceof Character JavaDoc))
226             return;
227         Registers.Register reg = Registers.getRegister(((Character JavaDoc)o).charValue());
228         view.getTextArea().setSelectedText(reg.toString());
229         view.getTextArea().requestFocus();
230     } //}}}
231

232     //}}}
233

234     //{{{ Inner classes
235

236     //{{{ Renderer Class
237
static class Renderer extends DefaultListCellRenderer
238     {
239         public Component getListCellRendererComponent(
240             JList list, Object JavaDoc value, int index,
241             boolean isSelected, boolean cellHasFocus)
242         {
243             super.getListCellRendererComponent(list,value,
244             index,isSelected,cellHasFocus);
245
246             if(value instanceof Character JavaDoc)
247             {
248                 char name = ((Character JavaDoc)value).charValue();
249
250                 String JavaDoc label;
251
252                 if(name == '\n')
253                     label = "\n";
254                 else if(name == '\t')
255                     label = "\t";
256                 else if(name == '$')
257                     label = jEdit.getProperty("view-registers.clipboard");
258                 else if(name == '%')
259                     label = jEdit.getProperty("view-registers.selection");
260                 else
261                     label = String.valueOf(name);
262                 String JavaDoc registerValue = Registers.getRegister(name).toString();
263                 if (registerValue.length() > 100)
264                     registerValue = registerValue.substring(0,100)+"...";
265                 registerValue = registerValue.replaceAll("\n"," ");
266                 registerValue = registerValue.replaceAll("\t"," ");
267                 setText(label+" : "+registerValue);
268             }
269
270             return this;
271         }
272     } //}}}
273

274     //{{{ ListHandler Class
275
class ListHandler implements ListSelectionListener
276     {
277         public void valueChanged(ListSelectionEvent evt)
278         {
279             Object JavaDoc value = registerList.getSelectedValue();
280             if(!(value instanceof Character JavaDoc))
281                 return;
282
283             char name = ((Character JavaDoc)value).charValue();
284
285             Registers.Register reg = Registers.getRegister(name);
286             if(reg == null)
287                 return;
288             updateSelected();
289         }
290     } //}}}
291

292     //{{{ MouseHandler Class
293
class MouseHandler extends MouseAdapter
294     {
295         /*public void mousePressed(MouseEvent evt)
296         {
297             if(evt.isConsumed())
298                 return;
299             int index = registerList.locationToIndex(
300                 evt.getPoint());
301             registerList.setSelectedIndex(index);
302         } */

303
304         public void mouseClicked(MouseEvent evt)
305         {
306             if (evt.getClickCount() % 2 == 0)
307                 insertRegister();
308         }
309     } //}}}
310

311     //{{{ DocumentHandler Class
312
class DocumentHandler implements DocumentListener
313     {
314         public void changedUpdate(DocumentEvent e)
315         {
316             updateRegisterSafely();
317         }
318
319         public void insertUpdate(DocumentEvent e)
320         {
321             updateRegisterSafely();
322         }
323
324         public void removeUpdate(DocumentEvent e)
325         {
326             updateRegisterSafely();
327         }
328
329         private void updateRegisterSafely()
330         {
331             try
332             {
333                 editing = true;
334                 updateRegister();
335             }
336             finally
337             {
338                 editing = false;
339             }
340         }
341         
342         private void updateRegister()
343         {
344             Object JavaDoc value = registerList.getSelectedValue();
345             if(!(value instanceof Character JavaDoc))
346                 return;
347             char name = ((Character JavaDoc)value).charValue();
348             Registers.setRegister(name,contentTextArea.getText());
349         }
350     } //}}}
351

352     //{{{ FocusHandler Class
353
class FocusHandler implements FocusListener
354     {
355         public void focusGained(FocusEvent e)
356         {
357             contentTextArea.getDocument().addDocumentListener(documentHandler);
358         }
359         public void focusLost(FocusEvent e)
360         {
361             contentTextArea.getDocument().removeDocumentListener(documentHandler);
362         }
363     }//}}}
364

365     //}}}
366
}
367
Popular Tags