From 80115851131b9e125aa652764ec035be0b7790fd Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Sun, 29 Mar 2020 17:15:41 +0200 Subject: [PATCH] add globbing selection and tool bar to file dialog --- .../icons/arrow_up.png | Bin 0 -> 372 bytes .../e4/application/handlers/OpenHandler.java | 2 +- .../application/parts/FileBrowserDialog.java | 95 ++++++++++++++++-- 3 files changed, 85 insertions(+), 12 deletions(-) create mode 100644 com.minres.scviewer.e4.application/icons/arrow_up.png diff --git a/com.minres.scviewer.e4.application/icons/arrow_up.png b/com.minres.scviewer.e4.application/icons/arrow_up.png new file mode 100644 index 0000000000000000000000000000000000000000..1ebb193243780b8eb1919a51ef27c2a0d36ccec2 GIT binary patch literal 372 zcmV-)0gL{LP)6w#wHUuW*nL5>vZR zlg{G&%mT~|kL3ei%GW0*UOHUMs5XI$4uxe-L?I@SAefq*207}Iqtjm#e5*fP53AiC z)C|RQfwzxx<#_WfANRGZx{+tFDl8~Q?;~Ve=lM^*8UTTnVL?HTDz8uta0D@d28E9S z_)i8aLz^UE6PPKymi;2GJ`34{eIia-CtfAt0H61rk0 SPTNud0000 files = dlg.getSelectedFiles(); MPart part = partService .createPart("com.minres.scviewer.e4.application.partdescriptor.waveformviewer"); //$NON-NLS-1$ diff --git a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/FileBrowserDialog.java b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/FileBrowserDialog.java index 68531c2..7ba9924 100644 --- a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/FileBrowserDialog.java +++ b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/FileBrowserDialog.java @@ -7,7 +7,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; -import java.util.regex.Pattern; import java.util.stream.Collectors; import org.eclipse.jface.dialogs.IDialogConstants; @@ -25,6 +24,7 @@ import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; +import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.MouseAdapter; @@ -34,16 +34,18 @@ import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.layout.RowLayout; +import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; +import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.swt.widgets.ToolItem; import org.eclipse.wb.swt.ResourceManager; public class FileBrowserDialog extends TrayDialog { @@ -60,10 +62,18 @@ public class FileBrowserDialog extends TrayDialog { TableViewer tableViewer; + Text fileNameEntry; + + Combo filterCombo; + FileTableComparator fileTableComparator; private FileGlobber globber = new FileGlobber(); + private FileGlobber imageGlobber = new FileGlobber(); + + private File selectedDir; + private List selectedFiles; String[] filterStrings = new String[] {"*"}; @@ -79,8 +89,12 @@ public class FileBrowserDialog extends TrayDialog { public void setFilterExtensions(String[] filterStrings) { if(filterStrings.length==0){ globber = new FileGlobber(); - } else + } else { globber= new FileGlobber(filterStrings[0]); + imageGlobber = new FileGlobber(filterStrings[0]); + filterCombo.setItems(filterStrings); + filterCombo.select(0); + } this.filterStrings=filterStrings; } @@ -119,17 +133,41 @@ public class FileBrowserDialog extends TrayDialog { dirTreeViewer.addSelectionChangedListener(event -> { IStructuredSelection sel = event.getStructuredSelection(); File entry = (File) sel.getFirstElement(); - if(entry.isDirectory()) { - tableViewer.setInput(entry.listFiles()); + if(entry!=null && entry.isDirectory()) { + selectedDir = entry; + tableViewer.setInput(selectedDir.listFiles()); } }); - final Composite tableViewerParent = new Composite(sashForm, SWT.BORDER); - tableViewerParent.setLayout(new GridLayout(1, true)); - tableViewer = new TableViewer(tableViewerParent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.MULTI); + final Composite tableViewerParent = new Composite(sashForm, SWT.NONE); + GridLayout gridLayout = new GridLayout(1, true); + gridLayout.horizontalSpacing=0; + gridLayout.verticalSpacing=5; + gridLayout.marginHeight=0; + gridLayout.marginHeight=0; + tableViewerParent.setLayout(gridLayout); + final ToolBar toolBar = new ToolBar(tableViewerParent, SWT.HORIZONTAL |SWT.SHADOW_OUT); + toolBar.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); + final ToolItem toolbarItemUp = new ToolItem(toolBar, SWT.PUSH); + toolbarItemUp.setToolTipText("up one level"); + toolbarItemUp.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/arrow_up.png")); //$NON-NLS-1$ //$NON-NLS-2$); + toolbarItemUp.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if(selectedDir.getParentFile()!=null) { + selectedDir=selectedDir.getParentFile(); + tableViewer.setInput(selectedDir.listFiles()); + } + } + }); + tableViewer = new TableViewer(tableViewerParent, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.MULTI); tableViewer.getTable().setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL)); tableViewer.addSelectionChangedListener(event -> { - getButton(IDialogConstants.OK_ID).setEnabled(!event.getStructuredSelection().isEmpty()); + IStructuredSelection sel = event.getStructuredSelection(); + getButton(IDialogConstants.OK_ID).setEnabled(!sel.isEmpty()); + @SuppressWarnings("unchecked") + Object text = sel.toList().stream().map(e -> ((File)e).getName()).collect(Collectors.joining(";")); + fileNameEntry.setText(text.toString()); }); tableViewer.addDoubleClickListener(event -> { IStructuredSelection sel = tableViewer.getStructuredSelection(); @@ -175,7 +213,7 @@ public class FileBrowserDialog extends TrayDialog { colName.setLabelProvider(new FileTableLabelProvider() { @Override public String getText(Object element) { return ((File) element).getName(); } @Override public Image getImage(Object element){ - if(globber.matches(element)) return dbImage; + if(imageGlobber.matches(element)) return dbImage; return ((File) element).isDirectory()?folderImage:fileImage; } }); @@ -200,6 +238,32 @@ public class FileBrowserDialog extends TrayDialog { fileTableComparator = new FileTableComparator(); tableViewer.setComparator(fileTableComparator); + tableViewer.addFilter(new FileTableFilter()); + + Composite bottomBar = new Composite(tableViewerParent, SWT.NONE); + bottomBar.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); + GridLayout gridLayoutBottom = new GridLayout(2, false); + gridLayoutBottom.horizontalSpacing=0; + gridLayoutBottom.verticalSpacing=0; + gridLayoutBottom.marginHeight=0; + gridLayoutBottom.marginWidth=0; + bottomBar.setLayout(gridLayoutBottom); + + fileNameEntry = new Text(bottomBar, SWT.BORDER); + fileNameEntry.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); + fileNameEntry.setEditable(false); //TODO: temporary disabled + + filterCombo = new Combo(bottomBar, SWT.DROP_DOWN | SWT.BORDER | SWT.READ_ONLY); + filterCombo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); + filterCombo.setItems(filterStrings); + filterCombo.select(0); + filterCombo.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + globber= new FileGlobber(filterCombo.getText()); + tableViewer.setInput(selectedDir.listFiles()); + } + }); sashForm.setWeights(new int[]{2, 3}); return area; } @@ -357,6 +421,15 @@ public class FileBrowserDialog extends TrayDialog { } + public class FileTableFilter extends ViewerFilter { + + @Override + public boolean select(Viewer viewer, Object parentElement, Object element) { + File p = (File) element; + return !p.getName().startsWith("."); + } + } + public class FileTableComparator extends ViewerComparator { private int propertyIndex = 0; private boolean descending = false;