]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/widgets/FileOrDirectorySelectionWidget.java
Limit the amount of file names shown in the text widget.
[simantics/platform.git] / bundles / org.simantics.utils.ui / src / org / simantics / utils / ui / widgets / FileOrDirectorySelectionWidget.java
index f9e986c895443b0c5679697829fc55c15211703e..19390e5667f82c6d3c4abab2f4eae943874efee9 100644 (file)
-package org.simantics.utils.ui.widgets;\r
-\r
-import java.io.File;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.eclipse.jface.layout.GridDataFactory;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.ModifyEvent;\r
-import org.eclipse.swt.events.ModifyListener;\r
-import org.eclipse.swt.events.SelectionAdapter;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Group;\r
-import org.eclipse.swt.widgets.Text;\r
-\r
-public abstract class FileOrDirectorySelectionWidget extends Composite{\r
-       \r
-       Text fileText;\r
-       String filename[];\r
-       \r
-       private List<FileSelectionListener> listeners = new ArrayList<FileSelectionListener>();\r
-       \r
-       public FileOrDirectorySelectionWidget(Composite parent, String name,int style) {\r
-               super(parent, style);\r
-               this.setLayout(new GridLayout(1,false));\r
-               GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(this);\r
-               \r
-               Group fileGroup = new Group(this, SWT.NONE);\r
-               GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(fileGroup);\r
-               \r
-               fileGroup.setText(name);\r
-               fileGroup.setLayout(new GridLayout(2, false));\r
-               \r
-               fileText = new Text(fileGroup, SWT.SINGLE|SWT.BORDER);\r
-               GridData data = new GridData();\r
-               data.grabExcessHorizontalSpace = true;\r
-               data.horizontalAlignment = SWT.FILL;\r
-               fileText.setLayoutData(data);\r
-               \r
-               Button browseButton = new Button(fileGroup, SWT.PUSH);\r
-               browseButton.setText("Browse");\r
-               data = new GridData();\r
-               browseButton.setLayoutData(data);\r
-               \r
-               \r
-                               \r
-               browseButton.addSelectionListener(new SelectionAdapter() {\r
-                       @Override\r
-                       public void widgetSelected(SelectionEvent e) {\r
-                               String[] name = openDialog();\r
-                               if (name != null) {\r
-                                       setFilename(name);\r
-                               }\r
-                       }\r
-               });\r
-               \r
-               fileText.addModifyListener(new ModifyListener() {\r
-                       \r
-                       @Override\r
-                       public void modifyText(ModifyEvent e) {\r
-                               String file = fileText.getText();\r
-                               setFilename(file.split(","));\r
-                               \r
-                       }\r
-               });\r
-       }\r
-       \r
-       protected abstract String[] openDialog();\r
-       \r
-       protected abstract boolean isValid(File file);\r
-       \r
-       protected void setFilename(String[] filename) {\r
-               String text = "";\r
-               for (String s : filename) {\r
-                       text += s + ",";\r
-               }\r
-               if (text.length() > 2)\r
-                       text = text.substring(0, text.length() - 1);\r
-               \r
-               if (!text.equals(fileText.getText()))\r
-                       fileText.setText(text);\r
-               \r
-               boolean accept = true;\r
-               for (String s : filename){\r
-                       File file = new File(s);\r
-                       if (!isValid(file)) {\r
-                               accept = false;\r
-                               break;\r
-                       }\r
-               }\r
-               if (accept)\r
-                       this.filename = filename;\r
-               else\r
-                       this.filename = null;\r
-               \r
-               for (FileSelectionListener l : listeners) {\r
-                       l.fileSelected(this, this.filename);\r
-               }\r
-       }\r
-       \r
-       public String[] getFilename() {\r
-               return filename;\r
-       }\r
-       \r
-       public void addListener(FileSelectionListener listener) {\r
-               this.listeners.add(listener);\r
-       }\r
-       \r
-       public void removeListener(FileSelectionListener listener) {\r
-               this.listeners.remove(listener);\r
-       }\r
-       \r
-\r
-}\r
+package org.simantics.utils.ui.widgets;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Text;
+
+public abstract class FileOrDirectorySelectionWidget extends Composite{
+       
+       Text fileText;
+       String filename[];
+       
+       private List<FileSelectionListener> listeners = new ArrayList<FileSelectionListener>();
+       
+       public FileOrDirectorySelectionWidget(Composite parent, String name,int style) {
+               super(parent, style);
+               this.setLayout(new GridLayout(1,false));
+               GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(this);
+               
+               Group fileGroup = new Group(this, SWT.NONE);
+               GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(fileGroup);
+               
+               fileGroup.setText(name);
+               fileGroup.setLayout(new GridLayout(2, false));
+               
+               fileText = new Text(fileGroup, SWT.SINGLE|SWT.BORDER);
+               GridData data = new GridData();
+               data.grabExcessHorizontalSpace = true;
+               data.horizontalAlignment = SWT.FILL;
+               fileText.setLayoutData(data);
+               
+               Button browseButton = new Button(fileGroup, SWT.PUSH);
+               browseButton.setText("Browse");
+               data = new GridData();
+               browseButton.setLayoutData(data);
+               
+               
+                               
+               browseButton.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               String[] name = openDialog();
+                               if (name != null) {
+                                       setFilename(name,true);
+                               }
+                       }
+               });
+               
+               fileText.addModifyListener(new ModifyListener() {
+                       
+                       @Override
+                       public void modifyText(ModifyEvent e) {
+                               String file = fileText.getText();
+                               String files[] = file.split(",");
+                               for (int i = 0; i < files.length; i++) {
+                                       files[i] = files[i].trim();
+                               }
+                               setFilename(files, false);
+                               
+                       }
+               });
+       }
+       
+       protected abstract String[] openDialog();
+       
+       protected abstract boolean isValid(File file);
+       
+       protected void setFilename(String[] filename) {
+               setFilename(filename, true);
+       }
+       
+       protected void setFilename(String[] filename, boolean update) {
+               String text = "";
+               if (filename.length < 6) {
+                       for (String s : filename) {
+                               text += s + ",";
+                       }
+                       if (text.length() > 2)
+                               text = text.substring(0, text.length() - 1);
+               } else {
+                       text = filename[0] + " and " + (filename.length -1) + " other files.";
+               }
+               
+               if (update && !text.equals(fileText.getText()))
+                       fileText.setText(text);
+               
+               boolean accept = true;
+               for (String s : filename){
+                       File file = new File(s);
+                       if (!isValid(file)) {
+                               accept = false;
+                               break;
+                       }
+               }
+               if (accept)
+                       this.filename = filename;
+               else
+                       this.filename = null;
+               
+               for (FileSelectionListener l : listeners) {
+                       l.fileSelected(this, this.filename);
+               }
+       }
+       
+       public String[] getFilename() {
+               return filename;
+       }
+       
+       public void addListener(FileSelectionListener listener) {
+               this.listeners.add(listener);
+       }
+       
+       public void removeListener(FileSelectionListener listener) {
+               this.listeners.remove(listener);
+       }
+       
+
+}