package org.geogebra.web.web.cas.view;
import org.geogebra.common.cas.view.CASInputHandler;
import org.geogebra.common.cas.view.MarbleRenderer;
import org.geogebra.common.kernel.geos.GeoCasCell;
import org.geogebra.web.html5.main.AppW;
import org.geogebra.web.web.gui.images.AppResources;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
public class RowHeaderWidget extends VerticalPanel implements MarbleRenderer {
private Image marble;
private boolean oldValue;
private RowHeaderHandler handler;
public RowHeaderWidget(CASTableW casTableW, int n, GeoCasCell cell, AppW app) {
Label label = new Label();
label.setText(n + "");
marble = new Image(AppResources.INSTANCE.hidden());
oldValue = false;
add(label);
add(marble);
if (cell != null) {
CASInputHandler.handleMarble(cell, this);
}
marble.addClickHandler(new MarbleClickHandler(cell, this));
// instead of here, from now on the whole of header areas should
// handle this event, so this is moved to CASTableCellControllerW
// but still, create the RowHeaderHandler for quick implementation
// addDomHandler(
handler = new RowHeaderHandler(app, casTableW, this);
// , MouseUpEvent.getType());
}
public RowHeaderHandler getHandler() {
return handler;
}
public void setLabel(String text) {
((Label) (getWidget(0))).setText(text);
}
public int getIndex() {
return Integer.parseInt(((Label) (getWidget(0))).getText()) - 1;
}
@Override
public void setMarbleValue(boolean value) {
if (value == oldValue) {
return;
}
marble.setUrl(value ? AppResources.INSTANCE.shown().getSafeUri()
: AppResources.INSTANCE.hidden().getSafeUri());
oldValue = value;
}
@Override
public void setMarbleVisible(boolean visible) {
marble.setVisible(visible);
}
protected static class MarbleClickHandler implements ClickHandler {
private GeoCasCell cell;
private RowHeaderWidget rowHeaderWidget;
protected MarbleClickHandler(GeoCasCell cell,
RowHeaderWidget rowHeaderWidget) {
this.cell = cell;
this.rowHeaderWidget = rowHeaderWidget;
}
@Override
public void onClick(ClickEvent event) {
cell.toggleTwinGeoEuclidianVisible();
CASInputHandler.handleMarble(cell, rowHeaderWidget);
event.stopPropagation();
}
}
}