/******************************************************************************* * 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.core.ui.util; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.GridBagConstraints; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import javax.swing.JPanel; import javax.swing.plaf.PanelUI; import org.weasis.core.api.image.GridBagLayoutModel; import org.weasis.core.api.image.LayoutConstraints; import org.weasis.core.api.media.data.ImageElement; import org.weasis.core.ui.editor.image.ExportImage; import org.weasis.core.ui.editor.image.ViewCanvas; public class ExportLayout<E extends ImageElement> extends JPanel { protected final JPanel grid = new JPanel(); protected GridBagLayoutModel layoutModel; public ExportLayout(GridBagLayoutModel layoutModel) { initGrid(); adaptLayoutModel(layoutModel); } public ExportLayout(ViewCanvas<E> viewCanvas) { initGrid(); adaptLayoutModel(viewCanvas); } private void initGrid() { // For having a black background with any Look and Feel grid.setUI(new PanelUI() { }); setGridBackground(Color.BLACK); add(grid, BorderLayout.CENTER); } public void setGridBackground(Color bg) { grid.setBackground(bg); } /** Get the layout of this view panel. */ public GridBagLayoutModel getLayoutModel() { return layoutModel; } private void adaptLayoutModel(ViewCanvas<E> viewCanvas) { final Map<LayoutConstraints, Component> map = new LinkedHashMap<>(1); this.layoutModel = new GridBagLayoutModel(map, "exp_tmp", "", null); //$NON-NLS-1$ //$NON-NLS-2$ ExportImage<E> export = new ExportImage<>(viewCanvas); export.getInfoLayer().setBorder(3); LayoutConstraints e = new LayoutConstraints(viewCanvas.getClass().getName(), 0, 0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH); map.put(e, export); grid.add(export, e); grid.revalidate(); } private void adaptLayoutModel(GridBagLayoutModel layoutModel) { final Map<LayoutConstraints, Component> oldMap = layoutModel.getConstraints(); final Map<LayoutConstraints, Component> map = new LinkedHashMap<>(oldMap.size()); this.layoutModel = new GridBagLayoutModel(map, "exp_tmp", "", null); //$NON-NLS-1$ //$NON-NLS-2$ Iterator<LayoutConstraints> enumVal = oldMap.keySet().iterator(); while (enumVal.hasNext()) { LayoutConstraints e = enumVal.next(); Component v = oldMap.get(e); LayoutConstraints constraint = e.copy(); if (v instanceof ViewCanvas) { ExportImage<?> export = new ExportImage<>((ViewCanvas) v); export.getInfoLayer().setBorder(3); map.put(constraint, export); v = export; } else { // Non printable component. Create a new empty panel to not steel the component from the original UI v = new JPanel(); map.put(constraint, v); } grid.add(v, e); } grid.revalidate(); } public void dispose() { for (Component c : layoutModel.getConstraints().values()) { if (c instanceof ExportImage) { ((ExportImage) c).disposeView(); } } } }