/**
* Դ�������ƣ�TreeViewerBlock.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ���Ҷ��
*/
package com.hundsun.ares.studio.ui.editor.blocks;
import java.util.Map;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ColumnViewerEditor;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.dialogs.FilteredTree;
import org.eclipse.ui.forms.widgets.FormToolkit;
import com.hundsun.ares.studio.ui.editor.decorators.EnterForNewLineTreeViewerBlockDecorator;
import com.hundsun.ares.studio.ui.editor.viewers.ColumnViewerPatternFilter;
/**
* @author gongyf
*
*/
public abstract class TreeViewerBlock extends ColumnViewerBlock<TreeViewer> {
//����һ�������˿�ı��
protected TreeViewer doCreateColumnViewer(Composite parent, FormToolkit toolkit) {
FilteredTree tree = new FilteredTree(parent, FormWidgetUtils.getDefaultTreeStyles(), new ColumnViewerPatternFilter(), true) {
/* (non-Javadoc)
* @see org.eclipse.ui.dialogs.FilteredTree#getRefreshJobDelay()
*/
@Override
protected long getRefreshJobDelay() {
return getColumnViewer().getTree().getItemCount() / 40 + 100;
}
};
// TASK #8541 ����ӿ�������������������Ϣʱ�������붨λ������
// 2013-10-15 sundl ���������˫���༭, Ĭ�ϵĻᴥ������չ���¼������²��ܱ༭��
// ��һ�δ�����Խ���˫��չ�������ԡ��ο�http://www.eclipse.org/forums/index.php/t/257325/
tree.getViewer().getControl().addListener(SWT.MeasureItem, new Listener() {
@Override
public void handleEvent(Event event) {
}
});
// ������δ�����Դﵽ���Ƶ�Ч������ͬ���ǣ����������ֹչ�������ԣ�Ҳ����˫�����Լ���CellEditor��ͬʱҲ��չ����
// tree.getViewer().addOpenListener(new IOpenListener() {
// @Override
// public void open(OpenEvent event) {
// }
// });
toolkit.adapt(tree);
tree.getViewer().getTree().setHeaderVisible(true);
tree.getViewer().getTree().setLinesVisible(true);
tree.setFont(JFaceResources.getTextFont());
return tree.getViewer();
}
@Override
protected void restoreState(IDialogSettings settings) {
super.restoreState(settings);
TreeViewer viewer = getColumnViewer();
{
// �ָ��п�����
String[] savedWidthes = settings.getArray(SAVED_WIDTHES);
if (savedWidthes != null) {
int[] saved = new int[savedWidthes.length];
for (int i = 0; i < savedWidthes.length; i++) {
saved[i] = Integer.parseInt(savedWidthes[i]);
}
if (viewer.getTree().getColumns().length == saved.length) {
for (int i=0;i<saved.length;i++) {
viewer.getTree().getColumns()[i].setWidth(saved[i]);
}
}
} else {
// û�б�����Զ�ʹ���������
for (TreeColumn column : viewer.getTree().getColumns()) {
//2013��5��14��14:06:33 �������г�ʼ�Զ���ֵ����ʹ�ó�ʼֵ
if(column.getWidth() <= 0){
column.pack();
}
}
}
}
{
// �ָ���˳��
String[] savedOrder = settings.getArray(SAVED_COLUMNS);
if (savedOrder != null) {
int[] saved = new int[savedOrder.length];
for (int i = 0; i < savedOrder.length; i++) {
saved[i] = Integer.parseInt(savedOrder[i]);
}
if (saved.length > 0 && saved.length == viewer.getTree().getColumns().length) {
viewer.getTree().setColumnOrder(saved);
}
}
}
}
@Override
protected void storeState(IDialogSettings settings) {
super.storeState(settings);
{
// ������
TreeColumn[] columns = getColumnViewer().getTree().getColumns();
String[] widthes = new String[columns.length];
for (int i = 0; i < columns.length; i++) {
widthes[i] = String.valueOf(columns[i].getWidth());
}
settings.put(SAVED_WIDTHES, widthes);
}
{
// ������
int[] order = getColumnViewer().getTree().getColumnOrder();
String[] strOrder = new String[order.length];
for (int i = 0; i < order.length; i++) {
strOrder[i] = String.valueOf(order[i]);
}
settings.put(SAVED_COLUMNS, strOrder);
}
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#configureColumnViewer(org.eclipse.jface.viewers.ColumnViewer)
*/
@Override
protected void configureColumnViewer(final TreeViewer viewer) {
TreeViewerEditor.create(viewer, createColumnViewerEditorActivationStrategy(viewer),
ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR);
super.configureColumnViewer(viewer);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#configureDecorators(java.util.Map)
*/
@Override
protected void configureDecorators(
Map<String, IColumnViewerBlockDecorator<TreeViewer>> decorators) {
super.configureDecorators(decorators);
decorators.put(EnterForNewLineTreeViewerBlockDecorator.ID, new EnterForNewLineTreeViewerBlockDecorator());
}
}