From: <sh...@us...> - 2007-10-07 21:53:30
|
Revision: 10836 http://jedit.svn.sourceforge.net/jedit/?rev=10836&view=rev Author: shlomy Date: 2007-10-07 14:53:28 -0700 (Sun, 07 Oct 2007) Log Message: ----------- Added configurable icon sets Modified Paths: -------------- plugins/CtagsSideKick/trunk/build.xml plugins/CtagsSideKick/trunk/ctags/sidekick/IconProviderManager.java Added Paths: ----------- plugins/CtagsSideKick/trunk/ctags/sidekick/renderers/AttributeIconEditor.java plugins/CtagsSideKick/trunk/ctags/sidekick/renderers/AttributeIconProvider.java Modified: plugins/CtagsSideKick/trunk/build.xml =================================================================== --- plugins/CtagsSideKick/trunk/build.xml 2007-10-07 19:13:47 UTC (rev 10835) +++ plugins/CtagsSideKick/trunk/build.xml 2007-10-07 21:53:28 UTC (rev 10836) @@ -27,6 +27,7 @@ <pathelement location="${jedit.install.dir}/jedit.jar"/> <pathelement location="${jedit.plugin.dir}/SideKick.jar"/> <pathelement location="${jedit.plugin.dir}/ErrorList.jar"/> + <pathelement location="${jedit.plugin.dir}/CommonControls.jar"/> <pathelement location="${src.dir}"/> </path> Modified: plugins/CtagsSideKick/trunk/ctags/sidekick/IconProviderManager.java =================================================================== --- plugins/CtagsSideKick/trunk/ctags/sidekick/IconProviderManager.java 2007-10-07 19:13:47 UTC (rev 10835) +++ plugins/CtagsSideKick/trunk/ctags/sidekick/IconProviderManager.java 2007-10-07 21:53:28 UTC (rev 10836) @@ -1,5 +1,6 @@ package ctags.sidekick; +import ctags.sidekick.renderers.AttributeIconProvider; import ctags.sidekick.renderers.KindIconProvider; import ctags.sidekick.renderers.ListIconProvider; @@ -32,6 +33,7 @@ @Override protected void registerBuiltProcessors() { + addProcessor(new AttributeIconProvider()); addProcessor(new KindIconProvider()); } Added: plugins/CtagsSideKick/trunk/ctags/sidekick/renderers/AttributeIconEditor.java =================================================================== --- plugins/CtagsSideKick/trunk/ctags/sidekick/renderers/AttributeIconEditor.java (rev 0) +++ plugins/CtagsSideKick/trunk/ctags/sidekick/renderers/AttributeIconEditor.java 2007-10-07 21:53:28 UTC (rev 10836) @@ -0,0 +1,230 @@ +/** + * + */ +package ctags.sidekick.renderers; + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Vector; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.table.AbstractTableModel; + +import common.gui.FileTextField; + +import ctags.sidekick.AbstractObjectEditor; + +@SuppressWarnings("serial") +public class AttributeIconEditor extends AbstractObjectEditor { + + /** + * + */ + private IconTableModel items; + private JTextField name; + private JTable values; + private JTextField value; + private FileTextField icon; + private FileTextField unspecified; + private FileTextField missing; + private static final int FileFieldColumns = 20; + + public AttributeIconEditor(AttributeIconProvider provider) { + super(provider); + setLayout(new GridBagLayout()); + + GridBagConstraints c = new GridBagConstraints(); + c.anchor = GridBagConstraints.NORTHWEST; + c.gridx = c.gridy = 0; + c.gridwidth = 2; + c.gridheight = 1; + JPanel p = new JPanel(); + add(p, c); + p.add(new JLabel("Attribute:")); + name = new JTextField(15); + p.add(name, c); + + c.gridx = 0; + c.gridy++; + add(new JLabel("Values with associated icons:"), c); + items = new IconTableModel(); + items.add("Dummy", ""); + values = new JTable(items); + c.gridy++; + c.gridwidth = 1; + c.gridheight = 5; + add(new JScrollPane(values), c); + c.gridx += c.gridwidth; + c.gridwidth = 1; + JPanel buttons = new JPanel(new GridLayout(0, 1)); + add(buttons, c); + JButton add = new JButton("Add"); + buttons.add(add); + JButton edit = new JButton("Edit"); + buttons.add(edit); + JButton del = new JButton("Remove"); + buttons.add(del); + + c.gridx = 0; + c.gridy += c.gridheight; + c.gridheight = 1; + c.gridwidth = 2; + p = new JPanel(); + add(p, c); + p.add(new JLabel("Icon for unspecified value:")); + unspecified = new FileTextField(true); + unspecified.getTextField().setColumns(FileFieldColumns); + p.add(unspecified, c); + + c.gridy++; + p = new JPanel(); + add(p, c); + p.add(new JLabel("Icon if attribute is missing:"), c); + missing = new FileTextField(true); + missing.getTextField().setColumns(FileFieldColumns); + p.add(missing, c); + + c.gridy++; + p = new JPanel(); + add(p, c); + p.add(new JLabel("Value:")); + value = new JTextField(15); + p.add(value); + p.add(new JLabel("Icon:"), c); + icon = new FileTextField(true); + icon.getTextField().setColumns(FileFieldColumns); + p.add(icon); + JButton update = new JButton("Update"); + p.add(update); + + values.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + values.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + public void valueChanged(ListSelectionEvent e) { + int index = values.getSelectedRow(); + if (index < 0) + { + value.setEnabled(false); + icon.setEnabled(false); + return; + } + value.setEnabled(true); + icon.setEnabled(true); + value.setText((String) items.getValueAt(index, 1)); + icon.getTextField().setText((String) items.getValueAt(index, 2)); + } + }); + add.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + items.add("<value>", "<icon>"); + } + }); + del.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + int index = values.getSelectedRow(); + if (index >= 0) + items.remove(index); + } + }); + update.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ae) { + int index = values.getSelectedRow(); + String file = icon.getTextField().getText(); + items.set(index, value.getText(), file); + } + }); + } + + @Override + public void save() { + StringBuffer buf = new StringBuffer(name.getText()); + buf.append(AttributeIconProvider.SECTION_SEPARATOR); + for (int i = 0; i < items.getRowCount(); i++) + { + if (i > 0) + buf.append(AttributeIconProvider.VALUE_SEPARATOR); + buf.append(items.getValueAt(i, 1).toString()); + buf.append(AttributeIconProvider.VALUE_SEPARATOR); + buf.append(items.getValueAt(i, 2).toString()); + } + buf.append(AttributeIconProvider.SECTION_SEPARATOR); + buf.append(unspecified.getTextField().getText()); + buf.append(AttributeIconProvider.SECTION_SEPARATOR); + buf.append(missing.getTextField().getText()); + processor.setParams(buf.toString()); + } + + public static class IconTableModel extends AbstractTableModel { + + public static class IconTableRow { + IconTableRow(String v, String f) { + icon = new ImageIcon(f); + value = v; + file = f; + } + ImageIcon icon; + String value; + String file; + } + Vector<IconTableRow> rows = new Vector<IconTableRow>(); + + public void add(String value, String file) { + rows.add(new IconTableRow(value, file)); + this.fireTableDataChanged(); + } + public void remove(int index) { + rows.remove(index); + this.fireTableDataChanged(); + } + @Override + public String getColumnName(int column) { + switch (column) { + case 0: return "Icon"; + case 1: return "Value"; + case 2: return "Icon file"; + } + return null; + } + @Override + public Class<?> getColumnClass(int col) { + if (col == 0) + return ImageIcon.class; + return super.getColumnClass(col); + } + public int getColumnCount() { + return 3; + } + + public int getRowCount() { + return rows.size(); + } + + public Object getValueAt(int row, int col) { + switch (col) { + case 0: + return rows.get(row).icon; + case 1: + return rows.get(row).value; + case 2: + return rows.get(row).file; + } + return null; + } + public void set(int row, String value, String file) { + rows.set(row, new IconTableRow(value, file)); + this.fireTableDataChanged(); + } + + } +} \ No newline at end of file Added: plugins/CtagsSideKick/trunk/ctags/sidekick/renderers/AttributeIconProvider.java =================================================================== --- plugins/CtagsSideKick/trunk/ctags/sidekick/renderers/AttributeIconProvider.java (rev 0) +++ plugins/CtagsSideKick/trunk/ctags/sidekick/renderers/AttributeIconProvider.java 2007-10-07 21:53:28 UTC (rev 10836) @@ -0,0 +1,73 @@ +package ctags.sidekick.renderers; + +import java.util.Hashtable; + +import javax.swing.ImageIcon; + + +import ctags.sidekick.AbstractObjectEditor; +import ctags.sidekick.AbstractParameterizedObjectProcessor; +import ctags.sidekick.IObjectProcessor; +import ctags.sidekick.Tag; + +public class AttributeIconProvider extends AbstractParameterizedObjectProcessor + implements IIconProvider { + + static final String NAME = "Attribute"; + static final String DESCRIPTION = "Associates values of a specified attribute " + + "with specified icon files."; + + String attr = null; + static Hashtable<String, ImageIcon> icons = + new Hashtable<String, ImageIcon>(); + ImageIcon unspecified = null; + ImageIcon missing = null; + + static final String SECTION_SEPARATOR = ","; + static final String VALUE_SEPARATOR = " "; + + public AttributeIconProvider() { + super(NAME, DESCRIPTION); + } + + public IObjectProcessor getClone() { + return new AttributeIconProvider(); + } + + public ImageIcon getIcon(Tag tag) { + if (attr == null) + return null; + String val = tag.getField(attr); + if (val == null) + return null; + return icons.get(val); + } + + protected void parseParams(String params) { + if (params == null) { + attr = null; + return; + } + // Format: + // attribute,value icon ...,unspecified value icon,missing attribute icon + String [] parts = params.split(SECTION_SEPARATOR, 4); + attr = parts[0]; + String [] values = parts[1].split(VALUE_SEPARATOR); + for (int i = 0; i < values.length - 1; i += 2) + icons.put(values[i], new ImageIcon(values[i+1])); + if (parts[2] != null && parts[2].length() > 0) + unspecified = new ImageIcon(parts[1]); + if (parts[3] != null && parts[3].length() > 0) + unspecified = new ImageIcon(parts[2]); + } + + public String toString() { + return NAME + "(" + attr + ")"; + } + + @Override + public AbstractObjectEditor getEditor() { + return new AttributeIconEditor(this); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |