예제 #1
0
  private void onAddAllTopLevelFiles() {
    final File[] files = m_fileChooser.getCurrentDirectory().listFiles();
    final ArrayList<File> topLevelFiles = new ArrayList<File>();

    // remove directories
    for (final File f : files) {
      if (!f.isDirectory() && m_fileChooser.getFileFilter().accept(f)) {
        topLevelFiles.add(f);
      }
    }

    m_selectedFileListModel.addFiles(topLevelFiles.toArray(new File[] {}), m_fileFilter);
    m_filePref.put("Path", m_fileChooser.getCurrentDirectory().toString());
    fireSelectionChangedEvent();
  }
예제 #2
0
  public void onAdd() {
    final FileFilter ff = m_fileChooser.getFileFilter();
    if (m_fileChooser.getSelectedFiles().length == 0) {

      JOptionPane.showMessageDialog(
          this,
          "No files selected. Please select at least one file or directory.",
          "Warning",
          JOptionPane.ERROR_MESSAGE);

      return;
    }

    m_selectedFileListModel.addFiles(m_fileChooser.getSelectedFiles(), ff);

    m_filePref.put("Path", m_fileChooser.getCurrentDirectory().toString());
    fireSelectionChangedEvent();
  }
예제 #3
0
  private void enterOnTextField(final KeyEvent event, final String text) {

    if (text.isEmpty()) {
      m_fileChooser.setFileFilter(m_fileChooser.getAcceptAllFileFilter());
      return;
    }

    final File[] dirFiles = m_fileChooser.getCurrentDirectory().listFiles();
    final ArrayList<String> textFiles = new ArrayList<String>();
    final ArrayList<File> selectedFiles = new ArrayList<File>();

    // split at " and ' ' most probably a list of files
    final StringTokenizer tk = new StringTokenizer(text, "\"");

    while (tk.hasMoreTokens()) {
      String next = tk.nextToken();
      next = next.trim();
      if (next.length() > 0) {
        textFiles.add(next);
      }
    }

    // search
    boolean foundAllFiles = true;

    // maybe optimize this
    for (final String candidate : textFiles) {
      boolean match = false;
      for (final File file : dirFiles) {
        if (file.getName().equals(candidate)) {
          match = true;
          selectedFiles.add(file);
          break;
        }
      }

      if (!match) {
        foundAllFiles = false;
        break;
      }
    }

    if (foundAllFiles) {
      // ok it was a filelist add them
      m_fileChooser.setSelectedFiles(selectedFiles.toArray(new File[] {}));
      onAdd();
    } else {
      // make a new file filter
      final FileFilter ff =
          new FileFilter() {

            String filterString = WildcardMatcher.wildcardToRegex(text);

            @Override
            public boolean accept(final File f) {
              return f.getName().matches(filterString);
            }

            @Override
            public String getDescription() {
              return text;
            }
          };

      FileFilter containedFilter = null;

      for (final FileFilter filter : m_fileChooser.getChoosableFileFilters()) {

        if (filter.getDescription().equals(ff.getDescription())) {
          containedFilter = filter;
          break;
        }
      }

      if (containedFilter == null) {
        m_fileChooser.setFileFilter(ff);
      } else {
        m_fileChooser.setFileFilter(containedFilter);
      }
    }
  }
