Package chrriis.dj.nativeswing.swtimpl.demo.examples.utilities

Source Code of chrriis.dj.nativeswing.swtimpl.demo.examples.utilities.FileAssociations

/*
* Christopher Deckers (chrriis@nextencia.net)
* http://www.nextencia.net
*
* See the file "readme.txt" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
package chrriis.dj.nativeswing.swtimpl.demo.examples.utilities;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Comparator;

import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
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.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

import chrriis.common.UIUtils;
import chrriis.common.ui.TableSorter;
import chrriis.dj.nativeswing.swtimpl.NativeInterface;
import chrriis.dj.nativeswing.swtimpl.utilities.FileTypeLauncher;

/**
* @author Christopher Deckers
*/
public class FileAssociations {

  public static JComponent createContent() {
    // Set in code and and not in class to avoid AWT to initialize before Native Swing.
    final Icon EMPTY_ICON = new Icon() {
      public int getIconHeight() {
        return FileTypeLauncher.getIconSize().height;
      }
      public int getIconWidth() {
        return 0;
      }
      public void paintIcon(Component c, Graphics g, int x, int y) {
      }
    };
    final JPanel contentPane = new JPanel(new BorderLayout());
    JPanel loadingPanel = new JPanel(new GridBagLayout());
    loadingPanel.add(new JLabel("Please wait while the full list is being retrieved..."));
    contentPane.add(loadingPanel, BorderLayout.CENTER);
    new Thread("NativeSwingDemo File Association Loader") {
      @Override
      public void run() {
        final FileTypeLauncher[] fileTypeLaunchers = FileTypeLauncher.getLaunchers();
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            contentPane.removeAll();
            JPanel mainPane = new JPanel(new BorderLayout());
            final JTable table = new JTable() {
              @Override
              public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                Component c = super.prepareRenderer(renderer, row, column);
                if(c instanceof JLabel) {
                  Object value = getValueAt(row, column);
                  if(value instanceof FileTypeLauncher) {
                    FileTypeLauncher fileTypeLauncher = (FileTypeLauncher)value;
                    JLabel label = (JLabel)c;
                    label.setIcon(fileTypeLauncher.getIcon());
                    label.setText(fileTypeLauncher.getName());
                  } else {
                    ((JLabel)c).setIcon(null);
                  }
                }
                return c;
              }
            };
            table.setRowHeight(FileTypeLauncher.getIconSize().height + 2);
            ListSelectionModel selectionModel = table.getSelectionModel();
            selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            Object[][] data = new Object[fileTypeLaunchers.length][];
            for(int i=0; i<fileTypeLaunchers.length; i++) {
              FileTypeLauncher fileTypeLauncher = fileTypeLaunchers[i];
              String[] registeredExtensions = fileTypeLauncher.getRegisteredExtensions();
              StringBuilder sb = new StringBuilder();
              for(int j=0; j<registeredExtensions.length; j++) {
                if(j > 0) {
                  sb.append(", ");
                }
                sb.append(registeredExtensions[j]);
              }
              data[i] = new Object[] {fileTypeLauncher, sb.toString()};
            }
            DefaultTableModel tableModel = new DefaultTableModel(data, new Object[] {"File Type Launcher", "Registered Extensions"}) {
              @Override
              public boolean isCellEditable(int row, int column) {
                return false;
              }
            };
            table.setModel(new TableSorter(tableModel, table.getTableHeader()) {
              @Override
              protected Comparator getComparator(int column) {
                if(column == 0) {
                  return new Comparator<FileTypeLauncher>() {
                    public int compare(FileTypeLauncher o1, FileTypeLauncher o2) {
                      return o1.getName().toLowerCase().compareTo(o2.getName().toLowerCase());
                    }
                  };
                }
                return super.getComparator(column);
              }
            });
            mainPane.add(new JScrollPane(table), BorderLayout.CENTER);
            JPanel fileLaunchPanel = new JPanel(new BorderLayout());
            fileLaunchPanel.setBorder(BorderFactory.createEmptyBorder(4, 4, 0, 4));
            fileLaunchPanel.add(new JLabel("File: "), BorderLayout.WEST);
            final JTextField fileLaunchTextField = new JTextField();
            fileLaunchPanel.add(fileLaunchTextField, BorderLayout.CENTER);
            JButton browseButton = new JButton("...");
            browseButton.addActionListener(new ActionListener() {
              JFileChooser fileChooser;
              public void actionPerformed(ActionEvent e) {
                if(fileChooser == null) {
                  fileChooser = new JFileChooser();
                }
                if(fileChooser.showOpenDialog(contentPane) == JFileChooser.APPROVE_OPTION) {
                  fileLaunchTextField.setText(fileChooser.getSelectedFile().getAbsolutePath());
                }
              }
            });
            fileLaunchPanel.add(browseButton, BorderLayout.EAST);
            JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 4));
            final JButton launchButton = new JButton("Launch");
            launchButton.setEnabled(false);
            launchButton.setIcon(EMPTY_ICON);
            launchButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                FileTypeLauncher launcher = (FileTypeLauncher)table.getValueAt(table.getSelectedRow(), table.convertColumnIndexToView(0));
                launcher.launch(fileLaunchTextField.getText());
              }
            });
            buttonPanel.add(launchButton);
            selectionModel.addListSelectionListener(new ListSelectionListener() {
              public void valueChanged(ListSelectionEvent e) {
                launchButton.setEnabled(table.getSelectedRow() != -1);
              }
            });
            final JButton launchAssociatedButton = new JButton("Launch Associated Handler");
            launchAssociatedButton.setEnabled(false);
            launchAssociatedButton.setIcon(EMPTY_ICON);
            launchAssociatedButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                String fileName = fileLaunchTextField.getText();
                FileTypeLauncher.getLauncher(fileName).launch(fileName);
              }
            });
            fileLaunchTextField.getDocument().addDocumentListener(new DocumentListener() {
              public void changedUpdate(DocumentEvent e) {
                adjustState();
              }
              public void insertUpdate(DocumentEvent e) {
                adjustState();
              }
              public void removeUpdate(DocumentEvent e) {
                adjustState();
              }
              protected void adjustState() {
                FileTypeLauncher launcher = FileTypeLauncher.getLauncher(fileLaunchTextField.getText());
                launchAssociatedButton.setEnabled(launcher != null);
                launchAssociatedButton.setText(launcher == null? "Launch Associated Handler": "Launch " + launcher.getName());
                launchAssociatedButton.setIcon(launcher == null? EMPTY_ICON: launcher.getIcon());
              }
            });
            buttonPanel.add(launchAssociatedButton);
            fileLaunchPanel.add(buttonPanel, BorderLayout.SOUTH);
            mainPane.add(fileLaunchPanel, BorderLayout.SOUTH);
            contentPane.add(mainPane, BorderLayout.CENTER);
            contentPane.revalidate();
            contentPane.repaint();
          }
        });
      }
    }.start();
    return contentPane;
  }

  /* Standard main method to try that test as a standalone application. */
  public static void main(String[] args) {
    NativeInterface.open();
    UIUtils.setPreferredLookAndFeel();
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        JFrame frame = new JFrame("DJ Native Swing Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(createContent(), BorderLayout.CENTER);
        frame.setSize(800, 600);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
      }
    });
    NativeInterface.runEventPump();
  }

}
TOP

Related Classes of chrriis.dj.nativeswing.swtimpl.demo.examples.utilities.FileAssociations

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.