001         package com.croftsoft.apps.agoracast.c2p;
002    
003         import java.awt.*;
004         import java.awt.event.*;
005         import java.io.*;
006         import java.util.*;
007         import javax.swing.*;
008    
009         import com.croftsoft.core.gui.ButtonPanel2;
010         import com.croftsoft.core.gui.CheckBoxPanel;
011         import com.croftsoft.core.lang.NullArgumentException;
012         import com.croftsoft.core.lang.Pair;
013         import com.croftsoft.core.lang.StringLib;
014         import com.croftsoft.core.util.log.Log;
015         import com.croftsoft.core.util.pubsub.Subscriber;
016    
017         /*********************************************************************
018         * Allows the user to select/deselect fields from a list.
019         *
020         * <p />
021         *
022         * @version
023         *   2002-01-29
024         * @since
025         *   2001-10-11
026         * @author
027         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
028         *********************************************************************/
029    
030         public final class  AgoracastFieldsPanel
031           extends JPanel
032           implements ActionListener
033         //////////////////////////////////////////////////////////////////////
034         //////////////////////////////////////////////////////////////////////
035         {
036    
037         public static final Object  DONE_BUTTON_EVENT = new Object ( );
038    
039         //
040    
041         private final AgoracastMediator   agoracastMediator;
042    
043         private final Subscriber          eventSubscriber;
044    
045         private final CheckBoxPanel       checkBoxPanel;
046    
047         private final JButton             doneButton;
048    
049         //////////////////////////////////////////////////////////////////////
050         //////////////////////////////////////////////////////////////////////
051    
052         public  AgoracastFieldsPanel (
053           AgoracastMediator  agoracastMediator,
054           Subscriber         eventSubscriber )
055         //////////////////////////////////////////////////////////////////////
056         {
057           super ( new BorderLayout ( ), true ); // isDoubleBuffered
058    
059           NullArgumentException.check (
060             this.agoracastMediator = agoracastMediator );
061    
062           NullArgumentException.check (
063             this.eventSubscriber = eventSubscriber );
064    
065           AgoracastLib.setColor ( this, agoracastMediator );
066    
067           AgoracastField [ ]  agoracastFields
068             = agoracastMediator.getAgoracastFields ( );
069    
070           String [ ]  fieldNames  = new String [ agoracastFields.length ];
071    
072           String [ ]  descriptors = new String [ agoracastFields.length ];
073    
074           for ( int  i = 0; i < agoracastFields.length; i++ )
075           {
076             fieldNames [ i ]  = agoracastFields [ i ].getName ( );
077    
078             descriptors [ i ] = agoracastFields [ i ].getSemantic ( );
079           }
080    
081           checkBoxPanel = new CheckBoxPanel ( fieldNames, descriptors,
082             agoracastMediator.getPanelBackgroundColor ( ) );
083    
084           add ( new JScrollPane ( checkBoxPanel ), BorderLayout.CENTER );
085    
086           doneButton = new JButton ( "Done" );
087    
088           doneButton.addActionListener ( this );
089    
090           add ( doneButton, BorderLayout.SOUTH );
091         }
092    
093         //////////////////////////////////////////////////////////////////////
094         //////////////////////////////////////////////////////////////////////
095    
096         public synchronized String [ ]  getFieldNames ( )
097         //////////////////////////////////////////////////////////////////////
098         {
099           return checkBoxPanel.getLabelNames ( );
100         }
101    
102         public synchronized String [ ]  getSelectedFieldNames ( )
103         //////////////////////////////////////////////////////////////////////
104         {
105           return checkBoxPanel.getSelectedLabelNames ( );
106         }
107    
108         public synchronized boolean  isSelected ( String  fieldName )
109         //////////////////////////////////////////////////////////////////////
110         {
111           return checkBoxPanel.isSelected ( fieldName );
112         }
113    
114         public synchronized void  setSelected (
115           String   fieldName,
116           boolean  selected )
117         //////////////////////////////////////////////////////////////////////
118         {
119           checkBoxPanel.setSelected ( fieldName, selected );
120         }
121    
122         public synchronized void  setSelectedFieldNames (
123           String [ ]  selectedFieldNames )
124         //////////////////////////////////////////////////////////////////////
125         {
126           checkBoxPanel.setAllSelected ( false );
127    
128           for ( int  i = 0; i < selectedFieldNames.length; i++ )
129           {
130             checkBoxPanel.setSelected ( selectedFieldNames [ i ], true );
131           }
132         }
133    
134         //////////////////////////////////////////////////////////////////////
135         //////////////////////////////////////////////////////////////////////
136    
137         public synchronized void  actionPerformed ( ActionEvent  actionEvent )
138         //////////////////////////////////////////////////////////////////////
139         {
140           try
141           {
142             Object  source = actionEvent.getSource ( );
143    
144             if ( source == doneButton )
145             {
146               eventSubscriber.receive ( DONE_BUTTON_EVENT );
147             }
148           }
149           catch ( Exception  ex )
150           {
151             agoracastMediator.getLog ( ).record ( ex );
152           }
153         }
154    
155         //////////////////////////////////////////////////////////////////////
156         //////////////////////////////////////////////////////////////////////
157         }