PageRenderTime 33ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 1ms

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

#
Java | 320 lines | 231 code | 39 blank | 50 comment | 47 complexity | a779f61eafc6b85f6d78e86a18a92cba 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. * 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. 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.msg.RegisterChanged;
  31. import org.gjt.sp.util.Log;
  32. //}}}
  33. public class RegisterViewer extends JPanel implements EBComponent
  34. {
  35. //{{{ RegisterViewer constructor
  36. public RegisterViewer(View view, String position)
  37. {
  38. super(new BorderLayout());
  39. this.view = view;
  40. JLabel label = new JLabel(
  41. jEdit.getProperty("view-registers.title"));
  42. label.setBorder(new EmptyBorder(0,0,3,0));
  43. add(BorderLayout.NORTH,label);
  44. DefaultListModel registerModel = new DefaultListModel();
  45. registerList = new JList(registerModel);
  46. registerList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  47. registerList.setCellRenderer(new Renderer());
  48. registerList.addListSelectionListener(new ListHandler());
  49. registerList.addMouseListener(new MouseHandler());
  50. contentTextArea = new JTextArea(10,20);
  51. contentTextArea.setEditable(true);
  52. documentHandler = new DocumentHandler();
  53. //contentTextArea.getDocument().addDocumentListener(documentHandler);
  54. contentTextArea.addFocusListener(new FocusHandler());
  55. int orientation = JSplitPane.HORIZONTAL_SPLIT;
  56. if (position.equals(DockableWindowManager.LEFT) ||
  57. position.equals(DockableWindowManager.RIGHT))
  58. orientation = JSplitPane.VERTICAL_SPLIT;
  59. add(BorderLayout.CENTER,new JSplitPane(orientation,
  60. true,
  61. new JScrollPane(registerList),
  62. new JScrollPane(contentTextArea)
  63. ));
  64. refreshList();
  65. } //}}}
  66. //{{{ handleMessage
  67. public void handleMessage(EBMessage msg)
  68. {
  69. if (msg instanceof RegisterChanged)
  70. {
  71. if (((RegisterChanged)msg).getRegisterName() != '%')
  72. refreshList();
  73. }
  74. }//}}}
  75. //{{{ addNotify() method
  76. public void addNotify()
  77. {
  78. super.addNotify();
  79. EditBus.addToBus(this);
  80. } //}}}
  81. //{{{ removeNotify() method
  82. public void removeNotify()
  83. {
  84. super.removeNotify();
  85. EditBus.removeFromBus(this);
  86. } //}}}
  87. //{{{ Private members
  88. //{{{ Instance variables
  89. private JList registerList;
  90. private JTextArea contentTextArea;
  91. private DocumentHandler documentHandler;
  92. private View view;
  93. private boolean editing;
  94. //}}}
  95. //{{{ refreshList
  96. private void refreshList()
  97. {
  98. DefaultListModel registerModel = (DefaultListModel)registerList.getModel();
  99. Object o = registerList.getSelectedValue();
  100. int index = 0;
  101. int selected = -1;
  102. if (o != null && o instanceof Character)
  103. selected = ((Character)o).charValue();
  104. registerModel.removeAllElements();
  105. Registers.Register[] registers = Registers.getRegisters();
  106. for(int i = 0; i < registers.length; i++)
  107. {
  108. Registers.Register reg = registers[i];
  109. if(reg == null)
  110. continue;
  111. if (i == '%')
  112. continue;
  113. String value = reg.toString();
  114. if(value == null) // || value.length() == 0)
  115. continue;
  116. if (i == selected)
  117. index = registerModel.size();
  118. registerModel.addElement(new Character((char)i));
  119. }
  120. if(registerModel.getSize() == 0)
  121. {
  122. registerModel.addElement(jEdit.getProperty("view-registers.none"));
  123. registerList.setEnabled(false);
  124. }
  125. else
  126. registerList.setEnabled(true);
  127. registerList.setSelectedIndex(index);
  128. } //}}}
  129. //{{{ updateSelected
  130. private void updateSelected()
  131. {
  132. Object o = registerList.getSelectedValue();
  133. if (o == null)
  134. return;
  135. else if (o instanceof Character)
  136. {
  137. Registers.Register reg = Registers.getRegister(((Character)o).charValue());
  138. if (!editing)
  139. {
  140. contentTextArea.setText(reg.toString());
  141. contentTextArea.setEditable(true);
  142. }
  143. }
  144. else
  145. {
  146. if (!editing)
  147. {
  148. contentTextArea.setText("");
  149. contentTextArea.setEditable(false);
  150. }
  151. }
  152. if (!editing)
  153. contentTextArea.setCaretPosition(0);
  154. }//}}}
  155. //{{{ insertRegister
  156. private void insertRegister()
  157. {
  158. Object o = registerList.getSelectedValue();
  159. if (o == null || !(o instanceof Character))
  160. return;
  161. Registers.Register reg = Registers.getRegister(((Character)o).charValue());
  162. view.getTextArea().setSelectedText(reg.toString());
  163. view.getTextArea().requestFocus();
  164. } //}}}
  165. //}}}
  166. //{{{ Inner classes
  167. //{{{ Renderer Class
  168. class Renderer extends DefaultListCellRenderer
  169. {
  170. public Component getListCellRendererComponent(
  171. JList list, Object value, int index,
  172. boolean isSelected, boolean cellHasFocus)
  173. {
  174. super.getListCellRendererComponent(list,value,
  175. index,isSelected,cellHasFocus);
  176. if(value instanceof Character)
  177. {
  178. char name = ((Character)value).charValue();
  179. String label;
  180. if(name == '\n')
  181. label = "\n";
  182. else if(name == '\t')
  183. label = "\t";
  184. else if(name == '$')
  185. label = jEdit.getProperty("view-registers.clipboard");
  186. else if(name == '%')
  187. label = jEdit.getProperty("view-registers.selection");
  188. else
  189. label = String.valueOf(name);
  190. String registerValue = Registers.getRegister(name).toString();
  191. if (registerValue.length() > 100)
  192. registerValue = registerValue.substring(0,100)+"...";
  193. registerValue = registerValue.replaceAll("\n"," ");
  194. registerValue = registerValue.replaceAll("\t"," ");
  195. setText(label+" : "+registerValue);
  196. }
  197. return this;
  198. }
  199. } //}}}
  200. //{{{ ListHandler Class
  201. class ListHandler implements ListSelectionListener
  202. {
  203. public void valueChanged(ListSelectionEvent evt)
  204. {
  205. Object value = registerList.getSelectedValue();
  206. if(!(value instanceof Character))
  207. return;
  208. char name = ((Character)value).charValue();
  209. Registers.Register reg = Registers.getRegister(name);
  210. if(reg == null)
  211. return;
  212. updateSelected();
  213. }
  214. } //}}}
  215. //{{{ MouseHandler Class
  216. class MouseHandler extends MouseAdapter
  217. {
  218. /*public void mousePressed(MouseEvent evt)
  219. {
  220. if(evt.isConsumed())
  221. return;
  222. int index = registerList.locationToIndex(
  223. evt.getPoint());
  224. registerList.setSelectedIndex(index);
  225. } */
  226. public void mouseClicked(MouseEvent evt)
  227. {
  228. if (evt.getClickCount() % 2 == 0)
  229. insertRegister();
  230. }
  231. } //}}}
  232. //{{{ DocumentHandler Class
  233. class DocumentHandler implements DocumentListener
  234. {
  235. public void changedUpdate(DocumentEvent e)
  236. {
  237. updateRegisterSafely();
  238. }
  239. public void insertUpdate(DocumentEvent e)
  240. {
  241. updateRegisterSafely();
  242. }
  243. public void removeUpdate(DocumentEvent e)
  244. {
  245. updateRegisterSafely();
  246. }
  247. private void updateRegisterSafely()
  248. {
  249. try
  250. {
  251. editing = true;
  252. updateRegister();
  253. }
  254. finally
  255. {
  256. editing = false;
  257. }
  258. }
  259. private void updateRegister()
  260. {
  261. Object value = registerList.getSelectedValue();
  262. if(!(value instanceof Character))
  263. return;
  264. char name = ((Character)value).charValue();
  265. Registers.setRegister(name,contentTextArea.getText());
  266. }
  267. } //}}}
  268. //{{{ FocusHandler Class
  269. class FocusHandler implements FocusListener
  270. {
  271. public void focusGained(FocusEvent e)
  272. {
  273. contentTextArea.getDocument().addDocumentListener(documentHandler);
  274. }
  275. public void focusLost(FocusEvent e)
  276. {
  277. contentTextArea.getDocument().removeDocumentListener(documentHandler);
  278. }
  279. }//}}}
  280. //}}}
  281. }