001    package org.gui;
002    
003    import java.io.*;
004    import java.net.*;
005    import java.awt.*;
006    import javax.swing.*;
007    import java.awt.dnd.*;
008    import java.awt.datatransfer.*;
009    
010    public class GUITool {
011    
012            private static java.util.ArrayList<JFrame> frame_list_ = new java.util.ArrayList<JFrame>();
013            private static JFileChooser file_chooser_;
014    
015            public static boolean tryToSetSystemLookAndFeel() throws Exception {
016                    boolean result = true;
017                    try{
018                            String system_laf_name = UIManager.getSystemLookAndFeelClassName();
019                            UIManager.setLookAndFeel(system_laf_name);
020                    }catch(Exception e){ result = false; }
021                    return result;
022            }
023    
024            public static File[] openFiles(JComponent parent, String button_name) throws Exception {
025                    JFileChooser file_chooser = getFileChooser();
026                    if(button_name==null)
027                            button_name = "open";
028                    int result = file_chooser.showDialog(parent, button_name);
029                    if(result != JFileChooser.APPROVE_OPTION) throw new UsarCancelException("usarcanceld");
030                    File[] file_list = file_chooser.getSelectedFiles();
031                    return file_list;
032            }
033    
034            public static File openFile(JComponent parent, String button_name) throws Exception {
035                    JFileChooser file_chooser = getFileChooser();
036                    if(button_name==null)
037                            button_name = "open";
038                    int result = file_chooser.showDialog(parent, button_name);
039                    if(result != JFileChooser.APPROVE_OPTION) throw new UsarCancelException("usar canceld");
040                    File file = file_chooser.getSelectedFile();
041                    return file;
042            }
043    
044            public static JFileChooser getFileChooser() throws Exception {
045                    if(file_chooser_ == null) {
046                            file_chooser_ = new JFileChooser();
047                            JPanel panel = new JPanel(new BorderLayout());
048                            JTextPane ta = new JTextPane();
049                            ta.setContentType("text/html");
050                            ta.setText("<html><br/><div style='text-align:center;'>Drop Area</div></html>");
051                            ta.setPreferredSize(new Dimension(100, 100));
052                            ta.setEditable(false);
053                            ta.setBorder(BorderFactory.createLineBorder(Color.black));
054                            // ta.setLineWrap(true);
055                            panel.add(ta, BorderLayout.CENTER);
056                            panel.setBorder(BorderFactory.createEmptyBorder(0,20,0,0));
057    //                      JComponent component = panel;
058                            FileInputer inputer = new FileInputer(){
059                                    public void openFile(File... file) {
060                                            file_chooser_.setSelectedFiles(file);
061                                    }
062                            };
063                            setFileInputer(ta, ta, inputer);
064                            file_chooser_.setAccessory(panel);
065                            file_chooser_.setMultiSelectionEnabled(true);
066                    }
067                    return file_chooser_;
068            }
069            
070        public static JFrame showFrame(JComponent component) {
071            return showFrame(component, JFrame.DO_NOTHING_ON_CLOSE);
072        }
073    
074        public static JFrame showFrame(JComponent component, int close_operation) {
075                    JFrame frame = new JFrame();
076                    frame.setContentPane(component);
077                    frame.setDefaultCloseOperation(close_operation);
078                    frame.pack();
079                    frame.setLocationRelativeTo(null);
080                    frame.setVisible(true);
081                    frame_list_.add(frame);
082                    return frame;
083            }
084    
085        public static void alert(Object message) {
086            JOptionPane.showMessageDialog(null, message);
087        }
088    
089    
090    
091    
092    
093    
094    
095    
096    
097    
098    
099    
100        public static void setFileInputer(JComponent component,final JTextPane message_label, final FileInputer inputer) throws Exception {
101                    DropTarget dt = new DropTarget();
102                    dt.addDropTargetListener(new DropTargetAdapter(){
103                            public void dragEnter(DropTargetDragEvent dtde) {
104                                    try{
105                                            Transferable transferable_data = dtde.getTransferable();
106                                            if(transferable_data.isDataFlavorSupported(DataFlavor.stringFlavor)) {
107                                                    String text = (String)transferable_data.getTransferData(DataFlavor.stringFlavor);
108                                                    if(message_label != null) {
109                                                        //message_label.setText(text);
110                                                            message_label.setText("<html><br/><div style='text-align:center;'>"+text+"</div></html>");
111                                                    }
112                                                    dtde.acceptDrag(DnDConstants.ACTION_COPY);
113                                            } else if(transferable_data.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){
114                                                    Object tmp = transferable_data.getTransferData(DataFlavor.javaFileListFlavor);
115                                                    java.util.List<File> file_list = castList(tmp);
116                                                    StringBuffer text = new StringBuffer();
117                                                    for(int i=0;i<file_list.size();i++)
118                                                            text.append(file_list.get(i).getAbsolutePath()+"\n");
119                                                    if(message_label != null) {
120                                                        //message_label.setText(text.toString());
121                                                        message_label.setText("<html><br/><div style='text-align:center;'>"+text+"</div></html>");
122                                                    }
123                                                    dtde.acceptDrag(DnDConstants.ACTION_COPY);
124                                            } else {
125                                                    if(message_label != null) {
126                                                            String text = "unknown data type.";
127                                                            //message_label.setText(text);
128                                                            message_label.setText("<html><br/><div style='text-align:center;'>"+text+"</div></html>");
129                                                    }
130                                                    dtde.rejectDrag();
131                                            }
132                                    }catch(Exception e){
133                                            e.printStackTrace();
134                                    }
135                            }
136                            public void dragExit(DropTargetEvent dtde) {
137                                    if(message_label != null)
138                                            message_label.setText("drop area");
139                            }
140                            public void drop(DropTargetDropEvent dtde){
141                                    boolean success = false;
142                                    dtde.acceptDrop(DnDConstants.ACTION_COPY);
143                                    try{
144                                            Transferable transferable_data = dtde.getTransferable();
145                                            if(transferable_data.isDataFlavorSupported(DataFlavor.stringFlavor)) {
146                                                    String text = (String)transferable_data.getTransferData(DataFlavor.stringFlavor);
147                                                    text = text.replaceAll("\r\n", "\n").replaceAll("\r","\n");
148                                                    String[] uri_text_list = text.split("\n");
149                                                    final File[] file_list = new File[uri_text_list.length];
150                                                    for(int i=0;i<uri_text_list.length;i++)
151                                                            file_list[i] = new File(new URI(uri_text_list[i]));
152                                                    inputer.openFile(file_list);
153                                                    success = true;
154                                            } else if(transferable_data.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){
155                                                    Object tmp = transferable_data.getTransferData(DataFlavor.javaFileListFlavor);
156                                                    java.util.List<File> file_list = castList(tmp);
157                                                    inputer.openFile(file_list.toArray(new File[0]));
158                                                    success = true;
159                                            } else {
160                                                    StringBuffer sb = new StringBuffer();
161                                                    DataFlavor[] dfs = transferable_data.getTransferDataFlavors();
162                                                    for(int i=0;i<dfs.length;i++) {
163                                                            sb.append(dfs[i].getMimeType());
164                                                            sb.append("(");
165                                                            sb.append(dfs[i].toString());
166                                                            sb.append(")\n");
167                                                    }
168                                                    throw new Exception("Unsupported data type.\n"+sb.toString());
169                                            }
170                                    }catch(Exception e){
171                                            e.printStackTrace();
172                                    }
173                                    if(message_label != null)
174                                        message_label.setText("<html><br/><div style='text-align:center;'>Drop Area</div></html>");
175                                    //message_label.setText("drop area");
176                                    dtde.dropComplete(success);
177                            }
178                    });
179                    component.setDropTarget(dt);
180            }
181    
182    
183    
184    
185        public static void setFileInputer(JComponent component, final FileInputer inputer) throws Exception {
186            setFileInputer(component, null, inputer);
187        }
188    
189    
190    
191    
192            @SuppressWarnings("unchecked")
193            private static <E> java.util.List<E> castList(Object list) {
194                return (java.util.List<E>)list;
195            }
196    }