table: add composite to table item cell
authorjihye424.kim <jihye424.kim@samsung.com>
Wed, 18 Nov 2015 10:41:47 +0000 (19:41 +0900)
committerjihye424.kim <jihye424.kim@samsung.com>
Wed, 18 Nov 2015 10:41:47 +0000 (19:41 +0900)
- old: add image, text to table item cell
- new: add (image, text) or (composite, text) to table item cell
-- can not add image and composite together to same item cell

Change-Id: I17edb31aa4fbcb59175b0946ad49704093ba887a
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/ui/table/TableItemCell.java

index 5f83e47..ba2584d 100644 (file)
@@ -51,6 +51,7 @@ import org.tizen.emulator.manager.ui.renewal.dialoghandler.VMModifyHandler;
 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.ui.widgets.ImageButton;
 import org.tizen.emulator.manager.vms.SKIN_SHAPE;
 import org.tizen.emulator.manager.vms.VMProperty;
 import org.tizen.emulator.manager.vms.VMPropertyValue;
@@ -243,11 +244,31 @@ public class VMListTable {
                                                : "");
                item.setText(4, value.baseImage.getName());
                item.setText(5, value.resolution.getStrTypeValue());
-               if (value.fileSharePath == null ||  value.fileSharePath.isEmpty()) {
-                       item.setImage(6, ImageResources.ICON_FILE_SHARE_OFF.getImage());
+
+               // add file sharing button
+               ImageButton button = null;
+               if (item.getComposite(6) == null) {
+                       button = this.makeFileSharingButton(item);
+                       item.setComposite(6, button);
                } else {
-                       item.setImage(6, ImageResources.ICON_FILE_SHARE_ON.getImage());
+                       button = (ImageButton)item.getComposite(6);
                }
+
+               if (button != null) {
+                       button.setData(value);
+                       if (value.fileSharePath == null ||  value.fileSharePath.isEmpty()) {
+                               button.setEnabled(false);
+                       } else {
+                               button.setEnabled(true);
+                       }
+               } else {
+                       if (value.fileSharePath == null ||  value.fileSharePath.isEmpty()) {
+                               item.setImage(6, ImageResources.ICON_FILE_SHARE_OFF.getImage());;
+                       } else {
+                               item.setImage(6, ImageResources.ICON_FILE_SHARE_ON.getImage());
+                       }
+               }
+
                item.setData(property);
 
                settingToolTip(item, property);
@@ -309,9 +330,36 @@ public class VMListTable {
                if (value.fileSharePath != null && !value.fileSharePath.isEmpty()) {
                        String fileTip ="Path : " + value.fileSharePath;
                        item.setToolTipText(6, fileTip);
+                       if (item.getComposite(6) != null) {
+                               item.getComposite(6).setToolTipText(fileTip);
+                       }
                }
        }
 
+       private ImageButton makeFileSharingButton(TableItem item) {
+               ImageButton button = new ImageButton(item.getItemCell(6), SWT.PUSH);
+               button.setSize(18, 18);
+               button.setImages(ImageResources.ICON_FILE_SHARE_ON.getImage(),
+                               ImageResources.ICON_FILE_SHARE_ON.getImage(),
+                               ImageResources.ICON_FILE_SHARE_ON.getImage(),
+                               ImageResources.ICON_FILE_SHARE_OFF.getImage());
+               button.addListener(SWT.Selection, new Listener(){
+                       @Override
+                       public void handleEvent(Event event) {
+                               VMPropertyValue value = (VMPropertyValue)event.widget.getData();
+                               if (value == null) {
+                                       return;
+                               }
+
+                               if (value.fileSharePath != null || !value.fileSharePath.isEmpty()) {
+                                       org.eclipse.swt.program.Program.launch(value.fileSharePath);
+                               }
+                       }
+               });
+
+               return button;
+       }
+
        public void modifyEmulator() {
                if (table.getSelectionCount() != 1) {
                        return;
index 20b6c4f..f6f58a2 100644 (file)
@@ -43,6 +43,7 @@ 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.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Menu;
@@ -51,6 +52,7 @@ import org.tizen.emulator.manager.EmulatorManager;
 class TableItemData {
        String text = "";
        Image image;
+       Composite composite;
        Image selectedImage;
        Font font;
        Color backgroundColor;
@@ -149,6 +151,17 @@ public class TableItem extends Canvas {
                return parent;
        }
 
+       public Composite getItemCell(int index) {
+               checkWidget();
+               if (!parent.checkData(this, parent.indexOf(this))) {
+                       SWT.error(SWT.ERROR_WIDGET_DISPOSED);
+               }
+               if (hasData(index)) {
+                       return dataList[index].itemCanvas;
+               }
+               return null;
+       }
+
        @Override
        public void setBackground(Color color) {
                checkWidget();
@@ -543,6 +556,32 @@ public class TableItem extends Canvas {
                return "";
        }
 
+       public void setComposite(int index, Composite comp) {
+               checkWidget();
+               if (comp == null) {
+                       SWT.error(SWT.ERROR_NULL_ARGUMENT);
+               }
+
+               int count = Math.max(1, parent.getColumnCount());
+               if (index >= 0 && index < count) {
+                       ensureData(index, count);
+                       dataList[index].composite = comp;
+                       parent.redraw();
+               }
+
+       }
+
+       public Composite getComposite(int index) {
+               checkWidget();
+               if (!parent.checkData(this, parent.indexOf(this))) {
+                       SWT.error(SWT.ERROR_WIDGET_DISPOSED);
+               }
+               if (hasData(index)) {
+                       return dataList[index].composite;
+               }
+               return null;
+       }
+
        public void setToolTipText (int index, String text) {
                checkWidget();
                if (text == null) {
index 9bb08c4..3d9ed13 100644 (file)
@@ -89,13 +89,15 @@ class TableItemCell extends Composite {
 
                        GC gc = e.gc;
                        Rectangle rect = ((Composite)e.widget).getClientArea();
-                       int imageX = rect.x;
+                       int itemX = rect.x;
                        int textX  = rect.x;
-                       int imageY = rect.y;
+                       int itemY = rect.y;
                        int textY  = rect.y;
 
-                       Point imageSize = new Point(0, 0);
+                       Point itemSize = new Point(0, 0);
                        Image image = null;
+                       Composite comp = item.getComposite(index);
+                       boolean hasItem = false;
                        boolean isSelected = item.getParentTable().isSelected(item.getIndex());
 
                        if (isSelected) {
@@ -113,15 +115,24 @@ class TableItemCell extends Composite {
                        gc.fillRectangle(rect.x, rect.y, rect.width, rect.height);
 
                        if (image != null) {
-                               imageSize = new Point(image.getImageData().width,
+                               hasItem = true;
+                               itemSize = new Point(image.getImageData().width,
                                                                        image.getImageData().height);
+                       } else if (comp != null){
+                               hasItem = true;
+                               itemSize = comp.getSize();
+                               if (isSelected) {
+                                       comp.setBackground(item.getSelectedBackground());
+                               } else {
+                                       comp.setBackground(item.getBackground());
+                               }
                        }
 
                        String drawingText = data.drawingText;
                        if (data.needRedrawingText) {
                                drawingText = item.getText(index);
                                int textWidth = TextSizeUtil.stringExtend(getFont(), drawingText).x;
-                               if (textWidth > (rect.width - imageSize.x - 10)) {
+                               if (textWidth > (rect.width - itemSize.x - 10)) {
                                        while((textWidth > (rect.width - 10) - TextSizeUtil.OMITLEN)
                                                        && drawingText.length() > 1) {
                                                drawingText = drawingText.substring(0, drawingText.length() - 1);
@@ -134,30 +145,33 @@ class TableItemCell extends Composite {
                                data.drawingTextWidth = TextSizeUtil.stringExtend(getFont(), drawingText).x;
                        }
 
-                       int spacing = image != null ? 5 : 0;
+                       int spacing = hasItem ? 5 : 0;
                        switch(item.getParentTable().getColumn(index).getAlignment()) {
                        case SWT.LEFT:
-                               imageX += (image != null ? 5 : 0);
-                               textX += imageX + imageSize.x + spacing;
+                               itemX += (hasItem ? 5 : 0);
+                               textX += itemX + itemSize.x + spacing;
                                break;
                        case SWT.RIGHT:
-                               imageX += (image != null
-                                               ? rect.width - imageSize.x - data.drawingTextWidth - 10
+                               itemX += (hasItem
+                                               ? rect.width - itemSize.x - data.drawingTextWidth - 10
                                                : rect.width - data.drawingTextWidth - 10);
-                               textX += imageX + imageSize.x + spacing;
+                               textX += itemX + itemSize.x + spacing;
                                break;
                        case SWT.CENTER:
-                               imageX += (image != null
-                                               ? (rect.width - imageSize.x - data.drawingTextWidth) / 2
+                               itemX += (hasItem
+                                               ? (rect.width - itemSize.x - data.drawingTextWidth) / 2
                                                : (rect.width - data.drawingTextWidth) / 2);
-                               textX += imageX + imageSize.x + spacing;
+                               textX += itemX + itemSize.x + spacing;
                                break;
                        default:
                        }
 
                        if (image != null) {
-                               imageY = rect.y + ((rect.height - imageSize.y)/2);
-                               gc.drawImage(image, imageX, imageY);
+                               itemY = rect.y + ((rect.height - itemSize.y)/2);
+                               gc.drawImage(image, itemX, itemY);
+                       } else if (comp != null) {
+                               itemY = rect.y + ((rect.height - itemSize.y)/2);
+                               comp.setBounds(itemX, itemY, itemSize.x, itemSize.y);
                        }
 
                        if (data.text != null && !data.text.isEmpty()) {