VM List Table: add tool tip, context menu to vm list table
authorjihye424.kim <jihye424.kim@samsung.com>
Tue, 20 Oct 2015 05:05:48 +0000 (14:05 +0900)
committerjihye424.kim <jihye424.kim@samsung.com>
Tue, 20 Oct 2015 05:07:02 +0000 (14:07 +0900)
- add last launched time to VMProperty

Change-Id: I649ff8eb57a04af8b21152aa2311292021dec224
Signed-off-by: jihye424.kim <jihye424.kim@samsung.com>
src/org/tizen/emulator/manager/ui/renewal/tableviewer/VMListTable.java
src/org/tizen/emulator/manager/ui/table/TableItem.java
src/org/tizen/emulator/manager/vms/VMProperty.java
src/org/tizen/emulator/manager/vms/VMWorkerCommon.java
src/org/tizen/emulator/manager/vms/helper/MonitoringEmulator.java

index e6df3cb..35c0dfb 100644 (file)
@@ -30,7 +30,9 @@
 
 package org.tizen.emulator.manager.ui.renewal.tableviewer;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 import org.eclipse.swt.SWT;
@@ -42,9 +44,13 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.tizen.emulator.manager.devices.DeviceTemplateValue;
 import org.tizen.emulator.manager.platform.Profile;
 import org.tizen.emulator.manager.platform.ProfileList;
 import org.tizen.emulator.manager.renewal.resources.ImageResources;
+import org.tizen.emulator.manager.resources.StringResources;
 import org.tizen.emulator.manager.ui.renewal.MainDialog;
 import org.tizen.emulator.manager.ui.renewal.dialog.MessageBox;
 import org.tizen.emulator.manager.ui.renewal.dialoghandler.VMModifyHandler;
@@ -160,6 +166,135 @@ public class VMListTable {
                        }
 
                });
