share-updates/src/main/java/org/gcube/portlets/user/shareupdates/client/form/MyTextArea.java

111 lines
2.7 KiB
Java

/**
*
*/
package org.gcube.portlets.user.shareupdates.client.form;
import java.util.ArrayList;
import org.gcube.portlets.user.shareupdates.client.dialog.PickUsersDialog;
import org.gcube.portlets.user.shareupdates.client.elements.Div;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.MultiWordSuggestOracle;
import com.google.gwt.user.client.ui.SuggestOracle.Callback;
import com.google.gwt.user.client.ui.SuggestOracle.Request;
import com.google.gwt.user.client.ui.SuggestOracle.Response;
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
/**
* @author massi
*
*/
public class MyTextArea extends Div {
final MultiWordSuggestOracle oracle = new MultiWordSuggestOracle();
int limit = 10;
void showSuggestions(String query) {
if (query.length() > 0) {
oracle.requestSuggestions(new Request(query, limit), new Callback() {
public void onSuggestionsReady(Request request, Response response) {
for (Suggestion s : response.getSuggestions()) {
GWT.log("s:"+s.getReplacementString());
}
}
});
}
}
PickUsersDialog pickUserDlg = new PickUsersDialog();
/**
*
*/
public MyTextArea() {
sinkEvents(Event.ONPASTE);
sinkEvents(Event.ONCONTEXTMENU);
sinkEvents(Event.ONKEYUP);
ArrayList<String> users = new ArrayList<String>();
users.add("Massi");
users.add("Gino");
users.add("Marco");
users.add("Franco");
users.add("Anna");
users.add("Antonio");
pickUserDlg.fill(users);
oracle.add("Massi");
oracle.add("Gino");
oracle.add("Marco");
oracle.add("Franco");
oracle.add("Anna");
oracle.add("Antonio");
}
/**
* paste event overridden
*/
public void onBrowserEvent(Event event) {
super.onBrowserEvent(event);
switch (event.getTypeInt()) {
case Event.ONPASTE: {
final String before = getText();
GWT.log("BEFORE:" + before);
Timer t = new Timer() {
@Override
public void run() {
String toCheck = getText().replaceAll(before, "");
ShareUpdateForm.get().checkLink(toCheck);
}
};
t.schedule(100);
break;
}
case Event.ONCONTEXTMENU: {
removeSampleText();
break;
}
case Event.ONKEYUP: {
final String before = getText();
//showSuggestions(before);
if (before.endsWith("@")) { //the only way i found to intercept @
pickUserDlg.setPopupPosition(this.getAbsoluteLeft(), this.getAbsoluteTop()+65);
pickUserDlg.show();
}
break;
}
}
}
protected void removeSampleText() {
if (getText().equals(ShareUpdateForm.SHARE_UPDATE_TEXT) || getText().equals(ShareUpdateForm.ERROR_UPDATE_TEXT) ) {
setText("");
addStyleName("dark-color");
removeStyleName("error");
}
}
}