(s1, "|", false);
item.addElement(stringtokenizer.nextToken());
String s2 = stringtokenizer.nextToken();
if(s2.equals("*"))
msg.addElement(s2);
else
msg.addElement(getParameter(s2));
level.addElement(new Integer(0));
if(stringtokenizer.hasMoreTokens())
{
StringTokenizer stringtokenizer1 = new StringTokenizer(stringtokenizer.nextToken(), ",", false);
StringTokenizer stringtokenizer2 = new StringTokenizer(stringtokenizer.nextToken(), ",", false);
for(; stringtokenizer1.hasMoreTokens(); level.addElement(new Integer(1)))
{
item.addElement(stringtokenizer1.nextToken());
String s3 = stringtokenizer2.nextToken();
msg.addElement(getParameter(s3));
}
}
i++;
} while(true);
currItems = new Vector();
for(int j = 0; j < item.size(); j++)
if(((Integer)level.elementAt(j)).intValue() == 0)
currItems.addElement(new Integer(j));
setBackground(bgColor);
ac1 = getAudioClip(getCodeBase(), "expand.au");
ac2 = getAudioClip(getCodeBase(), "shrink.au");
ac3 = getAudioClip(getCodeBase(), "ding.au");
width = size().width;
firstLevelIdxes = currItems;
firstLevelImg = renderImg(firstLevelIdxes, -1, -1);
expanded = currItems.size();
}
public boolean mouseDown(Event event, int i, int j)
{
if(j >= currItems.size() * height)
return true;
int k = j / height;
int l = ((Integer)currItems.elementAt(k)).intValue();
AppletContext appletcontext = getAppletContext();
try
{
String s = (String)msg.elementAt(l);
String s1 = s.substring(s.indexOf('|') + 1);
URL url;
if(!s1.startsWith("http://") && !s1.startsWith("mailto:"))
url = new URL(getCodeBase() + s1);
else
if(((Integer)level.elementAt(l)).intValue() == 1)
{
selectedIndex = l;
currItemImg = renderItemImg(new Integer(l), 0, -1);
bottomImg = renderImg(bottomImgIdxes, -1, -1);
firstLevelImg = renderImg(firstLevelIdxes, -1, -1);
} else
if(l == item.size() - 1 || ((Integer)level.elementAt(l + 1)).intValue() == 0)
{
selectedIndex = l;
if(bottomImgIdxes != null)
bottomImg = renderImg(bottomImgIdxes, -1, -1);
currItemImg = renderItemImg(new Integer(l), 0, -1);
firstLevelImg = renderImg(firstLevelIdxes, -1, -1);
} else
{
if(selected >= expanded)
currItemImg = null;
beginX = 0;
for(int k1 = 0; k1 < totalLevel1Num; k1++)
{
beginX++;
Graphics g1 = getGraphics();
paint(g1);
ac2.play();
if(k1 == totalLevel1Num - 1)
continue;
try
{
Thread.sleep(100L);
continue;
}
catch(InterruptedException _ex) { }
break;
}
currItems = new Vector();
bottomImgIdxes = new Vector();
int l1;
for(l1 = 0; l1 <= l; l1++)
if(((Integer)level.elementAt(l1)).intValue() == 0)
currItems.addElement(new Integer(l1));
Vector vector = new Vector();
vector.addElement(currItems.lastElement());
currExpandedItemImg = renderImg(vector, -1, 0);
expanded = currItems.size() - 1;
for(totalLevel1Num = 0; l1 < item.size() && ((Integer)level.elementAt(l1)).intValue() == 1; totalLevel1Num++)
{
currItems.addElement(new Integer(l1));
bottomImgIdxes.addElement(new Integer(l1));
l1++;
}
for(; l1 < item.size(); l1++)
if(((Integer)level.elementAt(l1)).intValue() == 0)
{
currItems.addElement(new Integer(l1));
bottomImgIdxes.addElement(new Integer(l1));
}
bottomImg = renderImg(bottomImgIdxes, -1, -1);
beginX = totalLevel1Num;
for(int i2 = 0; i2 < totalLevel1Num; i2++)
{
beginX--;
Graphics g2 = getGraphics();
paint(g2);
ac1.play();
if(i2 == totalLevel1Num - 1)
continue;
try
{
Thread.sleep(100L);
continue;
}
catch(InterruptedException _ex) { }
break;
}
if(k < currItems.size())
{
int i1 = ((Integer)currItems.elementAt(k)).intValue();
currItemImg = renderItemImg(new Integer(i1), 0, 0);
}
}
repaint();
return true;
}
public boolean mouseExit(Event event, int i, int j)
{
currItemImg = null;
selected = -1;
repaint();
return true;
}
public boolean mouseMove(Event event, int i, int j)
{
if(j >= currItems.size() * height)
{
currItemImg = null;
selected = -1;
repaint();
return true;
}
if(selected == j / height)
return true;
selected = j / height;
byte byte0 = -1;
if(selected == expanded)
byte0 = 0;
currItemImg = renderItemImg((Integer)currItems.elementAt(selecte d), 0, byte0);
repaint();
System.gc();
return true;
}
public void paint(Graphics g)
{
int i = size().width;
int j = size().height;
if(bbuf == null)
{
bbuf = createImage(i, j);
bbufG = bbuf.getGraphics();
}
bbufG.setClip(0, 0, i, expanded * height);
bbufG.drawImage(firstLevelImg, 0, 0, this);
if(currExpandedItemImg != null)
{
bbufG.setClip(0, expanded * height, i, height);
bbufG.drawImage(currExpandedItemImg, 0, expanded * height, this);
}
if(bottomImg != null)
{
bbufG.setClip(0, (expanded + 1) * height, i, j - (expanded + 1) * height);
bbufG.drawImage(bottomImg, 0, (expanded + 1) * height - beginX * height, this);
bbufG.setColor(getBackground());
int k = ((expanded + 1) * height - beginX * height) + bottomImg.getHeight(this);
bbufG.fillRect(0, k, i, j - k);
}
if(currItemImg != null)
{
bbufG.setClip(0, selected * height, i, height);
bbufG.drawImage(currItemImg, 0, selected * height, this);
}
g.drawImage(bbuf, 0, 0, this);
}
private Image renderImg(Vector vector, int i, int j)
{
Image image = createImage(size().width, vector.size() * height);
Graphics g = image.getGraphics();
int k = 0;
for(int l = 0; l < vector.size(); l++)
{
int i1 = ((Integer)vector.elementAt(l)).intValue();
byte byte0 = 0;
if(((Integer)level.elementAt(i1)).intValue() == 0)
{
g.setColor(level0Color);
boolean flag = true;
if(selectedIndex == i1)
flag = false;
g.fill3DRect(0, k, width, height, flag);
if(i1 + 1 < level.size() && ((Integer)level.elementAt(i1 + 1)).intValue() == 1)
{
g.setColor(Color.green);
if(arrowP == null)
{
arrowP = new Polygon();
arrowP.addPoint(0, 0);
arrowP.addPoint(0, 0);
arrowP.addPoint(0, 0);
}
if(j != l)
{
arrowP.xpoints[0] = width - 8;
arrowP.ypoints[0] = k + 5;
arrowP.xpoints[1] = width - 2;
arrowP.ypoints[1] = k + 5;
arrowP.xpoints[2] = width - 5;
arrowP.ypoints[2] = (k + height) - 5;
g.fillPolygon(arrowP);
} else
{
arrowP.xpoints[0] = width - 8;
arrowP.ypoints[0] = (k + height) - 5;
arrowP.xpoints[1] = width - 2;
arrowP.ypoints[1] = (k + height) - 5;
arrowP.xpoints[2] = width - 5;
arrowP.ypoints[2] = k + 5;
g.fillPolygon(arrowP);
}
}
} else
{
byte0 = 6;
g.setColor(subBgColor);
boolean flag1 = true;
if(selectedIndex == ((Integer)vector.elementAt(l)).intValue())
flag1 = false;
g.fill3DRect(byte0, k, size().width - 2 * byte0, height, flag1);
}
Font font;
if(l == i)
{
g.setColor(hiStrColor);
font = f1;
} else
{
g.setColor(loStrColor);
font = f2;
}
g.setFont(font);
FontMetrics fontmetrics = getFontMetrics(font);
String s = (String)item.elementAt(i1);
g.drawString(s, byte0 + 10, (k + height / 2 + fontmetrics.getHeight() / 2) - fontmetrics.getMaxDescent());
k += height;
}
return image;
}
private Image renderItemImg(Integer integer, int i, int j)
{
Vector vector = new Vector();
vector.addElement(integer);
return renderImg(vector, i, j);
}
public void update(Graphics g)
{
paint(g);
}
Image firstLevelImg;
Image bottomImg;
Image currExpandedItemImg;
Image currItemImg;
Image bbuf;
Graphics bbufG;
int width;
int height;
Color bgColor;
Color loStrColor;
Color hiStrColor;
Color level0Color;
Color subBgColor;
Vector item;
Vector level;
Vector msg;
Vector currItems;
int selectedIndex;
int selected;
int expanded;
AudioClip ac1;
AudioClip ac2;
AudioClip ac3;
Font f1;
Font f2;
int beginX;
int totalLevel1Num;
Polygon arrowP;
Vector firstLevelIdxes;
Vector bottomImgIdxes;
}