final IndexedPropertyChangeEvent ievt = (IndexedPropertyChangeEvent) evt;
if (ievt.getNewValue() != null)
{
// added
final ReportRenderContext renderContext = (ReportRenderContext) ievt.getNewValue();
final ReportRendererComponent rendererComponent = new ReportRendererComponent(getContext(), renderContext);
// register the listeners ...
final AbstractReportDefinition report = renderContext.getReportDefinition();
report.addReportModelListener(new ReportNameUpdateHandler(editorPanes, ReportDesignerFrame.this, rendererComponent, report));
final String title = computeTabName(report);
final Image iconImage = report.getElementType().getMetaData().getIcon(Locale.getDefault(), BeanInfo.ICON_COLOR_16x16);
final Icon icon;
if (iconImage != null)
{
icon = new ImageIcon(iconImage);
}
else
{
icon = null;
}
editorPanes.addTab(title, null, rendererComponent);
editorPanes.setTabComponentAt(editorPanes.getTabCount() - 1, new TabRenderer(icon, title));
editorPanes.setSelectedComponent(rendererComponent);
}
else if (ievt.getOldValue() != null)
{
if (editorPanes.getTabCount() <= 0)
{
return;
}
// removed
int index = ievt.getIndex();
final ReportRenderContext reportRenderContext = (ReportRenderContext) ievt.getOldValue();
boolean removedTab = false;
for (int i = 0; i < editorPanes.getTabCount(); i++)
{
final Component tabContent = editorPanes.getComponentAt(i);
if (tabContent instanceof ReportRendererComponent)
{
final ReportRendererComponent myReportRenderer = (ReportRendererComponent) tabContent;
if (myReportRenderer.getRenderContext() == reportRenderContext)
{
index = i;
editorPanes.removeTabAt(index);
removedTab = true;
myReportRenderer.dispose();
break;
}
}
}