From 80587ac5dff8e889fb4d35d1458ba0cdb5d4558c Mon Sep 17 00:00:00 2001 From: "jihye424.kim" Date: Mon, 12 Oct 2015 13:38:48 +0900 Subject: [PATCH] Table: add handling key event routine - 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 --- src/org/tizen/emulator/manager/ui/table/Table.java | 100 ++++++++++++++------- .../tizen/emulator/manager/ui/table/TableItem.java | 3 +- .../emulator/manager/ui/table/TableItemCell.java | 46 +++++++++- 3 files changed, 111 insertions(+), 38 deletions(-) diff --git a/src/org/tizen/emulator/manager/ui/table/Table.java b/src/org/tizen/emulator/manager/ui/table/Table.java index ba37f59..f4ef680 100644 --- a/src/org/tizen/emulator/manager/ui/table/Table.java +++ b/src/org/tizen/emulator/manager/ui/table/Table.java @@ -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: diff --git a/src/org/tizen/emulator/manager/ui/table/TableItem.java b/src/org/tizen/emulator/manager/ui/table/TableItem.java index 6f947f6..3e7d695 100644 --- a/src/org/tizen/emulator/manager/ui/table/TableItem.java +++ b/src/org/tizen/emulator/manager/ui/table/TableItem.java @@ -144,8 +144,7 @@ public class TableItem extends Canvas { } } - @Override - public Table getParent() { + public Table getParentTable() { checkWidget(); return parent; } diff --git a/src/org/tizen/emulator/manager/ui/table/TableItemCell.java b/src/org/tizen/emulator/manager/ui/table/TableItemCell.java index b34a8f8..85ef28a 100644 --- a/src/org/tizen/emulator/manager/ui/table/TableItemCell.java +++ b/src/org/tizen/emulator/manager/ui/table/TableItemCell.java @@ -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; + } + + } }; } -- 2.7.4