001 package com.croftsoft.apps.agoracast.c2p;
002
003 import java.awt.*;
004 import java.awt.event.*;
005 import java.io.*;
006 import java.net.*;
007 import javax.swing.*;
008 import javax.swing.event.*;
009 import javax.swing.text.*;
010 import javax.swing.text.html.*;
011
012 import com.croftsoft.core.gui.GuiCreator;
013 import com.croftsoft.core.gui.LogPanel;
014 import com.croftsoft.core.gui.PairsPanel;
015 import com.croftsoft.core.jnlp.JnlpProxy;
016 import com.croftsoft.core.lang.NullArgumentException;
017 import com.croftsoft.core.lang.ObjectLib;
018 import com.croftsoft.core.lang.Pair;
019 import com.croftsoft.core.util.pubsub.Subscriber;
020
021 /*********************************************************************
022 * Main Agoracast GUI panel.
023 *
024 * <p />
025 *
026 * @version
027 * 2002-02-03
028 * @since
029 * 2001-07-06
030 * @author
031 * <a href="http://croftsoft.com/">David Wallace Croft</a>
032 *********************************************************************/
033
034 public final class AgoracastPanel
035 extends JPanel
036 implements AgoracastConstants, HyperlinkListener
037 //////////////////////////////////////////////////////////////////////
038 //////////////////////////////////////////////////////////////////////
039 {
040
041 private final AgoracastMediator agoracastMediator;
042
043 private final PairsPanel configPairsPanel;
044
045 //////////////////////////////////////////////////////////////////////
046 //////////////////////////////////////////////////////////////////////
047
048 public AgoracastPanel (
049 AgoracastMediator agoracastMediator,
050 String documentationText,
051 Frame parentFrame )
052 //////////////////////////////////////////////////////////////////////
053 {
054 super ( new BorderLayout ( ), true ); // isDoubleBuffered
055
056 NullArgumentException.check (
057 this.agoracastMediator = agoracastMediator );
058
059 AgoracastLib.setColor ( this, agoracastMediator );
060
061 Color panelBackgroundColor
062 = agoracastMediator.getPanelBackgroundColor ( );
063
064 Color textFieldBackgroundColor
065 = agoracastMediator.getTextFieldBackgroundColor ( );
066
067 /*
068 JMenuBar jMenuBar = new JMenuBar ( );
069
070 jMenuBar.add ( new JMenu ( "About" ) );
071
072 add ( jMenuBar, BorderLayout.NORTH );
073 */
074
075 JTabbedPane jTabbedPane = new JTabbedPane ( );
076
077 configPairsPanel = new PairsPanel (
078 createConfigPairs ( ),
079 AgoracastConstants.CONFIG_HELP_TEXT,
080 new ChangeListener ( )
081 {
082 public void stateChanged ( ChangeEvent changeEvent )
083 {
084 handleConfigUpdate ( );
085 }
086 },
087 true,
088 panelBackgroundColor,
089 textFieldBackgroundColor );
090
091 final JEditorPane jEditorPane
092 = GuiCreator.createHtmlPane ( documentationText, this );
093
094 new Thread (
095 new Runnable ( )
096 {
097 public void run ( )
098 {
099 try
100 {
101 URL documentationURL = new URL ( DOCUMENTATION_URL );
102
103 jEditorPane.setPage ( documentationURL );
104 }
105 catch ( Exception ex )
106 {
107 ex.printStackTrace ( );
108 }
109 }
110 } ).start ( );
111
112 jTabbedPane.addTab (
113 "Documentation", new JScrollPane ( jEditorPane ) );
114
115 jTabbedPane.addTab ( "Configuration", configPairsPanel );
116
117 jTabbedPane.addTab ( "Browse",
118 new AgoracastBrowsePanel ( agoracastMediator ) );
119
120 jTabbedPane.addTab ( "Defaults",
121 new AgoracastDefaultsPanel ( agoracastMediator ) );
122
123 jTabbedPane.addTab ( "Post",
124 new AgoracastPostPanel ( agoracastMediator ) );
125
126 AgoracastLogPanel agoracastLogPanel = new AgoracastLogPanel (
127 agoracastMediator, LOG_TEXT_LENGTH_MAX, panelBackgroundColor );
128
129 jTabbedPane.addTab ( "Log", new JScrollPane ( agoracastLogPanel ) );
130
131 add ( jTabbedPane, BorderLayout.CENTER );
132
133 agoracastMediator.setJTabbedPane ( jTabbedPane );
134
135 agoracastMediator.setTabEnabled ( TAB_INDEX_LOG, false );
136
137 agoracastMediator.setLog ( agoracastLogPanel );
138 }
139
140 //////////////////////////////////////////////////////////////////////
141 //////////////////////////////////////////////////////////////////////
142
143 public synchronized void hyperlinkUpdate ( HyperlinkEvent e )
144 //////////////////////////////////////////////////////////////////////
145 {
146 try
147 {
148 if ( e.getEventType ( ) == HyperlinkEvent.EventType.ACTIVATED )
149 {
150 JEditorPane jEditorPane = ( JEditorPane ) e.getSource ( );
151
152 if ( e instanceof HTMLFrameHyperlinkEvent )
153 {
154 HTMLDocument htmlDocument
155 = ( HTMLDocument ) jEditorPane.getDocument ( );
156
157 htmlDocument.processHTMLFrameHyperlinkEvent (
158 ( HTMLFrameHyperlinkEvent ) e );
159 }
160 else
161 {
162 URL url = e.getURL ( );
163
164 if ( !JnlpProxy.showDocument ( url ) )
165 {
166 System.out.println ( url );
167 }
168 }
169 }
170 }
171 catch ( Exception ex )
172 {
173 agoracastMediator.getLog ( ).record ( ex );
174 }
175 }
176
177 //////////////////////////////////////////////////////////////////////
178 //////////////////////////////////////////////////////////////////////
179
180 public synchronized void handleConfigUpdate ( )
181 //////////////////////////////////////////////////////////////////////
182 {
183 String email = configPairsPanel.getText ( CONFIG_EMAIL );
184
185 String server = configPairsPanel.getText ( CONFIG_SERVER );
186
187 String username = configPairsPanel.getText ( CONFIG_USERNAME );
188
189 String newsgroup = configPairsPanel.getText ( CONFIG_NEWSGROUP );
190
191 agoracastMediator.setEmail ( email );
192
193 agoracastMediator.setServer ( server );
194
195 agoracastMediator.setUsername ( username );
196
197 agoracastMediator.setNewsgroup ( newsgroup );
198
199 configPairsPanel.setText ( createConfigPairs ( ) );
200 }
201
202 //////////////////////////////////////////////////////////////////////
203 //////////////////////////////////////////////////////////////////////
204
205 private Pair [ ] createConfigPairs ( )
206 //////////////////////////////////////////////////////////////////////
207 {
208 return new Pair [ ]
209 {
210 new Pair ( CONFIG_SERVER , agoracastMediator.getServer ( ) ),
211 new Pair ( CONFIG_EMAIL , agoracastMediator.getEmail ( ) ),
212 new Pair ( CONFIG_USERNAME , agoracastMediator.getUsername ( ) ),
213 new Pair ( CONFIG_NEWSGROUP, agoracastMediator.getNewsgroup ( ) )
214 };
215 }
216
217 //////////////////////////////////////////////////////////////////////
218 //////////////////////////////////////////////////////////////////////
219 }