PageRenderTime 37ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/jEdit/tags/jedit-4-1-pre5/org/gjt/sp/jedit/options/ModeOptionPane.java

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