001 /*
002 * cs101 Graphical Semaphore
003 * $Id: GraphicalSemaphore.java,v 1.1.1.1 2002/06/05 21:56:32 root Exp $
004 *
005 * Developed for "Rethinking CS101", a project of Lynn Andrea Stein's AP Group.
006 * For more information, see <a href="http://www.ai.mit.edu/projects/cs101/">the
007 * CS101 homepage</a> or email <las@ai.mit.edu>.
008 *
009 * Copyright (C) 1996 Massachusetts Institute of Technology.
010 * Please do not redistribute without obtaining permission.
011 */
012
013 package cs101.util.semaphore;
014 import java.awt.*;
015
016 /**
017 * cs101.util.GraphicalSemaphore is the abstract super class for both
018 * the GBS (Graphical Binary semaphore) and the GCS
019 * (Graphical Counting semaphore). <br>
020 * It provides a common interface for the two sub-classes:
021 * gs.request(), gs.release() as well as doing alot of the
022 * graphical grunt work.
023 * <br>
024 * Copyright 1996 Massachusetts Institute of Technology
025 *
026 * @see GCS
027 * @see GBS
028 *
029 * @author Todd C. Parnell, tparnell@ai.mit.edu
030 * @author Joshua R. Brown, reuben@ai.mit.edu
031 * @version $Id: GraphicalSemaphore.java,v 1.1.1.1 2002/06/05 21:56:32 root Exp $
032 *
033 */
034 public abstract class GraphicalSemaphore extends Panel {
035 /** Number of instances created */
036 protected static int InstanceCounter = 0;
037 /** my number in the InstanceCount(er) */
038 protected int myNumber;
039 /** label for the semaphore */
040 protected Label label;
041 /** display panel for the semaphore */
042 protected Panel display;
043
044 /**
045 * Creates some of the GUI objects needed by it's subclasses.
046 *
047 * Creates a panel to display the semaphore in and a label with
048 * the text passed.
049 *
050 * @param label A string that will identify the semaphore in the
051 * display.
052 */
053 public GraphicalSemaphore(String label) {
054 super();
055 this.label = new Label(label);
056 this.myNumber = this.InstanceCounter++;
057 }
058
059 /**
060 * This method should be Called by the subclass after it's part of the gui
061 * setup is complete.
062 *
063 * It expects the the display Panel has been initialized by the subclss.
064 * It Adds the completed gui components to the panel.
065 */
066 protected void setupGUI() {
067 // Graphics setup
068 this.add(this.label);
069 this.add(this.display);
070 }
071
072 /** <i>abstract - must be overidden in subclass</i> */
073 protected abstract void showStatus();
074 /** <i>abstract - must be overidden in subclass</i> */
075 public abstract void request();
076 /** <i>abstract - must be overidden in subclass</i> */
077 public abstract void release();
078
079 /**
080 * Determines the mininum size necessary for this component.
081 * Called by this objects container.
082 *
083 * @return the minimum size of the object
084 */
085 public Dimension getMinimumSize() {
086 Dimension sizeOfLabel = this.label.getMinimumSize();
087 Dimension sizeOfDisplay = this.display.getMinimumSize();
088
089 // see which has the greater height
090 if (sizeOfDisplay.height >= sizeOfLabel.height)
091 return new Dimension(sizeOfLabel.width
092 +sizeOfDisplay.width+15,
093 sizeOfDisplay.height);
094 else
095 return new Dimension(sizeOfLabel.width
096 +sizeOfDisplay.width+15,
097 sizeOfDisplay.height);
098 }
099
100 /**
101 * Determines the preferedSize necessary for this component.
102 * Called by this objects container.
103 *
104 * @return the preferred size of the object
105 */
106 public Dimension getPreferredSize() {
107 Dimension sizeOfLabel = this.label.getPreferredSize();
108 Dimension sizeOfDisplay = this.display.getPreferredSize();
109
110 // see which has the greater height
111 if (sizeOfDisplay.height >= sizeOfLabel.height)
112 return new Dimension(sizeOfLabel.width
113 +sizeOfDisplay.width+15,
114 sizeOfDisplay.height+15);
115 else
116 return new Dimension(sizeOfLabel.width
117 +sizeOfDisplay.width+15,
118 sizeOfDisplay.height+15);
119 }
120
121 }
122
123 /* Comments:
124 *
125 * History:
126 * $Log: GraphicalSemaphore.java,v $
127 * Revision 1.1.1.1 2002/06/05 21:56:32 root
128 * CS101 comes to Olin finally.
129 *
130 * Revision 1.1 2000/04/24 22:17:22 nathanw
131 * Bulk reorganization
132 *
133 * Revision 1.3 1998/07/24 17:19:28 tparnell
134 * Placate new javadoc behavior
135 *
136 * Revision 1.2 1998/06/03 19:40:55 tparnell
137 * update from Java 1.0 to 1.1
138 *
139 * Revision 1.1 1998/03/13 22:18:14 tparnell
140 * Import from server crash. I think the src and class files match up.
141 *
142 * Revision 1.5 1996/08/02 23:37:02 reuben
143 * Improved javadoc comments.
144 *
145 * Revision 1.4 1996/08/01 18:26:27 reuben
146 * More javadoc tweaking (hopefully the final pass)
147 *
148 * Revision 1.3 1996/08/01 16:19:56 reuben
149 * Fixed javadoc problem with return.
150 *
151 * Revision 1.2 1996/07/25 18:27:42 reuben
152 * Added all kinds of comments.
153 * Compiled and tested.
154 *
155 */
156
157
158
159
160