package eu.jucy.ui.smileys;
import java.util.Map.Entry;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import eu.jucy.gui.texteditor.UCTextEditor;
public class OpenSmileyDialogHandler extends AbstractHandler implements
IHandler {
public Object execute(ExecutionEvent event) throws ExecutionException {
final Shell shell = new Shell(
HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell(),
SWT.SHELL_TRIM |SWT.TOOL);
shell.setLayout(new FillLayout());
final ScrolledComposite scrollComposite = new ScrolledComposite(shell, SWT.H_SCROLL | SWT.V_SCROLL);
final Composite parent = new Composite(scrollComposite, SWT.NONE);
GridLayout rl = new GridLayout();
rl.horizontalSpacing = 1;
rl.verticalSpacing = 1;
rl.numColumns = (int) Math.sqrt(SmileyTextModificator.getImages().size());
parent.setLayout(rl);
SmileyPoster sp = new SmileyPoster(shell);
scrollComposite.setContent(parent);
scrollComposite.setExpandVertical(true);
scrollComposite.setExpandHorizontal(true);
scrollComposite.addControlListener(new ControlAdapter() {
public void controlResized(ControlEvent e) {
Rectangle r = scrollComposite.getClientArea();
scrollComposite.setMinSize(parent.computeSize(r.width, SWT.DEFAULT));
}
});
for (Entry<Integer,String> e: SmileyTextModificator.getSmileyToCorrespondingText()) {
final ToolBar toolBar = new ToolBar (parent, SWT.FLAT);
toolBar.setLayoutData(new GridData());
ToolItem item = new ToolItem (toolBar, SWT.PUSH);
item.setData(e.getValue());
item.setImage (SmileyTextModificator.getImages().get(e.getKey())[0]);
item.addSelectionListener(sp);
}
shell.pack();
shell.open();
scrollComposite.pack();
scrollComposite.setMinSize(parent.getSize());
return null;
}
private static class SmileyPoster extends SelectionAdapter {
private final Shell shell;
private SmileyPoster(Shell shell){
this.shell = shell;
}
@Override
public void widgetSelected(SelectionEvent e) {
String smiley = (String)(e.item != null? e.item.getData(): e.widget.getData());
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IEditorPart part = window.getActivePage().getActiveEditor();
if (part instanceof UCTextEditor) {
((UCTextEditor)part).getWriteline().insert(" "+smiley+" ");
shell.close();
}
}
}
}