/**
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
*/
package com.hundsun.ares.studio.ui.editor.decorators;
import org.apache.commons.lang.ArrayUtils;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.widgets.TreeItem;
import com.hundsun.ares.studio.ui.editor.actions.IActionIDConstant;
import com.hundsun.ares.studio.ui.editor.blocks.ColumnViewerBlock;
import com.hundsun.ares.studio.ui.editor.blocks.ColumnViewerBlockDecorator;
/**
*
* �س����ƶ�����һ�У��������ĩ�������ָ��������Action
* @author gongyf
*
*/
public class EnterForNewLineTreeViewerBlockDecorator extends
ColumnViewerBlockDecorator<TreeViewer> {
public final static String ID = EnterForNewLineTreeViewerBlockDecorator.class.getName();
private int editIndex = 0;
/**
* @return the editIndex
*/
public int getEditIndex() {
return editIndex;
}
/**
* @param editIndex the editIndex to set
*/
public void setEditIndex(int editIndex) {
this.editIndex = editIndex;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlockDecorator#decorateViewer(com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock, org.eclipse.jface.viewers.ColumnViewer)
*/
@Override
public void decorateViewer(final ColumnViewerBlock<TreeViewer> block,
final TreeViewer viewer) {
viewer.getTree().addKeyListener(new KeyListener() {
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if (e.keyCode == '\r' && viewer.getTree().getSelectionCount() == 1) {
TreeItem[] items = viewer.getTree().getSelection();
if (ArrayUtils.isNotEmpty(items)) {
// ������һ��
TreeItem nextItem = null;
TreeItem[] subItems = items[0].getItems();
if (items[0].getExpanded() && ArrayUtils.isNotEmpty(subItems) ) {
nextItem = subItems[0];
} else if (items[0].getParentItem() == null) {
int index = viewer.getTree().indexOf(items[0]);
if (index < viewer.getTree().getItemCount() - 1) {
nextItem = viewer.getTree().getItem(index + 1);
}
} else {
int index = items[0].getParentItem().indexOf(items[0]);
if (index < items[0].getParentItem().getItemCount() - 1) {
nextItem = items[0].getParentItem().getItem(index + 1);
}
}
if (nextItem == null) {
// ���һ��
IAction action = block.getActionRegistry().getAction(IActionIDConstant.CV_ADD);
if (action != null && action.isEnabled()) {
action.run();
// viewer.refresh();
// viewer.editElement(viewer.getTree().getItem(viewer.getTree().getItemCount() - 1).getData(), getEditIndex());
}
} else {
viewer.getTree().setSelection(nextItem);
// ��Ҫviewr��controlͬ��
viewer.setSelection(viewer.getSelection());
}
}
}
}
});
}
}