blob: 43a274edbcd1731c9f6fd11cba4cf2163bac0fc1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Pierre Allard - initial API and implementation
* Regent L'Archeveque
*
* SPDX-License-Identifier: EPL-1.0
*******************************************************************************/
package org.eclipse.apogy.addons.sensors.imaging.camera.parts;
import java.util.Collections;
import java.util.HashMap;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.eclipse.apogy.addons.sensors.imaging.camera.ApogyAddonsSensorsImagingCameraFactory;
import org.eclipse.apogy.addons.sensors.imaging.camera.ApogyAddonsSensorsImagingCameraPackage;
import org.eclipse.apogy.addons.sensors.imaging.camera.ApogyAddonsSensorsImagingCameraRCPConstants;
import org.eclipse.apogy.addons.sensors.imaging.camera.CameraViewConfiguration;
import org.eclipse.apogy.addons.sensors.imaging.camera.CameraViewConfigurationReference;
import org.eclipse.apogy.addons.sensors.imaging.camera.CameraViewUtilities;
import org.eclipse.apogy.addons.sensors.imaging.camera.composites.CameraViewComposite;
import org.eclipse.apogy.common.emf.transaction.ApogyCommonTransactionFacade;
import org.eclipse.apogy.common.emf.ui.parts.ToolBarMenuPart;
import org.eclipse.apogy.core.invocator.InvocatorSession;
import org.eclipse.apogy.core.invocator.ui.ApogyCoreInvocatorUIFacade;
import org.eclipse.apogy.core.invocator.ui.parts.AbstractSessionBasedPart;
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.e4.core.commands.ECommandService;
import org.eclipse.e4.core.commands.EHandlerService;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.swt.widgets.Composite;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SuppressWarnings("restriction")
public class CameraViewPart extends AbstractSessionBasedPart implements ToolBarMenuPart {
private static final Logger Logger = LoggerFactory.getLogger(CameraViewPart.class);
public static final String CameraViewConfigurationID = "CameraViewConfiguration";
protected String partName = "Camera View";
private CameraViewConfiguration cameraViewConfiguration;
@Inject
ECommandService commandService;
@Inject
EHandlerService handlerService;
@Override
@PostConstruct
public void createPartControl(Composite parent, MPerspective perspective) {
super.createPartControl(parent, perspective);
}
@Override
protected void newInvocatorSession(InvocatorSession invocatorSession) {
CameraViewComposite cameraViewComposite = ((CameraViewComposite) getActualComposite());
cameraViewComposite
.setCameraViewConfigurationList(CameraViewUtilities.INSTANCE.getActiveCameraViewConfigurationList());
if (invocatorSession != null) {
CameraViewConfigurationReference ref = (CameraViewConfigurationReference) ApogyCoreInvocatorUIFacade.INSTANCE
.readFromPersistedState(this.mPart, CameraViewConfigurationID);
if (ref != null) {
this.cameraViewConfiguration = ref.getCameraViewConfiguration();
} else {
Logger.warn("No Camera View Configuration could be read back, setting it to null.");
}
cameraViewComposite.setCameraViewConfiguration(this.cameraViewConfiguration);
}
// -clearPersistedState
}
@Override
protected void createContentComposite(Composite parent, int style) {
new CameraViewComposite(parent, style) {
@Override
protected void newCameraViewConfigurationSelected(CameraViewConfiguration newCameraViewConfiguration) {
CameraViewPart.this.cameraViewConfiguration = newCameraViewConfiguration;
CameraViewPart.this.selectionService.setSelection(CameraViewPart.this.cameraViewConfiguration);
if (CameraViewPart.this.cameraViewConfiguration != null) {
CameraViewPart.this.mPart.setLabel(CameraViewPart.this.partName + " - "
+ CameraViewPart.this.cameraViewConfiguration.getName());
}
ParameterizedCommand command = CameraViewPart.this.commandService.createCommand(
ApogyAddonsSensorsImagingCameraRCPConstants.COMMAND__UPDATE_CAMERA_VIEW_TOOLBAR__ID,
Collections.emptyMap());
CameraViewPart.this.handlerService.executeHandler(command);
}
@Override
protected void newTabFolderSelection(String parameterID) {
HashMap<String, Object> parameters = new HashMap<>(1);
parameters.put(
org.eclipse.apogy.common.ui.ApogyCommonUIRCPConstants.COMMAND_PARAMETER__OPEN_TOOL_BAR_MENU_ID__ID,
parameterID);
ParameterizedCommand command = CameraViewPart.this.commandService.createCommand(
org.eclipse.apogy.common.ui.ApogyCommonUIRCPConstants.COMMAND__OPEN_TOOL_BAR_MENU__ID,
parameters);
CameraViewPart.this.handlerService.executeHandler(command);
}
};
}
@Override
public void userPersistState(MPart mPart) {
try {
if (this.cameraViewConfiguration != null) {
CameraViewConfigurationReference ref = ApogyAddonsSensorsImagingCameraFactory.eINSTANCE
.createCameraViewConfigurationReference();
ref.setCameraViewConfiguration(this.cameraViewConfiguration);
ApogyCoreInvocatorUIFacade.INSTANCE.saveToPersistedState(mPart, CameraViewConfigurationID, ref);
}
// Reset part name
mPart.setLabel(this.partName);
} catch (Throwable t) {
Logger.error(t.getMessage(), t);
}
}
public void setDisplayRectifiedImage(boolean value) {
ApogyCommonTransactionFacade.INSTANCE.basicSet(
((CameraViewComposite) getActualComposite()).getSelectedCameraViewConfiguration(),
ApogyAddonsSensorsImagingCameraPackage.Literals.CAMERA_VIEW_CONFIGURATION__DISPLAY_RECTIFIED_IMAGE,
value);
}
public void setImageAutoSaveEnable(boolean value) {
ApogyCommonTransactionFacade.INSTANCE.basicSet(
((CameraViewComposite) getActualComposite()).getSelectedCameraViewConfiguration(),
ApogyAddonsSensorsImagingCameraPackage.Literals.CAMERA_VIEW_CONFIGURATION__IMAGE_AUTO_SAVE_ENABLE,
value);
}
public void setSaveImageWithOverlays(boolean value) {
ApogyCommonTransactionFacade.INSTANCE.basicSet(
((CameraViewComposite) getActualComposite()).getSelectedCameraViewConfiguration(),
ApogyAddonsSensorsImagingCameraPackage.Literals.CAMERA_VIEW_CONFIGURATION__SAVE_IMAGE_WITH_OVERLAYS,
value);
}
@Override
public void toolItemSelectedChanged(String parameterID, boolean selected) {
((CameraViewComposite) getActualComposite()).updatetoolbarMenuComposite(parameterID, selected);
}
@Override
public boolean canExecute() {
return getActualComposite() instanceof CameraViewComposite
&& ((CameraViewComposite) getActualComposite()).getSelectedCameraViewConfiguration() != null;
}
}