CSP for Java
(JCSP) 1.0-rc4

jcsp.awt
Class ActiveTextEnterArea

java.lang.Object
  |
  +--jcsp.awt.ActiveTextEnterArea
All Implemented Interfaces:
CSProcess

public class ActiveTextEnterArea
extends Object
implements CSProcess

A specialisation of ActiveTextArea that writes text to the event channel only when ESCAPE is pressed.

Process Diagram

                            _____________________________________
                           |                                     |
                           |    __________________               |
                           |   |                  |    ______    |
                           |   |                  |-<-|      |   | event
                           |   |                  |->-| anon |---|----->-----
                           |   |                  |->-|______|   | (java.lang.String)
                           |   |                  |              |
                           |   |                  |              | componentEvent 
                           |   |                  |--------------|----->-----
                           |   |                  |              | (java.awt.event.ComponentEvent)
                           |   |                  |              |
                           |   |                  |              | focusEvent 
                           |   |                  |--------------|----->-----
                 configure |   |                  |              | (java.awt.event.FocusEvent)
                ----->-----|---|  ActiveTextArea  |              |
        (java.lang.String) |   |                  |              | keyEvent 
       (java.lang.Boolean) |   |                  |--------------|----->-----
(ActiveTextArea.Configure) |   |                  |              | (java.awt.event.KeyEvent)
        (java.lang.Object) |   |                  |              |
                           |   |                  |              | mouseEvent 
                           |   |                  |--------------|----->-----
                           |   |                  |              | (java.awt.event.MouseEvent)
                           |   |                  |              |
                           |   |                  |              | mouseMotionEvent 
                           |   |                  |--------------|----->-----
                           |   |                  |              | (java.awt.event.MouseEvent)
                           |   |__________________|              |  
                           |                                     |
                           |          ActiveTextEnterArea        |
                           |_____________________________________|
 

Description

ActiveTextEnterArea is a process containing an ActiveTextArea, configured with channels for event notification and configuration. The event channels should be connected to one or more application-specific server processes (instead of registering a passive object as a Listener to this component).

All channels are optional. The configure and event channels are settable from a constructor.

The difference between this class and ActiveTextArea is that text is only written to the event channel when ESCAPE is pressed on the text area (not on every keystroke). When this happens, the text area is temporarilly disabled for (by default) half a second; this is to give feedback to the user. The disable period can be changed by calling the setDisableTime method before the process is run.

The internal ActiveTextArea can be extracted with the getActiveTextArea method. Channels can then be added to notify the occurrence of any other type of Event the ActiveFrame generates. This is done by calling its appropriate addXXXEventChannel method (before the process is run). As many channels can be added as are needed.

Messages can be sent down the configure channel at any time to configure the component. See the table below for details.

All channels are managed by independent internal handler processes. It is, therefore, safe for a serial application process both to service an event channel and configure the component -- no deadlock can occur.

IMPORTANT: it is essential that the output channels from this process are always serviced -- otherwise the Java Event Thread will be blocked and the GUI will stop responding. The simplest way to guarantee this is to use channels configured with overwriting buffers. For example:

   final One2OneChannel myTextAreaEvent =
     One2OneChannel.create (new OverWriteOldestBuffer (n));
 
   final ActiveTextEnterArea myTextEnterArea =
     new ActiveTextEnterArea (null, myTextAreaEvent, "Edit Me", 5, 20);
 
This will ensure that the Java Event Thread will never be blocked. Slow or inattentive readers may miss rapidly generated events, but the n most recent events will always be available.

Channel Protocols

Input Channels
configure String Append the string to the text in this ActiveTextEnterArea
Boolean
  1. If this is the Boolean.TRUE object, the text area is made active
  2. If this is the Boolean.FALSE object, the text area is made inactive
  3. Other Boolean objects are ignored
ActiveTextArea.Configure Invoke the user-defined Configure.configure method on the textArea.
otherwise Append the toString form of the object to the text in this ActiveTextArea.
Output Channels
event String The text in the ActiveTextEnterArea (whenever ESCAPE is pressed)
componentEvent ComponentEvent See the getActiveTextArea.addComponentEventChannel method.
focusEvent FocusEvent See the getActiveTextArea.addFocusEventChannel method.
keyEvent KeyEvent See the getActiveTextArea.addKeyEventChannel method.
mouseEvent MouseEvent See the getActiveTextArea.addMouseEventChannel method.
mouseMotionEvent MouseEvent See the getActiveTextArea.addMouseMotionEventChannel method.

