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;
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);
itemCount = 0;
selection = EMPTY_SELECTION;
lastSelectedIndex = -1;
+ arrangementIndex = -1;
if (isCheck) {
checkBox.setSelection(false);
checkBox.setEnabled(false);
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)) {
selection = EMPTY_SELECTION;
if (needRearrange) {
lastSelectedIndex = -1;
+ arrangementIndex = -1;
rearrangeItems(-1);
}
}
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 ++) {
}
}
} 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();
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;
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();
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;
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:
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;
this.addPaintListener(patinListener);
this.addListener(SWT.MouseDown, eventListener);
+ this.addKeyListener(controlKeyEvent);
}
private Listener eventListener = new Listener() {
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);
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);
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;
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;
+ }
+
+ }
};
}