home *** CD-ROM | disk | FTP | other *** search
- package hhapplet;
-
- import XMLConsumer.ITocEntryContainer;
- import XMLConsumer.TocEntry;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.Vector;
-
- class TocBlock implements ITocEntryContainer {
- private Vector m_vEntries;
- private int m_nTop;
- private int m_nHeight;
- private int m_nWidth;
- private boolean m_bNeedCalWidth;
- private boolean m_bVisible;
- private Hashtable m_hashSubBlock;
- private TocEntry m_teParent;
-
- public void insertTocBlock(TocEntry var1, TocBlock var2) {
- if (var1 != null) {
- int var3 = var1.getIndex();
- var2.setParentEntry(var1);
- if (this.m_hashSubBlock == null) {
- this.m_hashSubBlock = new Hashtable();
- }
-
- this.m_hashSubBlock.put(new Integer(var3), var2);
- boolean var4 = var1.isOpen() && this.isEntryVisible(var1);
- var2.setVisible(var4);
- var2.setTop(this.getPosition(var3) + 1);
- if (var4) {
- this.propagateHeightChange(var2, var2.getHeight());
- }
- }
-
- }
-
- public TocBlock(Vector var1) {
- this.m_vEntries = var1;
- this.m_nWidth = 0;
- this.m_nTop = 0;
- this.m_bVisible = true;
- this.calPosOffset();
- this.m_bNeedCalWidth = true;
- }
-
- public TocEntry getEntry(int var1) {
- int var2 = var1 - this.m_nTop;
- if (var2 >= 0 && var2 < this.m_nHeight) {
- int var3 = this.getFirstIndex(var2, 1);
- if (var3 != -1) {
- TocEntry var4 = (TocEntry)this.m_vEntries.elementAt(var3);
- return var4;
- }
- }
-
- return null;
- }
-
- public void setVisible(boolean var1) {
- boolean var2 = false;
- if (this.m_bVisible != var1) {
- var2 = true;
- }
-
- this.m_bVisible = var1;
- if (var2) {
- this.propagateVisibility();
- }
-
- }
-
- public TocEntry getEntryByIdx(int var1) {
- return var1 >= 0 && var1 < this.m_vEntries.size() ? (TocEntry)this.m_vEntries.elementAt(var1) : null;
- }
-
- public int getTop() {
- return this.m_nTop;
- }
-
- public void setTop(int var1) {
- int var2 = var1 - this.m_nTop;
- this.m_nTop = var1;
- if (this.m_hashSubBlock != null) {
- Enumeration var3 = this.m_hashSubBlock.keys();
-
- while(var3.hasMoreElements()) {
- Integer var4 = (Integer)var3.nextElement();
- TocBlock var5 = (TocBlock)this.m_hashSubBlock.get(var4);
- int var6 = var5.getTop();
- var5.setTop(var6 + var2);
- }
- }
-
- }
-
- protected void updateHeightChange(int var1, int var2) {
- for(int var3 = var1; var3 < this.m_vEntries.size(); ++var3) {
- TocEntry var4 = (TocEntry)this.m_vEntries.elementAt(var3);
- var4.updatePosOffset(var2);
- if (var4.getType() == 3 || var4.getType() == 4) {
- TocBlock var5 = this.getSubBlock(var3);
- if (var5 != null) {
- int var6 = var5.getTop();
- var5.setTop(var6 + var2);
- }
- }
- }
-
- }
-
- public TocBlock getParentBlock() {
- TocEntry var1 = this.getParentEntry();
- return var1 != null ? (TocBlock)var1.getContainer() : null;
- }
-
- public TocBlock getSubBlock(int var1) {
- if (this.m_hashSubBlock != null) {
- Object var2 = this.m_hashSubBlock.get(new Integer(var1));
- if (var2 != null && var2 instanceof TocBlock) {
- return (TocBlock)var2;
- }
- }
-
- return null;
- }
-
- public void calPosOffset() {
- this.m_nHeight = 0;
- TocEntry var1 = (TocEntry)this.m_vEntries.elementAt(0);
- this.m_nHeight = this.calPosOffsetWithEntry(var1, -1, this.m_bVisible) + 1;
- }
-
- public void setNeedCalWidth() {
- this.m_bNeedCalWidth = true;
- }
-
- protected int calPosOffsetWithEntry(TocEntry var1, int var2, boolean var3) {
- while(var1 != null) {
- var2 = this.calOffSpringPosOff(var1, var2, var3);
- var1 = var1.getNextSibling();
- }
-
- return var2;
- }
-
- public TocEntry getParentEntry() {
- return this.m_teParent;
- }
-
- public void setParentEntry(TocEntry var1) {
- this.m_teParent = var1;
- }
-
- protected int calWidth(Graphics var1) {
- TocEntry var2 = (TocEntry)this.m_vEntries.elementAt(0);
- return this.getOffSpringMaxWidth(var1, var2);
- }
-
- protected int getOffSpringMaxWidth(Graphics var1, TocEntry var2) {
- int var3 = 0;
-
- for(int var4 = 0; var2 != null; var2 = var2.getNextSibling()) {
- var4 = var2.getWidth(var1);
- if (var4 > var3) {
- var3 = var4;
- }
-
- if (var2.isOpen()) {
- TocEntry var5 = var2.getFirstChild();
- var4 = this.getOffSpringMaxWidth(var1, var5);
- }
-
- if (var4 > var3) {
- var3 = var4;
- }
- }
-
- return var3;
- }
-
- public boolean isVisible() {
- return this.m_bVisible;
- }
-
- public int getFirstIndex(int var1, int var2) {
- byte var3 = -1;
- if (this.m_vEntries.size() > 0) {
- TocEntry var4 = (TocEntry)this.m_vEntries.elementAt(0);
- if (this.isEntryVisible(var4)) {
- return this.getFirstVisibleEntryIndex(var4, var1, var2);
- }
- }
-
- return var3;
- }
-
- protected int calOffSpringPosOff(TocEntry var1, int var2, boolean var3) {
- if (var3) {
- ++var2;
- var1.setPosOffset(var2);
- } else {
- var1.setPosOffset(var2);
- }
-
- if (var1.getFirstChild() != null) {
- if (var1.isOpen()) {
- var2 = this.calPosOffsetWithEntry(var1.getFirstChild(), var2, var3);
- } else {
- var2 = this.calPosOffsetWithEntry(var1.getFirstChild(), var2, false);
- }
- } else if ((var1.getType() == 3 || var1.getType() == 4) && this.m_hashSubBlock != null) {
- TocBlock var4 = (TocBlock)this.m_hashSubBlock.get(new Integer(var1.getIndex()));
- if (var4 != null) {
- if (var3 && var1.isOpen()) {
- var2 += var4.getHeight();
- }
-
- var4.setVisible(var3 && var1.isOpen());
- }
- }
-
- return var2;
- }
-
- public int getPosition(int var1) {
- TocEntry var2 = (TocEntry)this.m_vEntries.elementAt(var1);
- return this.m_nTop + var2.getPosOffset();
- }
-
- protected void propagateHeightChange(TocBlock var1, int var2) {
- if (this.m_hashSubBlock != null && this.m_hashSubBlock.contains(var1)) {
- Enumeration var3 = this.m_hashSubBlock.keys();
-
- while(var3.hasMoreElements()) {
- Integer var4 = (Integer)var3.nextElement();
- if (this.m_hashSubBlock.get(var4) == var1) {
- int var5 = var4;
- this.updateHeightChange(var5 + 1, var2);
- break;
- }
- }
- }
-
- this.m_nHeight += var2;
- if (this.getParentBlock() != null) {
- this.getParentBlock().propagateHeightChange(this, var2);
- }
-
- }
-
- protected void propagateVisibility() {
- if (this.m_hashSubBlock != null) {
- Enumeration var1 = this.m_hashSubBlock.keys();
-
- while(var1.hasMoreElements()) {
- Integer var2 = (Integer)var1.nextElement();
- TocBlock var3 = (TocBlock)this.m_hashSubBlock.get(var2);
- TocEntry var4 = (TocEntry)this.m_vEntries.elementAt(var2);
- if (var4.isOpen()) {
- var3.setVisible(this.m_bVisible);
- }
- }
- }
-
- }
-
- public int getHeight() {
- return this.m_nHeight;
- }
-
- public int getCount() {
- return this.m_vEntries.size();
- }
-
- public void callPosOffsetByEntry(TocEntry var1) {
- TocEntry var2 = var1.getNextOut();
- int var3 = this.m_vEntries.size() - 1;
- if (var2 != null) {
- var3 = var2.getIndex() - 1;
- }
-
- if (var3 >= 0 && var3 != var1.getIndex()) {
- TocEntry var4 = (TocEntry)this.m_vEntries.elementAt(var3);
- int var5 = var4.getPosOffset();
- int var6 = this.calOffSpringPosOff(var1, var1.getPosOffset() - 1, true);
- int var7 = var6 - var5;
- if (var2 != null) {
- int var8 = var2.getIndex();
- this.updateHeightChange(var8, var7);
- }
-
- this.m_nHeight += var7;
- }
-
- }
-
- public void display(Graphics var1, int var2, int var3, int var4, Color var5, Image var6) {
- int var7 = var2 - this.m_nTop;
- int var8 = var7 > 0 ? var7 : 0;
- int var9 = this.getFirstIndex(var8, var3);
- if (var9 != -1) {
- int var10 = var9;
-
- while(var10 < this.m_vEntries.size()) {
- TocEntry var11 = (TocEntry)this.m_vEntries.elementAt(var10);
- if (var11.getPosOffset() >= var3 + var7) {
- break;
- }
-
- if (this.isEntryVisible(var11)) {
- var11.display(var1, var11.getPosOffset() - var7, var4, var5, var6);
- ++var10;
- } else {
- TocEntry var12 = var11.getDirectParent();
- if (var12 == null) {
- break;
- }
-
- TocEntry var13 = var12.getNextOut();
- if (var13 == null) {
- break;
- }
-
- var10 = var13.getIndex();
- }
- }
- }
-
- }
-
- public int getWidth(Graphics var1) {
- if (this.isVisible()) {
- if (this.m_bNeedCalWidth) {
- this.m_bNeedCalWidth = false;
- this.m_nWidth = this.calWidth(var1);
- }
-
- return this.m_nWidth;
- } else {
- return 0;
- }
- }
-
- public int countRightSibiling(int var1) {
- int var2;
- TocEntry var3;
- for(var2 = 0; var1 >= 0 && var1 < this.m_vEntries.size(); var1 += var3.getNextSpan() + 1) {
- var3 = (TocEntry)this.m_vEntries.elementAt(var1);
- if (var3.getNextSpan() == -1) {
- break;
- }
-
- ++var2;
- }
-
- return var2;
- }
-
- private int getFirstVisibleEntryIndex(TocEntry var1, int var2, int var3) {
- Object var4 = null;
-
- while(true) {
- TocEntry var6 = var1.getNextSibling();
- if (var1.getPosOffset() >= var2) {
- if (var1.getPosOffset() < var2 + var3) {
- return var1.getIndex();
- }
-
- return -1;
- }
-
- if (var6 == null || var6.getPosOffset() > var2) {
- if (var6 == null || var6.getPosOffset() >= var2 + var3) {
- return var1.getFirstChild() != null ? this.getFirstVisibleEntryIndex(var1.getFirstChild(), var2, var3) : -1;
- }
-
- if (var1.getFirstChild() != null) {
- int var5 = this.getFirstVisibleEntryIndex(var1.getFirstChild(), var2, var3);
- if (var5 != -1) {
- return var5;
- }
-
- var1 = var6;
- } else {
- var1 = var6;
- }
- } else {
- var1 = var6;
- }
- }
- }
-
- private boolean isEntryVisible(TocEntry var1) {
- TocEntry var2 = var1.getDirectParent();
- if (var2 != null) {
- return !var2.isOpen() ? false : this.isEntryVisible(var2);
- } else {
- return this.m_bVisible;
- }
- }
- }
-