3cc2aea805817f878e33519cb3071486d1855889
[debian/jabref.git] / src / java / net / sf / jabref / export / ExportCustomizationDialog.java
1 package net.sf.jabref.export;
2
3 import javax.swing.JDialog;
4 import java.awt.*;
5 import net.sf.jabref.*;
6 import javax.swing.*;
7 import java.awt.event.ActionListener;
8 import java.awt.event.ActionEvent;
9 import javax.swing.table.AbstractTableModel;
10 import javax.swing.table.TableColumnModel;
11
12 /**
13  * <p>Title: </p>
14  * <p>Description: </p>
15  * <p>Copyright: Copyright (c) 2003</p>
16  * <p>Company: </p>
17  * @author not attributable
18  * @version 1.0
19  */
20
21 public class ExportCustomizationDialog extends JDialog {
22
23   JabRefFrame frame;
24   JButton addExport = new JButton(Globals.lang("Add new")),
25       modify = new JButton(Globals.lang("Modify")),
26       remove = new JButton(Globals.lang("Remove")),
27       close = new JButton(Globals.lang("Close")),
28       help = new JButton(Globals.lang("Help"));
29
30   JPanel options = new JPanel(),
31       main = new JPanel();
32   JTable table;
33
34
35   public ExportCustomizationDialog(JabRefFrame frame_) throws HeadlessException {
36
37     super(frame_, Globals.lang("Manage custom exports"), false);
38     frame = frame_;
39     addExport.addActionListener(new ActionListener() {
40      public void actionPerformed(ActionEvent e) {
41        CustomExportDialog ecd = new CustomExportDialog(frame);
42        ecd.setVisible(true); // ecd.show(); -> deprecated since 1.5
43        if (ecd.okPressed()) {
44          String[] newFormat = new String[] {ecd.name(), ecd.layoutFile(), ecd.extension() };
45          Globals.prefs.customExports.addFormat(newFormat);
46          table.revalidate();
47          table.repaint();
48          frame.setUpCustomExportMenu();
49        }
50      }
51     });
52
53     modify.addActionListener(new ActionListener() {
54       public void actionPerformed(ActionEvent e) {
55         int row = table.getSelectedRow();
56         if (row == -1) return;
57        String[] old = Globals.prefs.customExports.getElementAt(row);
58        CustomExportDialog ecd = new CustomExportDialog(frame, old[0], old[1], old[2]);
59        ecd.setVisible(true); // ecd.show(); -> deprecated since 1.5
60        if (ecd.okPressed()) {
61          old[0] = ecd.name();
62          old[1] = ecd.layoutFile();
63          old[2] = ecd.extension();
64          table.revalidate();
65          table.repaint();
66          frame.setUpCustomExportMenu();
67        }
68      }
69     });
70
71     remove.addActionListener(new ActionListener() {
72       public void actionPerformed(ActionEvent e) {
73         int row = table.getSelectedRow();
74         if (row == -1) return;
75         Globals.prefs.customExports.remove(row);
76         table.revalidate();
77         table.repaint();
78         frame.setUpCustomExportMenu();
79       }
80     });
81
82     AbstractAction closeAction = new AbstractAction() {
83       public void actionPerformed(ActionEvent e) {
84         dispose();
85       }
86     };
87
88     close.addActionListener(closeAction);
89
90     help.addActionListener(new HelpAction(frame.helpDiag, GUIGlobals.exportCustomizationHelp,
91                                           "Help"));
92
93     ExportTableModel tableModel = new ExportTableModel();
94     table = new JTable(tableModel);
95     TableColumnModel cm = table.getColumnModel();
96     cm.getColumn(0).setPreferredWidth(GUIGlobals.EXPORT_DIALOG_COL_0_WIDTH);
97     cm.getColumn(1).setPreferredWidth(GUIGlobals.EXPORT_DIALOG_COL_1_WIDTH);
98     cm.getColumn(2).setPreferredWidth(GUIGlobals.EXPORT_DIALOG_COL_2_WIDTH);
99     JScrollPane sp = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
100                                      JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
101     table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
102     table.setPreferredScrollableViewportSize(
103       new Dimension(500, 150));
104     if (table.getRowCount() > 0)
105       table.setRowSelectionInterval(0, 0);
106
107     // Key bindings:
108     ActionMap am = main.getActionMap();
109     InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
110     im.put(frame.prefs().getKey("Close dialog"), "close");
111     am.put("close", closeAction);
112     //am = table.getActionMap();
113     //im = table.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
114     //im.put(frame.prefs().getKey("Close dialog"), "close");
115     //am.put("close", closeAction);
116     main.setLayout(new BorderLayout());
117     main.add(sp, BorderLayout.CENTER);
118     options.add(addExport);
119     options.add(modify);
120     options.add(remove);
121     options.add(close);
122     options.add(Box.createHorizontalStrut(5));
123     options.add(help);
124
125     getContentPane().add(main, BorderLayout.CENTER);
126     getContentPane().add(options, BorderLayout.SOUTH);
127     pack();
128     Util.placeDialog(this, frame);
129     new FocusRequester(table);
130   }
131
132   class ExportTableModel extends AbstractTableModel {
133     public int getColumnCount() {
134       return 3;
135     }
136
137     public int getRowCount() {
138       return Globals.prefs.customExports.size();
139     }
140
141     public String getColumnName(int col) {
142       switch (col) {
143         case 0:
144           return Globals.lang("Export name");
145         case 1:
146           return Globals.lang("Main layout file");
147         default:
148           return Globals.lang("File extension");
149       }
150     }
151
152     public Object getValueAt(int rowIndex, int columnIndex) {
153       String[] s = Globals.prefs.customExports.getElementAt(rowIndex);
154       return s[columnIndex];
155     }
156
157   }
158
159 }