com.nokia.tools.s60.editor.actions.CopyImageAction.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.tools.s60.editor.actions.CopyImageAction.java

Source

/*
* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/
package com.nokia.tools.s60.editor.actions;

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;
import java.util.List;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionFactory;

import com.nokia.tools.content.core.IContentData;
import com.nokia.tools.media.utils.clipboard.ClipboardHelper;
import com.nokia.tools.media.utils.layers.IAnimationFrame;
import com.nokia.tools.media.utils.layers.IImageHolder;
import com.nokia.tools.media.utils.layers.ILayer;
import com.nokia.tools.media.utils.layers.IMediaFileAdapter;
import com.nokia.tools.s60.ide.S60WorkspacePlugin;
import com.nokia.tools.screen.ui.ISkinnableContentDataAdapter;
import com.nokia.tools.screen.ui.ISkinnableEntityAdapter;
import com.nokia.tools.screen.ui.IToolBoxAdapter;
import com.nokia.tools.screen.ui.branding.IBrandingManager;
import com.nokia.tools.screen.ui.dialogs.MessageDialogWithCheckBox;
import com.nokia.tools.theme.core.MultiPieceManager;
import com.nokia.tools.theme.s60.S60SkinnableEntityAdapter;
import com.nokia.tools.ui.branding.extension.BrandingExtensionManager;

/**
 * Copy image action for screen elements
 */
public class CopyImageAction extends AbstractAction {

    public static final String ID = ActionFactory.COPY.getId();

    private Clipboard clip = null;

    private boolean silent;

    @Override
    protected void init() {
        setId(ID);
        setText(Messages.CopyImageAction_name);
        ImageDescriptor copyImage = PlatformUI.getWorkbench().getSharedImages()
                .getImageDescriptor(ISharedImages.IMG_TOOL_COPY);
        ImageDescriptor copyImageDisabled = PlatformUI.getWorkbench().getSharedImages()
                .getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED);
        setImageDescriptor(copyImage);
        setDisabledImageDescriptor(copyImageDisabled);
        setToolTipText(Messages.CopyImageAction_tooltip);

