package app.navigps.gui.svgComponents; import app.navigps.gui.detailspanel.AlphaJPanel; import app.navigps.gui.detailspanel.SimpleBusyPanel; import app.navigps.gui.svgComponents.Thumbnail.Thumbnail; import app.navigps.gui.svgComponents.Thumbnail.ThumbnailPanel; import java.awt.Color; import java.awt.Component; import javax.swing.JLayeredPane; import javax.swing.OverlayLayout; /** * * @author Gzregorz (vara) Warywoda */ public class SVGCanvasLayers extends JLayeredPane{ /** * */ public static final String SVG_CANVAS_CHANGED = "svgcanvas.changed"; /** * */ public static final Integer DISPLAY_SERVICES_LAYER = new Integer(JLayeredPane.FRAME_CONTENT_LAYER+50); /** * */ public static final Integer SEARCH_SERVICES_LAYER = new Integer(JLayeredPane.FRAME_CONTENT_LAYER+100); /** * */ public static final Integer THUMBNAIL_LAYER = new Integer(JLayeredPane.DEFAULT_LAYER+10); private Canvas svgCanvas; private AlphaJPanel componentContainer; private AlphaJPanel modalContainer; private AlphaJPanel thumbnailContainer; private AlphaJPanel servicesContainer; private SimpleBusyPanel glassPane; /** * */ public SVGCanvasLayers(){ setLayout(new OverlayLayout(this)); setSVGCanvas(createSVGCanvas(), JLayeredPane.FRAME_CONTENT_LAYER); createDefaultContainers(); } private void createGlasspane(){ setGlassPane(new CanvasBusyPanel()); getSvgCanvas().addSVGDocumentLoaderListener((CanvasBusyPanel)getGlassPane()); getSvgCanvas().addGVTTreeRendererListener((CanvasBusyPanel)getGlassPane()); getSvgCanvas().addGVTTreeRendererListener((CanvasBusyPanel)getGlassPane()); add(getGlassPane(),POPUP_LAYER); } private void createDefaultContainers(){ modalContainer = new AlphaJPanel(null); getModalContainer().setOpaque(false); componentContainer = new AlphaJPanel(null); getComponentContainer().setOpaque(false); thumbnailContainer = new AlphaJPanel(null); getThumbnailContainer().setOpaque(false); setServicesContainer(new ServicesContainer(getSvgCanvas())); getServicesContainer().setAlpha(0.6f); add(getModalContainer(),MODAL_LAYER); add(getComponentContainer(),DEFAULT_LAYER); add(getThumbnailContainer(),THUMBNAIL_LAYER); add(getServicesContainer(),DISPLAY_SERVICES_LAYER); createThumbnails(); createGlasspane(); } public void updateSynchronizedLayers(){ Component [] comps = getComponents(); //for test int countSynchLayers=0; for (Component comp : comps) { if(comp instanceof SynchronizedSVGLayer){ ((SynchronizedSVGLayer)comp).updateComponent(); countSynchLayers++; } } String msg = "***Update synchronized layers.\nFinished !\nStatus:\n\tAll components: "+ comps.length+" including Synchronized layers: "+ countSynchLayers+"\n****"; System.out.println(msg); } private void createThumbnails(){ Thumbnail thumb = new Thumbnail(svgCanvas); thumb.setAlpha(0.0f); thumb.setUpperThresholdAlpha(0.65f); ThumbnailPanel tmp = new ThumbnailPanel(thumb); tmp.setUpperThresholdAlpha(0.65f); tmp.setAlpha(0.0f); tmp.setBackground(Color.BLACK); tmp.setBounds(50, 50, 200, 100); getThumbnailContainer().add(tmp); tmp.displayThumbnail(true); } private Canvas createSVGCanvas(){ Canvas can = new Canvas(); return can; } private void setSVGCanvas(Canvas can,Integer layer){ this.svgCanvas = can; add(can,layer); } @Override protected void addImpl(Component comp, Object constraints, int index) { /*if(comp instanceof JComponent){ ((JComponent)comp).setOpaque(false); } */ super.addImpl(comp, constraints, index); } /** * @return the svgCanvas */ public Canvas getSvgCanvas() { return svgCanvas; } /** * @param svgCanvas the svgCanvas to set */ public void setSvgCanvas(Canvas svgCanvas) { Canvas oldVal = this.svgCanvas; this.svgCanvas = svgCanvas; firePropertyChange(SVG_CANVAS_CHANGED, oldVal, this.svgCanvas); } /** * @return the componentContainer */ public AlphaJPanel getComponentContainer() { return componentContainer; } /** * @return the modalContainer */ public AlphaJPanel getModalContainer() { return modalContainer; } /** * @return the thumbnailContainer */ public AlphaJPanel getThumbnailContainer() { return thumbnailContainer; } /** * @return the servicesContainer */ public AlphaJPanel getServicesContainer() { return servicesContainer; } /** * @param servicesContainer the servicesContainer to set */ public void setServicesContainer(AlphaJPanel servicesContainer) { this.servicesContainer = servicesContainer; } /** * @return the glassPane */ public SimpleBusyPanel getGlassPane() { return glassPane; } /** * @param glassPane the glassPane to set */ public void setGlassPane(SimpleBusyPanel glassPane) { this.glassPane = glassPane; } }