Table: add handling key event routine
authorjihye424.kim <jihye424.kim@samsung.com>
Mon, 12 Oct 2015 04:38:48 +0000 (13:38 +0900)
committerjihye424.kim <jihye424.kim@samsung.com>
Mon, 12 Oct 2015 04:38:48 +0000 (13:38 +0900)
- send key event to table from table item cell
- seperate last selected index and index table item arrangement

Change-Id: Ieb93f1016b4394b403c6df09148d7944df8876bb
Signed-off-by: jihye424.kim <jihye424.kim@samsung.com>
src/org/tizen/emulator/manager/ui/table/Table.java
src/org/tizen/emulator/manager/ui/table/TableItem.java
src/org/tizen/emulator/manager/ui/table/TableItemCell.java

index ba37f59..f4ef680 100644 (file)
@@ -65,8 +65,9 @@ public class Table extends TableScrolledComposite {
        private int[] selection;
        TableItem currentItem;
        private int itemCount;
-       // if selection count is one, this index is before selected index
        private int lastSelectedIndex = -1;
+       // if selection count is one, this index is before selected index
+       private int arrangementIndex = -1;
        private int focusIndex;
        private int topIndex = 0;
 
@@ -95,9 +96,13 @@ public class Table extends TableScrolledComposite {
        private int checkBoxWidth = CHECK_BOX_WIDTH;
        private CheckBoxButton checkBox;
 
+       private int style;
+
        public Table(Composite parent, int style) {
                super(parent, checkStyle(style));
 
+               this.style = checkStyle(style);
+
                table = new Composite(this, SWT.None);
                this.setContent(table);
 
@@ -180,6 +185,7 @@ public class Table extends TableScrolledComposite {
                itemCount = 0;
                selection = EMPTY_SELECTION;
                lastSelectedIndex = -1;
+               arrangementIndex = -1;
                if (isCheck) {
                        checkBox.setSelection(false);
                        checkBox.setEnabled(false);
@@ -198,6 +204,12 @@ public class Table extends TableScrolledComposite {
                return Helper.checkBits(result, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
        }
 
+       @Override
+       public int getStyle() {
+               checkWidget();
+               return style;
+       }
+
        public void clear(int index) {
                checkWidget ();
                if (!(0 <= index && index < itemCount)) {
@@ -347,6 +359,7 @@ public class Table extends TableScrolledComposite {
                selection = EMPTY_SELECTION;
                if (needRearrange) {
                        lastSelectedIndex = -1;
+                       arrangementIndex = -1;
                        rearrangeItems(-1);
                }
        }
@@ -482,7 +495,7 @@ public class Table extends TableScrolledComposite {
 
                if (selection.length == 1) {
                        int index = selection[0];
-                       if (lastSelectedIndex == -1) {
+                       if (arrangementIndex == -1) {
                                updateScrollBars(true);
                                items[index].updateSizeAndLocation(-1);
                                for (int i = index + 1; i < items.length; i ++) {
@@ -491,39 +504,43 @@ public class Table extends TableScrolledComposite {
                                        }
                                }
                        } else {
-                               if (lastSelectedIndex > index) {
-                                       if (lastSelectedIndex >= itemCount) {
-                                               lastSelectedIndex = itemCount -1;
+                               if (arrangementIndex > index) {
+                                       if (arrangementIndex >= itemCount) {
+                                               arrangementIndex = itemCount -1;
                                        }
                                        items[index].updateSizeAndLocation(-1);
-                                       items[lastSelectedIndex].updateSizeAndLocation(-1);
-                                       for (int i = index + 1; i < lastSelectedIndex; i ++) {
+                                       items[arrangementIndex].updateSizeAndLocation(-1);
+                                       for (int i = index + 1; i < arrangementIndex; i ++) {
                                                if (items[i] != null) {
                                                        items[i].updateLocation();
                                                }
                                        }
                                } else {
-                                       items[lastSelectedIndex].updateSizeAndLocation(-1);
+                                       items[arrangementIndex].updateSizeAndLocation(-1);
                                        items[index].updateSizeAndLocation(-1);
-                                       for (int i = lastSelectedIndex + 1; i < index; i ++) {
+                                       for (int i = arrangementIndex + 1; i < index; i ++) {
                                                if (items[i] != null) {
                                                        items[i].updateLocation();
                                                }
                                        }
                                }
                        }
+                       arrangementIndex = index;
                        lastSelectedIndex = index;
                } else {
-                       if (lastSelectedIndex > -1 && lastSelectedIndex < itemCount) {
+                       if (arrangementIndex > -1 && arrangementIndex < itemCount) {
                                updateScrollBars(true);
-                               items[lastSelectedIndex].updateSizeAndLocation(-1);
-                               for (int i = lastSelectedIndex + 1; i < items.length; i++) {
+                               items[arrangementIndex].updateSizeAndLocation(-1);
+                               for (int i = arrangementIndex + 1; i < items.length; i++) {
                                        if (items[i] != null) {
                                                items[i].updateLocation();
                                        }
                                }
                        }
-                       lastSelectedIndex = -1;
+                       arrangementIndex  = -1;
+                       if (selection.length > 1) {
+                               lastSelectedIndex = selection[selection.length - 1];
+                       }
                }
 
                showSelection();
@@ -621,25 +638,12 @@ public class Table extends TableScrolledComposite {
                if ((getStyle() & SWT.SINGLE) != 0
                                || (!isCtrlKeyOn && !isShiftKeyOn && !isAdd)) {
                        setSelection(index);
-               } else if (isShiftKeyOn) {
-                       if (selection.length > 0) {
-                               if (index > (selection[selection.length - 1])) {
-                                       setSelection(selection[selection.length - 1], index);
-                               } else {
-                                       setSelection(index, selection[selection.length - 1]);
-                               }
-                       } else {
-                               setSelection(index);
-                       }
-               } else if (isCtrlKeyOn || isAdd) {
+               } else if ((isCtrlKeyOn && !isShiftKeyOn) || isAdd) {
                        if (this.isSelected(index)) {
                                if (selection.length == 1) {
                                        this.deselect(index);
                                } else {
                                        this.deselect(index);
-                                       int[] newSelection = new int[selection.length];
-                                       System.arraycopy(selection, 0, newSelection, 0, selection.length);
-                                       setSelection(newSelection);
                                }
                        } else {
                                int length = selection != null ? selection.length : 0;
@@ -652,6 +656,16 @@ public class Table extends TableScrolledComposite {
                                        setSelection(newSelection);
                                }
                        }
+               }  else if (isShiftKeyOn) {
+                       if (selection.length > 0) {
+                               if (index > (selection[selection.length - 1])) {
+                                       setSelection(selection[selection.length - 1], index);
+                               } else {
+                                       setSelection(index, selection[selection.length - 1]);
+                               }
+                       } else {
+                               setSelection(index);
+                       }
                }
 
                Event e = new Event();
@@ -1300,10 +1314,10 @@ public class Table extends TableScrolledComposite {
                public void keyPressed(KeyEvent e) {
                        switch (e.keyCode) {
                        case SWT.CTRL:
-                               isCtrlKeyOn = true;
+                                       isCtrlKeyOn = true;
                                break;
                        case SWT.SHIFT:
-                               isShiftKeyOn = true;
+                                       isShiftKeyOn = true;
                                break;
                        default:
                                break;
@@ -1321,12 +1335,34 @@ public class Table extends TableScrolledComposite {
                                break;
                        case SWT.ARROW_UP:
                                if (lastSelectedIndex > 0) {
-                                       _select(lastSelectedIndex - 1);
+                                       int index = lastSelectedIndex - 1;
+                                       boolean isAdded = false;
+
+                                       if (selection.length > 1 && isSelected(index)) {
+                                               index = lastSelectedIndex;
+                                       }
+
+                                       if (isCtrlKeyOn || isShiftKeyOn) {
+                                               isAdded = true;
+                                       }
+
+                                       _select(index ,isAdded);
                                }
                                break;
                        case SWT.ARROW_DOWN:
-                               if (lastSelectedIndex > -1 && lastSelectedIndex < (itemCount-1)) {
-                                       _select(lastSelectedIndex + 1);
+                               if (lastSelectedIndex > -1 && lastSelectedIndex < itemCount - 1) {
+                                       int index = lastSelectedIndex + 1;
+                                       boolean isAdded = false;
+
+                                       if (selection.length > 1 && isSelected(index)) {
+                                               index = lastSelectedIndex;
+                                       }
+
+                                       if (isCtrlKeyOn || isShiftKeyOn) {
+                                               isAdded = true;
+                                       }
+
+                                       _select(index ,isAdded);
                                }
                                break;
                        default:
index 6f947f6..3e7d695 100644 (file)
@@ -144,8 +144,7 @@ public class TableItem extends Canvas {
                }
        }
 
-       @Override
-       public Table getParent() {
+       public Table getParentTable() {
                checkWidget();
                return parent;
        }
index b34a8f8..85ef28a 100644 (file)
@@ -31,6 +31,8 @@
 package org.tizen.emulator.manager.ui.table;
 
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.PaintEvent;
 import org.eclipse.swt.events.PaintListener;
 import org.eclipse.swt.graphics.GC;
@@ -55,6 +57,7 @@ class TableItemCell extends Composite {
 
                this.addPaintListener(patinListener);
                this.addListener(SWT.MouseDown, eventListener);
+               this.addKeyListener(controlKeyEvent);
        }
 
        private Listener eventListener = new Listener() {
@@ -62,7 +65,7 @@ class TableItemCell extends Composite {
                public void handleEvent(Event event) {
                        switch(event.type) {
                        case SWT.MouseDown:
-                               item.getParent()._select(item.getIndex());
+                               item.getParentTable()._select(item.getIndex());
                                if (event.button == 3) { // right button
                                        event.data = item;
                                        item.notifyListeners(SWT.MouseDown, event);
@@ -91,10 +94,10 @@ class TableItemCell extends Composite {
 
                        Point imageSize = new Point(0, 0);
                        Image image = null;
-                       boolean isSelected = item.getParent().isSelected(item.getIndex());
+                       boolean isSelected = item.getParentTable().isSelected(item.getIndex());
 
                        if (isSelected) {
-                               if (item.getParent().getSelectionCount() == 1) {
+                               if (item.getParentTable().getSelectionCount() == 1) {
                                        image = item.getSelectedImage(index);
                                } else {
                                        image = item.getImage(index);
@@ -129,7 +132,7 @@ class TableItemCell extends Composite {
                                data.drawingTextWidth = TextSizeUtil.textExtent(getFont(), drawingText);
                        }
 
-                       switch(item.getParent().getColumn(index).getAlignment()) {
+                       switch(item.getParentTable().getColumn(index).getAlignment()) {
                        case SWT.LEFT:
                                imageX += (image != null ? 5 : 0);
                                textX += imageX + imageSize.x + 5;
@@ -165,7 +168,42 @@ class TableItemCell extends Composite {
                        gc.setLineWidth(1);
                        gc.drawLine(rect.width - 1, 0, rect.width -1, rect.height);
                }
+       };
 
+       private KeyAdapter controlKeyEvent = new KeyAdapter() {
+               @ Override
+               public void keyPressed(KeyEvent e) {
+
+                       switch (e.keyCode) {
+                       case SWT.CTRL:
+                       case SWT.SHIFT:
+                               Event event = new Event();
+                               event.type = SWT.KeyDown;
+                               event.keyCode = e.keyCode;
+                               item.getParent().notifyListeners(SWT.KeyDown, event);
+                               break;
+                       default:
+                               break;
+                       }
+
+               }
 
+               @ Override
+               public void keyReleased(KeyEvent e) {
+                       switch (e.keyCode) {
+                       case SWT.CTRL:
+                       case SWT.SHIFT:
+                       case SWT.ARROW_UP:
+                       case SWT.ARROW_DOWN:
+                               Event event = new Event();
+                               event.type = SWT.KeyUp;
+                               event.keyCode = e.keyCode;
+                               item.getParent().notifyListeners(SWT.KeyUp, event);
+                               break;
+                       default:
+                               break;
+                       }
+
+               }
        };
 }