package org.xmind.gef.ui.internal;
import java.util.List;
import java.util.Set;
import java.util.WeakHashMap;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Rectangle;
import org.xmind.ui.gallery.ContentPane;
public class SpaceCollaborativeEngine {
private WeakHashMap<Object, ContentPane> managedContentPanes = new WeakHashMap<Object, ContentPane>();
public void register(Object key, ContentPane contentPane) {
managedContentPanes.put(key, contentPane);
}
public void refreshMinorSpace() {
int maxCount = 0;
ContentPane contentPane = null;
Set<Object> keys = managedContentPanes.keySet();
for (Object key : keys) {
ContentPane cp = managedContentPanes.get(key);
int size = cp.getChildren().size();
if (size >= maxCount) {
contentPane = cp;
maxCount = size;
}
}
List elements = contentPane.getChildren();
if (contentPane == null || elements.isEmpty())
return;
Rectangle clientArea = contentPane.getClientArea();
int totalSize = clientArea.width;
int elementSize = ((IFigure) elements.get(0)).getPreferredSize(-1,
-1).width;
int calculatedCount = totalSize / elementSize;
int calculatedTotalSpace = totalSize - calculatedCount * elementSize;
int calculatedEachSpace = 0;
if (calculatedCount > 1) {
calculatedEachSpace = calculatedTotalSpace / (calculatedCount - 1);
}
Set<Object> managedKeys = managedContentPanes.keySet();
for (Object key : managedKeys) {
ContentPane cp = managedContentPanes.get(key);
int oldSpace = cp.getMinorSpacing();
if (oldSpace != calculatedEachSpace) {
cp.setMinorSpacing(calculatedEachSpace);
}
}
}
}