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

org.geomajas.graphics.client.controller.ExternalizableLabeledController Maven / Gradle / Ivy

The newest version!
/*
 * This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
 *
 * Copyright 2008-2014 Geosparc nv, http://www.geosparc.com/, Belgium.
 *
 * The program is available in open source according to the Apache
 * License, Version 2.0. All contributions in this program are covered
 * by the Geomajas Contributors License Agreement. For full licensing
 * details, see LICENSE.txt in the project root.
 */
package org.geomajas.graphics.client.controller;

import org.geomajas.graphics.client.event.GraphicsObjectContainerEvent;
import org.geomajas.graphics.client.event.GraphicsOperationEvent;
import org.geomajas.graphics.client.object.GraphicsObject;
import org.geomajas.graphics.client.object.role.ExternalizableLabeled;
import org.geomajas.graphics.client.object.role.Labeled;
import org.geomajas.graphics.client.operation.AddOperation;
import org.geomajas.graphics.client.operation.LabelOperation;
import org.geomajas.graphics.client.operation.RemoveOperation;
import org.geomajas.graphics.client.operation.ToggleExternalizableLabelOperation;
import org.geomajas.graphics.client.service.AbstractGraphicsController;
import org.geomajas.graphics.client.service.GraphicsService;

/**
 * Controller to change object's {ExternalizableLabeled} role.
 * 
 * @author Jan De Moerloose
 * 
 */
public class ExternalizableLabeledController extends AbstractGraphicsController 
			implements GraphicsObjectContainerEvent.Handler, GraphicsOperationEvent.Handler {
	
	private boolean active;
	
	private ExternalizableLabeled externalizableLabel;

	public ExternalizableLabeledController(GraphicsService graphicsService,	GraphicsObject object) {
		super(graphicsService, object);
		this.externalizableLabel = (ExternalizableLabeled) (getObject().getRole(ExternalizableLabeled.TYPE));
		getService().getObjectContainer().addGraphicsObjectContainerHandler(this);
		getService().getObjectContainer().addGraphicsOperationEventHandler(this);
		setLabelExternal(externalizableLabel.isLabelExternal());
		setExternalLabelProperties();
	}

	@Override
	public void onAction(GraphicsObjectContainerEvent event) {
		if (event.getObject() == getObject()) {
			switch (event.getActionType()) {
			case ADD:
			case UPDATE:
				setLabelExternal(externalizableLabel.isLabelExternal());
				break;
			case REMOVE:
			case CLEAR:
				if (getService().getObjectContainer().getObjects().contains(externalizableLabel)) {
					getService().getObjectContainer().remove(externalizableLabel.getExternalLabel());
				}
				break;
			default: // handled by meta controller
				break;
			}
		}
	}

	@Override
	public void setActive(boolean active) {
		this.active = active;
	}

	@Override
	public boolean isActive() {
		return active;
	}

	@Override
	public void destroy() {
		
	}

	@Override
	public void onOperation(GraphicsOperationEvent event) {
		if (event.getOperation().getObject() == getObject()) {
			if (event.getOperation() instanceof ToggleExternalizableLabelOperation) {
				setLabelExternal(externalizableLabel.isLabelExternal());
			} else if (event.getOperation() instanceof LabelOperation) {
				setExternalLabelProperties();
			} else if (event.getOperation() instanceof AddOperation) {
				setLabelExternal(externalizableLabel.isLabelExternal());
			} else if (event.getOperation() instanceof RemoveOperation) {
				setLabelExternal(false);
			}
		}
		if (event.getOperation().getObject() == externalizableLabel.getExternalLabel()) {
			if (event.getOperation() instanceof LabelOperation) {
				setExternalLabelProperties();
			}
		}
	}
	
	private void setExternalLabelProperties() {
		Labeled labeled = getObject().getRole(Labeled.TYPE);
		externalizableLabel.getExternalLabel().setFontColor(labeled.getTextable().getFontColor());
		externalizableLabel.getExternalLabel().setFontFamily(labeled.getTextable().getFontFamily());
		externalizableLabel.getExternalLabel().setFontSize(labeled.getTextable().getFontSize());
		externalizableLabel.getExternalLabel().setLabel(labeled.getTextable().getLabel());
		boolean visible = !labeled.getTextable().getLabel().isEmpty();
		((MetaController) getService().getMetaController()).
			setControllersOfObjectVisible(externalizableLabel.getExternalLabel(), visible);
	}
	
	public void setLabelExternal(boolean labelExternal) {
		getObject().getRole(Labeled.TYPE).setLabelVisible(!labelExternal);
		if (labelExternal) {
			if (!getService().getObjectContainer().getObjects().contains(externalizableLabel.getExternalLabel())) {
				getService().getObjectContainer().add(externalizableLabel.getExternalLabel());
			}
		} else {
			if (getService().getObjectContainer().getObjects().contains(externalizableLabel.getExternalLabel())) {
				getService().getObjectContainer().remove((GraphicsObject) externalizableLabel.getExternalLabel());
			}
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy