| /******************************************************************************* |
| * Copyright (c) 2014 Bosch Software Innovations GmbH and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * and Eclipse Distribution License v1.0 which accompany this distribution. |
| * |
| * The Eclipse Public License is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * The Eclipse Distribution License is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * Contributors: |
| * Bosch Software Innovations GmbH - Please refer to git log |
| * |
| *******************************************************************************/ |
| package org.eclipse.vorto.fbeditor.ui.internal; |
| |
| import java.io.File; |
| import java.net.URL; |
| |
| import org.eclipse.core.filesystem.EFS; |
| import org.eclipse.core.resources.IResourceChangeEvent; |
| import org.eclipse.core.resources.IResourceChangeListener; |
| import org.eclipse.core.resources.IWorkspace; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.jface.action.MenuManager; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; |
| import org.eclipse.jface.viewers.ISelectionChangedListener; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.SelectionChangedEvent; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Menu; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.ide.IDE; |
| import org.eclipse.ui.part.ViewPart; |
| import org.eclipse.vorto.api.common.project.IoTModelProject; |
| import org.eclipse.vorto.api.ui.changeevent.ProjectChangeEvent; |
| import org.eclipse.vorto.api.ui.changeevent.ProjectEventListenerRegistry; |
| import org.eclipse.vorto.fbeditor.ui.internal.treeview.FBContentProvider; |
| import org.eclipse.vorto.fbeditor.ui.internal.treeview.FBLabelProvider; |
| |
| |
| public class VortoTreeViewPart extends ViewPart { |
| |
| protected TreeViewer treeViewer; |
| protected FBContentProvider fbContentProvider; |
| protected FBLabelProvider labelProvider; |
| |
| public VortoTreeViewPart() { |
| |
| } |
| |
| public void createPartControl(Composite parent) { |
| |
| // Create the tree viewer as a child of the composite parent |
| treeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL |
| | SWT.V_SCROLL); |
| |
| this.fbContentProvider = new FBContentProvider(); |
| ProjectEventListenerRegistry.getInstance().add(fbContentProvider); |
| treeViewer.setContentProvider(fbContentProvider); |
| labelProvider = new FBLabelProvider(); |
| treeViewer.setLabelProvider(labelProvider); |
| |
| treeViewer.setUseHashlookup(true); |
| |
| hookListeners(); |
| |
| treeViewer.setInput("Root"); |
| ColumnViewerToolTipSupport.enableFor(treeViewer); |
| |
| getSite().setSelectionProvider(treeViewer); |
| initContextMenu(); |
| } |
| |
| private void initContextMenu() { |
| // initalize the context menu |
| MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$ |
| Menu menu = menuMgr.createContextMenu(this.treeViewer.getTree()); |
| this.treeViewer.getTree().setMenu(menu); |
| getSite().registerContextMenu(menuMgr, this.treeViewer); |
| } |
| |
| protected void hookListeners() { |
| addSelectionChangedEventListener(); |
| addWorkspaceChangeEventListenr(); |
| } |
| |
| public ImageDescriptor getImage(String imageFileName) { |
| |
| URL url; |
| try { |
| url = new URL( |
| "platform:/plugin/org.eclipse.vorto.fbeditor.ui/icons/" |
| + imageFileName); |
| return ImageDescriptor.createFromURL(url); |
| |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| |
| return null; |
| } |
| |
| protected void addWorkspaceChangeEventListenr() { |
| IWorkspace workspace = ResourcesPlugin.getWorkspace(); |
| |
| /** |
| * @@TODo Here it seems to fire event for every resource changed, thus |
| * creation of one project fire the event multiple times we |
| * should filter it to improve performance |
| */ |
| IResourceChangeListener rcl = new IResourceChangeListener() { |
| public void resourceChanged(IResourceChangeEvent event) { |
| |
| try { |
| if (event.getDelta() == null |
| || event.getDelta().getResource() == null) { |
| return; |
| } |
| |
| ProjectEventListenerRegistry.getInstance().fire( |
| new ProjectChangeEvent()); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| }; |
| workspace.addResourceChangeListener(rcl); |
| } |
| |
| protected void addSelectionChangedEventListener() { |
| treeViewer.addSelectionChangedListener(new ISelectionChangedListener() { |
| public void selectionChanged(SelectionChangedEvent event) { |
| // if the selection is empty clear the label |
| if (event.getSelection().isEmpty()) { |
| // text.setText(""); |
| return; |
| } |
| if (event.getSelection() instanceof IStructuredSelection) { |
| IStructuredSelection selection = (IStructuredSelection) event |
| .getSelection(); |
| if (selection.size() > 0) { |
| if (!(selection.getFirstElement() instanceof IoTModelProject)) { |
| return; |
| } |
| IoTModelProject fbDesignProject = (IoTModelProject) selection |
| .getFirstElement(); |
| openFileInEditor(fbDesignProject); |
| } |
| } |
| } |
| }); |
| } |
| |
| private void openFileInEditor(IoTModelProject project) { |
| File fileToOpen = project.getFbModelFile(); |
| |
| if (fileToOpen.exists() && fileToOpen.isFile()) { |
| org.eclipse.core.filesystem.IFileStore fileStore = EFS |
| .getLocalFileSystem().getStore(fileToOpen.toURI()); |
| org.eclipse.ui.IWorkbenchPage page = PlatformUI.getWorkbench() |
| .getActiveWorkbenchWindow().getActivePage(); |
| |
| try { |
| IDE.openEditorOnFileStore(page, fileStore); |
| } catch (org.eclipse.ui.PartInitException e) { |
| e.printStackTrace(); |
| } |
| } else { |
| System.out.println("File not found for: " |
| + project.getFbModelFile()); |
| } |
| } |
| |
| @Override |
| public void setFocus() { |
| } |
| } |