+
+               makeContextMenu();
+       }
+
+       private Menu menu;
+       private MenuItem modifyMenu;
+       private MenuItem launchMenu;
+       private MenuItem deleteMenu;
+       private MenuItem resetMenu;
+       private MenuItem exportMenu;
+       private MenuItem detailMenu;
+
+       private void makeContextMenu() {
+               menu = new Menu(table);
+               launchMenu = new MenuItem(menu, SWT.PUSH);
+               launchMenu.setText("Launch");
+               launchMenu.addListener(SWT.Selection, new Listener() {
+                       @Override
+                       public void handleEvent(Event e) {
+                               if (e.type == SWT.Selection) {
+                                       launchEmulator();
+                               }
+                       }
+               });
+
+               modifyMenu = new MenuItem(menu, SWT.PUSH);
+               modifyMenu.setText("Modify");
+               modifyMenu.addListener(SWT.Selection, new Listener() {
+                       @Override
+                       public void handleEvent(Event e) {
+                               if (e.type == SWT.Selection) {
+                                       modifyEmulator();
+                               }
+                       }
+               });
+
+               deleteMenu = new MenuItem(menu, SWT.PUSH);
+               deleteMenu.setText("Delete\tDelete");
+               deleteMenu.addListener(SWT.Selection, new Listener() {
+                       @Override
+                       public void handleEvent(Event e) {
+                               if (e.type == SWT.Selection) {
+                                       deleteVMList();
+                               }
+                       }
+               });
+
+               resetMenu = new MenuItem(menu, SWT.PUSH);
+               resetMenu.setText("Reset");
+               resetMenu.addListener(SWT.Selection, new Listener() {
+                       @Override
+                       public void handleEvent(Event e) {
+                               if (e.type == SWT.Selection) {
+                                       resetVMList();
+                               }
+                       }
+               });
+
+               exportMenu = new MenuItem(menu, SWT.PUSH);
+               exportMenu.setText("Export as");
+               exportMenu.addListener(SWT.Selection, new Listener() {
+                       @Override
+                       public void handleEvent(Event e) {
+                               if (e.type == SWT.Selection) {
+                                       exportEmulatorImage();
+                               }
+                       }
+               });
+
+               new MenuItem(menu, SWT.SEPARATOR);
+               detailMenu = new MenuItem(menu, SWT.PUSH);
+               detailMenu.setText("Detail");
+               detailMenu.addListener(SWT.Selection, new Listener() {
+                       @Override
+                       public void handleEvent(Event e) {
+                               if (e.type == SWT.Selection) {
+                                       // TODO
+                                       System.out.println("Detail Info");
+                               }
+                       }
+               });
+
+               table.addListener(SWT.MouseDown, new Listener() {
+                       @Override
+                       public void handleEvent(Event event) {
+                               // context menu
+                               int count = table.getSelectionCount();
+                               if (count < 0) {
+                                       return;
+                               }
+                               if (count == 1) {
+                                       TableItem item = table.getSelection()[0];
+                                       VMProperty prop = (VMProperty)item.getData();
+                                       if (prop.isRunning()) {
+                                               launchMenu.setEnabled(false);
+                                               modifyMenu.setEnabled(false);
+                                               deleteMenu.setEnabled(false);
+                                               resetMenu.setEnabled(false);
+                                               exportMenu.setEnabled(false);
+                                               detailMenu.setEnabled(true);
+                                       } else {
+                                               launchMenu.setEnabled(true);
+                                               modifyMenu.setEnabled(true);
+                                               deleteMenu.setEnabled(true);
+                                               resetMenu.setEnabled(true);
+                                               exportMenu.setEnabled(true);
+                                               detailMenu.setEnabled(true);
+                                       }
+                               } else {
+                                       boolean available = true;
+                                       for (TableItem item : table.getSelection()) {
+                                               VMProperty prop = (VMProperty)item.getData();
+                                               if (prop.isRunning()) {
+                                                       available = false;
+                                                       break;
+                                               }
+                                       }
+
+                                       launchMenu.setEnabled(false);
+                                       modifyMenu.setEnabled(false);
+                                       deleteMenu.setEnabled(available);
+                                       resetMenu.setEnabled(available);
+                                       exportMenu.setEnabled(false);
+                                       detailMenu.setEnabled(false);
+                               }
+
+                               menu.setVisible(true);
+                       }
+               });
        }
 
        private void makeCreateVMCombo() {
@@ -334,6 +469,67 @@ public class VMListTable {
                        item.setImage(6, ImageResources.ICON_FILE_SHARE_ON.getImage());
                }
                item.setData(property);
+
+               settingToolTip(item, property);
+       }
+
+       private void settingToolTip(TableItem item, VMProperty property) {
+               VMPropertyValue value = property.getPropertyValue();
+               SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd HH:mm");
+               // 1 - type, 2 - name
+               String baseTip = "Platform: " + value.baseImage.getPlatformName()
+                               + StringResources.NEW_LINE
+                               + "Last modified: " + format.format(new Date(property.getLastModifedPropertyFile()))
+                               + StringResources.NEW_LINE
+                               + "Last launched: "
+                               + (property.getLastLaunchedTime() == 0
+                               ? "X"
+                               : format.format(new Date(property.getLastLaunchedTime())));
+               item.setToolTipText(1, baseTip);
+               item.setToolTipText(2, baseTip);
+               // 3 - device
+               String deviceTip = "";
+               if (value.device != null) {
+                       DeviceTemplateValue deviceValue = value.device.getValue();
+                       deviceTip = "Device: " + deviceValue.getName()
+                                       + StringResources.NEW_LINE
+                                       + "Type: " + deviceValue.getType()
+                                       + StringResources.NEW_LINE
+                                       + "Version: " + deviceValue.getVersion()
+
+                                       + (deviceValue.getManufacturer() != null
+                                       && deviceValue.getManufacturer().isEmpty()
+                                       ? StringResources.NEW_LINE
+                                         + "Manufacturer: " + deviceValue.getManufacturer()
+                                       : "");
+                       item.setToolTipText(3, deviceTip);
+               }
+               // 4 - base image
+               String imageTip = "Platform: " + value.baseImage.getPlatformName()
+                               + StringResources.NEW_LINE
+                               + "Type: "
+                               + (value.baseImage.isStandard()
+                               ? "standard"
+                               : "custom")
+                               + StringResources.NEW_LINE
+                               + "CPU: " + value.baseImage.getCpu();
+               item.setToolTipText(4, imageTip);
+               // 5 - resolution
+               String displayTip = "Display size: " + value.screenSize + " inch"
+                               + StringResources.NEW_LINE
+                               + "DPI: " + value.resolution.getDPI();
+               if (value.skin != null) {
+                       displayTip = displayTip + StringResources.NEW_LINE + StringResources.NEW_LINE
+                       + "Skin: " + value.skin.getName()
+                       + StringResources.NEW_LINE
+                       + "Skin shape: " + value.skin.getSkinShape().toString();
+               }
+               item.setToolTipText(5, displayTip);
+               // 6 - file sharing
+               if (value.fileSharePath != null && !value.fileSharePath.isEmpty()) {
+                       String fileTip ="Path : " + value.fileSharePath;
+                       item.setToolTipText(6, fileTip);
+               }
        }
 
        private void makeVMButton() {
index 03e82d7..7c1a352 100644 (file)
@@ -899,6 +899,8 @@ public class TableItem extends Canvas {
                        default:
                                break;
                        }
+
+                       parent.notifyListeners(event.type, event);
                }
        };
 
