001/*
002 *                    BioJava development code
003 *
004 * This code may be freely distributed and modified under the
005 * terms of the GNU Lesser General Public Licence.  This should
006 * be distributed with the code.  If you do not have a copy,
007 * see:
008 *
009 *      http://www.gnu.org/copyleft/lesser.html
010 *
011 * Copyright for this code is held jointly by the individual
012 * authors.  These should be listed in @author doc comments.
013 *
014 * For more information on the BioJava project and its aims,
015 * or to join the biojava-l mailing list, visit the home page
016 * at:
017 *
018 *      http://www.biojava.org/
019 *
020 * Created on Apr 6, 2010
021 * Author: Andreas Prlic
022 *
023 */
024
025package org.biojava.nbio.structure.align.gui;
026
027import org.biojava.nbio.structure.align.util.UserConfiguration;
028import org.biojava.nbio.structure.align.webstart.WebStartMain;
029import org.biojava.nbio.structure.gui.util.PDBUploadPanel;
030import org.biojava.nbio.structure.io.LocalPDBDirectory.FetchBehavior;
031
032import javax.swing.*;
033import java.awt.*;
034import java.awt.event.ActionEvent;
035import java.awt.event.ActionListener;
036import java.awt.event.KeyEvent;
037
038public class ConfigPDBInstallPanel extends JPanel
039{
040
041        /**
042         *
043         */
044        private static final long serialVersionUID = -1055193854675583808L;
045
046        JCheckBox fromFtp;
047        JComboBox fileType;
048
049        JTextField pdbDir;
050
051        private static ConfigPDBInstallPanel instance = new ConfigPDBInstallPanel();
052
053        static JDialog dialog;
054
055        private ConfigPDBInstallPanel(){
056
057                UserConfiguration   config = WebStartMain.getWebStartConfig();
058
059                fileType = PDBUploadPanel.getFileFormatSelect();
060
061                Box vBox = Box.createVerticalBox();
062                Box hBox = Box.createHorizontalBox();
063
064                pdbDir = new JTextField(20);
065
066                String conf = System.getProperty(UserConfiguration.PDB_DIR);
067                if ( conf != null){
068                        pdbDir.setText(conf);
069                }
070
071                JLabel l01 = new JLabel("Directory containing PDBs");
072                //panel.add(l01);
073                //panel.add(f);
074
075                hBox.add(l01);
076                hBox.add(pdbDir);
077                vBox.add(hBox);
078
079                if ( config != null) {
080                        pdbDir.setText( config.getPdbFilePath() );
081                }
082
083                Action action = new ChooseDirAction(pdbDir, config);
084
085                JButton chooser = new JButton(action);
086                hBox.add(chooser);
087
088                Box hBox3 = Box.createHorizontalBox();
089                JLabel label2 = new JLabel("Fetch missing PDBs from ftp site:");
090                fromFtp = new JCheckBox();
091                fromFtp.setMnemonic(KeyEvent.VK_F);
092                fromFtp.setSelected(true);
093                if ( config != null)
094                        fromFtp.setSelected(config.getFetchBehavior() != FetchBehavior.LOCAL_ONLY);
095
096                JLabel ftype = new JLabel("File format:");
097
098                hBox3.add(Box.createGlue());
099                hBox3.add(ftype);
100                hBox3.add(fileType);
101                hBox3.add(Box.createGlue());
102                hBox3.add(label2);
103                hBox3.add(fromFtp);
104
105                vBox.add(hBox3);
106                this.add(vBox);
107
108        }
109
110        public static void showDialog(){
111                if ( dialog != null) {
112
113                        dialog.setVisible(true);
114                        return;
115                }
116
117                dialog = new JDialog();
118                dialog.setSize(new Dimension(600,300));
119                Box vBox = Box.createVerticalBox();
120
121                vBox.add(instance);
122
123
124                UIManager.LookAndFeelInfo[] lookAndFeels = UIManager.getInstalledLookAndFeels();
125                JPanel panel = new JPanel();
126
127                for(int i = 0; i < lookAndFeels.length; i++){
128                  JButton button = new JButton(lookAndFeels[i].getName());
129                  button.addActionListener(new MyAction(dialog));
130                  panel.add(button);
131                }
132
133                JTabbedPane jTab = new JTabbedPane();
134                jTab.addTab("Select User Interface", null, panel, "Select the Look and Feel of the application.");
135
136                vBox.add(jTab);
137                vBox.add(Box.createGlue());
138
139                JButton apply = new JButton("Apply");
140                apply.addActionListener(new ActionListener(){
141                        @Override
142                public void actionPerformed(ActionEvent event) {
143                                instance.applyValues();
144                                dialog.dispose();
145                        }
146                });
147
148                JButton close = new JButton("Cancel");
149
150                close.addActionListener(new ActionListener(){
151                        @Override
152                public void actionPerformed(ActionEvent event) {
153                          dialog.dispose();
154                        }
155                });
156
157                Box hBoxb = Box.createHorizontalBox();
158                hBoxb.add(Box.createGlue());
159                hBoxb.add(close,BorderLayout.EAST);
160                hBoxb.add(apply,BorderLayout.EAST);
161                vBox.add(hBoxb);
162
163                dialog.getContentPane().add(vBox);
164                dialog.setVisible(true);
165
166        }
167
168        protected void applyValues()
169        {
170                UserConfiguration config = WebStartMain.getWebStartConfig();
171
172                String dir = pdbDir.getText();
173                config.setPdbFilePath(dir);
174                boolean fromFtpF = fromFtp.isSelected();
175                if(fromFtpF) {
176                        config.setFetchBehavior(FetchBehavior.FETCH_REMEDIATED);
177                } else {
178                        config.setFetchBehavior(FetchBehavior.LOCAL_ONLY);
179                }
180                String fileFormat = (String)fileType.getSelectedItem();
181                config.setFileFormat(fileFormat);
182
183                
184
185        }
186
187        public JCheckBox getFromFtp()
188        {
189                return fromFtp;
190        }
191        public void setFromFtp(JCheckBox fromFtp)
192        {
193                System.out.println(fromFtp);
194                this.fromFtp = fromFtp;
195        }
196        public JTextField getPDBDirField(){
197                return pdbDir;
198        }
199        public void setPDBDirField(JTextField dir){
200                pdbDir = dir;
201        }
202
203
204
205
206}
207
208class MyAction implements ActionListener{
209        JDialog dialog;
210
211        public MyAction(JDialog dialog) {
212                this.dialog= dialog;
213        }
214
215
216        @Override
217        @SuppressWarnings("unused")
218        public void actionPerformed(ActionEvent ae){
219                Object EventSource = ae.getSource();
220                String lookAndFeelClassName = null;
221                UIManager.LookAndFeelInfo[] looks = UIManager.getInstalledLookAndFeels();
222                for(int i = 0; i < looks.length; i++){
223                        if(ae.getActionCommand().equals(looks[i].getName())){
224                                lookAndFeelClassName = looks[i].getClassName();
225                                break;
226                        }
227                }
228                try{
229                        UIManager.setLookAndFeel(lookAndFeelClassName);
230
231                        SwingUtilities.updateComponentTreeUI(dialog);
232
233                        SwingUtilities.updateComponentTreeUI( AlignmentGui.getInstanceNoVisibilityChange());
234                }
235                catch(Exception e){
236                        JOptionPane.showMessageDialog(dialog, "Can't change look and feel:"
237                                        + lookAndFeelClassName, "Invalid PLAF", JOptionPane.ERROR_MESSAGE);
238                }
239        }
240}