All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.tidalwave.swing.FileChooser Maven / Gradle / Ivy

The newest version!
/*
 * #%L
 * *********************************************************************************************************************
 * 
 * SolidBlue - open source safe data
 * http://solidblue.tidalwave.it - hg clone https://bitbucket.org/tidalwave/solidblue-src
 * %%
 * Copyright (C) 2011 - 2014 Tidalwave s.a.s. (http://tidalwave.it)
 * %%
 * *********************************************************************************************************************
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations under the License.
 * 
 * *********************************************************************************************************************
 * 
 * $Id$
 * 
 * *********************************************************************************************************************
 * #L%
 */
package it.tidalwave.swing;

import javax.annotation.Nonnull;
import java.nio.file.Path;
import java.awt.Component;
import java.awt.Window;
import java.awt.event.ActionEvent;
import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;
import org.openide.util.Utilities;
import ch.randelshofer.quaqua.JSheet;
import ch.randelshofer.quaqua.SheetEvent;
import ch.randelshofer.quaqua.SheetListener;
import static javax.swing.JFileChooser.*;

/***********************************************************************************************************************
 * 
 * @author  Fabrizio Giudici
 * @version $Id$
 *
 **********************************************************************************************************************/
public abstract class FileChooser
  {
    private int type = DIRECTORIES_ONLY; // FIXME use a builder

    public void run (final @Nonnull ActionEvent event) 
      {
        run(SwingUtilities.getAncestorOfClass(Window.class, (Component)event.getSource()));
      }
    
    public void run (final @Nonnull Component parent)
      {
        if (Utilities.isMac())
          {
            runMacOSX(parent);   
          } 
        else
          {
            runDefault(parent);  
          }
      }
    
    private void runDefault (final @Nonnull Component parent)
      {
        final JFileChooser fileChooser = createFileChooser();  
        
        if (fileChooser.showOpenDialog(parent) == APPROVE_OPTION)
          {
            onFileSelected(fileChooser.getSelectedFile().toPath());
          }
      }
     
    private void runMacOSX (final @Nonnull Component parent) 
      {
        final JFileChooser fileChooser = createFileChooser();  
        
        JSheet.showSaveSheet(fileChooser, parent, new SheetListener() 
          {
            @Override
            public void optionSelected (final @Nonnull SheetEvent event) 
              {
                if (event.getOption() == APPROVE_OPTION) 
                  {
                    onFileSelected(fileChooser.getSelectedFile().toPath());
                  }
              }
          });
      }
    
    protected abstract void onFileSelected (@Nonnull Path file);
    
    @Nonnull
    private JFileChooser createFileChooser()
      {
        final JFileChooser fileChooser = new JFileChooser();   
        fileChooser.setDialogType(OPEN_DIALOG);
        fileChooser.setFileSelectionMode(type);
        return fileChooser;
      }
  }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy