/*
* Copyright (c) 2012, 2013 Hemanta Sapkota.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Hemanta Sapkota (laex.pearl@gmail.com)
*/
package com.laex.cg2d.screeneditor.views;
import org.eclipse.core.resources.IFile;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DragSource;
import org.eclipse.swt.dnd.DragSourceAdapter;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.part.ViewPart;
import com.laex.cg2d.model.DNDFileTransfer;
import com.laex.cg2d.model.DNDFileTransfer.TransferType;
import com.laex.cg2d.model.ICGCProject;
import com.laex.cg2d.model.resources.ResourceManager;
/**
* The Class TexturesViewPart.
*/
public class TexturesViewPart extends ViewPart {
/** The Constant ID. */
public static final String ID = "com.laex.cg2d.screeneditor.TexturesView"; //$NON-NLS-1$
/** The form toolkit. */
private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
/** The img canvas. */
private Canvas imgCanvas;
/**
* The listener interface for receiving texturesSelection events. The class
* that is interested in processing a texturesSelection event implements this
* interface, and the object created with that class is registered with a
* component using the component's
* <code>addTexturesSelectionListener<code> method. When
* the texturesSelection event occurs, that object's appropriate
* method is invoked.
*
* @see TexturesSelectionEvent
*/
private final class TexturesSelectionListener implements ISelectionListener {
/**
* Fallback.
*/
private void fallback() {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.
* IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
*/
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if (selection.isEmpty() || !(selection instanceof IStructuredSelection)) {
fallback();
return;
}
Object firstElement = ((IStructuredSelection) selection).getFirstElement();
if (firstElement instanceof IFile) {
IFile transferIFile = (IFile) firstElement;
if (isPNGExtension(transferIFile)) {
DNDFileTransfer.file = transferIFile;
Image image = ResourceManager.getImage(transferIFile);
imgCanvas = new Canvas(imageComposite, SWT.None);
imgCanvas.setBackgroundImage(image);
imgCanvas.setData(transferIFile.getFullPath().toOSString());
imgCanvas.setSize(image.getBounds().width, image.getBounds().height);
imageComposite.setContent(imgCanvas);
DragSource dragSource = new DragSource(imgCanvas, DND.DROP_COPY);
dragSource.addDragListener(new DragSourceAdapter() {
@Override
public void dragSetData(DragSourceEvent event) {
DNDFileTransfer.transferType = TransferType.TEXTURE;
event.data = "BOGUS";
}
});
dragSource.setTransfer(new Transfer[]
{ TextTransfer.getInstance() });
}
} else {
fallback();
}
}
/**
* Checks if is pNG extension.
*
* @param ifile
* the ifile
* @return true, if is pNG extension
*/
private boolean isPNGExtension(IFile ifile) {
return ifile != null && ifile.getFileExtension().equals(ICGCProject.PNG_EXTENSION);
}
}
/** The tsl. */
private TexturesSelectionListener tsl = new TexturesSelectionListener();
/** The image composite. */
private ScrolledComposite imageComposite;
private Action toggleBGAction;
/**
* Instantiates a new textures view part.
*/
public TexturesViewPart() {
}
/**
* Adds the workbench selection listener.
*/
private void addWorkbenchSelectionListener() {
getSite().getWorkbenchWindow().getSelectionService().addPostSelectionListener(tsl);
}
/**
* Create contents of the view part.
*
* @param parent
* the parent
*/
@Override
public void createPartControl(Composite parent) {
createActions();
initializeToolBar();
initializeMenu();
addWorkbenchSelectionListener();
{
imageComposite = new ScrolledComposite(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
formToolkit.adapt(imageComposite);
formToolkit.paintBordersFor(imageComposite);
imageComposite.setContent(imgCanvas);
}
}
/**
* Create the actions.
*/
private void createActions() {
// DragSource dragSource = new DragSource(mghprlnkNewImagehyperlink,
// DND.DROP_COPY);
// dragSource.addDragListener(new DragSourceAdapter() {
// @Override
// public void dragSetData(DragSourceEvent event) {
// DNDFileTransfer.transferType = TransferType.TEXTURE;
// event.data = "BOGUS";
// }
// });
// dragSource.setTransfer(new Transfer[]
// { TextTransfer.getInstance() });
// }
//
{
toggleBGAction = new Action("Toggle BG") {
boolean toggled = false;
@Override
public void run() {
}
};
}
}
/**
* Initialize the toolbar.
*/
private void initializeToolBar() {
IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
}
/**
* Initialize the menu.
*/
private void initializeMenu() {
IMenuManager menuManager = getViewSite().getActionBars().getMenuManager();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.WorkbenchPart#setFocus()
*/
@Override
public void setFocus() {
// Set the focus
}
}