/** * */ package com.hangum.tadpole.rdb.core.viewers.object.sub.rdb.table; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.widgets.Composite; /** * @author nilriri * */ public class CommentCellEditor extends TextCellEditor { private TableViewer viewer = null; private int column = -1; /** * */ public CommentCellEditor() { } /** * @param parent */ public CommentCellEditor(Composite parent) { super(parent); } /** * @param parent */ public CommentCellEditor(int column, TableViewer viewer) { super(viewer.getTable()); this.viewer = viewer; this.column = column; } /** * @param parent * @param style */ public CommentCellEditor(Composite parent, int style) { super(parent, style); } @Override protected void keyReleaseOccured(KeyEvent keyEvent) { super.keyReleaseOccured(keyEvent); if (keyEvent.keyCode == SWT.ARROW_UP) { if (-1 < viewer.getTable().getSelectionIndex()){ Object element = viewer.getElementAt(viewer.getTable().getSelectionIndex() - 1); if (element != null){ viewer.editElement(element, column); } else { element = viewer.getElementAt(viewer.getTable().getItemCount() - 1); viewer.editElement(element, column); } } }else if (keyEvent.keyCode == SWT.ARROW_DOWN) { if (viewer.getTable().getItemCount() > viewer.getTable().getSelectionIndex()){ Object element = viewer.getElementAt(viewer.getTable().getSelectionIndex() + 1); if (element != null){ viewer.editElement(element, column); } else { element = viewer.getElementAt(0); viewer.editElement(element, column); } } }else if (keyEvent.keyCode == SWT.ARROW_LEFT) { if (column > 0) { Object element = viewer.getElementAt(viewer.getTable().getSelectionIndex()); viewer.editElement(element, column - 1); // 이동하려는 컬럼이 수정불가능한 cell일 경우 이동하지 않는다. // TODO : viewer에서 column 인덱스를 이용해 수정가능한 컬럼인지 확인하는 방법이 있으면.... // EditingSupport의 canEdit()정보를 이용할 수 없나?? if(!viewer.isCellEditorActive()) viewer.editElement(element, column); } } else if (keyEvent.keyCode == SWT.ARROW_RIGHT) { if (column < viewer.getTable().getColumnCount() - 1){ Object element = viewer.getElementAt(viewer.getTable().getSelectionIndex()); viewer.editElement(element, column + 1); // 이동하려는 컬럼이 수정불가능한 cell일 경우 이동하지 않는다. // TODO : viewer에서 column 인덱스를 이용해 수정가능한 컬럼인지 확인하는 방법이 있으면.... // EditingSupport의 canEdit()정보를 이용할 수 없나?? if(!viewer.isCellEditorActive()) viewer.editElement(element, column); } } } }