    001package org.vishia.gral.swt;
    002
    003import java.io.File;
    004
    005import org.eclipse.swt.SWT;
    006import org.eclipse.swt.widgets.DirectoryDialog;
    007import org.eclipse.swt.widgets.FileDialog;
    008import org.eclipse.swt.widgets.Shell;
    009import org.vishia.gral.ifc.GralFileDialog_ifc;
    010
    011public class SwtFileDialog implements GralFileDialog_ifc
    012{
    013
    014        private FileDialog fileDialog;
    015
    016        private DirectoryDialog dirDialog;
    017
    018        private final Shell shell;
    019
    020        private String sOpenResult;
    021
    022        @Override public boolean open(String sTitle, int mode)
    023        {
    024    int modeSwt = 0;
    025
    026    if((mode & GralFileDialog_ifc.multi)!=0) { modeSwt |= SWT.MULTI; }
    027
    028    if((mode & GralFileDialog_ifc.directory)!=0) {
    029      this.dirDialog = new DirectoryDialog(shell, SWT.MULTI);
    030      if(sTitle != null){
    031        dirDialog.setText(sTitle);
    032      }
    033      this.fileDialog = null;
    034    } else {
    035      this.dirDialog = null;
    036      this.fileDialog = new FileDialog(shell, SWT.OPEN | modeSwt);
    037      if(sTitle != null){
    038        fileDialog.setText(sTitle);
    039      }
    040    }
    041          return true;
    042        }
    043
    044
    045        public SwtFileDialog(Shell shell)
    046        { this.shell = shell;
    047        }
    048
    049
    050        /* (non-Javadoc)
    051         * @see org.vishia.gral.FileDialogIfc#show(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
    052         */
    053        @Override public String show(String sBaseDir, String sLocalDir, String sMask, String sTitle)
    054        {
    055    if(fileDialog !=null){
    056      if(sBaseDir !=null || sLocalDir !=null){
    057        String sStartDir = (sBaseDir !=null ? sBaseDir : "") + (sLocalDir !=null ? sLocalDir : "");
    058        fileDialog.setFileName(sStartDir);
    059      }
    060      if(sTitle != null){
    061        fileDialog.setText(sTitle);
    062      }
    063      shell.setVisible(true);
    064      shell.setActive();
    065      sOpenResult = fileDialog.open();  //it is opened, and this thread waits.
    066      //String sDir = fileDialog.getFilterPath();
    067    } else {
    068      if(sTitle != null){
    069        dirDialog.setText(sTitle);
    070      }
    071      shell.setVisible(true);
    072      shell.setActive();
    073      sOpenResult = dirDialog.open();  //it is opened, and this thread waits.
    074      //String sDir = dirDialog.getFilterPath();
    075
    076    }
    077                return sOpenResult;
    078        }
    079
    080
    081  @Override public String[] getMultiSelection()
    082  { return fileDialog.getFileNames();
    083  }
    084
    085
    086  @Override public String getSelection()
    087  { if(fileDialog !=null){
    088      if(sOpenResult == null){ return null; }    //aborted selection.
    089      else {
    090        String sPath = fileDialog.getFilterPath();
    091        String sName = fileDialog.getFileName();
    092        return sPath + "/" + sName;
    093      }
    094    } else {
    095      return sOpenResult;  //selected dir is the value from open()
    096    }
    097  }
    098
    099
    100
    101}