blobData , boolean finished , boolean check);
}
diff --git a/ICEExperiments/src/main/java/ch/unifr/pai/ice/client/utils/PositioningUtils.java b/ICEExperiments/src/main/java/ch/unifr/pai/ice/client/utils/PositioningUtils.java
index 65ec977..a8861e1 100644
--- a/ICEExperiments/src/main/java/ch/unifr/pai/ice/client/utils/PositioningUtils.java
+++ b/ICEExperiments/src/main/java/ch/unifr/pai/ice/client/utils/PositioningUtils.java
@@ -15,11 +15,12 @@
* limitations under the License.
*/
public class PositioningUtils {
+
public static int[][] getPositionsInCircle(int nbElements, int xCenter, int yCenter, int radius) {
- int nbPos = (nbElements == 0) ? 2 : nbElements;
+ int nbPos = (nbElements == 0) ? 2 : nbElements;
// check if nbPos is even
- nbPos = (nbPos % 2 == 0) ? nbPos : nbPos + 1;
+ nbPos = (nbPos % 2 == 0) ? nbPos : nbPos + 1; //nbPos is always even
int[][] blobPos = new int[nbPos][2];
int dAngle = 360 / nbPos;
@@ -35,20 +36,20 @@ public static int[][] getPositionsInCircle(int nbElements, int xCenter, int yCen
blobPos[1][1] = yCenter + radius;
for (int i = 2; i < nbPos; i = i + 2) {
- angle = angle + dAngle;
-
+ angle = angle + dAngle;
if (angle < 90) {
x = radius * Math.sin(Math.toRadians(angle));
y = radius * Math.cos(Math.toRadians(angle));
- blobPos[i][0] = (int) (xCenter + x);
- blobPos[i][1] = (int) (yCenter - y);
+ blobPos[i][0] = (int) (xCenter + x);
+ blobPos[i][1] = (int) (yCenter - y);
blobPos[i + 1][0] = (int) (xCenter - x);
blobPos[i + 1][1] = (int) (yCenter + y);
}
else if (angle == 90) {
+
blobPos[i][0] = xCenter + radius;
blobPos[i][1] = (yCenter);
blobPos[i + 1][0] = xCenter - radius;
@@ -56,7 +57,7 @@ else if (angle == 90) {
}
else if (angle > 90) {
-
+
x = radius * Math.cos(Math.toRadians(angle - 90));
y = radius * Math.sin(Math.toRadians(angle - 90));
@@ -69,4 +70,6 @@ else if (angle > 90) {
return blobPos;
}
+
+
}
diff --git a/ICEExperiments/src/main/java/ch/unifr/pai/ice/server/EventingServiceImpl.java b/ICEExperiments/src/main/java/ch/unifr/pai/ice/server/EventingServiceImpl.java
index 0924b4b..9e1d43a 100644
--- a/ICEExperiments/src/main/java/ch/unifr/pai/ice/server/EventingServiceImpl.java
+++ b/ICEExperiments/src/main/java/ch/unifr/pai/ice/server/EventingServiceImpl.java
@@ -33,15 +33,17 @@
import ch.unifr.pai.ice.client.tracking.CursorXY;
import ch.unifr.pai.ice.client.utils.ResultAnalyzer;
import ch.unifr.pai.ice.shared.ExperimentIdentifier;
+import ch.unifr.pai.twice.multipointer.commons.client.rpc.MouseControllerService;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
@WebServlet("/icetexteditgwt/logger")
+
public class EventingServiceImpl extends RemoteServiceServlet implements EventingService {
private static final long serialVersionUID = 1L;
Logger experimentLog = Logger.getLogger("experiment");
-
+
// Logger log1 = Logger.getLogger("experiment1"); // Text Entry
// Logger log2 = Logger.getLogger("experiment2"); // Text Entry
// Logger log3 = Logger.getLogger("experiment3"); // Text Entry
@@ -70,7 +72,8 @@ public class EventingServiceImpl extends RemoteServiceServlet implements Eventin
public void log(String experimentId, String[] message, ExperimentIdentifier experimentName, int numberOfUsers) {
// initText(text);
for (String m : message) {
- experimentLog.info(experimentId + "; " + experimentName.name() + "; " + numberOfUsers + "; " + m);
+ experimentLog.info(experimentId + "; " + experimentName.name() + "; " + numberOfUsers + "; " + m);
+
}
// // process the text input received from the user
@@ -189,30 +192,30 @@ public void log(String experimentId, String[] message, ExperimentIdentifier expe
// break;
//
// case 4: {
- // log4.info("Click blobs 1 users");
- // log4.info("Session of " + new Date());
- // log4.info("user; Xcoord; Ycoord; TimeStamp (ms)");
- // log4.info("-------------------------------------------------");
- //
- // for (String s : message) {
- // log4.info(s);
- // }
- // log4.info("-------------------------------------------------");
+// log4.info("Click blobs 1 users");
+// log4.info("Session of " + new Date());
+// log4.info("user; Xcoord; Ycoord; TimeStamp (ms)");
+// log4.info("-------------------------------------------------");
+//
+// for (String s : message) {
+// log4.info(s);
+// }
+// log4.info("-------------------------------------------------");
//
// break;
// }
//
// case 5:
- // log5.info("Click blobs 2 users");
- // log5.info("Session of " + new Date());
- // log5.info("user; Xcoord; Ycoord; TimeStamp (ms)");
- // log5.info("-------------------------------------------------");
- //
- // for (String s : message) {
- // log5.info(s);
- // }
- // log5.info("-------------------------------------------------");
- //
+// log5.info("Click blobs 2 users");
+// log5.info("Session of " + new Date());
+// log5.info("user; Xcoord; Ycoord; TimeStamp (ms)");
+// log5.info("-------------------------------------------------");
+//
+// for (String s : message) {
+// log5.info(s);
+// }
+// log5.info("-------------------------------------------------");
+//
// break;
//
// case 6:
diff --git a/ICEExperiments/src/main/java/ch/unifr/pai/ice/shared/ExperimentIdentifier.java b/ICEExperiments/src/main/java/ch/unifr/pai/ice/shared/ExperimentIdentifier.java
index baaf6e9..98682a1 100644
--- a/ICEExperiments/src/main/java/ch/unifr/pai/ice/shared/ExperimentIdentifier.java
+++ b/ICEExperiments/src/main/java/ch/unifr/pai/ice/shared/ExperimentIdentifier.java
@@ -1,6 +1,8 @@
package ch.unifr.pai.ice.shared;
-import java.io.Serializable;
+//import java.io.Serializable;
+import com.google.gwt.user.client.rpc.IsSerializable;
+
/*
* Copyright 2013 Pascal Bruegger
@@ -16,6 +18,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-public enum ExperimentIdentifier implements Serializable {
+public enum ExperimentIdentifier implements IsSerializable {
CLICKBLOB, DRAGNDROP, DRAGNDROPSPACES, TEXTEDIT, TEXTEDITSPACES, TRACKING;
}
diff --git a/MPProxy/src/main/java/ch/unifr/pai/twice/widgets/mpProxyScreenShot/ScreenShot.gwt.xml b/MPProxy/src/main/java/ch/unifr/pai/twice/widgets/mpProxyScreenShot/ScreenShot.gwt.xml
index ce49764..c42573d 100644
--- a/MPProxy/src/main/java/ch/unifr/pai/twice/widgets/mpProxyScreenShot/ScreenShot.gwt.xml
+++ b/MPProxy/src/main/java/ch/unifr/pai/twice/widgets/mpProxyScreenShot/ScreenShot.gwt.xml
@@ -16,6 +16,9 @@
-->
+
+
+
\ No newline at end of file
diff --git a/MPProxy/src/main/java/ch/unifr/pai/twice/widgets/mpProxyScreenShot/client/Viewer.java b/MPProxy/src/main/java/ch/unifr/pai/twice/widgets/mpProxyScreenShot/client/Viewer.java
index 788f31f..95e6f50 100644
--- a/MPProxy/src/main/java/ch/unifr/pai/twice/widgets/mpProxyScreenShot/client/Viewer.java
+++ b/MPProxy/src/main/java/ch/unifr/pai/twice/widgets/mpProxyScreenShot/client/Viewer.java
@@ -1,4 +1,5 @@
package ch.unifr.pai.twice.widgets.mpProxyScreenShot.client;
+
/*
* Copyright 2013 Oliver Schmid
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,43 +14,208 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+import ch.unifr.pai.twice.multipointer.controller.client.TouchPadWidget;
+import ch.unifr.pai.twice.multipointer.provider.client.MultiCursorController;
+import ch.unifr.pai.twice.multipointer.provider.client.NoMultiCursorController;
+import ch.unifr.pai.twice.multipointer.provider.client.widgets.MultiFocusTextBox;
+import ch.unifr.pai.twice.utils.device.client.DeviceType;
+import com.google.gwt.user.client.Window;
import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Style.Display;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
+import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Timer;
-import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.RootLayoutPanel;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.DockLayoutPanel;
+
import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.TextArea;
+import com.google.gwt.user.client.ui.VerticalPanel;
+
public class Viewer implements EntryPoint {
+ Element preparationStage;
+
+ // SplitLayoutPanel browserSplit = new SplitLayoutPanel();
+ // String previousHTML = ""; //
+
+ TextArea ta = new TextArea();
+ Button addButton = new Button("Add"); // Add
+ Button scrollDown = new Button("▼"); // Down
+ Button scrollUp = new Button("▲"); // Up
+ int count = 0;
+
+ static int height;
+ static int width;
+
+ static int top;
+ static int left;
+
+ MultiFocusTextBox textBox = new MultiFocusTextBox();
+
+ VerticalPanel vPanel = new VerticalPanel();
+ DockLayoutPanel panel = new DockLayoutPanel(Unit.PX);
+ HorizontalPanel hPanel = new HorizontalPanel();
+ DockLayoutPanel scrollBar = new DockLayoutPanel(Unit.PX);
+
+ String oldValue = " ";
+ String newValue = " ";
+
@Override
public void onModuleLoad() {
- Timer t = new Timer(){
-
- @Override
- public void run() {
- try {
- RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, Window.Location.getProtocol()+"//"+Window.Location.getHost()+"/miceScreenShot/manager");
- rb.sendRequest(null, new RequestCallback() {
-
- @Override
- public void onResponseReceived(Request request, Response response) {
- RootPanel.getBodyElement().setInnerHTML(response.getText());
- }
-
- @Override
- public void onError(Request request, Throwable exception) {
- }
- } );
- } catch (RequestException e) {
- e.printStackTrace();
+
+ if (DeviceType.getDeviceType() == DeviceType.MULTICURSOR) {
+
+ MultiCursorController multiCursor = GWT
+ .create(NoMultiCursorController.class);
+ multiCursor.start();
+
+ height = Window.getClientHeight();
+ width = Window.getClientWidth();
+ left = RootPanel.get().getAbsoluteLeft();
+ top = RootPanel.get().getAbsoluteTop();
+
+ scrollBar.getElement().getStyle().setBackgroundColor("lightgrey");
+ scrollBar.addNorth(scrollUp, 30);
+ scrollBar.addSouth(scrollDown, 30);
+
+ textBox.setVisible(true);
+ textBox.setWidth("100%");
+ hPanel.add(textBox);
+ hPanel.add(addButton);
+ hPanel.setCellWidth(addButton, "52px");
+ hPanel.setWidth("100%");
+
+ ta.setVisibleLines(150);
+ ta.setHeight("100%");
+ ta.setWidth("100%");
+ ta.getElement().getStyle().setFontSize(12, Unit.PX);
+
+ panel.addSouth(hPanel, 30);
+ panel.addEast(scrollBar, 26);
+ panel.add(ta);
+
+ panel.setSize(width / 2 + "px", height / 2 + "px");
+
+ preparationStage = DOM.createDiv();
+ preparationStage.getStyle().setDisplay(Display.NONE);
+
+ RootPanel.get("chatbox").add(panel, width / 2, height / 2);
+
+ addButton.addClickHandler(new ClickHandler() {
+
+ @Override
+ public void onClick(ClickEvent event) {
+ count++;
+
+ String color = textBox.getTextColor();
+ String username = "";
+
+ if (color.equalsIgnoreCase("#1a1a1a")) {
+ username = "User1";
+ }
+ if (color.equalsIgnoreCase("#ff0000")) {
+ username = "User2";
+ }
+ if (color.equalsIgnoreCase("#336aa6")) {
+ username = "User3";
+ }
+
+ double time = System.currentTimeMillis();
+
+ newValue = username + ": " + textBox.getValue()
+ + " @" + time;
+ ta.setValue(oldValue + '\n' + newValue);
+ oldValue = oldValue + '\n' + newValue;
+ textBox.setValue("");
+
+ if (count >= 13) { // number of lines in ta
+ ta.getElement().setScrollTop(ta.getElement().getScrollTop() + 20); // auto scroll down
+
+ }
+
+ }
+ });
+
+ scrollDown.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+
+ if (ta.getElement() != null) {
+ ta.getElement().setScrollTop(
+ Math.min(ta.getElement().getScrollHeight(), ta
+ .getElement().getScrollTop() + 20));
+ }
+ }
+ });
+
+ scrollUp.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+
+ if (ta.getElement() != null) {
+ ta.getElement().setScrollTop(Math.max(0, ta.getElement().getScrollTop() - 20));
+ }
+ }
+ });
+
+ Timer t = new Timer() {
+
+ @Override
+ public void run() {
+ try {
+
+ RequestBuilder rb = new RequestBuilder(
+ RequestBuilder.GET, GWT.getHostPageBaseURL()+ "miceScreenShot/manager");
+
+ rb.sendRequest(null, new RequestCallback() {
+
+ @Override
+ public void onResponseReceived(Request request,
+ Response response) {
+ // if(!response.getText().equals(previousHTML)){}
+
+ RootPanel.get("screenshotArea").getElement().setInnerHTML(preparationStage.getInnerHTML());
+ RootPanel.get("screenshotArea").getElement().appendChild(preparationStage);
+
+ preparationStage.setInnerHTML(response.getText());
+ // previousHTML = response.getText();
+ // RootPanel.getBodyElement().setInnerHTML(response.getText());
+ }
+
+ @Override
+ public void onError(Request request,Throwable exception) {
+ }
+ });
+ } catch (RequestException e) {
+ e.printStackTrace();
+ }
}
- }};
- t.scheduleRepeating(2000);
-
+ };
+ // t.run();
+ t.scheduleRepeating(6000); // 6sc
+
+ }
+
+ else {
+ TouchPadWidget touchPad = GWT.create(TouchPadWidget.class);
+ RootLayoutPanel.get().add(touchPad);
+ // touchPad.initialize(UUID.get(), null, null);
+ touchPad.start();
+ }
}
}
diff --git a/MPProxy/src/main/java/ch/unifr/pai/twice/widgets/mpProxyScreenShot/server/ReadOnlyPresentation.java b/MPProxy/src/main/java/ch/unifr/pai/twice/widgets/mpProxyScreenShot/server/ReadOnlyPresentation.java
index 2fbd096..4cda65a 100644
--- a/MPProxy/src/main/java/ch/unifr/pai/twice/widgets/mpProxyScreenShot/server/ReadOnlyPresentation.java
+++ b/MPProxy/src/main/java/ch/unifr/pai/twice/widgets/mpProxyScreenShot/server/ReadOnlyPresentation.java
@@ -36,7 +36,8 @@
public class ReadOnlyPresentation extends HttpServlet {
private static final long serialVersionUID = 1L;
- private static double scaleFactor = 0.25;
+ private static double scaleFactor = 0.5;
+ private static double scrollFactor = 0.65;
private static class Screenshot {
private String html;
@@ -66,10 +67,10 @@ public static String getScreenshotForUUID(String uuid) {
Screenshot s = uuidToScreenshot.get(uuid);
String html = s.html;
html = html.replace("", "");
- html = html.replaceAll("", "");
- html = html.replace("
", "");
- html = html.replace("