/*
* #%L
* gitools-ui-platform
* %%
* Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.ui.platform.imageviewer;
import java.util.Collection;
import java.util.Iterator;
/**
* Utility methods for image viewers.
*
* @author Kazó Csaba
*/
public final class ImageViewerUtil {
/**
* Private constructor.
*/
private ImageViewerUtil() {
}
/**
* Synchronizes the view state of multiple image viewers with respect to scroll position
* and resize strategy, and other properties affecting display.
*
* @param first the first viewer
* @param others the other viewers
*/
public static void synchronizeViewers(ImageViewer first, ImageViewer... others) {
Synchronizer mainSynchronizer = first.getSynchronizer();
for (ImageViewer other : others) {
mainSynchronizer.add(other);
}
}
/**
* Synchronizes the view state of multiple image viewers with respect to scroll position
* and resize strategy, and other properties affecting display.
*
* @param viewers the viewers to synchronize
*/
public static void synchronizeViewers(Collection<ImageViewer> viewers) {
Iterator<ImageViewer> iterator = viewers.iterator();
if (!iterator.hasNext()) return;
Synchronizer mainSynchronizer = iterator.next().getSynchronizer();
while (iterator.hasNext()) {
mainSynchronizer.add(iterator.next());
}
}
/**
* Synchronizes the {@link PixelInfoStatusBar}s associated with the viewers. Viewers with a different or {@code null}
* status bar are ignored. When this function returns, the {@code PixelInfoStatusBar}s among the viewer status bars
* will share the same {@code PixelModel}, and thus display the same pixel.
* <p/>
* The default status bar of ImageViewer is a {@code PixelInfoStatusBar}, so this function can be used to
* synchronize the default status bars of viewers.
*
* @param viewers the viewers
*/
public static void synchronizePixelInfoStatusBars(ImageViewer... viewers) {
PixelModel model = null;
for (ImageViewer viewer : viewers) {
StatusBar bar = viewer.getStatusBar();
if (bar instanceof PixelInfoStatusBar) {
if (model == null)
model = ((PixelInfoStatusBar) bar).getModel();
else
((PixelInfoStatusBar) bar).setModel(model);
}
}
}
}