/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.ui.gallery; import static org.xmind.ui.gallery.GalleryLayout.ALIGN_CENTER; import static org.xmind.ui.gallery.GalleryLayout.ALIGN_FILL; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.FlowLayout; import org.eclipse.draw2d.LayoutManager; import org.xmind.gef.draw2d.AdvancedToolbarLayout; public class ContentPane extends Figure { private AdvancedToolbarLayout layout = null; private FlowLayout wrapLayout = null; private int minorAlign = -1; private int minorSpacing = -1; /** * */ public ContentPane() { this(false, false, false); } /** * @param isHorizontal * @param stretchMinorAxis * @param wrap */ public ContentPane(boolean isHorizontal, boolean stretchMinorAxis, boolean wrap) { if (wrap) { wrapLayout = new FlowLayout(isHorizontal); wrapLayout.setStretchMinorAxis(stretchMinorAxis); wrapLayout.setMajorAlignment(FlowLayout.ALIGN_CENTER); wrapLayout.setMinorAlignment(FlowLayout.ALIGN_CENTER); wrapLayout.setMajorSpacing(10); wrapLayout.setMinorSpacing(5); super.setLayoutManager(wrapLayout); } else { layout = new AdvancedToolbarLayout(isHorizontal); layout.setStretchMinorAxis(stretchMinorAxis); layout.setMinorAlignment(AdvancedToolbarLayout.ALIGN_CENTER); layout.setMajorAlignment(AdvancedToolbarLayout.ALIGN_CENTER); layout.setInnerMinorAlignment(AdvancedToolbarLayout.ALIGN_CENTER); layout.setSpacing(10); super.setLayoutManager(layout); } } public void setLayoutManager(LayoutManager manager) { // Do nothing to prevent external layout manager to be set. } public boolean isHorizontal() { if (isWrap()) return wrapLayout.isHorizontal(); return layout.isHorizontal(); } public void setHorizontal(boolean horizontal) { if (horizontal == isHorizontal()) return; if (wrapLayout != null) wrapLayout.setHorizontal(horizontal); if (layout != null) layout.setHorizontal(horizontal); revalidate(); } public boolean isWrap() { return getLayoutManager() == wrapLayout; } public void setWrap(boolean wrap) { if (wrap == isWrap()) return; if (wrap) { if (wrapLayout == null) { boolean horizontal = isHorizontal(); int majorAlignment = getMajorAlignment(); int minorAlignment = getMinorAlignment(); int majorSpacing = getMajorSpacing(); int minorSpacing = getMinorSpacing(); wrapLayout = new FlowLayout(horizontal); wrapLayout.setMajorAlignment(majorAlignment); wrapLayout.setMajorSpacing(majorSpacing); wrapLayout.setMinorSpacing(minorSpacing); boolean fill = minorAlignment == ALIGN_FILL; wrapLayout.setStretchMinorAxis(fill); wrapLayout.setMinorAlignment(fill ? ALIGN_CENTER : minorAlignment); } super.setLayoutManager(wrapLayout); } else { if (layout == null) { boolean horizontal = isHorizontal(); int majorAlignment = getMajorAlignment(); int minorAlignment = getMinorAlignment(); layout = new AdvancedToolbarLayout(horizontal); layout.setMajorAlignment(majorAlignment); layout.setSpacing(minorSpacing); boolean fill = minorAlignment == ALIGN_FILL; layout.setStretchMinorAxis(fill); layout.setMinorAlignment(fill ? ALIGN_CENTER : minorAlignment); } super.setLayoutManager(layout); } } public int getMajorAlignment() { if (isWrap()) return wrapLayout.getMajorAlignment(); return layout.getMajorAlignment(); } public int getMinorAlignment() { return minorAlign; } public void setMajorAlignment(int alignment) { if (alignment == getMajorAlignment()) return; if (wrapLayout != null) wrapLayout.setMajorAlignment(alignment); if (layout != null) layout.setMajorAlignment(alignment); revalidate(); } public void setMinorAlignment(int alignment) { if (minorAlign >= 0 && alignment == getMinorAlignment()) return; this.minorAlign = alignment; boolean fill = alignment == ALIGN_FILL; if (wrapLayout != null) { wrapLayout.setStretchMinorAxis(fill); wrapLayout.setMinorAlignment(fill ? ALIGN_CENTER : alignment); } if (layout != null) { layout.setStretchMinorAxis(fill); layout.setInnerMinorAlignment(fill ? ALIGN_CENTER : alignment); } revalidate(); } public int getMajorSpacing() { if (isWrap()) return wrapLayout.getMajorSpacing(); return layout.getSpacing(); } public void setMajorSpacing(int spacing) { if (spacing == getMajorSpacing()) return; if (wrapLayout != null) wrapLayout.setMajorSpacing(spacing); if (layout != null) layout.setSpacing(spacing); revalidate(); } public int getMinorSpacing() { return minorSpacing; } public void setMinorSpacing(int spacing) { if (minorSpacing >= 0 && spacing == getMinorSpacing()) return; this.minorSpacing = spacing; if (wrapLayout != null) wrapLayout.setMinorSpacing(spacing); revalidate(); } }