예제 #4
0
  /**
   * Creates a new file chooser panel
   *
   * @param fileFilter available file name extension filters
   */
  @SuppressWarnings("unchecked")
  public FileChooserPanel(final FileFilter fileFilter) {
    final String prefDir = m_filePref.get("Path", "null");
    this.m_fileFilter = fileFilter;

    m_defDir = new File(prefDir);
    // System.out.println(defDir.toString());
    // create instances

    // mac hack to get the file name text field in the jfilechooser dialog.
    m_fileChooser = getFileChooserWithLookAndFeel();

    m_addButton =
        new JButton("Add Selected", new ImageIcon(getClass().getResource("button_ok.png")));
    m_addAllButton =
        new JButton("Add all visible files", new ImageIcon(getClass().getResource("edit_add.png")));
    m_remButton =
        new JButton("Remove selected", new ImageIcon(getClass().getResource("editdelete.png")));
    m_remAllButton =
        new JButton("Remove all Files", new ImageIcon(getClass().getResource("edit_remove.png")));
    m_selectedFileList = new JList<>();
    m_selectedFileListModel = new FileListModel();
    m_selectedFileListBorder = BorderFactory.createTitledBorder("Selected files");
    final JScrollPane jspSelFileList = new JScrollPane(m_selectedFileList);

    m_selectedFileList.setModel(m_selectedFileListModel);

    if (m_selectedFileListModel.getSize() > 0) {
      m_fileChooser.setCurrentDirectory(new File(m_selectedFileListModel.getAbsolutePathAt(0)));
    }
    // arrange the components
    final JPanel left = new JPanel();
    left.setBorder(BorderFactory.createTitledBorder("File browser"));
    final JPanel right = new JPanel();
    right.setBorder(m_selectedFileListBorder);
    final JPanel center = new JPanel();
    center.setBorder(BorderFactory.createTitledBorder("Selection"));

    left.setLayout(new BorderLayout());
    right.setLayout(new BorderLayout());
    center.setLayout(new BoxLayout(center, BoxLayout.Y_AXIS));

    final JPanel buttonPane = new JPanel();
    buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS));
    buttonPane.add(Box.createVerticalStrut(20));
    final JPanel delButtonPan = new JPanel();
    delButtonPan.setLayout(new BoxLayout(delButtonPan, BoxLayout.X_AXIS));
    delButtonPan.add(Box.createVerticalStrut(20));
    m_addButton.setMaximumSize(new Dimension(150, 25));
    m_addButton.setAlignmentX(Component.CENTER_ALIGNMENT);
    buttonPane.add(m_addButton);
    buttonPane.add(Box.createVerticalStrut(20));
    m_addAllButton.setMaximumSize(new Dimension(150, 25));
    m_addAllButton.setAlignmentX(Component.CENTER_ALIGNMENT);
    buttonPane.add(m_addAllButton);
    buttonPane.add(Box.createVerticalStrut(20));
    m_remButton.setMaximumSize(new Dimension(150, 25));
    m_remButton.setAlignmentX(Component.CENTER_ALIGNMENT);
    delButtonPan.add(m_remButton);
    delButtonPan.add(Box.createVerticalStrut(20));
    m_remAllButton.setMaximumSize(new Dimension(150, 25));
    m_remAllButton.setAlignmentX(Component.CENTER_ALIGNMENT);
    delButtonPan.add(m_remAllButton);
    delButtonPan.add(Box.createVerticalStrut(20));

    m_imagePreviewPanel = new ImagePreviewPanel();

    final ApplyFileView view = new ApplyFileView();
    m_fileChooser.setFileView(view);

    // buttonPan.add(m_imagePreviewPanel);
    // buttonPan.add(Box.createGlue());
    m_fileChooser.setPreferredSize(new Dimension(300, 100));
    final JPanel browsePane = new JPanel();
    browsePane.setLayout(new BoxLayout(browsePane, BoxLayout.Y_AXIS));

    browsePane.add(m_fileChooser);

    if (fileFilter != null) {
      // m_fileChooser.setFileFilter(fileFilter);
      m_fileChooser.setFileFilter(fileFilter);
    }

    final JTabbedPane rightTab = new JTabbedPane();
    m_fileChooser.setMultiSelectionEnabled(true);
    m_fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    m_fileChooser.setControlButtonsAreShown(false);
    m_fileChooser.setPreferredSize(new Dimension(450, 340));
    // center.add(buttonPan);
    // rightTab.setPreferredSize(new Dimension(400, 300));
    // browsePane.setPreferredSize(new Dimension(600, 500));
    enterHack(m_fileChooser.getComponents());
    right.add(rightTab);
    left.add(browsePane);
    browsePane.add(buttonPane);

    final JPanel selectedPane = new JPanel();
    selectedPane.setLayout(new BoxLayout(selectedPane, BoxLayout.Y_AXIS));
    selectedPane.add(jspSelFileList);
    selectedPane.add(delButtonPan);

    // browsePane.add(m_addAllButton);
    rightTab.add("Selected Files", selectedPane);
    rightTab.add("Preview/Meta-Data", m_imagePreviewPanel);

    setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
    add(left);
    // add(center);
    add(right);
    m_fileChooser.setComponentPopupMenu(popup);

    final JMenuItem add =
        new JMenuItem("Add Selected File", new ImageIcon(getClass().getResource("button_ok.png")));
    add.addActionListener(
        new ActionListener() {

          @Override
          public void actionPerformed(final ActionEvent e) {
            onAdd();
            fireSelectionChangedEvent();
          }
        });

    final JMenuItem addAll =
        new JMenuItem(
            "Add all Visible Files", new ImageIcon(getClass().getResource("edit_add.png")));
    addAll.addActionListener(
        new ActionListener() {

          @Override
          public void actionPerformed(final ActionEvent e) {
            onAddAllTopLevelFiles();
            fireSelectionChangedEvent();
          }
        });

    final JMenuItem clearSelection =
        new JMenuItem("Remove All", new ImageIcon(getClass().getResource("edit_remove.png")));
    clearSelection.addActionListener(
        new ActionListener() {

          @Override
          public void actionPerformed(final ActionEvent e) {
            m_selectedFileListModel.removeAll();
            fireSelectionChangedEvent();
          }
        });

    final JMenuItem remove =
        new JMenuItem("Remove Selected", new ImageIcon(getClass().getResource("editdelete.png")));
    remove.addActionListener(
        new ActionListener() {

          @Override
          public void actionPerformed(final ActionEvent e) {
            m_selectedFileListModel.removeMenu(m_fileChooser.getSelectedFiles());

            fireSelectionChangedEvent();
          }
        });
    final JSeparator sep = new JSeparator();

    popup.add(sep);
    popup.add(add);
    popup.add(addAll);
    popup.add(sep);
    popup.add(remove);
    popup.add(clearSelection);

    // Show preview and metadata from the selected file
    m_previewListener = new ImagePreviewListener(m_imagePreviewPanel);
    m_fileChooser.addPropertyChangeListener(m_previewListener);

    m_addButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(final ActionEvent e) {
            onAdd();
          }
        });

    m_addAllButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(final ActionEvent e) {
            onAddAllTopLevelFiles();
          }
        });

    m_remButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(final ActionEvent e) {

            onRemove();
          }
        });

    m_remAllButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(final ActionEvent e) {
            onRemoveAll();
          }
        });

    m_fileChooser.addActionListener(
        new ActionListener() {

          @Override
          public void actionPerformed(final ActionEvent e) {
            onAdd();
          }
        });

    m_selectedFileList.addMouseListener(
        new MouseListener() {

          @Override
          public void mouseClicked(final MouseEvent arg0) {
            // Special shortcut to go to directory
            if (arg0.isControlDown()) {

              if (m_selectedFileList.getSelectedIndices().length == 0) {
                return;
              }
              final File dir =
                  new File(
                      m_selectedFileListModel.getAbsolutePathAt(
                          m_selectedFileList.getSelectedIndices()[0]));
              m_fileChooser.setCurrentDirectory(dir);
              m_selectedFileList.clearSelection();

            } else if (arg0.getClickCount() == 2) {
              onRemove();
            }
          }

          @Override
          public void mouseEntered(final MouseEvent arg0) {
            // Nothing to do here
          }

          @Override
          public void mouseExited(final MouseEvent arg0) {
            // Nothing to do here
          }

          @Override
          public void mousePressed(final MouseEvent arg0) {
            // Nothing to do here
          }

          @Override
          public void mouseReleased(final MouseEvent arg0) {
            // Nothing to do here
          }
        });

    m_fileChooser.setCurrentDirectory(m_defDir);
    // m_fileChooser.setVisible(false);
    // m_fileChooser.setVisible(true);
  }