/jEdit/tags/jedit-4-3-pre15/org/gjt/sp/jedit/options/BufferOptionPane.java

# · Java · 338 lines · 246 code · 39 blank · 53 comment · 26 complexity · 6364d0930ef5f5e937217112350cd35d MD5 · raw file

  1. /*
  2. * BufferOptionPane.java -
  3. * :tabSize=8:indentSize=8:noTabs=false:
  4. * :folding=explicit:collapseFolds=1:
  5. *
  6. * Copyright (C) 1998, 2003 Slava Pestov
  7. * Portions copyright (C) 1999 mike dillon
  8. *
  9. * This program is free software; you can redistribute it and/or
  10. * modify it under the terms of the GNU General Public License
  11. * as published by the Free Software Foundation; either version 2
  12. * of the License, or any later version.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this program; if not, write to the Free Software
  21. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  22. */
  23. package org.gjt.sp.jedit.options;
  24. import java.awt.event.ActionEvent;
  25. import java.awt.event.ActionListener;
  26. import java.util.Arrays;
  27. import javax.swing.JCheckBox;
  28. import javax.swing.JComboBox;
  29. import org.gjt.sp.jedit.AbstractOptionPane;
  30. import org.gjt.sp.jedit.Buffer;
  31. import org.gjt.sp.jedit.GUIUtilities;
  32. import org.gjt.sp.jedit.MiscUtilities;
  33. import org.gjt.sp.jedit.Mode;
  34. import org.gjt.sp.jedit.jEdit;
  35. import org.gjt.sp.jedit.buffer.FoldHandler;
  36. import org.gjt.sp.jedit.buffer.JEditBuffer;
  37. import org.gjt.sp.util.StandardUtilities;
  38. public class BufferOptionPane extends AbstractOptionPane
  39. {
  40. private JComboBox encoding;
  41. private JComboBox lineSeparator;
  42. private JCheckBox gzipped;
  43. private Mode[] modes;
  44. private JComboBox mode;
  45. private JComboBox folding;
  46. private JComboBox wrap;
  47. private JComboBox maxLineLen;
  48. private JComboBox tabSize;
  49. private JComboBox indentSize;
  50. private JComboBox checkModStatus;
  51. private JCheckBox noTabs;
  52. private Buffer buffer;
  53. public BufferOptionPane()
  54. {
  55. super("Buffer Options");
  56. init();
  57. }
  58. //{{{ _init() method
  59. @Override
  60. protected void _init()
  61. {
  62. buffer = jEdit.getActiveView().getBuffer();
  63. String filename = buffer.getName();
  64. setName("Buffer: " + filename);
  65. addComponent(GUIUtilities.createMultilineLabel(
  66. jEdit.getProperty("buffer-options.caption")));
  67. addSeparator("buffer-options.loading-saving");
  68. //{{{ Line separator
  69. String[] lineSeps = { jEdit.getProperty("lineSep.unix"),
  70. jEdit.getProperty("lineSep.windows"),
  71. jEdit.getProperty("lineSep.mac") };
  72. lineSeparator = new JComboBox(lineSeps);
  73. String lineSep = buffer.getStringProperty(JEditBuffer.LINESEP);
  74. if(lineSep == null)
  75. lineSep = System.getProperty("line.separator");
  76. if("\n".equals(lineSep))
  77. lineSeparator.setSelectedIndex(0);
  78. else if("\r\n".equals(lineSep))
  79. lineSeparator.setSelectedIndex(1);
  80. else if("\r".equals(lineSep))
  81. lineSeparator.setSelectedIndex(2);
  82. addComponent(jEdit.getProperty("buffer-options.lineSeparator"),
  83. lineSeparator);
  84. //}}}
  85. //{{{ Encoding
  86. String[] encodings = MiscUtilities.getEncodings(true);
  87. Arrays.sort(encodings,new StandardUtilities.StringCompare(true));
  88. encoding = new JComboBox(encodings);
  89. encoding.setEditable(true);
  90. encoding.setSelectedItem(buffer.getStringProperty(JEditBuffer.ENCODING));
  91. addComponent(jEdit.getProperty("buffer-options.encoding"),
  92. encoding);
  93. //}}}
  94. //{{{ GZipped setting
  95. gzipped = new JCheckBox(jEdit.getProperty(
  96. "buffer-options.gzipped"));
  97. gzipped.setSelected(buffer.getBooleanProperty(Buffer.GZIPPED));
  98. addComponent(gzipped);
  99. //}}}
  100. //{{{ Autoreload settings
  101. /* Check mod status on focus */
  102. String[] modCheckOptions = {
  103. jEdit.getProperty("options.general.checkModStatus.nothing"),
  104. jEdit.getProperty("options.general.checkModStatus.prompt"),
  105. jEdit.getProperty("options.general.checkModStatus.reload"),
  106. jEdit.getProperty("options.general.checkModStatus.silentReload")
  107. };
  108. checkModStatus = new JComboBox(modCheckOptions);
  109. if(buffer.getAutoReload())
  110. {
  111. if(buffer.getAutoReloadDialog())
  112. // reload and notify
  113. checkModStatus.setSelectedIndex(2);
  114. else // reload silently
  115. checkModStatus.setSelectedIndex(3);
  116. }
  117. else
  118. {
  119. if(buffer.getAutoReloadDialog())
  120. // prompt
  121. checkModStatus.setSelectedIndex(1);
  122. else // do nothing
  123. checkModStatus.setSelectedIndex(0);
  124. }
  125. addComponent(jEdit.getProperty("options.general.checkModStatus"),
  126. checkModStatus);
  127. // }}}
  128. addSeparator("buffer-options.editing");
  129. //{{{ Edit mode
  130. modes = jEdit.getModes();
  131. Arrays.sort(modes,new StandardUtilities.StringCompare(true));
  132. mode = new JComboBox(modes);
  133. mode.setSelectedItem(buffer.getMode());
  134. ActionHandler actionListener = new ActionHandler();
  135. mode.addActionListener(actionListener);
  136. addComponent(jEdit.getProperty("buffer-options.mode"),mode);
  137. //}}}
  138. //{{{ Fold mode
  139. String[] foldModes = FoldHandler.getFoldModes();
  140. folding = new JComboBox(foldModes);
  141. folding.setSelectedItem(buffer.getStringProperty("folding"));
  142. addComponent(jEdit.getProperty("options.editing.folding"),
  143. folding);
  144. //}}}
  145. //{{{ Wrap mode
  146. String[] wrapModes = {
  147. "none",
  148. "soft",
  149. "hard"
  150. };
  151. wrap = new JComboBox(wrapModes);
  152. wrap.setSelectedItem(buffer.getStringProperty("wrap"));
  153. addComponent(jEdit.getProperty("options.editing.wrap"),
  154. wrap);
  155. //}}}
  156. //{{{ Max line length
  157. String[] lineLengths = { "0", "72", "76", "80" };
  158. maxLineLen = new JComboBox(lineLengths);
  159. maxLineLen.setEditable(true);
  160. maxLineLen.setSelectedItem(buffer.getStringProperty("maxLineLen"));
  161. addComponent(jEdit.getProperty("options.editing.maxLineLen"),
  162. maxLineLen);
  163. //}}}
  164. //{{{ Tab size
  165. String[] tabSizes = { "2", "4", "8" };
  166. tabSize = new JComboBox(tabSizes);
  167. tabSize.setEditable(true);
  168. tabSize.setSelectedItem(buffer.getStringProperty("tabSize"));
  169. addComponent(jEdit.getProperty("options.editing.tabSize"),tabSize);
  170. //}}}
  171. //{{{ Indent size
  172. indentSize = new JComboBox(tabSizes);
  173. indentSize.setEditable(true);
  174. indentSize.setSelectedItem(buffer.getStringProperty("indentSize"));
  175. addComponent(jEdit.getProperty("options.editing.indentSize"),
  176. indentSize);
  177. //}}}
  178. //{{{ Soft tabs
  179. noTabs = new JCheckBox(jEdit.getProperty(
  180. "options.editing.noTabs"));
  181. noTabs.setSelected(buffer.getBooleanProperty("noTabs"));
  182. addComponent(noTabs);
  183. //}}}
  184. } //}}}
  185. //{{{ _save() method
  186. @Override
  187. protected void _save()
  188. {
  189. int index = lineSeparator.getSelectedIndex();
  190. String lineSep;
  191. if(index == 0)
  192. lineSep = "\n";
  193. else if(index == 1)
  194. lineSep = "\r\n";
  195. else if(index == 2)
  196. lineSep = "\r";
  197. else
  198. throw new InternalError();
  199. String oldLineSep = buffer.getStringProperty(JEditBuffer.LINESEP);
  200. if(oldLineSep == null)
  201. oldLineSep = System.getProperty("line.separator");
  202. if(!oldLineSep.equals(lineSep))
  203. {
  204. buffer.setStringProperty("lineSeparator",lineSep);
  205. buffer.setDirty(true);
  206. }
  207. String encoding = (String)this.encoding.getSelectedItem();
  208. String oldEncoding = buffer.getStringProperty(JEditBuffer.ENCODING);
  209. if(!oldEncoding.equals(encoding))
  210. {
  211. buffer.setStringProperty(JEditBuffer.ENCODING,encoding);
  212. buffer.setDirty(true);
  213. // Disable auto-detect because user explicitly
  214. // specify an encoding.
  215. buffer.setBooleanProperty(Buffer.ENCODING_AUTODETECT,false);
  216. }
  217. boolean gzippedValue = gzipped.isSelected();
  218. boolean oldGzipped = buffer.getBooleanProperty(
  219. Buffer.GZIPPED);
  220. if(gzippedValue != oldGzipped)
  221. {
  222. buffer.setBooleanProperty(Buffer.GZIPPED,gzippedValue);
  223. buffer.setDirty(true);
  224. }
  225. buffer.setStringProperty("folding",(String)folding.getSelectedItem());
  226. buffer.setStringProperty("wrap",(String)wrap.getSelectedItem());
  227. try
  228. {
  229. buffer.setProperty("maxLineLen",new Integer(
  230. maxLineLen.getSelectedItem().toString()));
  231. }
  232. catch(NumberFormatException nf)
  233. {
  234. }
  235. try
  236. {
  237. buffer.setProperty("tabSize",new Integer(
  238. tabSize.getSelectedItem().toString()));
  239. }
  240. catch(NumberFormatException nf)
  241. {
  242. }
  243. try
  244. {
  245. buffer.setProperty("indentSize",new Integer(
  246. indentSize.getSelectedItem().toString()));
  247. }
  248. catch(NumberFormatException nf)
  249. {
  250. }
  251. buffer.setBooleanProperty("noTabs",noTabs.isSelected());
  252. index = mode.getSelectedIndex();
  253. buffer.setMode(modes[index]);
  254. switch(checkModStatus.getSelectedIndex())
  255. {
  256. case 0:
  257. buffer.setAutoReloadDialog(false);
  258. buffer.setAutoReload(false);
  259. break;
  260. case 1:
  261. buffer.setAutoReloadDialog(true);
  262. buffer.setAutoReload(false);
  263. break;
  264. case 2:
  265. buffer.setAutoReloadDialog(true);
  266. buffer.setAutoReload(true);
  267. break;
  268. case 3:
  269. buffer.setAutoReloadDialog(false);
  270. buffer.setAutoReload(true);
  271. break;
  272. }
  273. } //}}}
  274. //{{{ ActionHandler() class
  275. private class ActionHandler implements ActionListener
  276. {
  277. //{{{ actionPerformed() method
  278. public void actionPerformed(ActionEvent evt)
  279. {
  280. Object source = evt.getSource();
  281. if(source == mode)
  282. {
  283. Mode _mode = (Mode)mode.getSelectedItem();
  284. folding.setSelectedItem(_mode.getProperty(
  285. "folding"));
  286. wrap.setSelectedItem(_mode.getProperty(
  287. "wrap"));
  288. maxLineLen.setSelectedItem(_mode.getProperty(
  289. "maxLineLen"));
  290. tabSize.setSelectedItem(_mode.getProperty(
  291. "tabSize"));
  292. indentSize.setSelectedItem(_mode.getProperty(
  293. "indentSize"));
  294. noTabs.setSelected(_mode.getBooleanProperty(
  295. "noTabs"));
  296. }
  297. } //}}}
  298. } //}}}
  299. }