001 package nl.cwi.sen1.visplugin;
002
003 import java.awt.BorderLayout;
004 import java.awt.event.ActionEvent;
005 import java.awt.event.ActionListener;
006 import javax.swing.JButton;
007 import javax.swing.JLabel;
008 import javax.swing.JPanel;
009
010 /**
011 * The ContainerPanel class forms a container panel for
012 * a contentpanel and a warning panel.
013 *
014 * @author Arjen van Schie
015 * @date 16-3-2007
016 */
017 public class ContainerPanel extends JPanel{
018 private static final long serialVersionUID = -5928381544709327449L;
019
020 private JPanel m_contentPanel = null;
021 private JPanel m_warningPanel = null;
022 private JLabel m_warningLabel = null;
023
024 private static final String constWarningChanged = "The RStore has changed, this view might be outdated.";
025 private static final String constWarningUnloaded = "The RStore of this fact has been unloaded!";
026
027 /**
028 * Generate a container panel for the warningpanel
029 * and the content panel and hide the warningpanel by default
030 *
031 * @author Arjen van Schie
032 * @date 16-3-2007
033 * @param JPanel content
034 */
035 public ContainerPanel(JPanel content){
036 // make the panel fullscreen
037 this.makePanelFullscreen();
038
039 // get the child panel-references
040 m_warningPanel = this.generateWarningPanel();
041 m_contentPanel = content;
042
043 // add the panels
044 this.add( m_warningPanel, BorderLayout.NORTH );
045 this.add( m_contentPanel, BorderLayout.CENTER );
046
047 // hide the warning panel by default
048 this.hideWarning();
049 }
050
051 /**
052 * Show a warning-message for the RStore-changed event
053 *
054 * @author Arjen van Schie
055 * @date 16-3-2007
056 */
057 public void showRstoreChangedWarning(){
058 m_warningLabel.setText( constWarningChanged );
059 m_warningPanel.setVisible(true);
060 }
061
062 /**
063 * Show a warning-message for the RStore-unloaded event
064 *
065 * @author Arjen van Schie
066 * @date 16-3-2007
067 */
068 public void showRstoreUnloadedWarning(){
069 m_warningLabel.setText( constWarningUnloaded );
070 m_warningPanel.setVisible(true);
071 }
072
073 /**
074 * Hide the warning messages of a window
075 *
076 * @author Arjen van Schie
077 * @date 16-3-2007
078 */
079 public void hideWarning(){
080 m_warningPanel.setVisible(false);
081 }
082
083 /**
084 * Make the panel fullscreen
085 *
086 * @author Arjen van Schie
087 * @date 16-3-2007
088 */
089 private void makePanelFullscreen(){
090 BorderLayout layout = new BorderLayout();
091 this.setLayout(layout);
092 }
093
094 /**
095 * Generate a panel for the warning messages
096 * @author Arjen van Schie
097 * @date 16-3-2007
098 */
099 private JPanel generateWarningPanel(){
100 // create a label and panel
101 JPanel warningArea = new JPanel();
102 m_warningLabel=new JLabel();
103 m_warningLabel.setForeground(java.awt.Color.red);
104
105 // add a button to hide the warnings
106 JButton hideWarningButton = new JButton();
107 hideWarningButton.setText("Hide Warning");
108 hideWarningButton.addActionListener(new ActionListener() {
109 public void actionPerformed(ActionEvent event) {
110 hideWarning();
111 }
112 });
113
114 // connect the label & button
115 warningArea.add(m_warningLabel);
116 warningArea.add(hideWarningButton);
117
118 return warningArea;
119 }
120
121 /**
122 * return a reference to the contentpanel
123 * @author Arjen van Schie
124 * @date 16-3-2007
125 */
126 public JPanel getContentPanel() {
127 return m_contentPanel;
128 }
129
130 /**
131 * returns the current warning message (or "empty" in case it is invisible)
132 * @author Arjen van Schie
133 * @date 16-3-2007
134 */
135 public String getCurrentWarning(){
136 String warning="empty";
137 if( m_warningPanel.isVisible() ){
138 warning = m_warningLabel.getText();
139 }
140 return warning;
141 }
142
143 }