All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wings.sdnd.TransferActionListener Maven / Gradle / Ivy

The newest version!
package org.wings.sdnd;

import org.wings.SComponent;
import org.wings.SButton;
import org.wings.LowLevelEventListener;
import org.wings.STextComponent;
import org.wings.script.JavaScriptListener;
import org.wings.script.JavaScriptEvent;
import org.wings.session.SessionManager;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TransferActionListener implements ActionListener, LowLevelEventListener {
    private SComponent focus;
    private final static String NAME = "datalistener";

    public TransferActionListener() {
        SessionManager.getSession().getDispatcher().register(this);
    }

    public static void installFocusListener(SComponent ... components) {
        for(SComponent component : components) {
            component.addScriptListener(getFocusListener(component));
        }
    }

    public static void installSendDataListener(SComponent ... components) {
        for(SComponent component : components) {
            component.addScriptListener(getSendDataListener(component));
        }
    }

    public static JavaScriptListener getFocusListener(SComponent component) {
        return new JavaScriptListener(JavaScriptEvent.ON_CLICK, "wingS.sdnd.focus('"+component.getName()+"');");
    }

    public static JavaScriptListener getSendDataListener(SComponent component) {
        return new JavaScriptListener(JavaScriptEvent.ON_MOUSE_DOWN, "wingS.sdnd.sendDataForClipboardAction('" + NAME + "')");
    }

    @Override
    public void processLowLevelEvent(String name, String... values) {
        if(values == null || values.length != 1)
            return;

        String[] vals = values[0].split(":");

        SComponent component = SessionManager.getSession().getComponentByName(vals[0]);
        this.focus = component;

        if(vals.length > 1 && component instanceof STextComponent) {
            STextComponent textComponent = (STextComponent)component;

            String[] selections = vals[1].split("-");
            if(selections.length > 1) {
                textComponent.setSelectionStart(Integer.parseInt(selections[0]));
                textComponent.setSelectionEnd(Integer.parseInt(selections[1]));
            } else {
                int position = Integer.parseInt(selections[0]);
                textComponent.setCaretPosition(position);
                textComponent.setSelectionStart(position);
                textComponent.setSelectionEnd(position);
            }
        }
    }

    @Override
    public String getLowLevelEventId() {
        return NAME;
    }

    @Override
    public String getName() {
        return NAME;
    }

    @Override
    public void fireIntermediateEvents() {
    }

    @Override
    public void fireFinalEvents() {
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    @Override
    public boolean isEpochCheckEnabled() {
        return false;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        SComponent focus = this.focus;
        if(focus == null)
            return;

        Object source = e.getSource();
        if(source instanceof SButton) {
            String text = ((SButton)source).getText();
            Action a = focus.getActionMap().get(text);
            if(a == null)
                return;

            a.actionPerformed(new ActionEvent(focus, ActionEvent.ACTION_PERFORMED, null));
        }
    }

    public SComponent getFocus() {
        return focus;
    }

    public void setFocus(SComponent focus) {
        this.focus = focus;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy