]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.image.ui/src/org/simantics/image/ui/ImportImagesActionFactory.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.image.ui / src / org / simantics / image / ui / ImportImagesActionFactory.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in 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.image.ui;\r
13 \r
14  import java.io.File;\r
15 import java.io.IOException;\r
16 import java.util.ArrayList;\r
17 import java.util.Collection;\r
18 import java.util.Collections;\r
19 \r
20 import org.eclipse.swt.SWT;\r
21 import org.eclipse.swt.widgets.FileDialog;\r
22 import org.eclipse.swt.widgets.Shell;\r
23 import org.eclipse.ui.IWorkbenchWindow;\r
24 import org.eclipse.ui.PlatformUI;\r
25 import org.simantics.db.Resource;\r
26 import org.simantics.db.layer0.adapter.ActionFactory;\r
27 import org.simantics.ui.SimanticsUI;\r
28 import org.simantics.utils.FileUtils;\r
29 import org.simantics.utils.ui.AdaptionUtils;\r
30 \r
31 /**\r
32  * @author Tuukka Lehtonen\r
33  */\r
34 public class ImportImagesActionFactory implements ActionFactory {\r
35 \r
36     @Override\r
37     public Runnable create(Object target) {\r
38         final Resource container = AdaptionUtils.adaptToSingle(target, Resource.class);\r
39         if (container == null)\r
40             return null;\r
41 \r
42         return new Runnable() {\r
43             @Override\r
44             public void run() {\r
45                 IWorkbenchWindow win = PlatformUI.getWorkbench().getActiveWorkbenchWindow();\r
46                 if (win == null)\r
47                     return;\r
48                 Collection<File> files = requestImportedImages(win.getShell());\r
49                 if (files.isEmpty())\r
50                     return;\r
51 \r
52                 SimanticsUI.getSession().markUndoPoint();\r
53                 SimanticsUI.getSession().asyncRequest( new CreateImages(container, files) );\r
54             }\r
55         };\r
56     }\r
57 \r
58     public static Collection<File> requestImportedImages(Shell parentShell) {\r
59         FileDialog dialog = new FileDialog(parentShell, SWT.MULTI);\r
60         dialog.setText("Choose image to be imported");\r
61         dialog.setFilterExtensions( new String[] {"*.jpg;*.png;*.gif;*.svg", "*.jpg;*.jpeg", "*.png", "*.gif", "*.svg"} );\r
62         dialog.setFilterNames( new String[] {"All Images", "JPEG Image", "PNG Image", "GIF Image", "SVG Image"} );\r
63         //dialog.setFilterExtensions( new String[] {"*.jpg", "*.png", "*.gif"} );\r
64         final String filename = dialog.open();\r
65         if (filename == null)\r
66             return Collections.emptyList();\r
67         String[] files = dialog.getFileNames();\r
68         File parent = new File(dialog.getFilterPath());\r
69         ArrayList<File> result = new ArrayList<File>(files.length);\r
70         for (String file : files)\r
71             result.add( new File(parent, file) );\r
72         return result;\r
73     }\r
74 \r
75     public static ImageSource toImageSource(File file) throws IOException {\r
76         ImageSource src = new ImageSource();\r
77         src.name = file.getName();\r
78         src.data = FileUtils.readFile(file);\r
79         return src;\r
80     }\r
81 \r
82 }\r