home *** CD-ROM | disk | FTP | other *** search
- package hhapplet;
-
- import BsscXML.BsscXML;
- import XMLConsumer.Consumer;
- import XMLConsumer.IEntry;
- import XMLConsumer.Project;
- import XMLConsumer.Toc;
- import XMLConsumer.TocData;
- import XMLConsumer.TocEntry;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.Enumeration;
- import java.util.Vector;
-
- public class TocListView extends ListView implements IChunkedDataListener {
- private Vector m_chunkedInfos;
- private Vector m_vTocBlocks;
- private TocEntry m_currentEntry;
- private Vector m_vProjects;
- private static String m_sLoadingMsg = null;
- private static final Color YELLOW = new Color(255, 255, 225);
- private String m_sCurrentTocPath = "";
- private String m_sSyncPath;
- private String m_sBackSyncPath;
- private static String m_sTocPathSplit = "\n";
- private boolean m_bSync = false;
- private boolean m_bProcess = false;
- private boolean m_bInit = false;
- private boolean m_bInSync = false;
-
- protected void procResize() {
- if (!this.m_bInit) {
- this.loadRootData();
- this.m_bInit = true;
- }
-
- if (!this.m_bProcess) {
- super.procResize();
- }
-
- }
-
- public TocBlock getRootBlock() {
- return this.m_vTocBlocks.size() > 0 ? (TocBlock)this.m_vTocBlocks.elementAt(0) : null;
- }
-
- protected void listPaint(Graphics var1, Image var2) {
- int var3 = ((ListView)this).getTop();
- int var4 = ((ListView)this).getVisible();
- int var5 = this.getWidth(var1);
- ((ListView)this).setHorizontalMax(var5);
- Vector var6 = this.getVisibleBlock(var3, var4);
- Enumeration var7 = var6.elements();
-
- while(var7.hasMoreElements()) {
- TocBlock var8 = (TocBlock)var7.nextElement();
- var8.display(var1, var3, var4, ((ListView)this).getUnitHeight(), ((Component)this).getBackground(), var2);
- }
-
- if (this.m_bProcess) {
- this.displayLoadingMsg(var1);
- }
-
- }
-
- protected void procClicked() {
- if (!this.m_bProcess) {
- super.procClicked();
- }
-
- }
-
- private void displayLoadingMsg(Graphics var1) {
- Color var2 = var1.getColor();
- Font var3 = var1.getFont();
- Font var4 = new Font(var3.getName(), var3.getStyle() | 1, var3.getSize() + 1);
- var1.setFont(var4);
- FontMetrics var5 = var1.getFontMetrics();
- int var6 = var5.stringWidth(m_sLoadingMsg);
- var1.setColor(Color.black);
- var1.drawRect(2, 2, var6 + 3, var5.getHeight() + 3);
- var1.setColor(YELLOW);
- var1.fillRect(3, 3, var6 + 2, var5.getHeight() + 2);
- var1.setColor(Color.black);
- var1.drawString(m_sLoadingMsg, 3, 3 + var5.getLeading() + var5.getAscent());
- var1.setColor(var2);
- var1.setFont(var3);
- }
-
- public void sync(String var1, String var2) {
- if (this.m_vTocBlocks.size() != 0) {
- Vector var3 = this.interpretTocPaths(var2);
- Vector var4 = new Vector();
- Enumeration var5 = var3.elements();
-
- while(var5.hasMoreElements()) {
- String var6 = (String)var5.nextElement();
- String var7 = this.getTocPath(var1, var6).substring(1);
- var4.addElement(var7);
- }
-
- String var8 = this.getClosestTocPath(var4);
- if (var8 != null) {
- if (!this.m_bSync) {
- this.m_bSync = true;
- this.m_sSyncPath = var8;
- ((ListView)this).setTimeout("syncTocInt", 1);
- return;
- }
-
- this.m_sBackSyncPath = var8;
- }
-
- }
- }
-
- private String getClosestTocPath(Vector var1) {
- int var2 = -1;
- String var3 = null;
- Object var4 = null;
- if (var1.size() == 0) {
- return null;
- } else {
- Enumeration var5 = var1.elements();
-
- while(var5.hasMoreElements()) {
- String var7 = (String)var5.nextElement();
- if (var7.length() > 0) {
- int var6 = this.compareTocPath(this.m_sCurrentTocPath, var7);
- if (var6 > var2) {
- var2 = var6;
- var3 = var7;
- }
- }
- }
-
- if (var3 != null && var3.equals(this.m_sCurrentTocPath)) {
- var3 = null;
- }
-
- return var3;
- }
- }
-
- public TocListView(Vector var1, Vector var2) {
- if (m_sLoadingMsg == null) {
- m_sLoadingMsg = ResourceLib.GetRes("LoadingData");
- }
-
- this.m_vProjects = var1;
- this.m_chunkedInfos = var2;
- this.m_vTocBlocks = new Vector();
- }
-
- protected void procMoved() {
- if (!this.m_bProcess) {
- super.procMoved();
- }
-
- }
-
- private void syncTocInt() {
- if (this.m_sSyncPath == null) {
- this.m_bSync = false;
- } else {
- this.m_bInSync = true;
- TocBlock var1 = (TocBlock)this.m_vTocBlocks.elementAt(0);
- TocEntry var2 = var1.getEntryByIdx(0);
- Vector var3 = new Vector();
- int var4 = this.expandToc(var2, this.m_sSyncPath, var3);
- if (var4 != -1) {
- if (var4 == 1) {
- if (var3.size() > 0) {
- for(int var5 = 0; var5 < var3.size() - 1; ++var5) {
- TocEntry var6 = (TocEntry)var3.elementAt(var5);
- if (!var6.isOpen()) {
- var6.action(this);
- }
- }
- }
-
- TocEntry var7 = (TocEntry)var3.elementAt(var3.size() - 1);
- TocBlock var8 = (TocBlock)var7.getContainer();
- ((ListView)this).setTop(var8.getTop() + var7.getPosOffset() - ((ListView)this).getVisible() + 2);
- ((ListView)this).selectEntry(((ListView)this).getTop(), var7.getPosOffset(), var7);
- ((Component)this).repaint();
- }
-
- this.m_sSyncPath = this.m_sBackSyncPath;
- this.m_sBackSyncPath = null;
- ((ListView)this).setTimeout("syncTocInt", 1);
- }
-
- this.m_bInSync = false;
- }
- }
-
- private URL getFullURL(URL var1, String var2) {
- URL var3 = null;
-
- try {
- var3 = URLFileHandler.makeURL(var1, var2, (String)null);
- } catch (MalformedURLException var4) {
- }
-
- return var3;
- }
-
- public void loadRootData() {
- Toc var1 = (Toc)this.m_chunkedInfos.elementAt(0);
- TocData var2 = new TocData(var1.getRootTocURL(), var1.getProjURL());
- this.markBegin();
- var2.load(this);
- }
-
- public void accept(Vector var1) {
- if (var1 != null && var1.size() == 5) {
- TocEntry var2 = (TocEntry)var1.elementAt(0);
- String var3 = (String)var1.elementAt(1);
- String var4 = (String)var1.elementAt(2);
- TocData var5 = (TocData)var1.elementAt(3);
- String var6 = (String)var1.elementAt(4);
- TocBlock var7 = (TocBlock)var2.getContainer();
- switch (var2.getType()) {
- case 1:
- var2.toggle();
- if (var7 != null) {
- var7.setNeedCalWidth();
- int var14 = var7.getHeight();
- var7.callPosOffsetByEntry(var2);
- int var16 = var7.getHeight();
- int var18 = var16 - var14;
- TocBlock var19 = var7.getParentBlock();
- if (var19 != null) {
- var19.propagateHeightChange(var7, var18);
- }
-
- ((ListView)this).setVerticalMax(this.getRootBlock().getHeight());
- ((ListView)this).clearHightLighted();
- ((Component)this).repaint();
- }
-
- if (var3 != null && var3.length() != 0 && !this.m_bInSync) {
- this.jumpToURL(var5.getProjURL(), var3, var6);
- return;
- }
- break;
- case 2:
- case 5:
- if (var3 != null && var3.length() != 0) {
- this.jumpToURL(var5.getProjURL(), var3, var6);
- return;
- }
- break;
- case 3:
- case 4:
- if (var7 != null) {
- TocBlock var8 = var7.getSubBlock(var2.getIndex());
- if (var8 == null) {
- if (!this.m_bProcess) {
- try {
- TocData var15 = null;
- if (var2.getType() == 3) {
- URL var10 = URLFileHandler.makeURL(((Consumer)var5).getURL(), var4, (String)null);
- var15 = new TocData(var10, var5.getProjURL());
- } else {
- URL var17 = URLFileHandler.makeURL(var5.getProjURL(), var4, (String)null);
- Enumeration var11 = this.m_vProjects.elements();
-
- while(var11.hasMoreElements()) {
- Object var12 = var11.nextElement();
- if (var12 instanceof Project && ((Project)var12).getURL().equals(var17)) {
- var15 = new TocData(((Project)var12).getToc().getRootTocURL(), var17);
- break;
- }
- }
- }
-
- if (var15 != null) {
- this.m_currentEntry = var2;
- this.markBegin();
- var15.load(this, var2.getLevel() + 1);
- }
- } catch (MalformedURLException var13) {
- ((Throwable)var13).printStackTrace();
- }
- }
- } else {
- var2.toggle();
- int var9 = var8.getHeight();
- if (!var2.isOpen()) {
- var9 = -var9;
- }
-
- var8.setVisible(var2.isOpen());
- var7.propagateHeightChange(var8, var9);
- ((ListView)this).setVerticalMax(this.getRootBlock().getHeight());
- ((ListView)this).clearHightLighted();
- ((Component)this).repaint();
- }
- }
-
- if (var3 != null && var3.length() != 0 && !this.m_bInSync) {
- this.jumpToURL(var5.getProjURL(), var3, var6);
- return;
- }
- }
- }
-
- }
-
- public void dispatchToDo(String var1) {
- if (var1.equals("syncTocInt")) {
- this.syncTocInt();
- } else {
- super.dispatchToDo(var1);
- }
- }
-
- public void putData(IChunkedData var1) {
- if (var1 instanceof TocData) {
- TocData var2 = (TocData)var1;
- Vector var3 = var2.getTocEntires();
- if (var3.size() <= 0) {
- this.m_currentEntry = null;
- } else {
- TocBlock var4 = new TocBlock(var3);
- Enumeration var5 = var3.elements();
-
- while(var5.hasMoreElements()) {
- TocEntry var6 = (TocEntry)var5.nextElement();
- var6.setContainer(var4);
- }
-
- this.m_vTocBlocks.addElement(var4);
- if (this.m_currentEntry != null) {
- TocBlock var8 = (TocBlock)this.m_currentEntry.getContainer();
- if (var8 != null) {
- var4.setParentEntry(this.m_currentEntry);
- if (!this.m_bSync) {
- this.m_currentEntry.toggle();
- }
-
- var8.insertTocBlock(this.m_currentEntry, var4);
- }
-
- this.m_currentEntry = null;
- } else {
- BsscHelpRedirector.doJavaScript("setTimeout(\"getInitTocInfo();\", 100);");
- }
- }
-
- if (!this.m_bSync) {
- TocBlock var7 = this.getRootBlock();
- if (var7 != null) {
- ((ListView)this).setVerticalMax(var7.getHeight());
- }
-
- ((Component)this).repaint();
- }
- }
-
- this.markEnd();
- if (this.m_bSync) {
- ((ListView)this).setTimeout("syncTocInt", 1);
- }
-
- }
-
- private void markBegin() {
- this.m_bProcess = true;
- ((Component)this).repaint();
- }
-
- public boolean imageUpdate(Image var1, int var2, int var3, int var4, int var5, int var6) {
- if (TocEntry.hasImage(var1)) {
- ((Component)this).repaint();
- return true;
- } else {
- return super.imageUpdate(var1, var2, var3, var4, var5, var6);
- }
- }
-
- protected IEntry getEntryByPos(int var1) {
- Vector var2 = this.getVisibleBlock(var1, 1);
- if (var2 != null) {
- if (var2.size() == 1) {
- TocBlock var7 = (TocBlock)var2.elementAt(0);
- TocEntry var8 = var7.getEntry(var1);
- return var8;
- }
-
- if (var2.size() > 1) {
- TocBlock var3 = (TocBlock)var2.elementAt(0);
- int var4 = var3.getHeight();
- Enumeration var5 = var2.elements();
-
- while(var5.hasMoreElements()) {
- TocBlock var6 = (TocBlock)var5.nextElement();
- if (var6.getHeight() < var4) {
- var3 = var6;
- var4 = var6.getHeight();
- }
- }
-
- TocEntry var9 = var3.getEntry(var1);
- return var9;
- }
- }
-
- return null;
- }
-
- private TocEntry getParentEntry(TocEntry var1) {
- if (var1 == null) {
- return null;
- } else {
- TocEntry var2 = var1.getDirectParent();
- if (var2 != null) {
- return var2;
- } else {
- TocBlock var3 = (TocBlock)var1.getContainer();
- return var3 != null ? var3.getParentEntry() : null;
- }
- }
- }
-
- private String calTocPath(TocEntry var1) {
- String var2 = var1.getName();
-
- for(TocEntry var3 = this.getParentEntry(var1); var3 != null; var3 = this.getParentEntry(var3)) {
- var2 = var3.getName() + m_sTocPathSplit + var2;
- }
-
- return var2;
- }
-
- private Vector interpretTocPaths(String var1) {
- Vector var2 = new Vector();
- if (var1.length() == 0) {
- return var2;
- } else {
- int var4 = 0;
- int var5 = -1;
-
- do {
- var5 = var1.indexOf("\r\r", var4);
- String var3;
- if (var5 != -1) {
- var3 = var1.substring(var4, var5);
- var4 = var5 + 2;
- } else {
- var3 = var1.substring(var4);
- var4 = -1;
- }
-
- if (var3.length() > 0) {
- var2.addElement(var3);
- }
- } while(var4 != -1);
-
- return var2;
- }
- }
-
- protected void procScroll() {
- if (!this.m_bProcess) {
- super.procScroll();
- }
-
- }
-
- private int expandToc(TocEntry var1, String var2, Vector var3) {
- var3.size();
- int var4 = var2.indexOf(m_sTocPathSplit);
- Object var5 = null;
- String var6 = null;
- String var12;
- if (var4 != -1) {
- var12 = var2.substring(0, var4);
- var6 = var2.substring(var4 + 1);
- } else {
- var12 = var2;
- }
-
- for(TocEntry var7 = var1; var7 != null; var7 = var7.getNextSibling()) {
- if (var7.getName().equals(var12)) {
- if (var6 == null) {
- var3.addElement(var7);
- return 1;
- }
-
- if (var7.getType() != 3 && var7.getType() != 4) {
- if (var7.getType() != 1) {
- return 0;
- }
-
- var3.addElement(var7);
- TocEntry var13 = var7.getFirstChild();
- int var14 = this.expandToc(var13, var6, var3);
- if (var14 != 0) {
- return var14;
- }
-
- var3.removeElementAt(var3.size() - 1);
- } else {
- TocBlock var8 = (TocBlock)var7.getContainer();
- TocBlock var9 = var8.getSubBlock(var7.getIndex());
- if (var9 == null) {
- var7.action(this);
- return -1;
- }
-
- var3.addElement(var7);
- TocEntry var10 = var9.getEntryByIdx(0);
- int var11 = this.expandToc(var10, var6, var3);
- if (var11 != 0) {
- return var11;
- }
-
- var3.removeElementAt(var3.size() - 1);
- }
- }
- }
-
- return 0;
- }
-
- private void jumpToURL(URL var1, String var2, String var3) {
- URL var4 = this.getFullURL(var1, var2);
- if (var4 != null) {
- if (var3 != null) {
- BsscHelpRedirector.showDoc(var4, var3);
- return;
- }
-
- BsscHelpRedirector.showDoc(var4);
- }
-
- }
-
- private Vector getVisibleBlock(int var1, int var2) {
- Vector var3 = new Vector();
-
- for(int var4 = 0; var4 < this.m_vTocBlocks.size(); ++var4) {
- TocBlock var5 = (TocBlock)this.m_vTocBlocks.elementAt(var4);
- int var6 = var5.getTop();
- int var7 = var6 + var5.getHeight();
- if (var5.isVisible() && (var6 <= var1 || var6 < var1 + var2) && (var7 >= var1 + var2 || var7 > var1)) {
- var3.addElement(var5);
- }
- }
-
- return var3;
- }
-
- private void markEnd() {
- if (this.m_bProcess) {
- this.m_bProcess = false;
- ((Component)this).repaint();
- BsscHelpRedirector.showStatus(ResourceLib.GetRes("Done"));
- }
-
- }
-
- protected int getWidth(Graphics var1) {
- int var2 = 0;
-
- for(int var3 = 0; var3 < this.m_vTocBlocks.size(); ++var3) {
- TocBlock var4 = (TocBlock)this.m_vTocBlocks.elementAt(var3);
- int var5 = var4.getWidth(var1);
- if (var5 > var2) {
- var2 = var5;
- }
- }
-
- return var2;
- }
-
- private int compareTocPath(String var1, String var2) {
- if (var1 != null && var2 != null) {
- int var3 = 0;
- int var4 = 0;
- int var5 = -1;
- int var6 = 0;
- int var7 = -1;
-
- do {
- Object var8 = null;
- Object var9 = null;
- var5 = var1.indexOf(m_sTocPathSplit, var4);
- String var12;
- if (var5 != -1) {
- var12 = var1.substring(var4, var5);
- var4 = var5 + 1;
- } else {
- var12 = var1.substring(var4);
- var4 = -1;
- }
-
- var7 = var2.indexOf(m_sTocPathSplit, var6);
- String var13;
- if (var7 != -1) {
- var13 = var2.substring(var6, var7);
- var6 = var7 + 1;
- } else {
- var13 = var2.substring(var6);
- var6 = -1;
- }
-
- if (!var12.equals(var13)) {
- break;
- }
-
- ++var3;
- } while(var4 != -1 && var6 != -1);
-
- return var3;
- } else {
- return 0;
- }
- }
-
- protected void selectedEntry(IEntry var1) {
- if (var1 == null) {
- this.m_sCurrentTocPath = null;
- } else {
- if (var1 instanceof TocEntry) {
- this.m_sCurrentTocPath = this.calTocPath((TocEntry)var1);
- }
-
- }
- }
-
- private String getTocPath(String var1, String var2) {
- String var3 = null;
- URL var4 = null;
-
- try {
- var4 = URLFileHandler.makeURL(BsscXML.getDocumentBase(), var1 + Project.getFileName(), (String)null);
- } catch (MalformedURLException var7) {
- }
-
- for(int var5 = 0; var5 < this.m_chunkedInfos.size(); ++var5) {
- Toc var6 = (Toc)this.m_chunkedInfos.elementAt(var5);
- if (var6.getProjURL().equals(var4)) {
- var3 = var6.getRootTocPath() + var2;
- break;
- }
- }
-
- return var3;
- }
- }
-