/******************************************************************************* * 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.Component; import java.util.Iterator; import java.util.Map; import javax.swing.Icon; import javax.swing.ImageIcon; import org.weasis.core.api.explorer.DataExplorerView; import org.weasis.core.api.explorer.model.DataExplorerModel; import org.weasis.core.api.image.GridBagLayoutModel; import org.weasis.core.api.media.data.MediaElement; import org.weasis.core.ui.docking.UIManager; import org.weasis.core.ui.editor.SeriesViewer; import org.weasis.core.ui.editor.SeriesViewerFactory; import org.weasis.core.ui.editor.ViewerPluginBuilder; import org.weasis.dicom.codec.DicomMediaIO; import org.weasis.dicom.explorer.DicomExplorer; import org.weasis.dicom.explorer.DicomModel; import org.weasis.dicom.viewer2d.Messages; import org.weasis.dicom.viewer2d.mpr.MprView.SliceOrientation; public class MPRFactory implements SeriesViewerFactory { public static final String NAME = Messages.getString("MPRFactory.title"); //$NON-NLS-1$ public static final Icon ICON = new ImageIcon(MPRFactory.class.getResource("/icon/16x16/mpr.png")); //$NON-NLS-1$ public MPRFactory() { } @Override public Icon getIcon() { return ICON; } @Override public String getUIName() { return NAME; } @Override public String getDescription() { return Messages.getString("MPRFactory.desc"); //$NON-NLS-1$ } @Override public SeriesViewer<?> createSeriesViewer(Map<String, Object> properties) { GridBagLayoutModel model = MPRContainer.VIEWS_2x1_mpr; String uid = null; if (properties != null) { Object obj = properties.get(org.weasis.core.api.image.GridBagLayoutModel.class.getName()); if (obj instanceof GridBagLayoutModel) { model = (GridBagLayoutModel) obj; } // Set UID Object val = properties.get(ViewerPluginBuilder.UID); if (val instanceof String) { uid = (String) val; } } MPRContainer instance = new MPRContainer(model, uid); if (properties != null) { Object obj = properties.get(DataExplorerModel.class.getName()); if (obj instanceof DicomModel) { // Register the PropertyChangeListener DicomModel m = (DicomModel) obj; m.addPropertyChangeListener(instance); } } int index = 0; Iterator<Component> enumVal = model.getConstraints().values().iterator(); while (enumVal.hasNext()) { Component val = enumVal.next(); if (val instanceof MprView) { SliceOrientation sliceOrientation; switch (index) { case 1: sliceOrientation = SliceOrientation.CORONAL; break; case 2: sliceOrientation = SliceOrientation.SAGITTAL; break; default: sliceOrientation = SliceOrientation.AXIAL; break; } ((MprView) val).setType(sliceOrientation); index++; } } return instance; } public static void closeSeriesViewer(MPRContainer mprContainer) { // Unregister the PropertyChangeListener DataExplorerView dicomView = UIManager.getExplorerplugin(DicomExplorer.NAME); if (dicomView != null) { dicomView.getDataExplorerModel().removePropertyChangeListener(mprContainer); } } @Override public boolean canReadMimeType(String mimeType) { return DicomMediaIO.SERIES_MIMETYPE.equals(mimeType); } @Override public boolean isViewerCreatedByThisFactory(SeriesViewer<? extends MediaElement> viewer) { if (viewer instanceof MPRContainer) { return true; } return false; } @Override public int getLevel() { return 15; } @Override public boolean canAddSeries() { return false; } @Override public boolean canExternalizeSeries() { return true; } }