/******************************************************************************* * Copyright (c) 2016 Weasis Team and others. * 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: * Nicolas Roduit - initial API and implementation *******************************************************************************/ package org.weasis.dicom.viewer2d.mpr; import java.awt.Graphics2D; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import javax.swing.JPopupMenu; import javax.swing.JProgressBar; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.weasis.core.api.gui.util.ActionState; import org.weasis.core.api.gui.util.ActionW; import org.weasis.core.api.image.OpManager; import org.weasis.core.api.image.WindowOp; import org.weasis.core.ui.editor.image.ImageViewerEventManager; import org.weasis.core.ui.editor.image.ViewCanvas; import org.weasis.core.ui.model.layer.LayerAnnotation; import org.weasis.dicom.codec.DicomImageElement; import org.weasis.dicom.codec.SortSeriesStack; import org.weasis.dicom.viewer2d.View2d; public class MprView extends View2d { private static final Logger LOGGER = LoggerFactory.getLogger(MprView.class); public enum SliceOrientation { AXIAL, CORONAL, SAGITTAL } private SliceOrientation sliceOrientation; private JProgressBar progressBar; public MprView(ImageViewerEventManager<DicomImageElement> eventManager) { super(eventManager); this.sliceOrientation = SliceOrientation.AXIAL; infoLayer.setDisplayPreferencesValue(LayerAnnotation.PRELOADING_BAR, false); // Remove PR and KO buttons getViewButtons().clear(); } @Override protected void initActionWState() { super.initActionWState(); actionsInView.put(ViewCanvas.ZOOM_TYPE_CMD, ZoomType.CURRENT); /* * Get the radiologist way to see stack (means in axial, the first image is from feet and last image is in the * head direction) This option may not be changed. Sorting stack must be disabled from menu in UI. */ actionsInView.put(ActionW.SORTSTACK.cmd(), SortSeriesStack.slicePosition); // Propagate the preset OpManager disOp = getDisplayOpManager(); disOp.setParamValue(WindowOp.OP_NAME, ActionW.DEFAULT_PRESET.cmd(), false); // disOp.setParamValue(WindowOp.OP_NAME, ActionW.PRESET.cmd(), null); } @Override public SliceOrientation getSliceOrientation() { return sliceOrientation; } public void setType(SliceOrientation sliceOrientation) { this.sliceOrientation = sliceOrientation == null ? SliceOrientation.AXIAL : sliceOrientation; } @Override protected void setImage(DicomImageElement img) { super.setImage(img); } @Override protected JPopupMenu buildContexMenu(final MouseEvent evt) { ActionState action = eventManager.getAction(ActionW.SORTSTACK); if (action != null && action.isActionEnabled()) { // Force to disable sort stack menu action.enableAction(false); JPopupMenu ctx = super.buildContexMenu(evt); action.enableAction(true); return ctx; } return super.buildContexMenu(evt); } @Override public void propertyChange(PropertyChangeEvent evt) { super.propertyChange(evt); // if (series == null) { // return; // } // final String name = evt.getPropertyName(); // if (name.equals(ActionW.SYNCH.cmd())) { // SynchEvent synch = (SynchEvent) evt.getNewValue(); // SynchData synchData = (SynchData) actionsInView.get(ActionW.SYNCH_LINK.cmd()); // if (synchData != null && Mode.None.equals(synchData.getMode())) { // return; // } // for (Entry<String, Object> entry : synch.getEvents().entrySet()) { // final String command = entry.getKey(); // final Object val = entry.getValue(); // if (synchData != null && !synchData.isActionEnable(command)) { // continue; // } // // } // } } @Override protected void drawOnTop(Graphics2D g2d) { super.drawOnTop(g2d); final JProgressBar bar = progressBar; if (bar != null && bar.isVisible()) { int shiftx = getWidth() / 2 - progressBar.getWidth() / 2; int shifty = getHeight() / 2 - progressBar.getHeight() / 2; g2d.translate(shiftx, shifty); progressBar.paint(g2d); g2d.translate(-shiftx, -shifty); } } public void setProgressBar(JProgressBar bar) { this.progressBar = bar; } public JProgressBar getProgressBar() { return progressBar; } }