/** * Squidy Interaction Library is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * Squidy Interaction Library is distributed in the hope that it will be * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squidy Interaction Library. If not, see * <http://www.gnu.org/licenses/>. * * 2009 Human-Computer Interaction Group, University of Konstanz. * <http://hci.uni-konstanz.de> * * Please contact info@squidy-lib.de or visit our website * <http://www.squidy-lib.de> for further information. */ package org.squidy.nodes; import java.awt.event.KeyEvent; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; import org.squidy.manager.controls.ComboBox; import org.squidy.manager.controls.ComboBoxControl; import org.squidy.manager.data.IData; import org.squidy.manager.data.Processor; import org.squidy.manager.data.Property; import org.squidy.manager.data.Processor.Status; import org.squidy.manager.data.domainprovider.DomainProvider; import org.squidy.manager.data.impl.DataButton; import org.squidy.manager.data.impl.DataDigital; import org.squidy.manager.model.AbstractNode; /** * <code>AdvancedPowerpointControl</code>. * * <pre> * Date: Aug 20, 2009 * Time: 6:23:29 PM * </pre> * * * @author Roman R�dle <a * href="mailto:Roman.Raedle@uni-konstanz.de">Roman.Raedle * @uni-konstanz.de</a> Human-Computer Interaction Group University of Konstanz * * @version $Id: AdvancedPowerpointControl.java 772 2011-09-16 15:39:44Z raedle $ * @since 1.0.0 */ @XmlType(name = "AdvancedPowerpointControl") @Processor( name = "AdvancedPowerpointControl", icon = "/org/squidy/nodes/image/48x48/funnel.png", types = { Processor.Type.FILTER }, tags = {}, status = Status.UNSTABLE ) public class AdvancedPowerpointControl extends AbstractNode { // ################################################################################ // BEGIN OF PROPERTIES // ################################################################################ @XmlAttribute(name = "operating-system") @Property(name = "Operating System PowerPoint Application runs on") @ComboBox(domainProvider = OperatingSystemProvider.class) private String operatingSystem = "osx"; public String getOperatingSystem() { return operatingSystem; } public void setOperatingSystem(String operatingSystem) { this.operatingSystem = operatingSystem; } @XmlAttribute(name = "language") @Property(name = "Language of PowerPoint Application") @ComboBox(domainProvider = LanguageDomainProvider.class) private String language = "english"; /** * @return the language */ public final String getLanguage() { return language; } /** * @param language * the language to set */ public final void setLanguage(String language) { this.language = language; } /** * <code>OperatingSystemProvider</code>. * * <pre> * Date: Sep 16, 2009 * Time: 5:35:36 PM * </pre> * * * @author Roman R�dle <a * href="mailto:Roman.Raedle@uni-konstanz.de">Roman.Raedle * @uni-konstanz.de</a> Human-Computer Interaction Group University of * Konstanz * * @version $Id: AdvancedPowerpointControl.java 772 2011-09-16 15:39:44Z raedle $ * @since 1.0.0 */ public static class OperatingSystemProvider implements DomainProvider { // Operating system values. private static final Object[] VALUES = new Object[] { new ComboBoxControl.ComboBoxItemWrapper("osx", "OS X"), new ComboBoxControl.ComboBoxItemWrapper("windows", "Windows") }; /* * (non-Javadoc) * * @see * org.squidy.manager.data.domainprovider.DomainProvider#getValues * () */ public Object[] getValues() { return VALUES; } } /** * <code>LanguageDomainProvider</code>. * * <pre> * Date: Aug 24, 2009 * Time: 6:17:14 AM * </pre> * * * @author Roman R�dle <a * href="mailto:Roman.Raedle@uni-konstanz.de">Roman.Raedle * @uni-konstanz.de</a> Human-Computer Interaction Group University of * Konstanz * * @version $Id: AdvancedPowerpointControl.java 772 2011-09-16 15:39:44Z raedle $ * @since 1.0.0 */ public static class LanguageDomainProvider implements DomainProvider { // Language values. private static final Object[] VALUES = new Object[] { new ComboBoxControl.ComboBoxItemWrapper("english", "English"), new ComboBoxControl.ComboBoxItemWrapper("german", "German") }; /* * (non-Javadoc) * * @see * org.squidy.manager.data.domainprovider.DomainProvider#getValues * () */ public Object[] getValues() { return VALUES; } } // ################################################################################ // END OF PROPERTIES // ################################################################################ // ################################################################################ // BEGIN OF PROCESS // ################################################################################ public IData process(DataButton dataButton) { int keyCode = -1; switch (dataButton.getButtonType()) { case 0: keyCode = getModeKeyEvent(false); publish(new DataButton(AdvancedPowerpointControl.class, DataButton.BUTTON_1, false)); break; case 1: keyCode = getModeKeyEvent(true); publish(new DataButton(AdvancedPowerpointControl.class, DataButton.BUTTON_1, true)); break; case 2: break; default: break; } DataDigital ctrlDown = new DataDigital(AdvancedPowerpointControl.class, true); ctrlDown.setAttribute(Keyboard.KEY_EVENT, getModeKeyModifier()); publish(ctrlDown); try { Thread.sleep(100); } catch (InterruptedException e) { // ignore } DataDigital keyDown = new DataDigital(AdvancedPowerpointControl.class, true); keyDown.setAttribute(Keyboard.KEY_EVENT, keyCode); publish(keyDown); try { Thread.sleep(100); } catch (InterruptedException e) { // ignore } DataDigital keyUp = new DataDigital(AdvancedPowerpointControl.class, false); keyUp.setAttribute(Keyboard.KEY_EVENT, keyCode); publish(keyUp); try { Thread.sleep(100); } catch (InterruptedException e) { // ignore } DataDigital ctrlUp = new DataDigital(AdvancedPowerpointControl.class, false); ctrlUp.setAttribute(Keyboard.KEY_EVENT, getModeKeyModifier()); publish(ctrlUp); return null; } // ################################################################################ // END OF PROCESS // ################################################################################ /** * @param isPenActivated * @return */ private int getModeKeyEvent(boolean isPenActivated) { if (isPenActivated) { if ("english".equals(language)) { return KeyEvent.VK_A; } else if ("german".equals(language)) { return KeyEvent.VK_A; } } else { if ("english".equals(language)) { return KeyEvent.VK_P; } else if ("german".equals(language)) { return KeyEvent.VK_P; } } return -1; } /** * @return */ private int getModeKeyModifier() { if ("osx".equals(operatingSystem)) { return KeyEvent.VK_META; } else if ("windows".equals(operatingSystem)) { return KeyEvent.VK_CONTROL; } return -1; } /** * @reCopyOfPowerpointControlturn */ private int getEraseKeyEvent() { if ("english".equals(language)) { return KeyEvent.VK_E; } else if ("german".equals(language)) { return KeyEvent.VK_L; } return -1; } }