Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/bdgp/apps/dagedit/gui/SynonymEditorComponent.java


1   package org.bdgp.apps.dagedit.gui;
2   
3   import java.awt.*;
4   import java.awt.event.*;
5   import java.util.*;
6   import javax.swing.*;
7   import javax.swing.border.*;
8   import org.bdgp.util.*;
9   import org.bdgp.swing.*;
10  import org.bdgp.swing.event.*;
11  import org.bdgp.apps.dagedit.datamodel.*;
12  
13  public class SynonymEditorComponent extends JPanel implements GenericEditorComponent {
14  
15      JTextField textField;
16      JLabel idField;
17      Object obj;
18      ListEditor editor;
19      DragList referenceList;
20      Controller controller;
21      JLabel referenceLabel;
22      JButton referenceButton;
23  
24      Vector references = new Vector();
25  
26      Border lineBorder = new LineBorder(Color.black);
27  
28      DropListener dropListener = new DropAdapter() {
29        public boolean allowDrop(DragEvent e) {
30      if (e.getData() instanceof Vector) {
31          Vector v = (Vector) e.getData();
32          for(int i=0; i < v.size(); i++) {
33        if (!(v.elementAt(i) instanceof Dbxref))
34            return false;
35          }
36          return true;
37      } else if (e.getData() instanceof Object []) {
38          Object [] v = (Object []) e.getData();
39          for(int i=0; i < v.length; i++) {
40        if (!(v[i] instanceof Dbxref))
41            return false;
42          }
43          return true;
44      }
45      return false;
46        }
47  
48        public void dragEnter(DragEvent e) {
49      referenceList.setBorder(lineBorder);    
50        }
51  
52        public void dragExit(DragEvent e) {
53      referenceList.setBorder(null);
54        }
55  
56        public void drop(DragEvent e) {
57      referenceList.setBorder(null);
58      if (e.getData() instanceof Vector) {
59          Vector v = (Vector) e.getData();
60          for(int i=0; i < v.size(); i++) {
61        Dbxref s = (Dbxref) ((Dbxref) v.elementAt(i)).clone();
62        s.setType(Dbxref.SYNONYM);
63        if (!references.contains(s)) {
64            references.addElement(s);
65        referenceList.setListData(references);
66        }
67          }
68      } else if (e.getData() instanceof Object []) {
69          Object [] v = (Object []) e.getData();
70          for(int i=0; i < v.length; i++) {
71        Dbxref s = (Dbxref) ((Dbxref) v[i]).clone();
72        s.setType(Dbxref.SYNONYM);
73        if (!references.contains(s)) {
74            references.addElement(s);
75        referenceList.setListData(references);
76        }
77          }
78      }
79        }
80    };
81  
82      public SynonymEditorComponent(Controller controller) {
83    this.controller = controller;
84    setFont(controller.getDefaultFont());
85    textField = new JTextField();
86    idField = new JLabel("<not displayed>");
87    referenceList = new DragList(controller.getDragController());
88    referenceLabel = new JLabel("DbXrefs");
89    referenceButton = new JButton("Edit");
90  
91    referenceList.setPreferredSize(new Dimension(40,100));
92    referenceList.setMinimumSize(new Dimension(40,100));
93    referenceLabel.setFont(getFont());
94    referenceButton.setFont(getFont());
95    textField.setFont(getFont());
96    textField.setMaximumSize(new Dimension(Integer.MAX_VALUE, 16));
97  
98    initGUI();
99    attachListeners();
100     }
101 
102     public void showDbxrefEditor() {
103   JTextArea noDbxLabel = new JTextArea("Select a dbxref from the list "+
104                "to edit it, or press add to "+
105                "create a new dbxref");
106   noDbxLabel.setOpaque(false);
107   noDbxLabel.setFont(controller.getDefaultFont());
108   noDbxLabel.setDisabledTextColor(idField.getForeground());
109   noDbxLabel.setLineWrap(true);
110   noDbxLabel.setWrapStyleWord(true);
111   noDbxLabel.setEditable(false);
112   noDbxLabel.setEnabled(false);
113 
114   final JDialog dialog =
115       new JDialog((Frame) null, "Edit synonym dbxrefs",
116       true);
117   dialog.setFont(controller.getDefaultFont());
118   final ListEditor editor = new
119       ListEditor(new DbxrefEditorComponent(controller,
120              Dbxref.SYNONYM),
121            noDbxLabel,
122            references,
123            false,
124            true,
125            true,
126            true,
127            false);
128   editor.setOpaque(false);
129   editor.setPreferredSize(new Dimension(300,200));
130   editor.setFont(controller.getDefaultFont());
131   editor.setDragController(controller.getDragController());
132   editor.setButtonColor(Preferences.defaultButtonColor());
133 
134   JButton okButton = new JButton("Ok");
135   okButton.setFont(controller.getDefaultFont());
136   okButton.setBackground(Preferences.defaultButtonColor());
137 
138   okButton.addActionListener(new ActionListener() {
139     public void actionPerformed(ActionEvent e) {
140         editor.commit();
141         dialog.setVisible(false);
142     }
143       });
144 
145   Box buttonPanel = Box.createHorizontalBox();
146   buttonPanel.add(Box.createHorizontalGlue());
147   buttonPanel.add(okButton);
148   buttonPanel.add(Box.createHorizontalGlue());
149 
150   JPanel panel = new JPanel();
151   panel.setLayout(new BorderLayout());
152   panel.add(editor, "North");
153   panel.add(buttonPanel, "South");
154   panel.setBackground(Preferences.defaultBackgroundColor());
155 
156   dialog.setContentPane(panel);
157   dialog.pack();
158   dialog.show();
159 
160   referenceList.setListData(references);
161     }
162 
163     public void setMasterComponent(Component c) {
164   if (c instanceof ListEditor)
165       editor = (ListEditor) c;
166     }
167 
168     public void initGUI() {
169   setLayout(new BorderLayout());
170 
171   JPanel textPanel = new JPanel();
172   textPanel.setLayout(new BoxLayout(textPanel,
173             BoxLayout.Y_AXIS));
174   textPanel.setOpaque(false);
175 
176   referenceButton.
177       setPreferredSize(new Dimension((int) referenceButton.
178              getPreferredSize().getWidth(),
179              referenceButton.getFont().
180              getSize()));
181   referenceButton.setBackground(Preferences.defaultButtonColor());
182 
183   JPanel referenceBox = new JPanel();
184   referenceBox.setOpaque(false);
185   referenceBox.setLayout(new BoxLayout(referenceBox, BoxLayout.X_AXIS));
186   referenceBox.add(referenceLabel);
187   referenceBox.add(Box.createHorizontalGlue());
188   referenceBox.add(referenceButton);
189 
190   JLabel textLabel = new JLabel("Synonym text");
191   textLabel.setFont(getFont());
192   textPanel.add(textLabel);
193   textPanel.add(textField);
194   textPanel.add(Box.createVerticalStrut(5));
195   textPanel.add(idField);
196   textPanel.add(Box.createVerticalStrut(5));
197   textPanel.add(referenceBox);
198 
199   referenceBox.setAlignmentX(LEFT_ALIGNMENT);
200   idField.setAlignmentX(LEFT_ALIGNMENT);
201   textField.setAlignmentX(LEFT_ALIGNMENT);
202   textLabel.setAlignmentX(LEFT_ALIGNMENT);
203   textPanel.setAlignmentX(LEFT_ALIGNMENT);
204   referenceButton.setAlignmentX(LEFT_ALIGNMENT);
205   referenceList.setAlignmentX(LEFT_ALIGNMENT);
206   referenceLabel.setAlignmentX(LEFT_ALIGNMENT);
207 
208   referenceList.setFont(getFont());
209 
210   JScrollPane referencePane =
211       new JScrollPane(referenceList,
212           JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
213           JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
214 
215   add(textPanel, "North");
216   add(referencePane, "Center");
217   setOpaque(false);
218     }
219 
220     protected void deleteSelectedReferences() {
221   Object [] selected = referenceList.getSelectedValues();
222   for(int i=0; i < selected.length; i++) {
223       references.removeElement(selected[i]);
224   }
225   referenceList.setListData(references);
226     }
227     
228     public void attachListeners() {
229   textField.addActionListener(new ActionListener () {
230     public void actionPerformed(ActionEvent e) {
231         commit();
232     }
233       });
234   controller.getDragController().
235       registerDropTarget(new DropTarget(referenceList, dropListener));
236   referenceList.registerKeyboardAction(new ActionListener() {
237     public void actionPerformed(ActionEvent e) {
238         deleteSelectedReferences();
239     }
240       },
241                KeyStroke.
242                getKeyStroke(KeyEvent.VK_DELETE,
243                 0),
244                WHEN_FOCUSED);
245   referenceButton.addActionListener(new ActionListener() {
246     public void actionPerformed(ActionEvent e) {
247         showDbxrefEditor();
248     }
249       });
250     }
251 
252     public void commit() {
253   editor.doStore(obj);
254   editor.refresh();
255     }
256 
257     public void store(Object in) {
258   Synonym syn = (Synonym) in;
259   syn.setText(textField.getText());
260   syn.setDbxrefs(references);
261     }
262     public Object createNewValue() {
263   return new Synonym("<new synonym>");
264     }
265 
266     public void load(Object in) {
267   obj = in;
268   textField.setText(((Synonym) in).getText());
269   String id = ((Synonym) in).getID();
270   if (id != null && id.length() > 0)
271       idField.setText(id);
272   else
273       idField.setText("");
274   references = ((Synonym) in).getDbxrefs();
275 
276   referenceList.setListData(references);
277   revalidate();
278     }
279 }