From: minkee.lee Date: Fri, 29 May 2015 06:53:47 +0000 (+0900) Subject: VM button: Modified loading path of image file for VMButton. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b769f2c73a2a43bb351eaa950402128bb59474d2;p=sdk%2Femulator%2Femulator-manager.git VM button: Modified loading path of image file for VMButton. - Image file name in plugin is changed. - Refactoring VMButton painter.(Added common class) - Added custom vm button image for default use. Change-Id: I32c969ae38f2de91c95b9f4c36b1495a5d2426b0 Signed-off-by: minkee.lee --- diff --git a/resource/res/emulator_list_custom_image_hover.gif b/resource/res/emulator_list_custom_image_hover.gif new file mode 100644 index 0000000..da20026 Binary files /dev/null and b/resource/res/emulator_list_custom_image_hover.gif differ diff --git a/resource/res/emulator_list_custom_image_nml.gif b/resource/res/emulator_list_custom_image_nml.gif new file mode 100644 index 0000000..ae6d30e Binary files /dev/null and b/resource/res/emulator_list_custom_image_nml.gif differ diff --git a/src/org/tizen/emulator/manager/plugin/PluginImageResources.java b/src/org/tizen/emulator/manager/plugin/PluginImageResources.java index ea63c17..8a476cd 100644 --- a/src/org/tizen/emulator/manager/plugin/PluginImageResources.java +++ b/src/org/tizen/emulator/manager/plugin/PluginImageResources.java @@ -31,6 +31,7 @@ package org.tizen.emulator.manager.plugin; import java.io.IOException; import java.io.InputStream; +import java.net.URL; import java.net.URLClassLoader; import java.util.HashMap; import java.util.Map; @@ -45,6 +46,8 @@ import org.tizen.emulator.manager.platform.Profile; import org.tizen.emulator.manager.platform.ProfileList; import org.tizen.emulator.manager.resources.ImageResources; import org.tizen.emulator.manager.resources.ImageType; +import org.tizen.emulator.manager.ui.dialog.MessageDialog; +import org.tizen.emulator.manager.vms.SKIN_SHAPE; public enum PluginImageResources { VM_IMAGE_NOMAL("emulator_list_image_nml"), @@ -80,26 +83,26 @@ public enum PluginImageResources { this.frames = new HashMap(); } - public Image getImage(String platformName, String shape) { - String group = platformName; - if (shape != null && !shape.isEmpty()) { - group += "-" + shape; - } - return getImage(group); + public Image getImage(String platformName) { + return getImage(platformName, null); } // TODO - public Image getImage(String platformName) { - Image i = image.get(platformName); + public Image getImage(String platformName, SKIN_SHAPE shape) { + String prefix = platformName; + if (shape != null) { + prefix += "-" + shape.toString(); + } + Image i = image.get(prefix); if (i == null) { switch(this.type) { case GIF: - i = ImageRegistry.getGifImage(name, platformName); + i = ImageRegistry.getGifImage(name, platformName, shape); break; case PNG: - i = ImageRegistry.getPngImage(name, platformName); + i = ImageRegistry.getPngImage(name, platformName, shape); } - image.put(platformName, i); + image.put(prefix, i); } return i; } @@ -138,12 +141,12 @@ class ImageRegistry { } } - public static Image getPngImage(String name, String platformName) { - return getImage(name, platformName, "png"); + public static Image getPngImage(String name, String platformName, SKIN_SHAPE skinShape) { + return getImage(name, platformName, skinShape, "png"); } - public static Image getGifImage(String name, String platformName) { - return getImage(name, platformName, "gif"); + public static Image getGifImage(String name, String platformName, SKIN_SHAPE skinShape) { + return getImage(name, platformName, skinShape, "gif"); } private static URLClassLoader findLoader(String platformName) { @@ -156,26 +159,57 @@ class ImageRegistry { } return null; } - public static Image getImage(String name, String platformName, String extension) { - Image i = map.get(name+platformName); - loader = findLoader(platformName); - if (i == null && loader != null) { - InputStream is = loader.getResourceAsStream("res/" + platformName + "_" + name + "." + extension); - if (is != null) { - i = new Image(Display.getCurrent(), is); - map.put(name+platformName, i); - try { - is.close(); - } catch (IOException e) { - EMLogger.getLogger().warning(e.getMessage()); + public static Image getImage(String name, String platformName, SKIN_SHAPE skinShape, String extension) { + String shape = ""; + if (skinShape != null) { + shape = skinShape.toString(); + } + Image i = map.get(name + platformName + shape); + + // Get image from plugin resource. + if (i == null) { + loader = findLoader(platformName); + if (loader != null) { + InputStream is = null; + URL url = loader.findResource("res/" + shape + "_" + name + "." + extension); + if (url == null) { + // remove shape prefix + url = loader.findResource("res/" + name + "." + extension); + } + if (url != null) { + try { + is = url.openStream(); + } catch (IOException e) { + EMLogger.getLogger().warning(e.getMessage()); + } + } + if (is != null) { + i = new Image(Display.getCurrent(), is); + map.put(name + platformName + shape, i); + try { + is.close(); + } catch (IOException e) { + EMLogger.getLogger().warning(e.getMessage()); + } } } } + // Get image from common resource. if (i == null){ i = ImageResources.getImage(name, extension); } + if (i == null) { + final String fileInfo = name + "." + extension + " (" + platformName + ")"; + Display.getCurrent().asyncExec(new Runnable() { + public void run() { + new MessageDialog().openWarningDialog("Failed to load image resources : \n" + + fileInfo); + } + }); + } + return i; } diff --git a/src/org/tizen/emulator/manager/ui/widgets/CommonVMButtonPainter.java b/src/org/tizen/emulator/manager/ui/widgets/CommonVMButtonPainter.java new file mode 100644 index 0000000..2deec55 --- /dev/null +++ b/src/org/tizen/emulator/manager/ui/widgets/CommonVMButtonPainter.java @@ -0,0 +1,127 @@ +/* + * Emulator Manager + * + * Copyright (C) 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * JiHye Kim + * Minkee Lee + * SeokYeon Hwang + * Sangho Park + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributors: + * - S-Core Co., Ltd + * + */ + +package org.tizen.emulator.manager.ui.widgets; + +import org.eclipse.swt.events.PaintEvent; +import org.eclipse.swt.events.PaintListener; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.widgets.Canvas; +import org.tizen.emulator.manager.platform.Skin; +import org.tizen.emulator.manager.plugin.PluginImageResources; +import org.tizen.emulator.manager.vms.SKIN_SHAPE; + +public abstract class CommonVMButtonPainter implements PaintListener { + + protected int BUTTON_X_OFFSET = 2; + protected int BUTTON_Y_OFFSET = 3; + protected int TEXT_X_POINT = 50 + BUTTON_X_OFFSET; + protected int TEXT_Y_POINT = 36 + BUTTON_Y_OFFSET; + protected int TEXT_Y_GAP = 18; + protected int TEXT_RE_X_POINT = 26 + BUTTON_X_OFFSET; + protected int TITLE_Y_OFFSET = 6; + protected int LAUNCH_BUTTON_LEFT_OFFSET = 13; + protected int LAUNCH_BUTTON_BOTTOM_OFFSET = 13; + protected int TITLE_X_OFFSET = 9; + + public abstract void drawButtonText(GC gc, Rectangle rect, VMButton button); + + @Override + public void paintControl(PaintEvent e) { + VMButton button = (VMButton) e.widget; + WSTATE state = button.currentState(); + Image image = button.getImage(state); + + if (image == null) { + return; + } + + SKIN_SHAPE skinShape = null; + if (button.getProperty() != null) { + Skin skin = button.getProperty().getPropertyValue().skin; + if (skin != null) { + skinShape = skin.getSkinShape(); + } + } + + if (button.getProperty() != null) { + if (button.getProperty().isRunning()) { + button.getLaunchButton().setEnabled(false); + } else { + button.getLaunchButton().setEnabled(true); + } + + // If VM is custom, + if (!button.getProperty().getPropertyValue().isStandard) { + if (state == WSTATE.HOVER || state == WSTATE.SELECTED_HOVER) { + image = PluginImageResources.VM_IMAGE_CUSTOM_HOVER + .getImage(button.getPlatformName(), skinShape); + } else { + image = PluginImageResources.VM_IMAGE_CUSTOM_NORMAL + .getImage(button.getPlatformName(), skinShape); + } + } + } + + if (image == null) { + return; + } + + Rectangle rect = ((Canvas) e.widget).getClientArea(); + GC gc = e.gc; + + gc.setBackground(button.getBackgroundColor(button.currentState())); + gc.fillRectangle(rect); + gc.drawImage(image, rect.x + BUTTON_X_OFFSET, rect.y + BUTTON_Y_OFFSET); + if (button.isSelection()) { + Image selectionImage = PluginImageResources.VM_IMAGE_SELECTED + .getImage(button.getPlatformName(), skinShape); + if (selectionImage == null) { + return; + } + gc.drawImage(selectionImage, rect.x, rect.y); + } + drawButtonText(gc, rect, button); + } + + public int getLaunchButtonLeftOffset() { + return LAUNCH_BUTTON_LEFT_OFFSET; + } + + public int getLaunchButtonBottomOffset() { + return LAUNCH_BUTTON_BOTTOM_OFFSET; + } + + public int getTitleOffset() { + return TITLE_X_OFFSET; + } +} diff --git a/src/org/tizen/emulator/manager/ui/widgets/VMButton.java b/src/org/tizen/emulator/manager/ui/widgets/VMButton.java index e9fb86c..a05aee7 100644 --- a/src/org/tizen/emulator/manager/ui/widgets/VMButton.java +++ b/src/org/tizen/emulator/manager/ui/widgets/VMButton.java @@ -73,6 +73,7 @@ public class VMButton extends ImageButton { private VMProperty property = null; protected ImageButton launchButton = null; protected String platformName; + private SKIN_SHAPE skinShape = null; private int BUTTON_WIDTH = 106; private int BUTTON_HEIGHT = 146; @@ -82,6 +83,8 @@ public class VMButton extends ImageButton { private int launchButtonLeftOffset; private int launchButtonBottomOffset; + private int titleOffset; + public VMButton(Composite parent, int style, Platform platform, VMProperty property) { super(parent, style); this.property = property; @@ -102,12 +105,14 @@ public class VMButton extends ImageButton { if (item != null) { this.setPainListener((PaintListener)item.createInstance()); - launchButtonLeftOffset = ((IVMButtonPainter)item.createInstance()).getLaunchButtonLeftOffset(); - launchButtonBottomOffset = ((IVMButtonPainter)item.createInstance()).getLaunchButtonBottomOffset(); + launchButtonLeftOffset = ((CommonVMButtonPainter)item.createInstance()).getLaunchButtonLeftOffset(); + launchButtonBottomOffset = ((CommonVMButtonPainter)item.createInstance()).getLaunchButtonBottomOffset(); + titleOffset = ((CommonVMButtonPainter)item.createInstance()).getTitleOffset(); } else { this.setPainListener(VMButtonPaintListener); launchButtonLeftOffset = 13; launchButtonBottomOffset = 13; + titleOffset = 9; } settingImage(); @@ -117,23 +122,22 @@ public class VMButton extends ImageButton { } private void settingImage() { - String shape=""; if (button.getProperty() != null) { Skin skin = button.getProperty().getPropertyValue().skin; - if (skin != null && skin.getSkinShape() == SKIN_SHAPE.CIRCLE) { - shape = skin.getSkinShape().toString(); + if (skin != null) { + skinShape = skin.getSkinShape(); } } for (WSTATE s : WSTATE.values()) { - images.add(s.getId(), PluginImageResources.VM_IMAGE_NOMAL.getImage(platformName, shape)); + images.add(s.getId(), PluginImageResources.VM_IMAGE_NOMAL.getImage(platformName, skinShape)); } BUTTON_WIDTH = images.get(0).getImageData().width; BUTTON_HEIGHT = images.get(0).getImageData().height; - images.set(WSTATE.HOVER.getId(), PluginImageResources.VM_IMAGE_HOVER.getImage(platformName, shape)); - images.set(WSTATE.SELECTED_HOVER.getId(), PluginImageResources.VM_IMAGE_HOVER.getImage(platformName, shape)); + images.set(WSTATE.HOVER.getId(), PluginImageResources.VM_IMAGE_HOVER.getImage(platformName, skinShape)); + images.set(WSTATE.SELECTED_HOVER.getId(), PluginImageResources.VM_IMAGE_HOVER.getImage(platformName, skinShape)); } @Override @@ -155,19 +159,19 @@ public class VMButton extends ImageButton { } private void settingLaunchButton() { - Image image = PluginImageResources.BUTTON_LAUNCH_NOMAL.getImage(platformName); - Image pushImage = PluginImageResources.BUTTON_LAUNCH_PUSH.getImage(platformName); + Image image = PluginImageResources.BUTTON_LAUNCH_NOMAL.getImage(platformName, skinShape); + Image pushImage = PluginImageResources.BUTTON_LAUNCH_PUSH.getImage(platformName, skinShape); LAUNCH_BUTTON_WIDTH = image.getImageData().width; LAUNCH_BUTTON_HEIGHT = image.getImageData().height; launchButton = new ImageButton(this, SWT.PUSH); launchButton.setImages(image, - PluginImageResources.BUTTON_LAUNCH_HOVER.getImage(platformName), + PluginImageResources.BUTTON_LAUNCH_HOVER.getImage(platformName, skinShape), pushImage, pushImage, pushImage, pushImage, - PluginImageResources.BUTTON_LAUNCH_DISABLE.getImage(platformName)); + PluginImageResources.BUTTON_LAUNCH_DISABLE.getImage(platformName, skinShape)); FormData data = new FormData(); //data.top = new FormAttachment(0, 119 + H_OFFSET); @@ -248,7 +252,6 @@ public class VMButton extends ImageButton { } private String title = ""; - private static int TITLE_OFFSET = 10; private int title_x = 10; private static String omit = "..."; @@ -261,13 +264,13 @@ public class VMButton extends ImageButton { Point p = null; p = gc.textExtent(property.getName(), SWT.DRAW_MNEMONIC); - if (p.x < (BUTTON_WIDTH - 14)) { - title_x = ((BUTTON_WIDTH - 14 - p.x) / 2) + TITLE_OFFSET; + if (p.x < (BUTTON_WIDTH - (titleOffset * 2))) { + title_x = ((BUTTON_WIDTH - p.x) / 2); title = property.getName(); } else { - title_x = TITLE_OFFSET; + title_x = titleOffset; String name = property.getName(); - while (p.x > ((BUTTON_WIDTH - 26) - omitLen)) { + while (p.x > ((BUTTON_WIDTH - (titleOffset * 2)) - omitLen)) { name = name.substring(0, name.length() - 1); p = gc.textExtent(name, SWT.DRAW_MNEMONIC); } @@ -318,7 +321,7 @@ public class VMButton extends ImageButton { gc.fillRectangle(rect); gc.drawImage(image, rect.x + W_OFFSET, rect.y + H_OFFSET); if (isSelection()) { - gc.drawImage(PluginImageResources.VM_IMAGE_SELECTED.getImage(platformName), rect.x, rect.y); + gc.drawImage(PluginImageResources.VM_IMAGE_SELECTED.getImage(platformName, null), rect.x, rect.y); } drawButtonText(gc, rect); }