/**
* <p>Copyright: Copyright (c) 2009</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.ui.control;
import org.eclipse.jface.fieldassist.ContentProposalAdapter;
import org.eclipse.jface.fieldassist.IContentProposalListener2;
import org.eclipse.jface.fieldassist.IControlContentAdapter;
import org.eclipse.jface.fieldassist.SimpleContentProposalProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Text;
import com.hundsun.ares.studio.ui.assist.SimpleContentProposalAdapter;
/**
* TEXT������ʾ���.
* @author caizx
* @version 1.0
* @history
*/
public class TextContentAssist extends Text {
private boolean popupOpen;
private SimpleContentProposalProvider proposalProvider;
/**
* @return the proposalProvider
*/
public SimpleContentProposalProvider getProposalProvider() {
return proposalProvider;
}
/**
* @param proposalProvider the proposalProvider to set
*/
public void setProposalProvider(SimpleContentProposalProvider proposalProvider) {
this.proposalProvider = proposalProvider;
}
protected SimpleContentProposalAdapter adapter;
public TextContentAssist(Composite parent, int style) {
this(parent,style,new String[]{});
}
/**
* @param parent ������
* @param style ��ʽ
* @param items �������
*/
public TextContentAssist(Composite parent, int style, String[] items) {
super(parent, style);
proposalProvider = new SimpleContentProposalProvider(new String[0]);
String[] propsalsWithInfo = new String[items.length];
for(int i = 0; i < items.length; i++) {
propsalsWithInfo[i] = items[i];
}
proposalProvider.setProposals(propsalsWithInfo);
proposalProvider.setFiltering(true);
adapter = new SimpleContentProposalAdapter(this, new MyControlContentAdapter(), proposalProvider, null, null);
adapter.setPropagateKeys(true);
adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE);
adapter.addContentProposalListener(new IContentProposalListener2() {
public void proposalPopupClosed(ContentProposalAdapter adapter) {
Event e = new Event();
e.data = new Boolean(false);
}
public void proposalPopupOpened(ContentProposalAdapter adapter) {
Event e = new Event();
e.data = new Boolean(true);
}
});
this.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
if(e.character=='/' && e.stateMask==SWT.ALT){
adapter.openProposalPopup();
}
}
});
}
@Override
protected void checkSubclass() {
// TODO Auto-generated method stub
//super.checkSubclass();
}
public void setProposals(String[] proposals) {
proposalProvider.setProposals(proposals);
}
private class MyControlContentAdapter implements IControlContentAdapter {
public String getControlContents(Control control) {
return ((Text) control).getText();
}
public int getCursorPosition(Control control) {
return ((Text) control).getCaretPosition();
}
public Rectangle getInsertionBounds(Control control) {
Text text = (Text) control;
Point caretOrigin = text.getCaretLocation();
return new Rectangle(caretOrigin.x, caretOrigin.y, 1, text.getLineHeight());
}
public void insertControlContents(Control control, String text, int cursorPosition) {
Point selection = ((Text) control).getSelection();
((Text) control).insert(text);
if (cursorPosition < text.length()) {
((Text) control).setSelection(selection.x + cursorPosition, selection.x + cursorPosition);
}
}
public void setControlContents(Control control, String text, int cursorPosition) {
String s = text;
((Text) control).setText(s);
((Text) control).setSelection(cursorPosition, cursorPosition);
}
public void setCursorPosition(Control control, int position) {
((Text) control).setSelection(new Point(position, position));
}
}
/**
* @return the popupOpen
*/
public boolean isPopupOpen() {
return popupOpen;
}
}