Example

 import jcsp.lang.*;
 import jcsp.util.*;
 import jcsp.awt.*;
 import java.awt.*;
 
 public class ActiveTextEnterAreaExample {
 
   public static void main (String argv[]) {
 
     final ActiveClosureFrame frame =
       new ActiveClosureFrame ("ActiveTextEnterArea Example");
 
     final Channel event =
       Any2OneChannel.create (new OverWriteOldestBuffer (10));
 
     final String[] string =
       {"Entia Non Sunt Multiplicanda Praeter Necessitatem",
        "Everything we do, we do it to you",
        "Race Hazards - What Rice Hozzers?",
        "Cogito Ergo Occam"};
 
     final String goodbye = "Goodbye World";
 
     final ActiveTextEnterArea[] activeText =
       new ActiveTextEnterArea[string.length];
 
     for (int i = 0; i < string.length; i++) {
       activeText[i] = new ActiveTextEnterArea (null, event, string[i], 5, 20);
     }
 
     Panel panel = new Panel (new GridLayout (string.length/2, 2));
     for (int i = 0; i < string.length; i++) {
       panel.add (activeText[i].getActiveTextArea ());
     }
 
     final Frame realFrame = frame.getActiveFrame ();
     realFrame.setBackground (Color.green);
     realFrame.add (panel);
     realFrame.pack ();
     realFrame.setVisible (true);
 
     new Parallel (
       new CSProcess[] {
         frame,
         new Parallel (activeText),
         new CSProcess () {
           public void run () {
             boolean running = true;
             while (running) {
               String s = (String) event.read ();
               System.out.println (s);
               running = (! s.equals (goodbye));
             }
             realFrame.setVisible (false);
             System.exit (0);
           }
         }
       }
     ).run ();
   }
 
 }
 

Author:
P.D.Austin and P.H.Welch
See Also:
ActiveTextArea, TextArea, ComponentEvent, FocusEvent, KeyEvent, MouseEvent, OverWriteOldestBuffer

Constructor Summary
ActiveTextEnterArea()
          Constructs a new ActiveTextEnterArea with scrollbars, but with no configuration or event channels or initial text or size.
ActiveTextEnterArea(AltingChannelInput configure, ChannelOutput event)
          Constructs a new ActiveTextEnterArea with configuration and event channels and scrollbars, but with no initial text or size.
ActiveTextEnterArea(AltingChannelInput configure, ChannelOutput event, String s)
          Constructs a new ActiveTextEnterArea with configuration and event channels and scrollbars and initial text, but with no initial size.
ActiveTextEnterArea(AltingChannelInput configure, ChannelOutput event, String s, int rows, int columns)
          Constructs a new ActiveTextEnterArea with configuration and event channels and scrollbars and initial text and size.
ActiveTextEnterArea(AltingChannelInput configure, ChannelOutput event, String s, int rows, int columns, int scrollbars)
          Constructs a new ActiveTextEnterArea with configuration and event channels and user-defined scrollbars and initial text and size.
ActiveTextEnterArea(String s)
          Constructs a new ActiveTextEnterArea with scrollbars and initial text, but with no configuration or event channels or initial size.
ActiveTextEnterArea(String s, int rows, int columns)
          Constructs a new ActiveTextEnterArea with scrollbars and initial text and size, but with no configuration or event channels.
ActiveTextEnterArea(String s, int rows, int columns, int scrollbars)
          Constructs a new ActiveTextEnterArea with user-defined scrollbars and initial text and size, but with no configuration or event channels.
 
Method Summary
 ActiveTextArea getActiveTextArea()
          This is used to get the ActiveTextArea within this component so that it can be configured (using TextArea or ActiveTextArea methods) or added to some container.
 void run()
          The main body of this process.
 void setConfigureChannel(AltingChannelInput configure)
          Sets the configuration channel for this ActiveTextEnterArea.
 void setDisableTime(long disableTime)
          This is used to set the time during which the text area is disabled after an ESCAPE has been entered.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ActiveTextEnterArea

public ActiveTextEnterArea()
Constructs a new ActiveTextEnterArea with scrollbars, but with no configuration or event channels or initial text or size.

ActiveTextEnterArea

public ActiveTextEnterArea(String s)
Constructs a new ActiveTextEnterArea with scrollbars and initial text, but with no configuration or event channels or initial size.
Parameters:
s - the initial text displayed in the area.

ActiveTextEnterArea

public ActiveTextEnterArea(String s,
                           int rows,
                           int columns)
