Create Emulator: add create emulator viewer
authorjihye424.kim <jihye424.kim@samsung.com>
Sun, 1 Nov 2015 09:03:25 +0000 (18:03 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Mon, 2 Nov 2015 04:44:30 +0000 (13:44 +0900)
- select base image from base image combo box
- select template from template list table
- can not use custom base image
- can not modify advanced option

Change-Id: Ie1d4294f2fd724a366599c7e7e921784ce187368
Signed-off-by: jihye424.kim <jihye424.kim@samsung.com>
15 files changed:
resource/renewal/res/icon_blue_btn_close.png [new file with mode: 0644]
resource/renewal/res/icon_blue_btn_expand.png [new file with mode: 0644]
resource/renewal/res/icon_blue_btn_plus.png [new file with mode: 0644]
src/org/tizen/emulator/manager/devices/DeviceTemplate.java
src/org/tizen/emulator/manager/devices/DeviceTemplateValue.java
src/org/tizen/emulator/manager/platform/Profile.java
src/org/tizen/emulator/manager/platform/baseimage/CustomBaseImageWorker.java
src/org/tizen/emulator/manager/renewal/resources/FontResources.java
src/org/tizen/emulator/manager/renewal/resources/ImageResources.java
src/org/tizen/emulator/manager/ui/renewal/tableviewer/CreateVMTable.java [new file with mode: 0644]
src/org/tizen/emulator/manager/ui/renewal/tableviewer/CreateVMTableViewer.java [new file with mode: 0644]
src/org/tizen/emulator/manager/ui/renewal/tableviewer/CreateVMTopComposite.java [new file with mode: 0644]
src/org/tizen/emulator/manager/ui/renewal/tableviewer/VMListTableViewer.java
src/org/tizen/emulator/manager/vms/VMProperty.java
src/org/tizen/emulator/manager/vms/VMPropertyValue.java

diff --git a/resource/renewal/res/icon_blue_btn_close.png b/resource/renewal/res/icon_blue_btn_close.png
new file mode 100644 (file)
index 0000000..6959382
Binary files /dev/null and b/resource/renewal/res/icon_blue_btn_close.png differ
diff --git a/resource/renewal/res/icon_blue_btn_expand.png b/resource/renewal/res/icon_blue_btn_expand.png
new file mode 100644 (file)
index 0000000..ef18423
Binary files /dev/null and b/resource/renewal/res/icon_blue_btn_expand.png differ
diff --git a/resource/renewal/res/icon_blue_btn_plus.png b/resource/renewal/res/icon_blue_btn_plus.png
new file mode 100644 (file)
index 0000000..c64cb1b
Binary files /dev/null and b/resource/renewal/res/icon_blue_btn_plus.png differ
index f228d49..e52fcdd 100644 (file)
@@ -213,7 +213,7 @@ public class DeviceTemplate {
                conf.getDisplay().getScreenSize().setValue(value.getDisplaySize());
 
                conf.getDisplay().setSkin(factory.createDisplaySkin());
-               if (value.getSkin() != null) {
+               if (value.getSkin() != null && !value.isSettingSkinByManager()) {
                        conf.getDisplay().getSkin().setName(value.getSkinName());
                        conf.getDisplay().getSkin().setPath(value.getSkinPath());
                        conf.getDisplay().getSkin().setShape(value.getSkinShape().toString());
index 011326c..89f993b 100644 (file)
@@ -70,6 +70,7 @@ public class DeviceTemplateValue implements Cloneable {
        private String skinPath = "";
        private SKIN_SHAPE skinShape = SKIN_SHAPE.SQUARE;
        private Skin skin;
+       private boolean settingSkinByManager = false;
 
        private String ramSizeUnit = "MB";
        private int ramSize = 512;
@@ -393,7 +394,21 @@ public class DeviceTemplateValue implements Cloneable {
        }
 
        public void setSkin(Skin skin) {
+               setSkin(skin, false);
+       }
+
+       public void setSkin(Skin skin, boolean isSettingByManager) {
+               // if manager set skin value, this skin will be not saved to configuration file
+               // this value will be only used while running emulator manager.
+               settingSkinByManager = isSettingByManager;
                this.skin = skin;
+               skinName = skin.getName();
+               skinPath = skin.getPath();
+               skinShape = skin.getSkinShape();
+       }
+
+       public boolean isSettingSkinByManager() {
+               return settingSkinByManager;
        }
 
        public int getRamSize() {
index 32391c7..43655e4 100644 (file)
@@ -168,8 +168,8 @@ public class Profile {
 
        public void addEmulator(VMProperty vm) {
                //setting BaseImage
-               BaseImage image = null;
-               if (vm.getPropertyValue().baseImage == null) {
+               BaseImage image = vm.getPropertyValue().baseImage;
+               if (image == null) {
                        if (vm.getImageType().equals(FSImageType.standard)) {
                                for (BaseImage b : imageList) {
                                        if (b.isStandard() && vm.getBaseImagePath().equals(b.getPath())) {
index 7e15722..4b0896c 100644 (file)
@@ -84,7 +84,7 @@ public class CustomBaseImageWorker {
                image.setPath(value.getFilePath());
                image.setPlatform(value.getPlatform());
                image.setDescription(value.getDescription());
-               return CustomBaseImageLoader.createBaseImageConfiguration(image);
+               return CustomBaseImageLoader.modfiyBaseImageConfiguration(image);
        }
 
        public boolean deleteBaseImageConfiguration(boolean needDeleteFile) {
index 170c5a0..3b8000a 100644 (file)
@@ -49,7 +49,10 @@ public enum FontResources {
        MESSAGE_BOX_CONTENTS_BOLD("msg_box_contetns_bold", setDefaultFontStyleAndSize(SWT.BOLD, 9)),
        DEFAULT_FONT_10("default_font_10", resizeDefaultFont(10)),
        DEFAULT_FONT_9("default_font_9", resizeDefaultFont(9)),
-       DEFAULT_FONT_8("default_font_8", resizeDefaultFont(8));
+       DEFAULT_FONT_8("default_font_8", resizeDefaultFont(8)),
+       DEFAULT_BOLD_FONT_10("default_font_10", setDefaultFontStyleAndSize(SWT.BOLD, 10)),
+       DEFAULT_BOLD_FONT_9("default_font_9", setDefaultFontStyleAndSize(SWT.BOLD, 9)),
+       DEFAULT_BOLD_FONT_8("default_font_8", setDefaultFontStyleAndSize(SWT.BOLD, 8));
 
        public static FontResources MODIFY_ITEM_TITLE = DEFAULT_FONT_9;
        public static FontResources CONTENT = DEFAULT_FONT_9;
index 1605e8d..2bbfd6f 100644 (file)
@@ -195,6 +195,7 @@ public enum ImageResources {
        VMLIST_TITLE_IMAGE("img_title_yourvmlist"),
        TEMPLATE_LIST_TITLE_IMAGE("img_title_templates"),
        BASEIMAGE_LIST_TITLE_IMAGE("img_title_baseimages"),
+       CREATE_VIEW_TITLE_IMAGE("img_title_creatnewdevice"),
        BUTTON_INFO_HOVER("btn_info_hover"),
        BUTTON_INFO_NML("btn_info_nml"),
        BUTTON_REFRESH_HOVER("btn_refreshlist_hover"),
@@ -272,6 +273,7 @@ public enum ImageResources {
        ICON_TITLE_TREE_CLOSED("icon_title_tree_closed"),
        ICON_TITILE_DESCRIPTION("icon_title_description"),
        ICON_BLUE_BUTTON_OPEN("icon_blue_btn_open"),
+       ICON_BLUE_BUTTON_PLUS("icon_blue_btn_plus"),
 
        // profile select button
        BTN_PROFILE_MOBILE_SELECTED("btn_profile_mobile_selected"),
diff --git a/src/org/tizen/emulator/manager/ui/renewal/tableviewer/CreateVMTable.java b/src/org/tizen/emulator/manager/ui/renewal/tableviewer/CreateVMTable.java
new file mode 100644 (file)
index 0000000..8480f59
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+ * Emulator Manager
+ *
+ * Copyright (C) 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * JiHye Kim <jihye424.kim@samsung.com>
+ * Minkee Lee <minkee.lee@samsung.com>
+ * SeokYeon Hwang <syeon.hwang@samsung.com>
+ * Sangho Park <sangho1206.park@samsung.com>
+ *
+ * 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.renewal.tableviewer;
+
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.tizen.emulator.manager.devices.DeviceTemplate;
+import org.tizen.emulator.manager.devices.DeviceTemplateValue;
+import org.tizen.emulator.manager.platform.BaseImage;
+import org.tizen.emulator.manager.platform.Profile;
+import org.tizen.emulator.manager.platform.Skin;
+import org.tizen.emulator.manager.resources.StringResources;
+import org.tizen.emulator.manager.ui.table.Table;
+import org.tizen.emulator.manager.ui.table.TableColumn;
+import org.tizen.emulator.manager.ui.table.TableItem;
+import org.tizen.emulator.manager.vms.SKIN_SHAPE;
+
+public class CreateVMTable {
+       private Table table;
+
+       private CreateVMTableViewer viewer;
+
+       private BaseImage image;
+
+       public CreateVMTable(CreateVMTableViewer viewer) {
+               this.viewer = viewer;
+       }
+
+       public Table getTable() {
+               return table;
+       }
+
+       private final String[] titles = {"Name", "Resolution", "Display Size", "Skin", "RAM Size", "Processors"};
+       public void makeTable(Composite form) {
+               table = new Table(form, SWT.BORDER | SWT.SINGLE);
+
+               for (String t : titles) {
+                       TableColumn column = new TableColumn(table, SWT.None);
+                       column.setText(t);
+                       column.setAlignment(SWT.CENTER);
+               }
+
+               table.setSelectedItemHeight(table.getItemHeight());
+               table.addListener(SWT.Selection, new Listener() {
+                       @Override
+                       public void handleEvent(Event e) {
+                               if (e.type == SWT.Selection) {
+                                       tableSelected();
+                               }
+                       }
+               });
+
+               settingSortingPair();
+       }
+
+       public void showTable() {
+               // reset table
+               table.removeAll();
+               image = null;
+
+               Profile profile = viewer.getProfile();
+               image = viewer.getBaseImage();
+               if (profile != null && image != null) {
+                       System.out.println("show table");
+                       SKIN_SHAPE shape = image.getSkinShape();
+
+                       for (DeviceTemplate template : profile.getTemplateList()) {
+                               // TODO: custom base image can use any shape's skin
+                               if (shape == SKIN_SHAPE.NONE) {
+                                       addTableItem(template);
+                               } else if (shape == template.getValue().getSkinShape()) {
+                                       addTableItem(template);
+                               }
+                       }
+               }
+
+               for (int i = 0; i < titles.length; i++) {
+                       table.getColumn(i).pack();
+               }
+       }
+
+       private void settingSortingPair() {
+               table.getColumn(0).addListener(SWT.Selection, table.getDefaultSortListener());
+               table.getColumn(1).addListener(SWT.Selection, table.getDefaultSortListener());
+               table.getColumn(5).addListener(SWT.Selection, table.getDefaultSortListener());
+               table.getColumn(2).addListener(SWT.Selection, new Listener() {
+
+                       @Override
+                       public void handleEvent(Event event) {
+                               TableColumn column = (TableColumn)event.widget;
+                               // set column
+                               table.settingSortColumn(column);
+                               // make comparable item list
+                               int dir = table.getSortDirection();
+                               DoubleTypeItemPair[] pairs = new DoubleTypeItemPair[table.getItemCount()];
+                               for (int i = 0; i < table.getItemCount(); i++) {
+                                       DeviceTemplate t = (DeviceTemplate)table.getItem(i).getData();
+                                       pairs[i] = new DoubleTypeItemPair(table.getItem(i), 1, dir,
+                                                       t.getValue().getDisplaySize());
+                               }
+                               column.setTableItemPairs(pairs);
+                               // sort table item
+                               table.defaultSortTableItem(column);
+                       }
+
+               });
+
+               table.getColumn(4).addListener(SWT.Selection, new Listener() {
+
+                       @Override
+                       public void handleEvent(Event event) {
+                               TableColumn column = (TableColumn)event.widget;
+                               // set column
+                               table.settingSortColumn(column);
+                               // make comparable item list
+                               int dir = table.getSortDirection();
+                               IntegerTypeItemPair[] pairs = new IntegerTypeItemPair[table.getItemCount()];
+                               for (int i = 0; i < table.getItemCount(); i++) {
+                                       DeviceTemplate t = (DeviceTemplate)table.getItem(i).getData();
+                                       pairs[i] = new IntegerTypeItemPair(table.getItem(i), 1, dir,
+                                                       t.getValue().getRamSize());
+                               }
+                               column.setTableItemPairs(pairs);
+                               // sort table item
+                               table.defaultSortTableItem(column);
+                       }
+               });
+       }
+
+       private void addTableItem(DeviceTemplate template) {
+               addTableItem(template, -1);
+       }
+
+       private void addTableItem(DeviceTemplate template, int index) {
+               TableItem item = null;
+               if (index >= 0) {
+                       item = new TableItem(table, SWT.NULL, index);
+               } else {
+                       item = new TableItem(table, SWT.NULL);
+               }
+
+               DeviceTemplateValue value = template.getValue();
+               // set default skin
+               Skin skin = null;
+               List<Skin> skins = image.getPlatform().findSkinList(value.getResolution(), value.getSkinShape());
+               if (!skins.isEmpty()) {
+                       skin = skins.get(0);
+                       value.setSkin(skin, true);
+               }
+
+               // set table item property
+               item.setText(0, value.getName());
+               item.setText(1, value.getResolution().toString());
+               if (value.getProfile().equals("tv")) {
+                       item.setText(2, "");
+               } else {
+                       item.setText(2, String.valueOf(value.getDisplaySize()) + " " + value.getDisplaySizeUnit());
+               }
+               item.setText(3, skin == null ? "" : skin.getName());
+               item.setText(4, String.valueOf(value.getRamSize()) + " " + value.getRamSizeUnit());
+               item.setText(5, String.valueOf(value.getCpuCount()));
+               item.setData(template);
+
+               // setting tool tip
+               String info = "Profile: " + value.getProfile()
+                               + (value.getExtenstion() == null
+                               ? ""
+                               : StringResources.NEW_LINE + "Extension: " + value.getExtenstion())
+                               + StringResources.NEW_LINE
+                               + "Type: " + value.getType();
+               item.setToolTipText(0, info);
+
+               if (value.getProfile().equals("tv")) {
+                       // TOOO
+               } else {
+                       String displayInfo = "DPI: " + value.getDisplayDPI()
+                       + (value.getSkinShape() != SKIN_SHAPE.SQUARE
+                       ? StringResources.NEW_LINE + "Skin Shape: " + value.getSkinShape().toString()
+                       : "");
+                       item.setToolTipText(1, displayInfo);
+                       item.setToolTipText(2, displayInfo);
+                       item.setToolTipText(3, displayInfo);
+               }
+       }
+
+       private void tableSelected() {
+               DeviceTemplate template = (DeviceTemplate)table.getSelection()[0].getData();
+               viewer.setTemplate(template);
+       }
+}
diff --git a/src/org/tizen/emulator/manager/ui/renewal/tableviewer/CreateVMTableViewer.java b/src/org/tizen/emulator/manager/ui/renewal/tableviewer/CreateVMTableViewer.java
new file mode 100644 (file)
index 0000000..ec05c8c
--- /dev/null
@@ -0,0 +1,399 @@
+/*
+ * Emulator Manager
+ *
+ * Copyright (C) 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * JiHye Kim <jihye424.kim@samsung.com>
+ * Minkee Lee <minkee.lee@samsung.com>
+ * SeokYeon Hwang <syeon.hwang@samsung.com>
+ * Sangho Park <sangho1206.park@samsung.com>
+ *
+ * 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.renewal.tableviewer;
+
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.tizen.emulator.manager.EmulatorManager;
+import org.tizen.emulator.manager.devices.DeviceTemplate;
+import org.tizen.emulator.manager.logging.EMLogger;
+import org.tizen.emulator.manager.platform.BaseImage;
+import org.tizen.emulator.manager.platform.Profile;
+import org.tizen.emulator.manager.platform.Skin;
+import org.tizen.emulator.manager.renewal.resources.ColorResources;
+import org.tizen.emulator.manager.renewal.resources.FontResources;
+import org.tizen.emulator.manager.renewal.resources.ImageResources;
+import org.tizen.emulator.manager.renewal.resources.PatchImageResources;
+import org.tizen.emulator.manager.resources.StringResources;
+import org.tizen.emulator.manager.ui.Messages;
+import org.tizen.emulator.manager.ui.renewal.MainDialog;
+import org.tizen.emulator.manager.ui.renewal.widgets.BlueButton;
+import org.tizen.emulator.manager.ui.renewal.widgets.GrayButton;
+import org.tizen.emulator.manager.ui.renewal.widgets.ImageButton;
+import org.tizen.emulator.manager.ui.renewal.widgets.NinePatchResourceInfo;
+import org.tizen.emulator.manager.vms.Creator;
+import org.tizen.emulator.manager.vms.EmulatorVMList;
+import org.tizen.emulator.manager.vms.VMProperty;
+import org.tizen.emulator.manager.vms.VMPropertyValue;
+import org.tizen.emulator.manager.vms.helper.VMWorkerException;
+
+public class CreateVMTableViewer extends AbstractTableViewer {
+       private static final int BACK_BUTTON_WIDTH      = 124;
+       private static final int BACK_BUTTON_HEIGHT     = 26;
+
+       private Composite comp;
+       private CreateVMTopComposite topComp;
+       private SashForm form;
+       private CreateVMTable table;
+
+       private Profile profile;
+
+       // top menu
+       private ImageButton backVMListBtn;
+       private GrayButton confirmBtn;
+
+       // sash form menu
+       private Label profileLabel;
+       private BlueButton advanceBtn;
+
+       // emulator properties
+       private String vmName = "";
+       private BaseImage baseImage;
+       private DeviceTemplate template;
+       private VMPropertyValue newValue;
+
+       public CreateVMTableViewer(Shell shell, String key) {
+               super(shell, key);
+       }
+
+       @Override
+       void setTitleImage() {
+               setTtileBackgroundImage(ImageResources.CREATE_VIEW_TITLE_IMAGE.getImage());
+       }
+
+       @Override
+       void setLinkerMenu() {
+               // TODO: not used
+       }
+
+       @Override
+       void setIconMenu() {
+               // TODO: not used
+       }
+
+       @Override
+       void makeTableComposite() {
+               if (table != null) {
+                       return;
+               }
+
+               comp = getTableComp();
+
+               makeTopComposite();
+
+               // make sash form menu
+               // TODO
+               advanceBtn = new BlueButton(comp, SWT.PUSH);
+               advanceBtn.setText("  Advance");
+               profileLabel = new Label(comp, SWT.NONE);
+               profileLabel.setFont(FontResources.DEFAULT_BOLD_FONT_9.getFont());
+
+               form = new SashForm(comp, SWT.NONE);
+               form.SASH_WIDTH = 0;
+               form.setBackground(ColorResources.BLUE.getColor());
+
+               table = new CreateVMTable(this);
+               table.makeTable(form);
+
+               setLayout();
+       }
+
+       @Override
+       void showTableComposite() {
+               // how to add profile
+               if (profile == null) {
+                       return;
+               }
+
+               // setting label
+               profileLabel.setText(profile == null
+                                               ? ""
+                                               : (profile.getName().toUpperCase() + " ")
+                                               + "Devices");
+
+               // reset value
+               resetVMProperties();
+
+               topComp.showComposite();
+               // TODO
+               // select base image -> drawing table
+               //table.showTable();
+       }
+
+       private void resetVMProperties() {
+               vmName = "";
+               baseImage = null;
+               template = null;
+               newValue = null;
+       }
+
+       public Profile getProfile() {
+               return profile;
+       }
+
+       public void setProfile(Profile profile) {
+               this.profile = profile;
+
+               if (profileLabel != null) {
+                       profileLabel.setText(profile == null
+                                       ? ""
+                                       : (profile.getName().toUpperCase() + " ")
+                                       + "Devices");
+               }
+
+               if (topComp != null) {
+                       topComp.setProfile(profile);
+               }
+       }
+
+       public String getVmName() {
+               return vmName;
+       }
+
+       public void setVmName(String vmName) {
+               this.vmName = vmName;
+               checkValid();
+       }
+
+       public BaseImage getBaseImage() {
+               return baseImage;
+       }
+
+       public void setBaseImage(BaseImage baseImage) {
+               boolean needRedrawingTable = false;
+               if (this.baseImage == null
+                               || this.baseImage.getSkinShape() != baseImage.getSkinShape()) {
+                       needRedrawingTable  = true;
+               }
+
+               this.baseImage = baseImage;
+               if (needRedrawingTable) {
+                       System.out.println("need redrawing");
+                       table.showTable();
+               }
+
+               checkValid();
+       }
+
+       public DeviceTemplate getTemplate() {
+               return template;
+       }
+
+       public void setTemplate(DeviceTemplate template) {
+               this.template = template;
+               checkValid();
+       }
+
+       public VMPropertyValue getNewValue() {
+               return newValue;
+       }
+
+       public void setNewValue(VMPropertyValue newValue) {
+               this.newValue = newValue;
+               checkValid();
+       }
+
+       private void makeTopComposite() {
+               backVMListBtn = new ImageButton(comp, SWT.PUSH);
+               Image hover = PatchImageResources.getThreePatchButtonImage(BACK_BUTTON_WIDTH, hoverInfo);
+               Image normal = PatchImageResources.getThreePatchButtonImage(BACK_BUTTON_WIDTH, normalInfo);
+
+               backVMListBtn.setText("   Back to VM List");
+               backVMListBtn.setFont(FontResources.DEFAULT_FONT_9.getFont());
+               backVMListBtn.setFontColor(ColorResources.DEFAULT_FONT.getColor());
+               backVMListBtn.setImages(normal, hover, hover, normal);
+               backVMListBtn.addListener(SWT.Selection, new Listener() {
+                       @Override
+                       public void handleEvent(Event event) {
+                               if (event.type == SWT.Selection) {
+                                       MainDialog mainDialog = EmulatorManager.getMainDialog();
+                                       AbstractTableViewer viewer = mainDialog.findViewer("vmList");
+                                       if (viewer != null) {
+                                               mainDialog.setStackTop(viewer);
+                                       }
+                               }
+                       }
+               });
+
+               confirmBtn = new GrayButton(comp, SWT.PUSH);
+               confirmBtn.setText("Confirm");
+               confirmBtn.addListener(SWT.Selection, new Listener(){
+                       @Override
+                       public void handleEvent(Event event) {
+                               if (event.type == SWT.Selection) {
+                                       createEmulator();
+                               }
+                       }
+               });
+
+               topComp = new CreateVMTopComposite(this);
+               topComp.makeComposite();
+       }
+
+       public void checkValid() {
+               confirmBtn.setEnabled(true);
+
+               if (!topComp.isValid()) {
+                       confirmBtn.setEnabled(false);
+               }
+
+               if (template == null) {
+                       confirmBtn.setEnabled(false);
+               }
+
+               // TODO: check vm proerty value
+       }
+
+       private void createEmulator() {
+               // TODO
+               VMProperty lastCreateProperty = profile.getLastCreatedProperty();
+               VMPropertyValue value = lastCreateProperty.getPropertyValue();
+
+               value.vmsName = vmName;
+               value.setBaseImage(baseImage);
+               value.setDeviceTemplate(template);
+
+               // TODO
+               if (value.skin == null) {
+                       List<Skin> skins = baseImage.getPlatform().findSkinList(value.resolution, baseImage.getSkinShape());
+                       if (!skins.isEmpty()) {
+                               value.skin = skins.get(0);
+                               value.skinPath = value.skin.getPath();
+                       }
+               }
+
+               VMProperty prop = null;
+               try {
+                       prop = Creator.create(value);
+               } catch (VMWorkerException e) {
+                       String msg = Messages.getString("VMsMainView.FailedToCreate.0") //$NON-NLS-1$
+                                       + value.vmsName + ") " //$NON-NLS-1$
+                                       + StringResources.NEW_LINE
+                                       + e.getMessage();
+                       EMLogger.getLogger().warning(msg);
+                       // TODO
+               }
+
+               EmulatorVMList.getInstance().addProperty(prop);
+               profile.addEmulator(prop);
+
+               MainDialog mainDialog = EmulatorManager.getMainDialog();
+               VMListTableViewer viewer = (VMListTableViewer)mainDialog.findViewer("vmList");
+               if (viewer != null) {
+                       viewer.setRedrawing(true);
+                       viewer.setCreatedEmulator(prop);
+                       mainDialog.setStackTop(viewer);
+               }
+       }
+
+       private void setLayout() {
+               // composite is form layout
+               FormData backButtonData;
+               backButtonData = new FormData();
+               backButtonData.left = new FormAttachment(0, 10);
+               backButtonData.top = new FormAttachment(0, 13);
+               backButtonData.width = BACK_BUTTON_WIDTH;
+               backButtonData.height = BACK_BUTTON_HEIGHT;
+               backVMListBtn.setLayoutData(backButtonData);
+
+               FormData data;
+               data = new FormData();
+               data.top = new FormAttachment(0, 13);
+               data.right = new FormAttachment(100, -10);
+               data.width = 106;
+               data.height = 26;
+               confirmBtn.setLayoutData(data);
+
+               data = new FormData();
+               data.top = new FormAttachment(0, 39);
+               data.left = new FormAttachment(0, 0);
+               data.right = new FormAttachment(100, 0);
+               data.height = 71;
+               topComp.setLayoutData(data);
+
+               // Profile Devices
+               data = new FormData();
+               data.top = new FormAttachment(topComp, 12);
+               data.left = new FormAttachment(0, 18);
+               data.width = 150;
+               data.height = 20;
+               profileLabel.setLayoutData(data);
+
+               data = new FormData();
+               data.top = new FormAttachment(topComp, 2);
+               data.right = new FormAttachment(100, -10);
+               data.width = 90;
+               data.height = BACK_BUTTON_HEIGHT;
+               advanceBtn.setLayoutData(data);
+
+               FormData sashData = new FormData();
+               sashData.top = new FormAttachment(0, 142);
+               sashData.left = new FormAttachment(0, 10);
+               sashData.right = new FormAttachment(100, -10);
+               sashData.bottom = new FormAttachment(100, -10);
+               form.setLayoutData(sashData);
+
+               //form.setWeights(new int[]{1,0});
+       }
+
+       private final NinePatchResourceInfo normalInfo = new NinePatchResourceInfo(ColorResources.TABLE_VIEWER_BG,
+                       ColorResources.TABLE_VIEWER_BG,
+                       null, //left top
+                       ImageResources.BACK_BTN_NORMAL_C, // top -> center
+                       null, // right top
+                       ImageResources.BACK_BTN_NORMAL_R, // right
+                       null, // right bottom
+                       null, // bottom
+                       null, // left bottom
+                       ImageResources.BACK_BTN_NORMAL_L); // left
+
+       private final NinePatchResourceInfo hoverInfo = new NinePatchResourceInfo(ColorResources.TABLE_VIEWER_BG,
+                       ColorResources.TABLE_VIEWER_BG,
+                       null, //left top
+                       ImageResources.BACK_BTN_HOVER_C, // top -> center
+                       null, // right top
+                       ImageResources.BACK_BTN_HOVER_R, // right
+                       null, // right bottom
+                       null, // bottom
+                       null, // left bottom
+                       ImageResources.BACK_BTN_HOVER_L); // left
+
+}
diff --git a/src/org/tizen/emulator/manager/ui/renewal/tableviewer/CreateVMTopComposite.java b/src/org/tizen/emulator/manager/ui/renewal/tableviewer/CreateVMTopComposite.java
new file mode 100644 (file)
index 0000000..e765870
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+ * Emulator Manager
+ *
+ * Copyright (C) 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * JiHye Kim <jihye424.kim@samsung.com>
+ * Minkee Lee <minkee.lee@samsung.com>
+ * SeokYeon Hwang <syeon.hwang@samsung.com>
+ * Sangho Park <sangho1206.park@samsung.com>
+ *
+ * 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.renewal.tableviewer;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.tizen.emulator.manager.platform.BaseImage;
+import org.tizen.emulator.manager.platform.Profile;
+import org.tizen.emulator.manager.renewal.resources.FontResources;
+import org.tizen.emulator.manager.renewal.resources.ImageResources;
+import org.tizen.emulator.manager.resources.StringResources;
+import org.tizen.emulator.manager.ui.renewal.item.modify.common.NameItem;
+import org.tizen.emulator.manager.ui.renewal.widgets.BlueButton;
+import org.tizen.emulator.manager.ui.renewal.widgets.ComboBox;
+import org.tizen.emulator.manager.ui.renewal.widgets.TextInputBox;
+import org.tizen.emulator.manager.vms.helper.HelperClass;
+
+public class CreateVMTopComposite extends Composite {
+       private static final int LABEL_WIDTH = 90;
+       private static final int INPUT_BOX_WIDTH = 250;
+       private static final int INPUT_BOX_HEIGHT = 24;
+
+       private CreateVMTableViewer viewer;
+       private Profile profile;
+       private BaseImage baseImage;
+
+       private TextInputBox vmNameText;
+       private ComboBox baseImageCombo;
+       private BlueButton addCustomImageBtn;
+
+       private Label errorImageLabel;
+       private Label errorMsgLabel;
+
+       private boolean isNameValid = false;
+
+       public CreateVMTopComposite(CreateVMTableViewer viewer) {
+               super(viewer.getTableComp(), SWT.NONE);
+
+               this.viewer = viewer;
+               this.setLayout(new FormLayout());
+       }
+
+       public void makeComposite() {
+               vmNameText = new TextInputBox(this, SWT.NONE);
+               vmNameText.getTextWidget().addModifyListener(new ModifyListener() {
+                       @Override
+                       public void modifyText(ModifyEvent e) {
+                               vmNameModified();
+                       }
+               });
+               vmNameText.getTextWidget().setTextLimit(20);
+
+               baseImageCombo = new ComboBox(this.getShell(), this, SWT.NONE);
+               baseImageCombo.addListener(SWT.Selection, imageComboListener);
+
+               addCustomImageBtn = new BlueButton(this, SWT.PUSH);
+               addCustomImageBtn.setIcon(ImageResources.ICON_BLUE_BUTTON_PLUS);
+               addCustomImageBtn.addListener(SWT.Selection, customImageListener);
+               addCustomImageBtn.setToolTipText("add new custom base image");
+
+               errorMsgLabel   = new Label(this, SWT.NONE);
+               errorImageLabel = new Label(this, SWT.NONE);
+               errorMsgLabel.setFont(FontResources.DEFAULT_FONT_10.getFont());
+               errorImageLabel.setFont(FontResources.DEFAULT_FONT_10.getFont());
+
+               setLayout();
+       }
+
+       public void showComposite() {
+               // reset viewer
+               vmNameText.setText("");
+               baseImageCombo.clear();
+
+               if (profile == null) {
+                       profile = viewer.getProfile();
+                       if (profile == null) {
+                               setErrorMessage("You need to select profile!!");
+                               return;
+                       }
+               }
+
+               // setting base image list
+               for (BaseImage image : profile.getImageList()) {
+                       if (!image.isFilePathExist() || image.isDeleted()) {
+                               continue;
+                       }
+
+                       if (image.isStandard()) {
+                               baseImageCombo.addItem(image.getName(), image);
+                       } else {
+                               String text = image.getName() + " (Version: " + image.getVersion() + ")";
+                               baseImageCombo.addItem(text, image);
+                       }
+               }
+
+               if (!baseImageCombo.getItemList().isEmpty()) {
+                       baseImageCombo.select(0);
+               }
+
+               // setting default emulator name
+               vmNameText.setText(getDefaultName());
+
+
+       }
+
+       public void setProfile(Profile profile) {
+               this.profile = profile;
+       }
+
+       public boolean isValid() {
+               return isNameValid && (baseImage !=null);
+       }
+
+       Listener customImageListener = new Listener() {
+               @Override
+               public void handleEvent(Event event) {
+                       switch(event.type) {
+                       case SWT.Selection:
+                               //TODO
+                       default:
+                                       break;
+                       }
+
+               }
+       };
+
+       Listener imageComboListener = new Listener() {
+               @Override
+               public void handleEvent(Event event) {
+                       switch(event.type) {
+                       case SWT.Selection:
+                               baseImage = (BaseImage)baseImageCombo.getSelectedData();
+                               String toolTip = "Type: " + (baseImage.isStandard() ? "standard" : "cusotm")
+                                       + StringResources.NEW_LINE
+                                       + "Platform: " + baseImage.getPlatformName()
+                                       + StringResources.NEW_LINE
+                                       + "Skin shape: " + baseImage.getSkinShape().toString()
+                                       + StringResources.NEW_LINE
+                                       + "Path: " + baseImage.getPath();
+                               baseImageCombo.setToolTipText(toolTip);
+                               vmNameText.setText(getDefaultName());
+                               viewer.setBaseImage(baseImage);
+                       default:
+                                       break;
+                       }
+               }
+       };
+
+       private void vmNameModified() {
+               String name = vmNameText.getTextWidget().getText();
+
+               setErrorMessage(NameItem.checkVMName(name));
+
+               viewer.setVmName(name);
+       }
+
+       private void setErrorMessage(String err) {
+               if (!err.isEmpty()) {
+                       System.out.println(err);
+                       errorImageLabel.setImage(ImageResources.ICON_STATE_ERROR.getImage());
+                       errorMsgLabel.setText("Error: " + err);
+                       isNameValid = false;
+               } else {
+                       errorImageLabel.setText("");
+                       errorMsgLabel.setText("");
+                       isNameValid = true;
+               }
+       }
+
+       private String getDefaultName() {
+               StringBuilder sb = new StringBuilder();
+               sb.append(profile.getName().substring(0,1).toLowerCase());
+               if (!baseImage.isStandard()) {
+                       sb.append("c"); //$NON-NLS-1$
+               }
+               sb.append("-"); //$NON-NLS-1$
+
+               SimpleDateFormat formatter = new SimpleDateFormat ("MMdd"); //$NON-NLS-1$
+               Date currentTime = new Date( );
+               String timeStr = formatter.format(currentTime);
+               sb.append(timeStr);
+               sb.append("-"); //$NON-NLS-1$
+
+               int count=1;
+               String prefix = sb.toString();
+               StringBuilder vmName = null;
+               do {
+                       vmName = new StringBuilder();
+                       vmName.append(prefix).append(Integer.toString(count++));
+               } while (HelperClass.checkDupulicateName(vmName.toString()) != null) ;
+
+               return vmName.toString();
+       }
+
+       private void setLayout() {
+               // separator
+               Label label = new Label(this, SWT.HORIZONTAL | SWT.SEPARATOR);
+               FormData data = new FormData();
+               data.top = new FormAttachment(0, 6);
+               data.left = new FormAttachment(0, 13);
+               data.right = new FormAttachment(100, -10);
+               label.setLayoutData(data);
+
+               // VM Name
+               label = new Label(this, SWT.NONE);
+               label.setText("VM Name");
+               label.setFont(FontResources.DEFAULT_BOLD_FONT_9.getFont());
+               data = new FormData();
+               data.top = new FormAttachment(0, 16);
+               data.left = new FormAttachment(0, 18);
+               data.width = LABEL_WIDTH;
+               data.height = INPUT_BOX_HEIGHT;
+               label.setLayoutData(data);
+
+               data = new FormData();
+               data.top = new FormAttachment(0, 11);
+               data.left = new FormAttachment(label, 0);
+               data.width = INPUT_BOX_WIDTH;
+               data.height = INPUT_BOX_HEIGHT;
+               vmNameText.setLayoutData(data);
+
+               data = new FormData();
+               data.top = new FormAttachment(0, 12);
+               data.left = new FormAttachment(vmNameText, 10);
+               data.width = 20;
+               data.height = 20;
+               errorImageLabel.setLayoutData(data);
+
+               data = new FormData();
+               data.top = new FormAttachment(0, 14);
+               data.left = new FormAttachment(errorImageLabel, 0);
+               data.width = 300;
+               errorMsgLabel.setLayoutData(data);
+
+               // Base Image
+               label = new Label(this, SWT.NONE);
+               label.setText("Base Image");
+               label.setFont(FontResources.DEFAULT_BOLD_FONT_9.getFont());
+               data = new FormData();
+               data.top = new FormAttachment(vmNameText, 14);
+               data.left = new FormAttachment(0, 18);
+               data.width = LABEL_WIDTH;
+               data.height = INPUT_BOX_HEIGHT;
+               label.setLayoutData(data);
+
+               data = new FormData();
+               data.top = new FormAttachment(vmNameText, 8);
+               data.left = new FormAttachment(label, 0);
+               data.width = INPUT_BOX_WIDTH;
+               data.height = 24;
+               baseImageCombo.setLayoutData(data);
+
+               data = new FormData();
+               data.top = new FormAttachment(vmNameText, 7);
+               data.left = new FormAttachment(baseImageCombo, 6);
+               data.width = 30;
+               data.height = 26;
+               addCustomImageBtn.setLayoutData(data);
+       }
+}
index 1a5130c..9830e06 100644 (file)
@@ -249,7 +249,15 @@ public class VMListTableViewer extends AbstractTableViewer {
 
                @Override
                public void widgetSelected(SelectionEvent e) {
-                       //TODO
+                       ProfileButton pButton = (ProfileButton)e.data;
+                       MainDialog mainDialog = EmulatorManager.getMainDialog();
+                       CreateVMTableViewer viewer = (CreateVMTableViewer)mainDialog.findViewer("createVM");
+                       if (viewer == null) {
+                               viewer = new CreateVMTableViewer(MainDialog.getShell(), "createVM");
+                               mainDialog.addViewer(viewer);
+                       }
+                       viewer.setProfile(pButton.getProfile());
+                       mainDialog.setStackTop(viewer);
                }
 
                @Override
index 73460a5..771083d 100644 (file)
@@ -81,11 +81,13 @@ public class VMProperty {
                this.lastModified = propertyFile.lastModified();
                this.configuration = element;
 
-               File logFile = new File(VMLogUtil.getEmulatorLogPath(configuration.getBaseInformation().getName()));
-               if (logFile.exists()) {
-                       lastLaunched = logFile.lastModified();
-               } else {
-                       lastLaunched = 0;
+               if (configuration.getBaseInformation() != null) {
+                       File logFile = new File(VMLogUtil.getEmulatorLogPath(configuration.getBaseInformation().getName()));
+                       if (logFile.exists()) {
+                               lastLaunched = logFile.lastModified();
+                       } else {
+                               lastLaunched = 0;
+                       }
                }
        }
 
index de1919d..a9a7280 100644 (file)
@@ -37,6 +37,7 @@ import java.util.List;
 
 import org.tizen.emulator.manager.devices.DeviceTemplate;
 import org.tizen.emulator.manager.devices.DeviceTemplateList;
+import org.tizen.emulator.manager.devices.DeviceTemplateValue;
 import org.tizen.emulator.manager.logging.EMLogger;
 import org.tizen.emulator.manager.platform.BaseImage;
 import org.tizen.emulator.manager.platform.Skin;
@@ -459,6 +460,29 @@ public class VMPropertyValue implements Cloneable {
                }
        }
 
+       public void setDeviceTemplate(DeviceTemplate device) {
+               if (device == null) {
+                       return;
+               }
+
+               this.device = device;
+               DeviceTemplateValue value = device.getValue();
+
+               if (value.getSkin() != null) {
+                       this.skin = value.getSkin();
+                       this.skinPath = value.getSkinPath();
+               }
+               this.resolution = value.getResolution();
+               this.dpi = value.getDisplayDPI();
+               this.screenSize = value.getDisplaySize();
+
+               this.cpu = value.getCpuCount();
+               this.ramSize = value.getRamSize();
+
+               // TODO
+               // setting sensor ...
+       }
+
        public OptionType getAdvancedOption(String optionName) {
                for (OptionType option : advancedOptionList) {
                        if (option.getName().equals(optionName)) {