PageRenderTime 45ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

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

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