Constructs a new ActiveTextEnterArea with scrollbars and initial text and size, but with no configuration or event channels.
Parameters:
s - the initial text displayed in the area.
rows - the rows of the area.
columns - the columns of the area.

ActiveTextEnterArea

public ActiveTextEnterArea(String s,
                           int rows,
                           int columns,
                           int scrollbars)
Constructs a new ActiveTextEnterArea with user-defined scrollbars and initial text and size, but with no configuration or event channels.
Parameters:
s - the initial text displayed in the area.
rows - the rows of the area.
columns - the columns of the area.
scrollbars - the columns of the area (java.awt.TextArea.SCROLLBARS_BOTH, java.awt.TextArea.SCROLLBARS_VERTICAL_ONLY, java.awt.TextArea.SCROLLBARS_HORIZONTAL_ONLY or java.awt.TextArea.SCROLLBARS_NONE).

ActiveTextEnterArea

public ActiveTextEnterArea(AltingChannelInput configure,
                           ChannelOutput event)
Constructs a new ActiveTextEnterArea with configuration and event channels and scrollbars, but with no initial text or size.
Parameters:
configure - the AltingChannelInput for configuration events -- can be null if no configuration is required.
event - the current text will be output when the text area is changed -- can be null if no notification is required.

ActiveTextEnterArea

public ActiveTextEnterArea(AltingChannelInput configure,
                           ChannelOutput event,
                           String s)
Constructs a new ActiveTextEnterArea with configuration and event channels and scrollbars and initial text, but with no initial size.
Parameters:
configure - the AltingChannelInput for configuration events -- can be null if no configuration is required.
event - the current text will be output when the text area is changed -- can be null if no notification is required.
s - the initial text displayed in the area.

ActiveTextEnterArea

public ActiveTextEnterArea(AltingChannelInput configure,
                           ChannelOutput event,
                           String s,
                           int rows,
                           int columns)
Constructs a new ActiveTextEnterArea with configuration and event channels and scrollbars and initial text and size.
Parameters:
configure - the AltingChannelInput for configuration events -- can be null if no configuration is required.
event - the current text will be output when the text area is changed -- can be null if no notification is required.
s - the initial text displayed in the area.
rows - the rows of the area.
columns - the columns of the area.

ActiveTextEnterArea

public ActiveTextEnterArea(AltingChannelInput configure,
                           ChannelOutput event,
                           String s,
                           int rows,
                           int columns,
                           int scrollbars)
Constructs a new ActiveTextEnterArea with configuration and event channels and user-defined scrollbars and initial text and size.
Parameters:
configure - the AltingChannelInput for configuration events -- can be null if no configuration is required.
event - the current text will be output when the text area is changed -- can be null if no notification is required.
s - the initial text displayed in the area.
rows - the rows of the area.
columns - the columns of the area.
scrollbars - the columns of the area (java.awt.TextArea.SCROLLBARS_BOTH, java.awt.TextArea.SCROLLBARS_VERTICAL_ONLY, java.awt.TextArea.SCROLLBARS_HORIZONTAL_ONLY or java.awt.TextArea.SCROLLBARS_NONE).
Method Detail

setConfigureChannel

public void setConfigureChannel(AltingChannelInput configure)
Sets the configuration channel for this ActiveTextEnterArea. This method overwrites any configuration channel set in the constructor.
Parameters:
configure - the channel for configuration events -- can be null if no configuration is required.

setDisableTime

public void setDisableTime(long disableTime)
This is used to set the time during which the text area is disabled after an ESCAPE has been entered.

NOTE: This may only be called before this process is run.

Parameters:
disableTime - the disable time after an ESCAPE.

getActiveTextArea

public ActiveTextArea getActiveTextArea()
This is used to get the ActiveTextArea within this component so that it can be configured (using TextArea or ActiveTextArea methods) or added to some container. For example, event channels can be added by invoking getActiveTextArea().addXXXEventChannel(...).

NOTE: such configuration must be finished before this process is run.

NOTE: do not use this method to set a configure channel - use an appropriate constructor or setConfigureChannel.

Returns:
the ActiveTextArea within this component.

run

public void run()
The main body of this process.
Specified by:
run in interface CSProcess

CSP for Java
(JCSP) 1.0-rc4

Submit a bug or feature to jcsp-team@ukc.ac.uk
Version 1.0-rc4 of the JCSP API Specification (Copyright 1997-2000 P.D.Austin and P.H.Welch - All Rights Reserved)
Java is a trademark or registered trademark of Sun Microsystems, Inc. in the US and other countries.