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

/jEdit/tags/jedit-4-2-pre4/org/gjt/sp/jedit/options/EditingOptionPane.java

#
Java | 414 lines | 313 code | 56 blank | 45 comment | 22 complexity | 7ba3b955a5a289466b2d168712923762 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. * EditingOptionPane.java - Mode-specific options panel
  3. * :tabSize=8:indentSize=8:noTabs=false:
  4. * :folding=explicit:collapseFolds=1:
  5. *
  6. * Copyright (C) 1998, 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.*;
  25. import java.awt.event.*;
  26. import org.gjt.sp.jedit.*;
  27. import org.gjt.sp.jedit.buffer.FoldHandler;
  28. //}}}
  29. public class EditingOptionPane extends AbstractOptionPane
  30. {
  31. //{{{ EditingOptionPane constructor
  32. public EditingOptionPane()
  33. {
  34. super("editing");
  35. } //}}}
  36. //{{{ _init() method
  37. protected void _init()
  38. {
  39. Mode[] modes = jEdit.getModes();
  40. defaultMode = new JComboBox(modes);
  41. defaultMode.setSelectedItem(jEdit.getMode(
  42. jEdit.getProperty("buffer.defaultMode")));
  43. addComponent(jEdit.getProperty("options.editing.defaultMode"),
  44. defaultMode);
  45. undoCount = new JTextField(jEdit.getProperty("buffer.undoCount"));
  46. addComponent(jEdit.getProperty("options.editing.undoCount"),undoCount);
  47. addSeparator();
  48. global = new ModeProperties();
  49. modeProps = new ModeProperties[modes.length];
  50. String[] modeNames = new String[modes.length + 1];
  51. modeNames[0] = jEdit.getProperty("options.editing.global");
  52. for(int i = 0; i < modes.length; i++)
  53. {
  54. modeProps[i] = new ModeProperties(modes[i]);
  55. modeNames[i + 1] = modes[i].getName();
  56. }
  57. mode = new JComboBox(modeNames);
  58. mode.addActionListener(new ActionHandler());
  59. captionBox = new Box(BoxLayout.X_AXIS);
  60. addComponent(captionBox);
  61. addComponent(jEdit.getProperty("options.editing.mode"),mode);
  62. useDefaults = new JCheckBox(jEdit.getProperty("options.editing.useDefaults"));
  63. useDefaults.addActionListener(new ActionHandler());
  64. addComponent(useDefaults);
  65. addComponent(jEdit.getProperty("options.editing.noWordSep"),
  66. noWordSep = new JTextField());
  67. String[] foldModes = FoldHandler.getFoldModes();
  68. addComponent(jEdit.getProperty("options.editing.folding"),
  69. folding = new JComboBox(foldModes));
  70. addComponent(jEdit.getProperty("options.editing.collapseFolds"),
  71. collapseFolds = new JTextField());
  72. String[] wrapModes = {
  73. "none",
  74. "soft",
  75. "hard"
  76. };
  77. addComponent(jEdit.getProperty("options.editing.wrap"),
  78. wrap = new JComboBox(wrapModes));
  79. String[] lineLens = { "0", "72", "76", "80" };
  80. addComponent(jEdit.getProperty("options.editing.maxLineLen"),
  81. maxLineLen = new JComboBox(lineLens));
  82. maxLineLen.setEditable(true);
  83. String[] tabSizes = { "2", "4", "8" };
  84. addComponent(jEdit.getProperty("options.editing.tabSize"),
  85. tabSize = new JComboBox(tabSizes));
  86. tabSize.setEditable(true);
  87. addComponent(jEdit.getProperty("options.editing.indentSize"),
  88. indentSize = new JComboBox(tabSizes));
  89. indentSize.setEditable(true);
  90. addComponent(noTabs = new JCheckBox(jEdit.getProperty(
  91. "options.editing.noTabs")));
  92. addComponent(deepIndent = new JCheckBox(jEdit.getProperty(
  93. "options.editing.deepIndent")));
  94. addComponent(jEdit.getProperty("options.editing.filenameGlob"),
  95. filenameGlob = new JTextField());
  96. addComponent(jEdit.getProperty("options.editing.firstlineGlob"),
  97. firstlineGlob = new JTextField());
  98. selectMode();
  99. } //}}}
  100. //{{{ _save() method
  101. protected void _save()
  102. {
  103. jEdit.setProperty("buffer.defaultMode",
  104. ((Mode)defaultMode.getSelectedItem()).getName());
  105. jEdit.setProperty("buffer.undoCount",undoCount.getText());
  106. saveMode();
  107. global.save();
  108. for(int i = 0; i < modeProps.length; i++)
  109. {
  110. modeProps[i].save();
  111. }
  112. } //}}}
  113. //{{{ Private members
  114. //{{{ Instance variables
  115. private JComboBox defaultMode;
  116. private JTextField undoCount;
  117. private ModeProperties global;
  118. private ModeProperties[] modeProps;
  119. private ModeProperties current;
  120. private Box captionBox;
  121. private JComboBox mode;
  122. private JCheckBox useDefaults;
  123. private JTextField filenameGlob;
  124. private JTextField firstlineGlob;
  125. private JTextField noWordSep;
  126. private JComboBox folding;
  127. private JTextField collapseFolds;
  128. private JComboBox wrap;
  129. private JComboBox maxLineLen;
  130. private JComboBox tabSize;
  131. private JComboBox indentSize;
  132. private JCheckBox noTabs;
  133. private JCheckBox deepIndent;
  134. //}}}
  135. //{{{ saveMode() method
  136. private void saveMode()
  137. {
  138. current.useDefaults = useDefaults.isSelected();
  139. current.filenameGlob = filenameGlob.getText();
  140. current.firstlineGlob = firstlineGlob.getText();
  141. current.noWordSep = noWordSep.getText();
  142. current.folding = (String)folding.getSelectedItem();
  143. current.collapseFolds = collapseFolds.getText();
  144. current.wrap = (String)wrap.getSelectedItem();
  145. current.maxLineLen = (String)maxLineLen.getSelectedItem();
  146. current.tabSize = (String)tabSize.getSelectedItem();
  147. current.indentSize = (String)indentSize.getSelectedItem();
  148. current.noTabs = noTabs.isSelected();
  149. current.deepIndent = deepIndent.isSelected();
  150. } //}}}
  151. //{{{ selectMode() method
  152. private void selectMode()
  153. {
  154. int index = mode.getSelectedIndex();
  155. current = (index == 0 ? global : modeProps[index - 1]);
  156. current.edited = true;
  157. current.load();
  158. captionBox.removeAll();
  159. captionBox.add(GUIUtilities.createMultilineLabel(
  160. jEdit.getProperty("options.editing.caption-"
  161. + (index == 0 ? "0" : "1"))));
  162. useDefaults.setSelected(current.useDefaults);
  163. filenameGlob.setText(current.filenameGlob);
  164. firstlineGlob.setText(current.firstlineGlob);
  165. noWordSep.setText(current.noWordSep);
  166. folding.setSelectedItem(current.folding);
  167. collapseFolds.setText(current.collapseFolds);
  168. wrap.setSelectedItem(current.wrap);
  169. maxLineLen.setSelectedItem(current.maxLineLen);
  170. tabSize.setSelectedItem(current.tabSize);
  171. indentSize.setSelectedItem(current.indentSize);
  172. noTabs.setSelected(current.noTabs);
  173. deepIndent.setSelected(current.deepIndent);
  174. updateEnabled();
  175. revalidate();
  176. } //}}}
  177. //{{{ updateEnabled() method
  178. private void updateEnabled()
  179. {
  180. boolean enabled;
  181. if(current == global)
  182. {
  183. enabled = true;
  184. useDefaults.setEnabled(false);
  185. filenameGlob.setEnabled(false);
  186. firstlineGlob.setEnabled(false);
  187. }
  188. else
  189. {
  190. enabled = !modeProps[mode.getSelectedIndex() - 1]
  191. .useDefaults;
  192. useDefaults.setEnabled(true);
  193. filenameGlob.setEnabled(enabled);
  194. firstlineGlob.setEnabled(enabled);
  195. }
  196. filenameGlob.setEnabled(enabled);
  197. firstlineGlob.setEnabled(enabled);
  198. noWordSep.setEnabled(enabled);
  199. folding.setEnabled(enabled);
  200. collapseFolds.setEnabled(enabled);
  201. wrap.setEnabled(enabled);
  202. maxLineLen.setEnabled(enabled);
  203. tabSize.setEnabled(enabled);
  204. indentSize.setEnabled(enabled);
  205. noTabs.setEnabled(enabled);
  206. deepIndent.setEnabled(enabled);
  207. } //}}}
  208. //}}}
  209. //{{{ ActionHandler class
  210. class ActionHandler implements ActionListener
  211. {
  212. public void actionPerformed(ActionEvent evt)
  213. {
  214. if(evt.getSource() == mode)
  215. {
  216. saveMode();
  217. selectMode();
  218. }
  219. else if(evt.getSource() == useDefaults)
  220. {
  221. modeProps[mode.getSelectedIndex() - 1].useDefaults =
  222. useDefaults.isSelected();
  223. updateEnabled();
  224. }
  225. }
  226. } //}}}
  227. //{{{ ModeProperties class
  228. class ModeProperties
  229. {
  230. //{{{ Instance variables
  231. Mode mode;
  232. boolean edited;
  233. boolean loaded;
  234. boolean useDefaults;
  235. String filenameGlob;
  236. String firstlineGlob;
  237. String noWordSep;
  238. String folding;
  239. String collapseFolds;
  240. String wrap;
  241. String maxLineLen;
  242. String tabSize;
  243. String indentSize;
  244. boolean noTabs;
  245. boolean deepIndent;
  246. //}}}
  247. //{{{ ModeProperties constructor
  248. ModeProperties()
  249. {
  250. } //}}}
  251. //{{{ ModeProperties constructor
  252. ModeProperties(Mode mode)
  253. {
  254. this.mode = mode;
  255. } //}}}
  256. //{{{ load() method
  257. void load()
  258. {
  259. if(loaded)
  260. return;
  261. loaded = true;
  262. if(mode != null)
  263. {
  264. mode.loadIfNecessary();
  265. useDefaults = !jEdit.getBooleanProperty("mode."
  266. + mode.getName() + ".customSettings");
  267. filenameGlob = (String)mode.getProperty("filenameGlob");
  268. firstlineGlob = (String)mode.getProperty("firstlineGlob");
  269. noWordSep = (String)mode.getProperty("noWordSep");
  270. folding = mode.getProperty("folding").toString();
  271. collapseFolds = mode.getProperty("collapseFolds").toString();
  272. wrap = mode.getProperty("wrap").toString();
  273. maxLineLen = mode.getProperty("maxLineLen").toString();
  274. tabSize = mode.getProperty("tabSize").toString();
  275. indentSize = mode.getProperty("indentSize").toString();
  276. noTabs = mode.getBooleanProperty("noTabs");
  277. deepIndent = mode.getBooleanProperty("deepIndent");
  278. }
  279. else
  280. {
  281. noWordSep = jEdit.getProperty("buffer.noWordSep");
  282. folding = jEdit.getProperty("buffer.folding");
  283. collapseFolds = jEdit.getProperty("buffer.collapseFolds");
  284. wrap = jEdit.getProperty("buffer.wrap");
  285. maxLineLen = jEdit.getProperty("buffer.maxLineLen");
  286. tabSize = jEdit.getProperty("buffer.tabSize");
  287. indentSize = jEdit.getProperty("buffer.indentSize");
  288. noTabs = jEdit.getBooleanProperty("buffer.noTabs");
  289. deepIndent = jEdit.getBooleanProperty("buffer.deepIndent");
  290. }
  291. } //}}}
  292. //{{{ save() method
  293. void save()
  294. {
  295. // don't do anything if the user didn't change
  296. // any settings
  297. if(!edited)
  298. return;
  299. String prefix;
  300. if(mode != null)
  301. {
  302. prefix = "mode." + mode.getName() + ".";
  303. jEdit.setBooleanProperty(prefix + "customSettings",!useDefaults);
  304. // need to call Mode.init() if the file name or first line
  305. // globs change
  306. String oldFilenameGlob = (String)mode.getProperty("filenameGlob");
  307. String oldFirstlineGlob = (String)mode.getProperty("firstlineGlob");
  308. if(useDefaults)
  309. {
  310. jEdit.resetProperty(prefix + "filenameGlob");
  311. jEdit.resetProperty(prefix + "firstlineGlob");
  312. jEdit.resetProperty(prefix + "noWordSep");
  313. jEdit.resetProperty(prefix + "folding");
  314. jEdit.resetProperty(prefix + "collapseFolds");
  315. jEdit.resetProperty(prefix + "wrap");
  316. jEdit.resetProperty(prefix + "maxLineLen");
  317. jEdit.resetProperty(prefix + "tabSize");
  318. jEdit.resetProperty(prefix + "indentSize");
  319. jEdit.resetProperty(prefix + "noTabs");
  320. jEdit.resetProperty(prefix + "deepIndent");
  321. if(!(MiscUtilities.objectsEqual(oldFilenameGlob,
  322. (String)mode.getProperty("filenameGlob"))
  323. && MiscUtilities.objectsEqual(oldFirstlineGlob,
  324. (String)mode.getProperty("firstlineGlob"))))
  325. {
  326. mode.init();
  327. }
  328. return;
  329. }
  330. else
  331. {
  332. jEdit.setProperty(prefix + "filenameGlob",filenameGlob);
  333. jEdit.setProperty(prefix + "firstlineGlob",firstlineGlob);
  334. if(!(MiscUtilities.objectsEqual(oldFilenameGlob,
  335. filenameGlob)
  336. && MiscUtilities.objectsEqual(oldFirstlineGlob,
  337. firstlineGlob)))
  338. {
  339. mode.init();
  340. }
  341. }
  342. }
  343. else
  344. {
  345. prefix = "buffer.";
  346. }
  347. jEdit.setProperty(prefix + "noWordSep",noWordSep);
  348. jEdit.setProperty(prefix + "folding",folding);
  349. jEdit.setProperty(prefix + "collapseFolds",collapseFolds);
  350. jEdit.setProperty(prefix + "wrap",wrap);
  351. jEdit.setProperty(prefix + "maxLineLen",maxLineLen);
  352. jEdit.setProperty(prefix + "tabSize",tabSize);
  353. jEdit.setProperty(prefix + "indentSize",indentSize);
  354. jEdit.setBooleanProperty(prefix + "noTabs",noTabs);
  355. jEdit.setBooleanProperty(prefix + "deepIndent",deepIndent);
  356. } //}}}
  357. } //}}}
  358. }