        setLazyEnablementCalculation(true);
    }

    public CopyImageAction(IWorkbenchPart part, Clipboard clip) {
        super(part);
        this.clip = clip;
    }

    public CopyImageAction(ISelectionProvider provider, Clipboard clip) {
        super(null);
        setSelectionProvider(provider);
        this.clip = clip;
    }

    @Override
    public void doRun(Object sel) {

        if (clip == null)
            clip = Toolkit.getDefaultToolkit().getSystemClipboard();

        IContentData data = getContentData(sel);
        ISkinnableEntityAdapter skAdapter = (ISkinnableEntityAdapter) data
                .getAdapter(ISkinnableEntityAdapter.class);

        if (sel instanceof IAnimationFrame) {
            if (isMaskNode()) {
                IAnimationFrame frame = (IAnimationFrame) sel;
                if (frame.getMaskFile() != null) {
                    ClipboardHelper.copyImageToClipboard(clip, frame.getMaskFile());
                } else {
                    ClipboardHelper.copyImageToClipboard(clip, frame.getMask());
                }
            } else if (isImageNode()) {
                IAnimationFrame frame = (IAnimationFrame) sel;
                if (frame.getImageFile() != null) {
                    ClipboardHelper.copyImageToClipboard(clip, frame.getImageFile());
                } else {
                    ClipboardHelper.copyImageToClipboard(clip, frame.getRAWImage(false));
                }
            } else {
                ((IAnimationFrame) sel).copyImageToClipboard(clip);
            }
            return;
        }

        // when layer is selected in tree
        if (sel instanceof ILayer) {

            try {
                ILayer l = (ILayer) sel;
                if (isLayerNode() || isNodeOfType(AbstractAction.TYPE_PART)) {

                    if (skAdapter instanceof S60SkinnableEntityAdapter) {
                        // copy image + mask
                        l.copyImageToClipboard(clip);
                    }
                } else if (isImageNode()) {
                    // copy image only
                    Object param = l.getFileName(false) == null ? l.getRAWImage() : l.getFileName(true);
                    ClipboardHelper.copyImageToClipboard(clip, param);
                } else if (isMaskNode()) {
                    // copy mask only
                    if (l.getMaskFileName(true) != null) {
                        ClipboardHelper.copyImageToClipboard(clip, l.getMaskFileName(true));
                    } else {
                        ClipboardHelper.copyImageToClipboard(clip, l.getMaskImage());
                    }
                } else {
                    l.copyImageToClipboard(clip);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            return;
        }

        IImageHolder holder = getImageHolder(sel);
        if (holder != null) {
            holder.copyImageToClipboard(clip);
            return;
        }

        // IContentData data = getContentData(sel);

        if (data != null) {

            ISkinnableContentDataAdapter skinableAdapter = (ISkinnableContentDataAdapter) data
                    .getAdapter(ISkinnableContentDataAdapter.class);
            if (skinableAdapter != null) {
                skinableAdapter.copyToClipboard(null);
                return;
            }

            /*
             * ISkinnableEntityAdapter skAdapter = (ISkinnableEntityAdapter)
             * data .getAdapter(ISkinnableEntityAdapter.class);
             */
            if (skAdapter != null) {

                if (skAdapter.hasMask()) {

                }

                if (skAdapter instanceof S60SkinnableEntityAdapter)
                    skAdapter.copyImageToClipboard(clip);

                else {
                    copyIdAndFileToClipboard(data, skAdapter);
                }
                // if (skAdapter.isNinePiece()) {
                if (skAdapter.isMultiPiece()) {
                    // copy from 9-piece was performed, show info dialog
                    IPreferenceStore store = S60WorkspacePlugin.getDefault().getPreferenceStore();
                    Boolean showState = store.getBoolean(skAdapter.getCopyPieceInfo());
                    // .getBoolean(IMediaConstants.NINE_PIECE_COPY_INFO);
                    if (showState || silent)
                        return;

                    IBrandingManager branding = BrandingExtensionManager.getBrandingManager();
                    Image image = null;
                    if (branding != null) {
                        image = branding.getIconImageDescriptor().createImage();
                    }
                    MessageDialog messageDialog = new MessageDialogWithCheckBox(
                            PlatformUI.getWorkbench().getDisplay().getActiveShell(),
                            Messages.CopyAction_9piece_title, image, MultiPieceManager.getCopyMessageText(),
                            // MultipieceHelper.getCopyMessageText(),
                            Messages.CopyAction_9piece_checkbox, false, null, null, null, 2,
                            new String[] { IDialogConstants.OK_LABEL }, 0);
                    messageDialog.open();
                    if (image != null) {
                        image.dispose();
                    }

                    // store.setValue(IMediaConstants.NINE_PIECE_COPY_INFO,
                    store.setValue(skAdapter.getCopyPieceInfo(),
                            ((MessageDialogWithCheckBox) messageDialog).getCheckBoxValue());
                }
            }
            return;
        }

        ILayer layer = getLayer(true, sel);
        if (layer != null) {
            layer.copyImageToClipboard(clip);
        }
    }

    /**
     * @param data
     * @param skAdapter
     */
    private void copyIdAndFileToClipboard(IContentData data, ISkinnableEntityAdapter skAdapter) {
        List<File> clipboardFile = null;
        skAdapter.copyImageToClipboard(clip);
        try {
            clipboardFile = (List<File>) clip.getData(DataFlavor.javaFileListFlavor);
        } catch (UnsupportedFlavorException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }

        if (clipboardFile instanceof List) {
            clipboardFile = (List<File>) clipboardFile;
        }
        String clipboardIds = null;
        clipboardIds = data.getId();
    }

    @Override
    protected boolean doCalculateEnabled(Object sel) {

        if (isNodeOfType(TYPE_COLOR) || isNodeOfType((String) TYPE_COLOR_GROUP))
            return false;

        // when layer is selected in tree
        if (sel instanceof ILayer) {
            if (isMaskNode())
                return ((ILayer) sel).hasMask();
            else
                return ((ILayer) sel).hasImage();
        }
        if (sel instanceof IAnimationFrame) {
            return true;
        }

        IImageHolder holder = getImageHolder(sel);
        if (holder != null) {
            return holder.getImageFile() != null;
        }

        IContentData data = getContentData(sel);

        if (data != null) {

            ISkinnableContentDataAdapter skinableAdapter = (ISkinnableContentDataAdapter) data
                    .getAdapter(ISkinnableContentDataAdapter.class);
            if (skinableAdapter != null) {
                return skinableAdapter.isCopyEnabled();
            }

            IToolBoxAdapter toolBoxAdapter = (IToolBoxAdapter) data.getAdapter(IToolBoxAdapter.class);
            ISkinnableEntityAdapter skAdapter = (ISkinnableEntityAdapter) data
                    .getAdapter(ISkinnableEntityAdapter.class);

            if (toolBoxAdapter != null && toolBoxAdapter.isFile()) {
                IMediaFileAdapter soundAdapter = (IMediaFileAdapter) data.getAdapter(IMediaFileAdapter.class);
                if (soundAdapter != null && soundAdapter.getFileName(true) != null) {
                    return new File(soundAdapter.getFileName(true)).exists();
                }
                return false;
            }

            if (skAdapter != null) {
                if (skAdapter.isColour()) {
                    return (skAdapter.isBitmap() || skAdapter.isSVG());
                }
                return skAdapter.isCopyAllowed();
            }
        }

        ILayer layer = getLayer(false, sel);
        return layer == null ? false : (layer.isSvgImage() || layer.isBitmapImage());
    }

    public void setSilent(boolean b) {
        silent = b;
    }

}