index 0f835ef..73460a5 100644 (file)
@@ -36,6 +36,7 @@ import org.tizen.emulator.manager.platform.BaseImage;
 import org.tizen.emulator.manager.plugin.EMPlugin;
 import org.tizen.emulator.manager.plugin.ExtensionItem;
 import org.tizen.emulator.manager.plugin.PluginStringResources;
+import org.tizen.emulator.manager.vms.helper.VMLogUtil;
 import org.tizen.emulator.manager.vms.xml.EmulatorConfiguration;
 import org.tizen.emulator.manager.vms.xml.ObjectFactory;
 
@@ -55,6 +56,8 @@ public class VMProperty {
        // Is it possible to launch emulator or not?
        private boolean isAvailable = true;
 
+       private long lastLaunched;
+
        @Override
        public boolean equals(Object obj) {
                if (obj == null) {
@@ -77,6 +80,13 @@ public class VMProperty {
                this.propertyFile = propertyFile;
                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;
+               }
        }
 
        /**
@@ -300,6 +310,14 @@ public class VMProperty {
                this.isAvailable = isAvailable;
        }
 
+       public long getLastLaunchedTime() {
+               return lastLaunched;
+       }
+
+       public void setLastLaunchedTime(long lastLaunched) {
+               this.lastLaunched = lastLaunched;
+       }
+
        public enum Architecture {
                x86("x86"), i386("i386"), x86_64("x86_64"); //$NON-NLS-1$ //$NON-NLS-2$
 
index d7d28ac..1bc2094 100644 (file)
@@ -35,6 +35,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.logging.Level;
 
@@ -140,6 +141,7 @@ public class VMWorkerCommon implements IVMWorker {
                        } else {
                                // success to launch vm
                                property.setRunning(true);
+                               property.setLastLaunchedTime(new Date().getTime());
                        }
 
                } catch (VMWorkerException e) {
index 62e8aa4..b080ee0 100644 (file)
@@ -40,7 +40,6 @@ import org.tizen.emulator.manager.EmulatorManager;
 import org.tizen.emulator.manager.Messages;
 import org.tizen.emulator.manager.logging.EMLogger;
 import org.tizen.emulator.manager.resources.StringResources;
-import org.tizen.emulator.manager.ui.VMsMainView;
 import org.tizen.emulator.manager.ui.dialog.MessageDialog;
 import org.tizen.emulator.manager.vms.VMProperty;
 
@@ -67,6 +66,7 @@ public class MonitoringEmulator extends Thread {
        private StdOut stdErr = null;
        private boolean success = true;
 
+       @Override
        public void run() {
                if (process == null || property == null) {
                        return;
@@ -110,7 +110,7 @@ public class MonitoringEmulator extends Thread {
 
                                                @Override
                                                public void run() {
-                                                       VMsMainView.getInstance().redraw();
+                                                       // TODO
                                                        new MessageDialog()
                                                                        .openWarningDialog(Messages.getString("MonitoringEmulator.RunningError.0") //$NON-NLS-1$
                                                                                        + StringResources.NEW_LINE