PageRenderTime 40ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/jEdit/tags/jedit-4-3-pre5/org/gjt/sp/jedit/options/BrowserColorsOptionPane.java

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