]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/Dialogs.java
Merge remote-tracking branch 'origin/svn' commit 'ccc1271c9d6657fb9dcf4cf3cb115fa0c8c...
[simantics/platform.git] / bundles / org.simantics.browsing.ui.swt / src / org / simantics / browsing / ui / swt / Dialogs.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.browsing.ui.swt;\r
13 \r
14 import java.util.function.Consumer;\r
15 \r
16 import org.eclipse.core.commands.ExecutionEvent;\r
17 import org.eclipse.jface.window.Window;\r
18 import org.eclipse.swt.SWT;\r
19 import org.eclipse.swt.widgets.DirectoryDialog;\r
20 import org.eclipse.swt.widgets.Display;\r
21 import org.eclipse.swt.widgets.FileDialog;\r
22 import org.eclipse.swt.widgets.Shell;\r
23 import org.eclipse.ui.handlers.HandlerUtil;\r
24 import org.simantics.utils.datastructures.UnaryFunction;\r
25 \r
26 public class Dialogs {\r
27 \r
28         public static <T> void invoke(final UnaryFunction<SimanticsDialog, Shell> function, final Consumer<T> callback) {\r
29                 \r
30                 Display.getDefault().asyncExec(new Runnable() {\r
31 \r
32                         @SuppressWarnings("unchecked")\r
33                         @Override\r
34                         public void run() {\r
35                                 \r
36                                 SimanticsDialog dialog = function.call(Display.getCurrent().getActiveShell()); \r
37                                 \r
38                                 dialog.open();\r
39                                 if(Window.CANCEL == dialog.getReturnCode()) callback.accept(null);\r
40                                 else callback.accept((T)dialog.getSelection());\r
41                                 \r
42                         }\r
43                         \r
44                 });\r
45                 \r
46         }\r
47         \r
48         public static String file(Shell shell, int style, String extension) {\r
49 \r
50         FileDialog dialog = new FileDialog(shell, style);\r
51         dialog.setFilterExtensions(new String[] { extension });\r
52         String newFileName = dialog.open();\r
53         return newFileName;\r
54 \r
55         }\r
56 \r
57         public static String directory(Shell shell, int style, String filterPath) {\r
58 \r
59         DirectoryDialog dialog = new DirectoryDialog(shell, style);\r
60         if(filterPath != null) dialog.setFilterPath(filterPath);\r
61         String newFileName = dialog.open();\r
62         return newFileName;\r
63 \r
64         }\r
65 \r
66         public static String file(int style, String extension) {\r
67                 return file(Display.getDefault().getActiveShell(), style, extension);\r
68         }\r
69 \r
70         public static String file(Shell shell, String extension) {\r
71                 return file(shell, SWT.OPEN, extension);\r
72         }\r
73 \r
74         public static String file(ExecutionEvent event, String extension) {\r
75                 return file(HandlerUtil.getActiveShell(event), extension);\r
76         }\r
77 \r
78         public static String file(ExecutionEvent event, int style, String extension) {\r
79                 return file(HandlerUtil.getActiveShell(event), style, extension);\r
80         }\r
81 \r
82         public static String directory(int style, String filterPath) {\r
83                 return directory(Display.getDefault().getActiveShell(), style, filterPath);\r
84         }\r
85 \r
86 }\r