Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/IInteraction.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/IInteraction.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/IInteraction.java	(revision 544)
@@ -0,0 +1,33 @@
+// Module    : $RCSfile: Interaction.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 10:26:33 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+import de.ugoe.cs.quest.eventcore.IEventType;
+
+/**
+ * <p>
+ * An interaction is a special event type which represents the interaction of a user with an
+ * element of a GUI. An example is a mouse click on a button.
+ * </p>
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+// -------------------------------------------------------------------------------------------------
+public interface IInteraction extends IEventType
+{
+    /**
+     * @return
+     */
+    public boolean startsLogicalSequence();
+
+    /**
+     * @return
+     */
+    public boolean finishesLogicalSequence();
+
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/InteractionEventList.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/InteractionEventList.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/InteractionEventList.java	(revision 544)
@@ -0,0 +1,234 @@
+// Module    : $RCSfile: InteractionEventList.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 04.12.2011 10:20:14 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import de.ugoe.cs.quest.eventcore.Event;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+@SuppressWarnings("serial")
+public class InteractionEventList extends ArrayList<Event> implements List<Event> {
+    /** stores the events to be handled later in the order, they should be processed */
+    private List<KeyEventPair> mEventPairs = new ArrayList<KeyEventPair>();
+
+    /**
+     * this method sorts interaction events for pressed keys. The reason is, that sometimes the
+     * release of one key comes after the pressing of the succeeding key. This only makes sense for
+     * shift, ctrl or alt keys, but not for usual characters. So the events are sorted.<br/>
+     * Furthermore, this methods creates key released events in the specific case, where a key is
+     * pressed for a long time. Here, many subsequent key pressed events for the same key can be
+     * observed, for which there are no key released events.
+     */
+    @Override
+    public boolean add(Event event) {
+        if (event.getType() instanceof KeyInteraction) {
+            for (int i = 0; i < mEventPairs.size(); i++) {
+                KeyEventPair eventPair = mEventPairs.get(i);
+
+                if (eventPair.process(event)) {
+                    // handle all leading and completed event pairs, if any
+                    while ((mEventPairs.size() > 0) && (mEventPairs.get(0).isComplete())) {
+                        addEventPair(mEventPairs.get(0));
+                        mEventPairs.remove(0);
+                    }
+                    return true;
+                }
+            }
+
+            mEventPairs.add(new KeyEventPair(event));
+            return true;
+        }
+        else {
+            // any other event is simply added
+            return super.add(event);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.util.ArrayList#add(int, java.lang.Object)
+     */
+    @Override
+    public void add(int index, Event event) {
+        List<Event> remaining = new ArrayList<Event>();
+
+        while (index < super.size()) {
+            remaining.add(super.remove(index));
+        }
+
+        add(event);
+        addAll(remaining);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.util.ArrayList#addAll(java.util.Collection)
+     */
+    @Override
+    public boolean addAll(Collection<? extends Event> events) {
+        int initialSize = super.size();
+
+        for (Event event : events) {
+            add(event);
+        }
+
+        return initialSize != super.size();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.util.ArrayList#addAll(int, java.util.Collection)
+     */
+    @Override
+    public boolean addAll(int index, Collection<? extends Event> events) {
+        int initialSize = super.size();
+
+        List<Event> remaining = new ArrayList<Event>();
+
+        while (index < super.size()) {
+            remaining.add(super.remove(index));
+        }
+
+        addAll(events);
+        addAll(remaining);
+
+        return initialSize != super.size();
+    }
+
+    /**
+     *
+     */
+    private void addEventPair(KeyEventPair eventPair) {
+        super.add(eventPair.mFirst);
+
+        for (KeyEventPair child : eventPair.mChildren) {
+            addEventPair(child);
+        }
+
+        super.add(eventPair.mSecond);
+    }
+
+    /**
+     *
+     */
+    private static class KeyEventPair {
+        
+        /** the first key interaction event */
+        private Event mFirst;
+
+        /** the second key interaction event */
+        private Event mSecond;
+
+        /** the children, this event pair may have */
+        private List<KeyEventPair> mChildren = new ArrayList<KeyEventPair>();
+
+        /**
+         *
+         */
+        private KeyEventPair(Event first) {
+            if (!(first.getType() instanceof KeyPressed)) {
+                throw new IllegalArgumentException
+                  ("can only handle key pressed interaction events as first element of an" +
+                   "event pair");
+            }
+            mFirst = first;
+        }
+
+        /**
+         * sorts the event as the second of the pair or as the closing of this. Returns true, if
+         * this matched, false else
+         */
+        private boolean process(Event event) {
+            if (!(event.getType() instanceof KeyInteraction)) {
+                throw new IllegalArgumentException("can only handle key interaction events");
+            }
+
+            if (this.isComplete()) {
+                // do not process events, if there are no more events expected
+                return false;
+            }
+
+            if ((event.getType() instanceof KeyReleased) &&
+                (((KeyInteraction) mFirst.getType()).getKey() ==
+                 ((KeyInteraction) event.getType()).getKey()) &&
+                 (mSecond == null))
+            {
+                // this is the release of the represented key. Store it and notify the processing.
+                mSecond = event;
+                return true;
+            }
+            else if ((event.getType() instanceof KeyPressed) &&
+                (((KeyInteraction) mFirst.getType()).getKey() ==
+                 ((KeyInteraction) event.getType()).getKey()) &&
+                 (mSecond == null))
+            {
+                // the key was pressed before it was released again. This happens, if the key
+                // stays pressed for a long time. Generate a key released event but do not mark
+                // the new event as processed
+                mSecond = new Event
+                    (new KeyReleased(((KeyInteraction) event.getType()).getKey()),
+                     mFirst.getTarget());
+                
+                return false;
+            }
+            else if (((KeyInteraction) mFirst.getType()).getKey().isCombinationKey() &&
+                     (((KeyInteraction) mFirst.getType()).getKey() !=
+                      ((KeyInteraction) event.getType()).getKey()))
+            {
+                // this pair may have children. Let the event be processed by the children. If this
+                // doesn't work, add the event as a new child pair, if it is a new key pressed
+
+                for (KeyEventPair child : mChildren) {
+                    if (child.process(event)) {
+                        return true;
+                    }
+                }
+
+                if (event.getType() instanceof KeyPressed) {
+                    mChildren.add(new KeyEventPair(event));
+                    return true;
+                }
+                else {
+                    return false;
+                }
+            }
+            else {
+                // this pair may not have children
+                return false;
+            }
+        }
+
+        /**
+         * @return
+         */
+        private boolean isComplete() {
+            if ((mFirst != null) && (mSecond != null)) {
+                for (KeyEventPair child : mChildren) {
+                    if (!child.isComplete()) {
+                        return false;
+                    }
+                }
+
+                return true;
+            }
+            else {
+                return false;
+            }
+        }
+    }
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyInteraction.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyInteraction.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyInteraction.java	(revision 544)
@@ -0,0 +1,40 @@
+// Module    : $RCSfile: Click.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 10:28:39 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+import de.ugoe.cs.tasktree.keyboardmaps.VirtualKey;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public abstract class KeyInteraction implements IInteraction {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /** the key, that was actually pressed */
+    private VirtualKey mKey;
+
+    /**
+     * @param key
+     */
+    public KeyInteraction(VirtualKey key) {
+        super();
+        mKey = key;
+    }
+
+    /**
+     * 
+     */
+    public VirtualKey getKey() {
+        return mKey;
+    }
+
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyPressed.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyPressed.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyPressed.java	(revision 544)
@@ -0,0 +1,82 @@
+// Module    : $RCSfile: Click.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 10:28:39 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+import de.ugoe.cs.tasktree.keyboardmaps.VirtualKey;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class KeyPressed extends KeyInteraction {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @param key
+     */
+    public KeyPressed(VirtualKey key) {
+        super(key);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#getName()
+     */
+    public String getName() {
+        return "KeyPressed " + super.getKey();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "pressing key " + super.getKey();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#startsLogicalSequence()
+     */
+    public boolean startsLogicalSequence() {
+        // TODO handle lock keys correctly
+        return super.getKey().isCombinationKey();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#finishesLogicalSequence()
+     */
+    public boolean finishesLogicalSequence() {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object other) {
+        if (other instanceof KeyPressed) {
+            return (super.getKey() == ((KeyPressed) other).getKey());
+        }
+        else {
+            return false;
+        }
+    }
+
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyReleased.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyReleased.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyReleased.java	(revision 544)
@@ -0,0 +1,82 @@
+// Module    : $RCSfile: Click.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 10:28:39 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+import de.ugoe.cs.tasktree.keyboardmaps.VirtualKey;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class KeyReleased extends KeyInteraction {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @param key
+     */
+    public KeyReleased(VirtualKey key) {
+        super(key);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#getName()
+     */
+    public String getName() {
+        return "KeyReleased " + super.getKey();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "releasing key " + super.getKey();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#startsLogicalSequence()
+     */
+    public boolean startsLogicalSequence() {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#finishesLogicalSequence()
+     */
+    public boolean finishesLogicalSequence() {
+        // TODO handle lock keys correctly
+        return super.getKey().isCombinationKey();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object other) {
+        if (other instanceof KeyReleased) {
+            return (super.getKey() == ((KeyReleased) other).getKey());
+        }
+        else {
+            return false;
+        }
+    }
+
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyboardFocusChange.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyboardFocusChange.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyboardFocusChange.java	(revision 544)
@@ -0,0 +1,58 @@
+// Module    : $RCSfile: FocusChange.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 27.11.2011 18:11:29 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class KeyboardFocusChange implements IInteraction {
+    
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#getName()
+     */
+    public String getName() {
+        return "KeyboardFocusChange";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.userinteraction.Interaction#startsLogicalSequence()
+     */
+    @Override
+    public boolean startsLogicalSequence() {
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.userinteraction.Interaction#finishesLogicalSequence()
+     */
+    @Override
+    public boolean finishesLogicalSequence() {
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "keyboard focus changed";
+    }
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonDown.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonDown.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonDown.java	(revision 544)
@@ -0,0 +1,86 @@
+// Module    : $RCSfile: Click.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 10:28:39 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class MouseButtonDown extends MouseButtonInteraction {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @param button
+     */
+    public MouseButtonDown(Button button) {
+        super(button);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#getName()
+     */
+    public String getName() {
+        if (super.getButton() == Button.LEFT) {
+            return "LeftMouseButtonDown";
+        }
+        else if (super.getButton() == Button.MIDDLE) {
+            return "MiddleMouseButtonDown";
+        }
+        else if (super.getButton() == Button.RIGHT) {
+            return "RightMouseButtonDown";
+        }
+        else {
+            return "UnknownMouseButtonDown";
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        if (super.getButton() == Button.LEFT) {
+            return "left mouse button down";
+        }
+        else if (super.getButton() == Button.MIDDLE) {
+            return "middle mouse button down";
+        }
+        else if (super.getButton() == Button.RIGHT) {
+            return "right mouse button down";
+        }
+        else {
+            return "unknown mouse button down";
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#startsLogicalSequence()
+     */
+    public boolean startsLogicalSequence() {
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#finishesLogicalSequence()
+     */
+    public boolean finishesLogicalSequence() {
+        return false;
+    }
+
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonInteraction.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonInteraction.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonInteraction.java	(revision 544)
@@ -0,0 +1,42 @@
+// Module    : $RCSfile: MouseButtonInteraction.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 18.12.2011 10:06:29 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public abstract class MouseButtonInteraction extends MouseInteraction {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /** */
+    public static enum Button {
+        LEFT, MIDDLE, RIGHT;
+    }
+
+    /** the button used for mouse interaction */
+    private Button mButton;
+
+    /**
+     * 
+     */
+    public MouseButtonInteraction(Button button) {
+        mButton = button;
+    }
+
+    /**
+     * @return Returns the button.
+     */
+    public Button getButton() {
+        return mButton;
+    }
+
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonUp.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonUp.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonUp.java	(revision 544)
@@ -0,0 +1,86 @@
+// Module    : $RCSfile: Click.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 10:28:39 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class MouseButtonUp extends MouseButtonInteraction {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @param button
+     */
+    public MouseButtonUp(Button button) {
+        super(button);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#getName()
+     */
+    public String getName() {
+        if (super.getButton() == Button.LEFT) {
+            return "LeftMouseButtonUp";
+        }
+        else if (super.getButton() == Button.MIDDLE) {
+            return "MiddleMouseButtonUp";
+        }
+        else if (super.getButton() == Button.RIGHT) {
+            return "RightMouseButtonUp";
+        }
+        else {
+            return "UnknownMouseButtonUp";
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        if (super.getButton() == Button.LEFT) {
+            return "left mouse button up";
+        }
+        else if (super.getButton() == Button.MIDDLE) {
+            return "middle mouse button up";
+        }
+        else if (super.getButton() == Button.RIGHT) {
+            return "right mouse button up";
+        }
+        else {
+            return "unknown mouse button up";
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#startsLogicalSequence()
+     */
+    public boolean startsLogicalSequence() {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#finishesLogicalSequence()
+     */
+    public boolean finishesLogicalSequence() {
+        return true;
+    }
+
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseClick.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseClick.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseClick.java	(revision 544)
@@ -0,0 +1,86 @@
+// Module    : $RCSfile: Click.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 10:28:39 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class MouseClick extends MouseButtonInteraction {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @param button
+     */
+    public MouseClick(Button button) {
+        super(button);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#getName()
+     */
+    public String getName() {
+        if (super.getButton() == Button.LEFT) {
+            return "LeftMouseClick";
+        }
+        else if (super.getButton() == Button.MIDDLE) {
+            return "MiddleMouseClick";
+        }
+        else if (super.getButton() == Button.RIGHT) {
+            return "RightMouseClick";
+        }
+        else {
+            return "UnknownMouseButtonClick";
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        if (super.getButton() == Button.LEFT) {
+            return "left mouse click";
+        }
+        else if (super.getButton() == Button.MIDDLE) {
+            return "middle mouse click";
+        }
+        else if (super.getButton() == Button.RIGHT) {
+            return "right mouse click";
+        }
+        else {
+            return "unknown mouse button click";
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#startsLogicalSequence()
+     */
+    public boolean startsLogicalSequence() {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#finishesLogicalSequence()
+     */
+    public boolean finishesLogicalSequence() {
+        return false;
+    }
+
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseInteraction.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseInteraction.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseInteraction.java	(revision 544)
@@ -0,0 +1,20 @@
+// Module    : $RCSfile: Click.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 10:28:39 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public abstract class MouseInteraction implements IInteraction {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextInput.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextInput.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextInput.java	(revision 544)
@@ -0,0 +1,57 @@
+// Module    : $RCSfile: TextSelection.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 27.11.2011 18:11:29 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class TextInput implements IInteraction {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#getName()
+     */
+    public String getName() {
+        return "TextInput";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "text input";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#startsLogicalSequence()
+     */
+    public boolean startsLogicalSequence() {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#finishesLogicalSequence()
+     */
+    public boolean finishesLogicalSequence() {
+        return false;
+    }
+
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextSelection.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextSelection.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextSelection.java	(revision 544)
@@ -0,0 +1,57 @@
+// Module    : $RCSfile: TextSelection.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 27.11.2011 18:11:29 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class TextSelection implements IInteraction {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#getName()
+     */
+    public String getName() {
+        return "TextSelection";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "text selection";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#startsLogicalSequence()
+     */
+    public boolean startsLogicalSequence() {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#finishesLogicalSequence()
+     */
+    public boolean finishesLogicalSequence() {
+        return false;
+    }
+
+}
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/ValueSelection.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/ValueSelection.java	(revision 544)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/ValueSelection.java	(revision 544)
@@ -0,0 +1,96 @@
+// Module    : $RCSfile: TextSelection.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 27.11.2011 18:11:29 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.eventcore.gui;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class ValueSelection<T> implements IInteraction {
+    
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /** */
+    private T mSelectedValue;
+
+    /**
+     * TODO: comment
+     * 
+     * @param selectedValue
+     */
+    public ValueSelection(T selectedValue) {
+        mSelectedValue = selectedValue;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#getName()
+     */
+    public String getName() {
+        return "ValueSelection";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "select value";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#startsLogicalSequence()
+     */
+    public boolean startsLogicalSequence() {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#finishesLogicalSequence()
+     */
+    public boolean finishesLogicalSequence() {
+        return false;
+    }
+
+    /**
+     * @return the selectedValue
+     */
+    public T getSelectedValue() {
+        return mSelectedValue;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if ((obj == null) || (!(obj instanceof ValueSelection<?>))) {
+            return false;
+        }
+
+        ValueSelection<?> otherValueSelection = (ValueSelection<?>) obj;
+
+        return
+            ((otherValueSelection != null) &&
+             ((mSelectedValue == otherValueSelection.mSelectedValue) ||
+              ((mSelectedValue != null) &&
+               (mSelectedValue.equals(otherValueSelection.mSelectedValue)))));
+    }
+
+}
