/plugins/ColumnRuler/tags/release-0_9_1/columnruler/LineGuidesOptions.java

# · Java · 252 lines · 186 code · 34 blank · 32 comment · 15 complexity · ac9c61ed47f7c14a15f0a330be9c9959 MD5 · raw file

  1. package columnruler;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. import javax.swing.table.*;
  6. import java.util.*;
  7. import org.gjt.sp.jedit.*;
  8. import org.gjt.sp.jedit.gui.*;
  9. /**
  10. * Option pane for custom marks and guides.
  11. *
  12. * @author Brad Mace
  13. * @version $Revision: 1.6 $ $Date: 2004-02-24 18:20:29 $
  14. */
  15. public class LineGuidesOptions extends AbstractOptionPane implements ActionListener {
  16. private JCheckBox caretGuide;
  17. private JCheckBox wrapGuide;
  18. private JButton addButton;
  19. private JButton removeButton;
  20. private JTable table;
  21. private GuideTableModel model;
  22. private ArrayList guides;
  23. private Comparator columnComparator;
  24. public LineGuidesOptions() {
  25. super("columnruler.lineguides");
  26. }
  27. protected void _init() {
  28. guides = new ArrayList();
  29. columnComparator = new ColumnComparator();
  30. int i = 0;
  31. String name = jEdit.getProperty("options.columnruler.marks." + i + ".name");
  32. while (name != null) {
  33. Mark m = new Mark(name);
  34. m.setColumn(jEdit.getIntegerProperty("options.columnruler.marks." + i + ".column", 0));
  35. m.setColor(jEdit.getColorProperty("options.columnruler.marks." + i + ".color", Color.WHITE));
  36. guides.add(m);
  37. i++;
  38. name = jEdit.getProperty("options.columnruler.marks." + i + ".name");
  39. }
  40. JPanel dynamicGuides = new JPanel(new GridLayout(2, 1));
  41. dynamicGuides.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Dynamic Marks/Guides"));
  42. caretGuide = new JCheckBox("Show caret guide", jEdit.getBooleanProperty("options.columnruler.marks.caret.guide",false));
  43. wrapGuide = new JCheckBox("Show wrap guide", jEdit.getBooleanProperty("options.columnruler.marks.wrap.guide",true));
  44. dynamicGuides.add(caretGuide);
  45. dynamicGuides.add(wrapGuide);
  46. addComponent(dynamicGuides, GridBagConstraints.HORIZONTAL);
  47. model = new GuideTableModel();
  48. table = new JTable(model);
  49. addComponent(createTablePanel(), GridBagConstraints.BOTH);
  50. }
  51. protected void _save() {
  52. jEdit.setBooleanProperty("options.columnruler.marks.caret.guide", caretGuide.isSelected());
  53. jEdit.setBooleanProperty("options.columnruler.marks.wrap.guide", wrapGuide.isSelected());
  54. int i = 0;
  55. for (i = 0; i < guides.size(); i++) {
  56. Mark mark = (Mark) guides.get(i);
  57. jEdit.setProperty("options.columnruler.marks." + i + ".name", mark.getName());
  58. jEdit.setIntegerProperty("options.columnruler.marks." + i + ".column", mark.getColumn());
  59. jEdit.setColorProperty("options.columnruler.marks." + i + ".color", mark.getColor());
  60. jEdit.setBooleanProperty("options.columnruler.marks." + i + ".guide", true);
  61. }
  62. jEdit.unsetProperty("options.columnruler.marks." + i + ".name");
  63. jEdit.getActiveView().getTextArea().repaint();
  64. }
  65. //{{{ actionPerformed()
  66. public void actionPerformed(ActionEvent evt) {
  67. Object obj = evt.getSource();
  68. if (obj == addButton)
  69. addGuide();
  70. else if (obj == removeButton)
  71. removeGuide(table.getSelectedRow());
  72. }//}}}
  73. private JPanel createTablePanel() {
  74. JPanel panel = new JPanel(new BorderLayout());
  75. panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Static Marks/Guides"));
  76. JPanel buttonPanel = new JPanel();
  77. addButton = new JButton("Add Mark/Guide");
  78. addButton.addActionListener(this);
  79. buttonPanel.add(addButton);
  80. removeButton = new JButton("Remove Mark/Guide");
  81. removeButton.addActionListener(this);
  82. buttonPanel.add(removeButton);
  83. panel.add(buttonPanel, BorderLayout.SOUTH);
  84. panel.add(new JScrollPane(table), BorderLayout.CENTER);
  85. return panel;
  86. }
  87. //{{{ add/remove guide
  88. public void addGuide() {
  89. MarkDialog dialog = new MarkDialog(null, "Add Mark/Guide");
  90. dialog.pack();
  91. dialog.setVisible(true);
  92. }
  93. public void removeGuide(int index) {
  94. guides.remove(index);
  95. model.fireTableDataChanged();
  96. }
  97. //}}}
  98. //{{{ Inner Classes
  99. //{{{ GuideTableModel
  100. /**
  101. * Description of the Class
  102. *
  103. * @author Brad Mace
  104. * @version $Revision: 1.6 $ $Date: 2004-02-24 18:20:29 $
  105. */
  106. class GuideTableModel extends AbstractTableModel {
  107. public GuideTableModel() { }
  108. public String getColumnName(int col) {
  109. switch (col) {
  110. case 0:
  111. return "Name";
  112. case 1:
  113. return "Column";
  114. case 2:
  115. return "Color";
  116. default:
  117. return "error";
  118. }
  119. }
  120. public int getColumnCount() {
  121. return 3;
  122. }
  123. public int getRowCount() {
  124. return guides.size();
  125. }
  126. public Object getValueAt(int row, int col) {
  127. Mark mark = (Mark) guides.get(row);
  128. switch (col) {
  129. case 0:
  130. return mark.getName();
  131. case 1:
  132. return new Integer(mark.getColumn());
  133. case 2:
  134. return mark.getColor();
  135. default:
  136. return "error";
  137. }
  138. }
  139. }//}}}
  140. //{{{ ColumnComparator
  141. /**
  142. * Description of the Class
  143. *
  144. * @author Brad Mace
  145. * @version $Revision: 1.6 $ $Date: 2004-02-24 18:20:29 $
  146. */
  147. class ColumnComparator implements Comparator {
  148. public int compare(Object a, Object b) {
  149. Mark first = (Mark) a;
  150. Mark second = (Mark) b;
  151. return first.getColumn() - second.getColumn();
  152. }
  153. public boolean equals(Object other) {
  154. return other instanceof ColumnComparator;
  155. }
  156. }//}}}
  157. //{{{ MarkDialog
  158. /**
  159. * Description of the Class
  160. *
  161. * @author Brad Mace
  162. * @version $Revision: 1.6 $ $Date: 2004-02-24 18:20:29 $
  163. */
  164. class MarkDialog extends JDialog implements ActionListener {
  165. private JTextField name;
  166. private JTextField column;
  167. private ColorWellButton color;
  168. private JButton ok;
  169. private JButton cancel;
  170. public MarkDialog(int column) {
  171. name = new JTextField(30);
  172. this.column = new JTextField(column + "");
  173. color = new ColorWellButton(Color.WHITE);
  174. init();
  175. }
  176. public MarkDialog(Mark m, String title) {
  177. super(jEdit.getActiveView(), title, true);
  178. if (m == null) {
  179. name = new JTextField(30);
  180. column = new JTextField(4);
  181. color = new ColorWellButton(Color.WHITE);
  182. }
  183. else {
  184. name = new JTextField(m.getName());
  185. column = new JTextField(m.getColumn() + "");
  186. color = new ColorWellButton(m.getColor());
  187. }
  188. init();
  189. }
  190. private void init() {
  191. ok = new JButton("OK");
  192. ok.addActionListener(this);
  193. cancel = new JButton("Cancel");
  194. cancel.addActionListener(this);
  195. getContentPane().setLayout(new GridLayout(4, 2));
  196. getContentPane().add(new JLabel("Name"));
  197. getContentPane().add(name);
  198. getContentPane().add(new JLabel("Column"));
  199. getContentPane().add(column);
  200. getContentPane().add(new JLabel("Color"));
  201. getContentPane().add(color);
  202. getContentPane().add(cancel);
  203. getContentPane().add(ok);
  204. }
  205. public void actionPerformed(ActionEvent e) {
  206. if (e.getSource() == ok) {
  207. Mark mark = new Mark(name.getText());
  208. mark.setColumn(Integer.parseInt(column.getText()));
  209. mark.setColor(color.getSelectedColor());
  210. guides.add(mark);
  211. Collections.sort(guides, columnComparator);
  212. model.fireTableDataChanged();
  213. }
  214. dispose();
  215. }
  216. }//}}}
  217. //}}}
  218. }