PageRenderTime 77ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/jEdit/tags/jedit-4-5-pre1/org/gjt/sp/jedit/options/BrowserColorsOptionPane.java

#
Java | 407 lines | 304 code | 44 blank | 59 comment | 32 complexity | c4bfde03d0a6d1a72ccd60f0ee650fbc 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. * BrowserColorsOptionPane.java - Browser colors options panel
  3. * :tabSize=8:indentSize=8:noTabs=false:
  4. * :folding=explicit:collapseFolds=1:
  5. *
  6. * Copyright (C) 2001, 2002 Slava Pestov
  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.options;
  23. //{{{ Imports
  24. import javax.swing.border.EmptyBorder;
  25. import javax.swing.event.*;
  26. import javax.swing.table.*;
  27. import javax.swing.*;
  28. import java.awt.event.*;
  29. import java.awt.*;
  30. import java.util.*;
  31. import java.util.List;
  32. import org.gjt.sp.jedit.gui.RolloverButton;
  33. import org.gjt.sp.jedit.*;
  34. //}}}
  35. //{{{ BrowserColorsOptionPane class
  36. /**
  37. * Browser color editor.
  38. * @author Slava Pestov
  39. * @version $Id: BrowserColorsOptionPane.java 14468 2009-01-25 13:26:51Z kpouer $
  40. */
  41. public class BrowserColorsOptionPane extends AbstractOptionPane
  42. {
  43. //{{{ BrowserColorsOptionPane constructor
  44. public BrowserColorsOptionPane()
  45. {
  46. super("browser.colors");
  47. } //}}}
  48. //{{{ Protected members
  49. //{{{ _init() method
  50. protected void _init()
  51. {
  52. setLayout(new BorderLayout());
  53. colorsModel = new BrowserColorsModel();
  54. colorsTable = new JTable(colorsModel);
  55. colorsTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
  56. colorsTable.getTableHeader().setReorderingAllowed(false);
  57. colorsTable.addMouseListener(new MouseHandler());
  58. colorsTable.getSelectionModel().addListSelectionListener(
  59. new SelectionHandler());
  60. TableColumnModel tcm = colorsTable.getColumnModel();
  61. tcm.getColumn(1).setCellRenderer(new BrowserColorsModel.ColorRenderer());
  62. Dimension d = colorsTable.getPreferredSize();
  63. d.height = Math.min(d.height,200);
  64. JScrollPane scroller = new JScrollPane(colorsTable);
  65. scroller.setPreferredSize(d);
  66. add(BorderLayout.CENTER,scroller);
  67. JPanel buttons = new JPanel();
  68. buttons.setBorder(new EmptyBorder(3,0,0,0));
  69. buttons.setLayout(new BoxLayout(buttons,BoxLayout.X_AXIS));
  70. ActionHandler actionHandler = new ActionHandler();
  71. add = new RolloverButton(GUIUtilities.loadIcon("Plus.png"));
  72. add.setToolTipText(jEdit.getProperty("common.add"));
  73. add.addActionListener(actionHandler);
  74. buttons.add(add);
  75. buttons.add(Box.createHorizontalStrut(6));
  76. remove = new RolloverButton(GUIUtilities.loadIcon("Minus.png"));
  77. remove.setToolTipText(jEdit.getProperty("common.remove"));
  78. remove.addActionListener(actionHandler);
  79. buttons.add(remove);
  80. buttons.add(Box.createHorizontalStrut(6));
  81. moveUp = new RolloverButton(GUIUtilities.loadIcon("ArrowU.png"));
  82. moveUp.setToolTipText(jEdit.getProperty("common.moveUp"));
  83. moveUp.addActionListener(actionHandler);
  84. buttons.add(moveUp);
  85. buttons.add(Box.createHorizontalStrut(6));
  86. moveDown = new RolloverButton(GUIUtilities.loadIcon("ArrowD.png"));
  87. moveDown.setToolTipText(jEdit.getProperty("common.moveDown"));
  88. moveDown.addActionListener(actionHandler);
  89. buttons.add(moveDown);
  90. buttons.add(Box.createGlue());
  91. add(BorderLayout.SOUTH,buttons);
  92. updateEnabled();
  93. } //}}}
  94. //{{{ _save() method
  95. protected void _save()
  96. {
  97. colorsModel.save();
  98. } //}}}
  99. //}}}
  100. //{{{ Private members
  101. private BrowserColorsModel colorsModel;
  102. private JTable colorsTable;
  103. private JButton add;
  104. private JButton remove;
  105. private JButton moveUp;
  106. private JButton moveDown;
  107. //{{{ updateEnabled() method
  108. private void updateEnabled()
  109. {
  110. int selectedRow = colorsTable.getSelectedRow();
  111. remove.setEnabled(selectedRow != -1);
  112. moveUp.setEnabled(selectedRow > 0);
  113. moveUp.setEnabled(selectedRow != -1 && selectedRow !=
  114. colorsModel.getRowCount());
  115. } //}}}
  116. //{{{ setSelectedRow() method
  117. private void setSelectedRow(int row)
  118. {
  119. colorsTable.getSelectionModel().setSelectionInterval(row,row);
  120. colorsTable.scrollRectToVisible(colorsTable.getCellRect(row,0,true));
  121. } //}}}
  122. //}}}
  123. //{{{ SelectionHandler class
  124. class SelectionHandler implements ListSelectionListener
  125. {
  126. public void valueChanged(ListSelectionEvent evt)
  127. {
  128. updateEnabled();
  129. }
  130. } //}}}
  131. //{{{ ActionHandler class
  132. class ActionHandler implements ActionListener
  133. {
  134. public void actionPerformed(ActionEvent evt)
  135. {
  136. Object source = evt.getSource();
  137. if(source == add)
  138. {
  139. colorsModel.add();
  140. }
  141. else if(source == remove)
  142. {
  143. int selectedRow = colorsTable.getSelectedRow();
  144. colorsModel.remove(selectedRow);
  145. updateEnabled();
  146. }
  147. else if(source == moveUp)
  148. {
  149. int selectedRow = colorsTable.getSelectedRow();
  150. if(selectedRow != 0)
  151. {
  152. colorsModel.moveUp(selectedRow);
  153. setSelectedRow(selectedRow - 1);
  154. }
  155. updateEnabled();
  156. }
  157. else if(source == moveDown)
  158. {
  159. int selectedRow = colorsTable.getSelectedRow();
  160. if(selectedRow != colorsTable.getRowCount() - 1)
  161. {
  162. colorsModel.moveDown(selectedRow);
  163. setSelectedRow(selectedRow + 1);
  164. }
  165. updateEnabled();
  166. }
  167. }
  168. } //}}}
  169. //{{{ MouseHandler class
  170. class MouseHandler extends MouseAdapter
  171. {
  172. public void mouseClicked(MouseEvent evt)
  173. {
  174. Point p = evt.getPoint();
  175. int row = colorsTable.rowAtPoint(p);
  176. int column = colorsTable.columnAtPoint(p);
  177. if(row == -1 || column != 1)
  178. return;
  179. Color color = JColorChooser.showDialog(
  180. BrowserColorsOptionPane.this,
  181. jEdit.getProperty("colorChooser.title"),
  182. (Color)colorsModel.getValueAt(row,1));
  183. if(color != null)
  184. colorsModel.setValueAt(color,row,1);
  185. }
  186. } //}}}
  187. } //}}}
  188. //{{{ BrowserColorsModel class
  189. class BrowserColorsModel extends AbstractTableModel
  190. {
  191. //{{{ BrowserColorsModel constructor
  192. BrowserColorsModel()
  193. {
  194. entries = new ArrayList<Entry>();
  195. int i = 0;
  196. String glob;
  197. while((glob = jEdit.getProperty("vfs.browser.colors." + i + ".glob")) != null)
  198. {
  199. entries.add(new Entry(glob,
  200. jEdit.getColorProperty(
  201. "vfs.browser.colors." + i + ".color",
  202. Color.black)));
  203. i++;
  204. }
  205. } //}}}
  206. //{{{ add() method
  207. void add()
  208. {
  209. entries.add(new Entry("",UIManager.getColor("Tree.foreground")));
  210. fireTableRowsInserted(entries.size() - 1,entries.size() - 1);
  211. } //}}}
  212. //{{{ remove() method
  213. void remove(int index)
  214. {
  215. entries.remove(index);
  216. fireTableRowsDeleted(entries.size(),entries.size());
  217. } //}}}
  218. //{{{ moveUp() method
  219. public void moveUp(int index)
  220. {
  221. Entry entry = entries.get(index);
  222. entries.remove(index);
  223. entries.add(index - 1,entry);
  224. fireTableRowsUpdated(index - 1,index);
  225. } //}}}
  226. //{{{ moveDown() method
  227. public void moveDown(int index)
  228. {
  229. Entry entry = entries.get(index);
  230. entries.remove(index);
  231. entries.add(index + 1,entry);
  232. fireTableRowsUpdated(index,index + 1);
  233. } //}}}
  234. //{{{ save() method
  235. void save()
  236. {
  237. int i;
  238. for(i = 0; i < entries.size(); i++)
  239. {
  240. Entry entry = entries.get(i);
  241. jEdit.setProperty("vfs.browser.colors." + i + ".glob",
  242. entry.glob);
  243. jEdit.setColorProperty("vfs.browser.colors." + i + ".color",
  244. entry.color);
  245. }
  246. jEdit.unsetProperty("vfs.browser.colors." + i + ".glob");
  247. jEdit.unsetProperty("vfs.browser.colors." + i + ".color");
  248. } //}}}
  249. //{{{ getColumnCount() method
  250. public int getColumnCount()
  251. {
  252. return 2;
  253. } //}}}
  254. //{{{ getRowCount() method
  255. public int getRowCount()
  256. {
  257. return entries.size();
  258. } //}}}
  259. //{{{ getValueAt() method
  260. public Object getValueAt(int row, int col)
  261. {
  262. Entry entry = entries.get(row);
  263. switch(col)
  264. {
  265. case 0:
  266. return entry.glob;
  267. case 1:
  268. return entry.color;
  269. default:
  270. return null;
  271. }
  272. } //}}}
  273. //{{{ isCellEditable() method
  274. public boolean isCellEditable(int row, int col)
  275. {
  276. return col == 0;
  277. } //}}}
  278. //{{{ setValueAt() method
  279. public void setValueAt(Object value, int row, int col)
  280. {
  281. Entry entry = entries.get(row);
  282. if(col == 0)
  283. entry.glob = (String)value;
  284. else
  285. entry.color = (Color)value;
  286. fireTableRowsUpdated(row,row);
  287. } //}}}
  288. //{{{ getColumnName() method
  289. public String getColumnName(int index)
  290. {
  291. switch(index)
  292. {
  293. case 0:
  294. return jEdit.getProperty("options.browser.colors.glob");
  295. case 1:
  296. return jEdit.getProperty("options.browser.colors.color");
  297. default:
  298. return null;
  299. }
  300. } //}}}
  301. //{{{ getColumnClass() method
  302. public Class getColumnClass(int col)
  303. {
  304. switch(col)
  305. {
  306. case 0:
  307. return String.class;
  308. case 1:
  309. return Color.class;
  310. default:
  311. throw new InternalError();
  312. }
  313. } //}}}
  314. private List<Entry> entries;
  315. //{{{ Entry class
  316. private static class Entry
  317. {
  318. String glob;
  319. Color color;
  320. Entry(String glob, Color color)
  321. {
  322. this.glob = glob;
  323. this.color = color;
  324. }
  325. } //}}}
  326. //{{{ ColorRenderer class
  327. static class ColorRenderer extends JLabel
  328. implements TableCellRenderer
  329. {
  330. //{{{ ColorRenderer constructor
  331. ColorRenderer()
  332. {
  333. setOpaque(true);
  334. setBorder(SyntaxHiliteOptionPane.noFocusBorder);
  335. } //}}}
  336. //{{{ getTableCellRendererComponent() method
  337. public Component getTableCellRendererComponent(
  338. JTable table,
  339. Object value,
  340. boolean isSelected,
  341. boolean cellHasFocus,
  342. int row,
  343. int col)
  344. {
  345. if (isSelected)
  346. {
  347. setBackground(table.getSelectionBackground());
  348. setForeground(table.getSelectionForeground());
  349. }
  350. else
  351. {
  352. setBackground(table.getBackground());
  353. setForeground(table.getForeground());
  354. }
  355. if (value != null)
  356. setBackground((Color)value);
  357. setBorder(cellHasFocus ? UIManager.getBorder(
  358. "Table.focusCellHighlightBorder")
  359. : SyntaxHiliteOptionPane.noFocusBorder);
  360. return this;
  361. } //}}}
  362. } //}}}
  363. } //}}}