protected Dataset getDataset(final DataView view) { final Data data = view.getData(); return data instanceof Dataset ? (Dataset) data : null; }
@Override public List<Dataset> getDatasets(final ImageDisplay display) { final ArrayList<Dataset> datasets = new ArrayList<>(); if (display != null) { for (final DataView view : display) { final Data data = view.getData(); if (!(data instanceof Dataset)) continue; final Dataset dataset = (Dataset) data; datasets.add(dataset); } } return datasets; }
@Override public boolean isDisplaying(final Object o) { if (super.isDisplaying(o)) return true; // check for wrapped Data objects for (final DataView view : this) { if (o == view.getData()) return true; } return false; }
@Override public List<Overlay> getOverlays(final ImageDisplay display, final boolean selectedOnly) { final ArrayList<Overlay> overlays = new ArrayList<>(); for (final DataView view : display) { if (selectedOnly && !view.isSelected()) { // ignore non-selected objects continue; } final Data data = view.getData(); if (!(data instanceof Overlay)) continue; // ignore non-overlays final Overlay overlay = (Overlay) data; overlays.add(overlay); } return overlays; }
@Override public List<ImageDisplay> getDisplays(final Overlay o) { final ArrayList<ImageDisplay> containers = new ArrayList<>(); final List<Display<?>> displays = displayService.getDisplays(); for (final Display<?> display : displays) { if (!(display instanceof ImageDisplay)) continue; final ImageDisplay imageDisplay = (ImageDisplay) display; for (final DataView view : imageDisplay) { final Data data = view.getData(); if (!(data instanceof Overlay)) continue; final Overlay overlay = (Overlay) data; if (overlay == o) containers.add(imageDisplay); } } return containers; }
/** * Removes the {@link #IMP_KEY} entry from the {@link Dataset} attached to * the given {@link ImageDisplay} - if any. */ private void clearImagePlusKey(final ImageDisplay display) { Data data = display.getActiveView().getData(); if (Dataset.class.isAssignableFrom(data.getClass())) { ((Dataset)data).getProperties().remove(IMP_KEY); } }
@Override public void removeOverlay(final ImageDisplay display, final Overlay overlay) { final ArrayList<DataView> overlayViews = new ArrayList<>(); final List<DataView> views = display; for (final DataView view : views) { final Data data = view.getData(); if (data == overlay) overlayViews.add(view); } for (final DataView view : overlayViews) { display.remove(view); view.dispose(); } display.update(); }
@EventHandler protected void onEvent(final DataUpdatedEvent event) { for (final DataView view : this) { if (event.getObject() == view.getData()) { // BDZ removed 2013-03-15: update() updates all views. Addresses #1220. // view.update(); update(); return; } } }
/** * If the display is still nameless, tries to name it after the given * {@link DataView}. */ private void updateName(final DataView dataView) { if (getName() != null) return; // display already has a name final String dataName = dataView.getData().getName(); if (dataName != null && !dataName.isEmpty()) { setName(createName(dataName)); } }
@Override public boolean isVisible(final DataView view) { for (int i = 0; i < numDimensions(); i++) { final AxisType axis = axis(i).type(); if (axis.isXY()) continue; final long value = getLongPosition(axis); final int index = view.getData().dimensionIndex(axis); if (index < 0) { // verify that the display's position matches the view's value if (value != view.getLongPosition(axis)) return false; } else { // verify that the display's position matches the data's range final double min = index < 0 ? 0 : view.getData().realMin(index); final double max = index < 0 ? 0 : view.getData().realMax(index); if (value < min || value > max) { // dimensional position is outside the data's range return false; } } } return true; }
@Override public void run() { synchronized (getContext()) { for (final DataView view : DefaultImageDisplay.this) { if (event.getObject() == view.getData()) { rebuild(); update(); return; } } } } });
@Override public void view(final DisplayWindow w, final Display<?> d) { super.view(w, d); final ImageDisplay imageDisplay = (ImageDisplay) d; // NB: Tell the IJ2 framework what the "active" display is. // This allows other consumers to look up the corresponding // ImagePlus using the active display. displayService.setActiveDisplay(imageDisplay); final Data data = imageDisplay.getActiveView().getData(); if (Dataset.class.isAssignableFrom(data.getClass())) { // NB: Check if there is already an ImagePlus that we will // associate with this display - even if it hasn't been // mapped yet (because the display is still being created!). final Dataset dataset = (Dataset) data; if (dataset.getProperties().containsKey(LegacyImageMap.IMP_KEY)) return; } final LegacyImageMap limp = legacyService.getImageMap(); // if there is already a mapping for this display, just get its ImagePlus final ImagePlus existing = limp.lookupImagePlus(imageDisplay); // if none: register the display, which triggers wrapping in an ImagePlus final ImagePlus imagePlus = existing != null ? existing : limp.registerDisplay(imageDisplay); // display the ImagePlus via the IJ1 framework imagePlus.show(); // fire an ImageDisplay update event d.update(); }
@Override public void run() { log.info("Running " + PLUGIN_NAME + " version " + VERSION); Dataset data = (Dataset) image.getActiveView().getData(); OMEXMLMetadata md = OMEUtils.getOMEXMLMetadata(data, ij); if (md == null) { return; } // Launch JavaFX interface MainAppFrame app = new MainAppFrame(ij, image, md); app.setTitle(PLUGIN_NAME + " version " + VERSION); app.init(); } }
combinedInterval.add(view.getData());
@Override public void update() { // NB - this combinedinterval.update() call rebuilds the interval. We have // found cases where this is necessary to avoid situations where the we try // to access a no longer existing axis. As an example of this try running // legacy command Type > 8-bit Color on Clowns. Without this line, when you // run the command, an exception is thrown. // TODO - is this a performance issue? combinedInterval.update(); for (final DataView view : this) { for (int i = 0; i < numDimensions(); i++) { AxisType axis = axis(i).type(); if (axis.isXY()) continue; final int axisNum = view.getData().dimensionIndex(axis); if (axisNum < 0) continue; final long p = getLongPosition(axis); Data data = view.getData(); double size = data.realMax(axisNum) - data.realMin(axisNum) + 1; if (p < size) { view.setPosition(p, axis); } } view.update(); } super.update(); }
final Data data = display.getActiveView().getData(); for (int i = 0; i < data.numDimensions(); i++) { AxisType axisType = data.axis(i).type();
@Override public void valueChanged(final ListSelectionEvent listSelectionEvent) { if (selecting) return; selecting = true; final ImageDisplay display = imageDisplayService.getActiveImageDisplay(); if (display == null) return; final JList<?> list = (JList<?>) listSelectionEvent.getSource(); final List<?> selectionValues = list.getSelectedValuesList(); overlayService.getOverlayInfo().deselectAll(); for (final Object overlayInfoObj : selectionValues) { final OverlayInfo overlayInfo = (OverlayInfo) overlayInfoObj; overlayInfo.setSelected(true); } for (final DataView overlayView : display) { overlayView.setSelected(false); for (final Object overlayInfoObj : selectionValues) { final OverlayInfo overlayInfo = (OverlayInfo) overlayInfoObj; if (overlayInfo.getOverlay() == overlayView.getData()) { overlayInfo.setSelected(true); overlayView.setSelected(true); break; } } } selecting = false; } };
selecting = true; final Overlay overlay = (Overlay) event.getView().getData(); final int overlayIndex = overlayService.getOverlayInfo().findIndex(overlay); final OverlayInfo overlayInfo = overlayService.getOverlayInfo().getOverlayInfo(overlayIndex);
/** * A convenience method for defining a SamplingDefinition that returns a * single UV plane of an ImageDisplay. U and V are defined by the user. * * @param display The ImageDisplay to sample * @param uAxis The U axis of the sample space * @param vAxis The V axis of the sample space * @return The specified SamplingDefinition */ public static SamplingDefinition sampleUVPlane(final ImageDisplay display, final AxisType uAxis, final AxisType vAxis) { final SamplingDefinition definition = new SamplingDefinition(display); final Data data = display.getActiveView().getData(); for (int i = 0; i < data.numDimensions(); i++) { AxisType axisType = data.axis(i).type(); if ((axisType == uAxis) || (axisType == vAxis)) { final int axisIndex = display.dimensionIndex(axisType); final long size = display.dimension(axisIndex); final AxisSubrange subrange = new AxisSubrange(0, size - 1); definition.constrain(axisType, subrange); } else { // other axis final long pos = display.getLongPosition(axisType); final AxisSubrange subrange = new AxisSubrange(pos); definition.constrain(axisType, subrange); } } return definition; }
final ImageDisplay origDisp = def.getDisplay(); final Dataset origDs = (Dataset) origDisp.getActiveView().getData(); final long[] dims = def.getOutputDims(); final String name = origDisp.getName();