PageRenderTime 939ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/bundles/plugins-trunk/SideKick/sidekick/ModeOptionPaneController.java

#
Java | 95 lines | 75 code | 13 blank | 7 comment | 14 complexity | 8b33f7f51f4f9f8c1bc7cc50168b274e 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. package sidekick;
  2. import java.awt.Component;
  3. import java.util.HashMap;
  4. import java.util.HashSet;
  5. import java.util.Iterator;
  6. import java.util.Set;
  7. import javax.swing.JComponent;
  8. public class ModeOptionPaneController implements ModeOptionPane {
  9. public interface ModeOptionPaneDelegate {
  10. // Returns the UI component of the option pane
  11. JComponent getUIComponent();
  12. // Update the given properties from the UI
  13. void updatePropsFromUI(Object props);
  14. // Update the UI from the given properties
  15. void updateUIFromProps(Object props);
  16. // Create a new, initialized properties object for the specified mode
  17. Object createModeProps(String mode);
  18. // Save (commit) mode properties
  19. void saveModeProps(String mode, Object props);
  20. // Reset mode properties to the default settings
  21. void resetModeProps(String mode);
  22. // Returns whether or not the specified mode has mode-specific properties
  23. boolean hasModeProps(String mode);
  24. }
  25. private HashMap<String, Object> modeProps;
  26. private Set<String> useDefaults; // Modes that use default settings
  27. private Object props; // Properties of current mode
  28. private String mode; // Currently selected mode
  29. ModeOptionPaneDelegate delegate; // The delegate controlled by this controller.
  30. public ModeOptionPaneController(ModeOptionPaneDelegate mop) {
  31. modeProps = new HashMap<String, Object>();
  32. useDefaults = new HashSet<String>();
  33. delegate = mop;
  34. }
  35. public void modeSelected(String mode) {
  36. if (this.mode != null)
  37. delegate.updatePropsFromUI(props);
  38. this.mode = mode;
  39. props = modeProps.get(mode);
  40. if (props == null) {
  41. props = delegate.createModeProps(mode);
  42. if ((mode != null) && (! delegate.hasModeProps(mode)))
  43. useDefaults.add(mode);
  44. modeProps.put(mode, props);
  45. }
  46. delegate.updateUIFromProps(props);
  47. setEnabled(delegate.getUIComponent(), ! useDefaults.contains(mode));
  48. }
  49. public void setUseDefaults(boolean b) {
  50. if (b)
  51. useDefaults.add(mode);
  52. else
  53. useDefaults.remove(mode);
  54. setEnabled(delegate.getUIComponent(), ! b);
  55. }
  56. public void setEnabled(JComponent c, boolean enabled) {
  57. c.setEnabled(enabled);
  58. Component [] children = c.getComponents();
  59. for (int i = 0; i < children.length; i++)
  60. if (children[i] instanceof JComponent)
  61. setEnabled((JComponent) children[i], enabled);
  62. }
  63. public void save() {
  64. delegate.updatePropsFromUI(props);
  65. Iterator<String> modes = modeProps.keySet().iterator();
  66. while (modes.hasNext()) {
  67. String m = modes.next();
  68. if (useDefaults.contains(m))
  69. delegate.resetModeProps(m);
  70. else
  71. delegate.saveModeProps(m, modeProps.get(m));
  72. }
  73. }
  74. public void cancel() {
  75. modeProps.clear();
  76. }
  77. public boolean getUseDefaults(String mode) {
  78. if (modeProps.get(mode) != null)
  79. return useDefaults.contains(mode);
  80. return (! delegate.hasModeProps(mode));
  81. }
  82. }