001 package org.springframework.richclient.widget; 002 003 import org.apache.commons.logging.Log; 004 import org.apache.commons.logging.LogFactory; 005 import org.springframework.core.io.Resource; 006 import org.springframework.richclient.util.PopupMenuMouseListener; 007 import org.springframework.richclient.util.RcpSupport; 008 009 import javax.swing.*; 010 011 /** 012 * A widget that enables to mimic a screen. This is useful for application 013 * still under development, but that want to show how a certain screen will look 014 * like. 015 * 016 * The view consists of a image tab showing the screen look-a-like and/or a HTML tab 017 * consisting of an explanation on what this screen will do. 018 */ 019 public class ScreenSimulationWidget extends AbstractWidget 020 { 021 JTabbedPane mainComponent; 022 023 private static Log log = LogFactory.getLog(ScreenSimulationWidget.class); 024 025 public ScreenSimulationWidget(Resource explanationPath) 026 { 027 this(explanationPath, null); 028 } 029 030 public ScreenSimulationWidget(Resource explanationPath, Resource imagePath) 031 { 032 this(explanationPath, imagePath, null); 033 } 034 035 public ScreenSimulationWidget(Resource explanationPath, Resource imagePath, JPopupMenu popup) 036 { 037 this.mainComponent = new JTabbedPane(SwingConstants.TOP, JTabbedPane.SCROLL_TAB_LAYOUT); 038 039 JComponent imageArea = createImagePanel(imagePath); 040 if (imageArea != null) 041 { 042 String screenLabel = RcpSupport.getMessage("simulation", "screen", RcpSupport.LABEL); 043 this.mainComponent.addTab(screenLabel, imageArea); 044 } 045 else 046 log.warn("Image not found at " + imagePath); 047 048 JComponent explanationArea = createTextPanel(explanationPath); 049 if (explanationArea != null) 050 { 051 052 String explanationLabel = RcpSupport.getMessage("simulation", "explanation", RcpSupport.LABEL); 053 this.mainComponent.addTab(explanationLabel, explanationArea); 054 } 055 else 056 log.warn("Explanation html not found at " + explanationPath); 057 058 if (popup != null) 059 { 060 this.mainComponent.addMouseListener(new PopupMenuMouseListener(popup)); 061 } 062 } 063 064 private JComponent createTextPanel(Resource textResource) 065 { 066 HTMLViewWidget hw = new HTMLViewWidget(textResource); 067 return hw.getComponent(); 068 } 069 070 private JComponent createImagePanel(Resource imageResource) 071 { 072 ImageViewWidget hw = new ImageViewWidget(imageResource); 073 return hw.getComponent(); 074 } 075 076 public JComponent getComponent() 077 { 078 return mainComponent; 079 } 080 }