]> code.citadel.org Git - citadel.git/blob - shaggy/messagePanel.java
Clarify that we are GPLv2
[citadel.git] / shaggy / messagePanel.java
1 import javax.swing.*;
2 import java.awt.*;
3 import java.awt.event.*;
4 import java.util.*;
5
6 public class messagePanel extends JPanel {
7     roomFrame   parent;
8     JTextField  blurb;
9     JTextArea   message;
10
11     roomInfo    ri;
12     Vector      msgs;
13     int         cur_pos = 0;
14
15     JComboBox   jcb;
16     JButton     next_msg, prev_msg;
17     boolean     ignore_box = false;
18
19     public messagePanel( final roomFrame parent ) {
20         this.parent = parent;
21
22         setLayout( new BorderLayout() );
23         
24         JPanel  p = new JPanel();
25         p.setLayout( new BorderLayout() );
26         /*      p.setBorder( BorderFactory.createTitledBorder( 
27                 BorderFactory.createEtchedBorder(), "Cmds" ) ); */
28
29         VertPanel       vp = new VertPanel();
30         p.add( "Center", vp );
31         JButton         b;
32
33         vp.add( b = new JButton( "Next Room" ) );
34         b.addActionListener( new ActionListener() {
35             public void actionPerformed( ActionEvent e ) {
36                 citadel.me.enterRoom( citadel.me.rooms.nextNewRoom() );
37             } } );
38
39         vp.add( b = new JButton( "Enter Message" ) );
40         b.addActionListener( new ActionListener() {
41             public void actionPerformed( ActionEvent e ) {
42                 parent.enterMessage();
43             } } );
44
45         vp.add( b = new JButton( "Read Info" ) );
46         b.addActionListener( new ActionListener() {
47             public void actionPerformed( ActionEvent e ) {
48                 new roomInfoWindow( ri );
49             } } );
50
51         vp.add( b = new JButton( "Zap Room" ) );
52         b.addActionListener( new ActionListener() {
53             public void actionPerformed( ActionEvent e ) {
54                 if( JOptionPane.showConfirmDialog( null, "Zap " + ri.name + "?" ) == 0 )
55                     citadel.me.zapRoom( ri );
56             } } );
57
58
59         jcb = new JComboBox();
60         jcb.addItem( "Read New" );
61         jcb.addItem( "Read All" );
62         jcb.addItem( "Last 5" );
63         jcb.addActionListener( new ActionListener() {
64             public void actionPerformed( ActionEvent e ) {
65                 if( !ignore_box )
66                     refresh();
67             }
68         } );
69
70         vp.add( jcb );
71
72         add( "West", p );
73
74         p = new JPanel();
75
76         p.add( prev_msg = new JButton( "Prev Message" ) );
77         prev_msg.addActionListener( new ActionListener() {
78             public void actionPerformed( ActionEvent e ) {
79               prevMessage();
80             } } );
81
82         p.add( next_msg = new JButton( "Next Message" ) );
83         next_msg.addActionListener( new ActionListener() {
84             public void actionPerformed( ActionEvent e ) {
85               nextMessage();
86             } } );
87
88
89         add( "South", p );
90
91
92         p = new JPanel();
93         p.setLayout( new BorderLayout() );
94
95         p.add( "North", blurb = new JTextField() );
96         blurb.setEditable( false );
97         p.add( "Center", 
98                new JScrollPane( message = new JTextArea(),
99                                 JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
100                                 JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ) );
101         message.setEditable( false );
102         message.setLineWrap( true );
103         message.setWrapStyleWord( true );
104         add( "Center", p );
105     }
106
107   public void nextMessage() {
108     cur_pos++;
109     displayMessage();
110   }
111
112   public void prevMessage() {
113     cur_pos--;
114     displayMessage();
115   }
116
117     public void refresh() {
118         refresh( ri );
119     }
120
121     public void refresh( roomInfo ri ) {
122         this.ri = ri;
123
124         cur_pos = 0;
125         msgs = new Vector();
126
127         /* add new, all, last, etc. */
128
129         String  cmd = "new";
130         switch( jcb.getSelectedIndex() ) {
131         case    0:      // new
132             break;
133         case 1:         // All
134             cmd = "all";
135             break;
136         case 2:         // Last - 5
137             cmd = "last|5";
138             break;
139         }
140
141         next_msg.setEnabled( false );
142         prev_msg.setEnabled( false );
143
144         citadel.me.networkEvent( "MSGS " + cmd, new CallBack() {
145             public void run( citReply   r ) {
146                 msgs = r.listing;
147                 displayMessage();
148             } } );
149     }
150
151     public void displayMessage() {
152         if( (msgs == null) || (msgs.size() == 0) ) {
153             blurb.setText( "" );
154             message.setText( "<no messages>" );
155             return;
156         }
157
158         if( cur_pos <= 0 ) {
159             cur_pos = 0;
160             prev_msg.setEnabled( false );
161         } else
162             prev_msg.setEnabled( true );
163
164         if( cur_pos >= msgs.size()-1 ) {
165             cur_pos = msgs.size()-1;
166             next_msg.setEnabled( false );
167         } else
168             next_msg.setEnabled( true );
169
170         final String    num = (String)msgs.elementAt( cur_pos );
171
172         citadel.me.networkEvent( "MSG0 " + num + "|0", new CallBack() {
173             public void run( citReply r ) {
174                 if( r.error() ) {
175                     blurb.setText( "<error>" );
176                     message.setText( r.getArg(0) );
177                 } else {
178                     message msg = new message( ri, msgs.size(), cur_pos, r );
179                     blurb.setText( msg.getBlurb() );
180                     message.setText( msg.getText() );
181                     int n = citadel.atoi( num );
182                     if( n  > ri.highest_read ) {
183                         citadel.me.networkEvent( "SLRP " + num );
184                         ri.highest_read = n;
185                     }
186                 }
187             }
188         } );
189     }
190 }