1 /*
2  * JasperReports - Free Java Reporting Library.
3  * Copyright (C) 2001 - 2019 TIBCO Software Inc. All rights reserved.
4  * http://www.jaspersoft.com
5  *
6  * Unless you have purchased a commercial license agreement from Jaspersoft,
7  * the following license terms apply:
8  *
9  * This program is part of JasperReports.
10  *
11  * JasperReports is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License as published by
13  * the Free Software Foundation, either version 3 of the License, or
14  * (at your option) any later version.
15  *
16  * JasperReports is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
23  */

24 package net.sf.jasperreports.components.list;
25
26 import java.util.Iterator;
27 import java.util.List;
28
29 import net.sf.jasperreports.engine.JRChild;
30 import net.sf.jasperreports.engine.JRComponentElement;
31 import net.sf.jasperreports.engine.JRPrintElement;
32 import net.sf.jasperreports.engine.base.JRBasePrintFrame;
33 import net.sf.jasperreports.engine.component.ComponentDesignConverter;
34 import net.sf.jasperreports.engine.convert.ConvertVisitor;
35 import net.sf.jasperreports.engine.convert.ReportConverter;
36 import net.sf.jasperreports.engine.type.ModeEnum;
37
38 /**
39  * List preview converter.
40  * 
41  * @author Lucian Chirita (lucianc@users.sourceforge.net)
42  */

43 public class ListDesignConverter implements ComponentDesignConverter
44 {
45
46     @Override
47     public JRPrintElement convert(ReportConverter reportConverter,
48             JRComponentElement element)
49     {
50         ListComponent list = (ListComponent) element.getComponent();
51         if (list == null || list.getContents() == null)
52         {
53             return null;
54         }
55         
56         JRBasePrintFrame frame = new JRBasePrintFrame(
57                 reportConverter.getDefaultStyleProvider());
58         reportConverter.copyBaseAttributes(element, frame);
59         
60         ListContents contents = list.getContents();
61         if (contents.getHeight() > 0)
62         {
63             JRBasePrintFrame contentsFrame = new JRBasePrintFrame(
64                     reportConverter.getDefaultStyleProvider());
65             contentsFrame.setUUID(element.getUUID());
66             contentsFrame.setX(0);
67             contentsFrame.setY(0);
68             contentsFrame.setWidth(element.getWidth());            
69             contentsFrame.setHeight(contents.getHeight());
70             contentsFrame.setMode(ModeEnum.TRANSPARENT);
71             
72             List<JRChild> children = contents.getChildren();
73             if (children != null)
74             {
75                 ConvertVisitor contentsVisitor = new ConvertVisitor(reportConverter, 
76                         contentsFrame);
77                 for (Iterator<JRChild> it = children.iterator(); it
78                         .hasNext();)
79                 {
80                     JRChild child = it.next();
81                     child.visit(contentsVisitor);
82                 }
83             }
84             
85             frame.addElement(contentsFrame);
86
87             /*
88             Integer width = contents.getWidth();
89             int contentsWidth = width == null ? element.getWidth() 
90                     : width;
91             
92             if (contents.getHeight() < element.getHeight() 
93                     || contentsWidth < element.getWidth())
94             {
95                 // add a grey rectangle to highlight the contents height
96                 JRBasePrintImage image = new JRBasePrintImage(
97                         reportConverter.getDefaultStyleProvider());
98                 image.setX(0);
99                 image.setWidth(element.getWidth());
100                 image.setY(0);
101                 image.setHeight(element.getHeight());
102                 image.setMode(ModeEnum.TRANSPARENT);
103                 
104                 // clip out the list contents area
105                 Area clip = new Area(new Rectangle(
106                         0, 0, element.getWidth(), element.getHeight()));
107                 clip.subtract(new Area(new Rectangle(
108                         0, 0, contentsWidth, contents.getHeight())));
109                 
110                 image.setRenderer(new UnusedSpaceImageRenderer(clip));
111                 frame.addElement(image);
112             }
113             */

114         }
115         
116         return frame;
117     }
118
119 }
120