home *** CD-ROM | disk | FTP | other *** search
- package com.sfs.awt.treeview;
-
- import com.sfs.util.Sortable;
- import java.applet.Applet;
- import java.awt.AWTEvent;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.FontMetrics;
- import java.awt.Frame;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.Insets;
- import java.awt.MediaTracker;
- import java.awt.Panel;
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.Scrollbar;
- import java.awt.Window;
- import java.awt.event.AdjustmentEvent;
- import java.awt.event.AdjustmentListener;
- import java.awt.event.FocusEvent;
- import java.awt.event.InputEvent;
- import java.awt.event.KeyEvent;
- import java.awt.event.MouseEvent;
- import java.util.Vector;
-
- public class TreeView extends Panel implements AdjustmentListener {
- public int ofsX;
- public int ofsY;
- static final int FOLDER = 0;
- static final int OPENFOLDER = 1;
- static final int PLUS = 2;
- static final int MINUS = 3;
- static final int DOCUMENT = 4;
- static final int OPENDOCUMENT = 5;
- public static final int DISTANCE = 17;
- public RootFolder Root;
- Vector Icons;
- // $FF: renamed from: mt java.awt.MediaTracker
- MediaTracker field_0;
- Scrollbar Hor;
- Scrollbar Ver;
- protected Vector TreeViewListeners;
- Dimension dimension;
- boolean haveFocus;
- public boolean SelectionAllowed;
- Image Background;
-
- private void processSelection(InputEvent var1, Item var2) {
- if (this.SelectionAllowed) {
- if ((var1.getModifiers() & 3) == 0) {
- this.Root.clearSelection();
- }
-
- if (var1.isControlDown() && var1 instanceof MouseEvent) {
- if (this.Root.getCaretItem().isSelected()) {
- this.Root.getCaretItem().setSelected(false);
- return;
- }
-
- if (!(this.Root.getCaretItem() instanceof Folder) || !this.Root.getCaretItem().isOpen()) {
- this.Root.getCaretItem().setSelected(true);
- return;
- }
- } else if (var1.isShiftDown()) {
- int var3 = this.Root.indexOf(this.Root.getCaretItem());
- int var4 = this.Root.indexOf(var2);
- if (var3 > var4) {
- int var5 = var4;
- var4 = var3;
- var3 = var5;
- }
-
- Item var8 = this.Root.visibleItemAt(var3++);
-
- do {
- if (!(var8 instanceof Folder) || !var8.isOpen()) {
- var8.setSelected(true);
- }
-
- var3 = this.Root.indexOf(var8);
- var8 = this.Root.nextVisibleItem(var3);
- } while(var3 < var4);
- }
-
- }
- }
-
- public Insets getInsets() {
- return new Insets(0, 0, 2, 0);
- }
-
- protected void processFocusEvent(FocusEvent var1) {
- if (!var1.isTemporary()) {
- switch (((AWTEvent)var1).getID()) {
- case 1004:
- this.haveFocus = true;
- return;
- case 1005:
- this.haveFocus = false;
- return;
- }
- }
-
- }
-
- public void adjustmentValueChanged(AdjustmentEvent var1) {
- Scrollbar var2 = (Scrollbar)var1.getAdjustable();
- int var3 = var1.getValue();
- if (var2 == this.Hor) {
- this.ofsX = var3;
- } else {
- Item var4 = this.Root.visibleItemAt(0);
- int var5 = this.Root.indexOf(var4);
-
- for(int var6 = 0; var3 != var6; ++var6) {
- var4 = this.Root.nextVisibleItem(var5);
- var5 = this.Root.indexOf(var4);
- }
-
- this.ofsY = var5;
- }
-
- ((Component)this).repaint();
- }
-
- public void processMouseEvent(MouseEvent var1) {
- if (((AWTEvent)var1).getID() == 501) {
- int var10000 = this.dimension.width / 17;
- int var2 = this.dimension.height / 17;
- this.Root.getSpaces();
- if (var2 >= this.Root.getHeight()) {
- var2 = this.Root.getHeight() - 1;
- }
-
- Item var3 = this.Root.visibleItemAt(this.ofsY);
- int var4 = this.Root.indexOf(var3);
- int var5 = 0;
- Point var6 = var1.getPoint();
-
- do {
- Rectangle var7 = new Rectangle(10 + (var3.getSpaces() - this.ofsX) * 17 - 8, 10 + var5 * 17 - 9, 17 + this.Root.fm.stringWidth(var3.getName()) + 4, 17);
- if (var7.contains(var6)) {
- if (var1.getClickCount() == 2 && (((InputEvent)var1).getModifiers() & 3) == 0) {
- var3.setOpen(!var3.isOpen());
- }
-
- this.processSelection(var1, var3);
- this.Root.caretItem = var3;
- this.Root.AdjustScrollbars();
- ((Component)this).repaint();
- this.castTreeViewEvent(var3, var1.getClickCount());
- break;
- }
-
- if (var3 instanceof Folder) {
- Rectangle var8 = new Rectangle(10 + (var3.getSpaces() - 1 - this.ofsX) * 17 - 4, 10 + var5 * 17 - 4, 13, 13);
- if (var8.contains(var6)) {
- if ((((InputEvent)var1).getModifiers() & 3) == 0) {
- var3.setOpen(!var3.isOpen());
- }
-
- this.processSelection(var1, var3);
- this.Root.caretItem = var3;
- this.Root.AdjustScrollbars();
- ((Component)this).repaint();
- this.castTreeViewEvent(var3, var1.getClickCount());
- break;
- }
- }
-
- var3 = this.Root.nextVisibleItem(var4);
- if (var3 == null) {
- break;
- }
-
- var4 = this.Root.indexOf(var3);
- } while(var5++ < var2);
- }
-
- super.processMouseEvent(var1);
- }
-
- public synchronized void paint(Graphics var1) {
- if (this.Background == null) {
- this.Background = ((Component)this).createImage(this.dimension.width, this.dimension.height - 2);
- }
-
- Graphics var2 = this.Background.getGraphics();
- if (var2 != null) {
- var2.setColor(((Component)this).getBackground());
- var2.fillRect(0, 0, this.dimension.width, this.dimension.height);
- var2.setColor(Color.black);
- if (this.Root.fm == null) {
- FontMetrics var3 = ((Component)this).getGraphics().getFontMetrics();
- this.Root.fm = var3;
- this.Root.AdjustScrollbars();
- }
-
- if (this.field_0.statusAll(true) == 5) {
- var2.drawString("loading icons ...", 10, 10);
- } else {
- int var10 = this.dimension.width / 17;
- int var4 = this.dimension.height / 17;
- this.Root.getSpaces();
- if (var4 >= this.Root.getHeight()) {
- var4 = this.Root.getHeight() - 1;
- }
-
- Item var5 = this.Root.visibleItemAt(this.ofsY);
- int var6 = this.Root.indexOf(var5);
- int var7 = 0;
-
- do {
- boolean[] var8 = var5.getSpacesArray();
-
- for(int var9 = 0; var9 < var5.getSpaces() && var9 < var10; ++var9) {
- if (var8[var9]) {
- var2.drawLine(10 + (var9 - this.ofsX) * 17, 10 + (var7 - 1) * 17, 10 + (var9 - this.ofsX) * 17, 10 + (var7 - 1) * 17 + 17);
- }
- }
-
- if (var5 != this.Root) {
- var2.drawLine(10 + (var5.getSpaces() - 1 - this.ofsX) * 17, 10 + var7 * 17, 10 + (var5.getSpaces() - this.ofsX) * 17, 10 + var7 * 17);
- }
-
- var5 = this.Root.nextVisibleItem(var6);
- if (var5 == null) {
- break;
- }
-
- var6 = this.Root.indexOf(var5);
- } while(var7++ < var4);
-
- var5 = this.Root.visibleItemAt(this.ofsY);
- var6 = this.Root.indexOf(var5);
- var7 = 0;
-
- do {
- Image var14 = (Image)this.Icons.elementAt(var5.isOpen() ? var5.getDocumentType() + 1 : var5.getDocumentType());
- var2.drawImage(var14, 10 + (var5.getSpaces() - this.ofsX) * 17 - 8, 10 + var7 * 17 - 8, this);
- if (!this.Root.isSelectedItem(var5) && var5 != this.Root.getCaretItem()) {
- var2.setColor(var5.isDisabled() ? Color.gray : Color.black);
- } else {
- var2.setColor(Color.blue);
- var2.fillRect(9 + (var5.getSpaces() - this.ofsX) * 17 + 17 - 6, 10 + var7 * 17 - 9, this.Root.fm.stringWidth(var5.getName()) + 4, 17);
- if (var5 == this.Root.getCaretItem() && this.haveFocus) {
- var2.setColor(Color.red);
- var2.drawRect(9 + (var5.getSpaces() - this.ofsX) * 17 + 17 - 6, 10 + var7 * 17 - 9, this.Root.fm.stringWidth(var5.getName()) + 4, 16);
- }
-
- var2.setColor(Color.white);
- var2.setColor(var5.isDisabled() ? Color.gray : Color.white);
- }
-
- var2.drawString(var5.getName(), 10 + (var5.getSpaces() - this.ofsX) * 17 + 17 - 5, 10 + var7 * 17 + 5);
- var2.setColor(Color.black);
- if (var5 instanceof Folder && var5 != this.Root && ((Folder)var5).size() > 0) {
- var14 = (Image)this.Icons.elementAt(var5.isOpen() ? 3 : 2);
- var2.drawImage(var14, 10 + (var5.getSpaces() - 1 - this.ofsX) * 17 - 4, 10 + var7 * 17 - 4, this);
- }
-
- var5 = this.Root.nextVisibleItem(var6);
- if (var5 == null) {
- break;
- }
-
- var6 = this.Root.indexOf(var5);
- } while(var7++ < var4);
- }
-
- var2.dispose();
- var1.drawImage(this.Background, 0, 0, this);
- }
- }
-
- public void setSorter(Sortable var1) {
- this.Root.setSorter(var1);
- }
-
- protected void processKeyEvent(KeyEvent var1) {
- switch (((AWTEvent)var1).getID()) {
- case 400:
- if (var1.getKeyChar() == '\r') {
- this.Root.getCaretItem().setOpen(!this.Root.getCaretItem().isOpen());
- this.Root.AdjustScrollbars();
- ((Component)this).repaint();
- this.castTreeViewEvent(this.Root.getCaretItem(), 2);
- }
- break;
- case 401:
- switch (var1.getKeyCode()) {
- case 38:
- Item var3 = this.Root.prevVisibleItem(this.Root.indexOf(this.Root.caretItem));
- if (var3 != null) {
- this.processSelection(var1, var3);
- this.Root.caretItem = var3;
- ((Component)this).repaint();
- }
- case 39:
- default:
- break;
- case 40:
- Item var2 = this.Root.nextVisibleItem(this.Root.indexOf(this.Root.caretItem));
- if (var2 != null) {
- this.processSelection(var1, var2);
- this.Root.caretItem = var2;
- ((Component)this).repaint();
- }
- }
- }
-
- super.processKeyEvent(var1);
- }
-
- public void update(Graphics var1) {
- this.paint(var1);
- }
-
- public Item addItem(String var1, Object var2, int var3) throws TreeViewException {
- Object var4 = null;
- Item var5;
- this.Root.add(var5 = new Item(this.Root, this.Root, var1, var2, var3));
- return var5;
- }
-
- public Item addItem(String var1, Object var2) throws TreeViewException {
- Object var3 = null;
- Item var4;
- this.Root.add(var4 = new Item(this.Root, this.Root, var1, var2));
- return var4;
- }
-
- public synchronized void removeTreeViewListener(TreeViewListener var1) {
- this.TreeViewListeners.removeElement(var1);
- }
-
- public Folder addFolder(String var1, Object var2, int var3) throws TreeViewException {
- return this.Root.addFolder(var1, var2, var3);
- }
-
- public Folder addFolder(String var1, Object var2) throws TreeViewException {
- return this.Root.addFolder(var1, var2);
- }
-
- public Dimension getMinimumSize() {
- return this.dimension;
- }
-
- public Dimension getPreferredSize() {
- return this.dimension;
- }
-
- public void setSize(Dimension var1) {
- this.dimension = var1;
- this.Background = null;
- ((Container)this).validate();
- }
-
- public synchronized void addTreeViewListener(TreeViewListener var1) {
- this.TreeViewListeners.addElement(var1);
- }
-
- public int useIcon(Image var1, Image var2) {
- this.Icons.addElement(var1);
- this.Icons.addElement(var2);
- return this.Icons.size() - 2;
- }
-
- public void setBounds(int var1, int var2, int var3, int var4) {
- super.setBounds(var1, var2, var3, var4);
- this.dimension = ((Component)this).getSize();
- this.Background = null;
- this.Root.AdjustScrollbars();
- }
-
- private synchronized void castTreeViewEvent(Item var1, int var2) {
- int var3;
- if (var1.isOpen()) {
- var3 = var1 instanceof Folder ? 1 : 3;
- } else {
- var3 = var1 instanceof Folder ? 0 : 2;
- }
-
- TreeViewEventObject var4 = new TreeViewEventObject(var3, var1, var2, this);
-
- for(int var5 = 0; var5 < this.TreeViewListeners.size(); ++var5) {
- ((TreeViewListener)this.TreeViewListeners.elementAt(var5)).handleTreeViewEvent(var4);
- }
-
- }
-
- public TreeView(Applet var1, String var2, Object var3) {
- this(var2, var3);
- this.field_0 = new MediaTracker(this);
- Class var5 = this.getClass();
-
- for(int var6 = 0; var6 < this.Icons.capacity(); ++var6) {
- Image var4;
- this.Icons.addElement(var4 = var1.getImage(var5.getResource(Integer.toString(var6) + ".gif")));
- this.field_0.addImage(var4, var6);
- }
-
- }
-
- public TreeView(Frame var1, String var2, Object var3) {
- this(var2, var3);
- this.field_0 = new MediaTracker(this);
- Class var5 = this.getClass();
-
- for(int var6 = 0; var6 < this.Icons.capacity(); ++var6) {
- Image var4;
- this.Icons.addElement(var4 = ((Window)var1).getToolkit().getImage(var5.getResource(Integer.toString(var6) + ".gif")));
- this.field_0.addImage(var4, var6);
- }
-
- }
-
- protected TreeView(String var1, Object var2) {
- this.Icons = new Vector(6);
- this.Hor = new Scrollbar(0);
- this.Ver = new Scrollbar(1);
- this.TreeViewListeners = new Vector();
- this.dimension = new Dimension(100, 200);
- this.SelectionAllowed = true;
- this.Root = new RootFolder(this, var1, var2);
- this.Hor.addAdjustmentListener(this);
- this.Ver.addAdjustmentListener(this);
- ((Container)this).setLayout(new BorderLayout());
- this.Ver.setUnitIncrement(1);
- this.Ver.setVisibleAmount(0);
- this.Ver.setBlockIncrement(1);
- this.Hor.setUnitIncrement(1);
- this.Hor.setVisibleAmount(0);
- this.Hor.setBlockIncrement(1);
- this.Root.caretItem = this.Root;
- ((Component)this).setBackground(Color.white);
- ((Component)this).enableEvents(28L);
- }
-
- public void setScrollbars(int var1, int var2) {
- if (var1 * 17 + 17 < this.dimension.height && ((Container)this).isAncestorOf(this.Ver)) {
- this.ofsY = 0;
- ((Container)this).remove(this.Ver);
- ((Container)this).validate();
- } else if (var1 * 17 + 17 >= this.dimension.height && !((Container)this).isAncestorOf(this.Ver)) {
- ((Container)this).add("East", this.Ver);
- ((Container)this).validate();
- }
-
- if (var2 * 17 + 17 < this.dimension.width && ((Container)this).isAncestorOf(this.Hor)) {
- this.ofsX = 0;
- ((Container)this).remove(this.Hor);
- ((Container)this).validate();
- } else if (var2 * 17 + 17 >= this.dimension.width && !((Container)this).isAncestorOf(this.Hor)) {
- ((Container)this).add("South", this.Hor);
- ((Container)this).validate();
- }
-
- this.Ver.setMaximum(var1 - 1);
- this.Hor.setMaximum(var2 - 1);
- }
-
- public void setAllowSelection(boolean var1) {
- this.SelectionAllowed = var1;
- }
- }
-