home *** CD-ROM | disk | FTP | other *** search
- package hhapplet;
-
- import XMLConsumer.IEntry;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.util.Enumeration;
- import java.util.Vector;
-
- public abstract class DynListView extends ListView implements IChunkedDataListener {
- private static String m_sLoadingMsg = null;
- private static final Color YELLOW = new Color(255, 255, 225);
- private Vector m_chunkedInfos = null;
- private String m_sKeyBefore = null;
- private String m_sKeyAfter = "";
- private Vector m_vFakeBlocks = null;
- private Vector m_vRealBlocks = null;
- private String m_sCheckKey;
- private int m_nLoadingChunk = 0;
- private INumChunkedData[] m_aDataCon;
- private int m_nCheck = 0;
- private boolean m_bNeedCalc;
- private boolean m_bFindCK;
- private int m_nIns;
- private boolean m_bScrl;
- private int m_nNeeded;
- private String m_sShowKey;
- private boolean m_bProcess;
- private boolean m_bLoading;
- private int m_nItems;
- private IChunkedInfo m_ciRef;
- private int m_nRef;
- private int m_nNeedToFindKeyIndex;
- private String m_sFindKey;
- private String m_sBackFindKey;
- private boolean m_bBackActive;
- private boolean m_bActive;
- private VirtualEntry m_virtualEntry;
-
- protected void procResize() {
- if (!this.m_bProcess) {
- this.markBegin();
- super.procResize();
- if (this.m_nIns == -1) {
- this.getUnitIdx(((ListView)this).getTop(), ((ListView)this).getVisible());
- }
- }
-
- }
-
- private void insertIdxKs(int var1, BlockContainer var2, boolean var3) {
- int var4 = var2.getConsumed();
- int var5 = var2.getCurrent();
- int var6 = var4 - var5;
- int var7 = 0;
- int var8 = this.m_vFakeBlocks.size() - 1;
- int var9 = -1;
- boolean var10 = false;
-
- FakeItemBlock var11;
- do {
- var9 = var7 + var8 >> 1;
- var11 = (FakeItemBlock)this.m_vFakeBlocks.elementAt(var9);
- if (var11.getBegin() > var1) {
- var8 = var9 - 1;
- } else {
- if (var11.getBegin() + var11.getNum() > var1) {
- var10 = true;
- break;
- }
-
- var7 = var9 + 1;
- }
- } while(var8 >= var7);
-
- if (var10) {
- int var12 = var11.getTop();
- int var13 = var12 + var11.getNum();
- int var14 = 0;
- int var15 = var1 - var11.getBegin();
- int var16 = var11.getNum() + var11.getBegin() - (var1 + var4);
- int var17 = var9 + 1;
- if (var15 > 0) {
- var14 = var11.getNum() - var15;
- var11.setNum(var15);
- String var18 = var11.getKeyBefore();
- var11.setKeyBefore(var2.getFirstKey());
- if (var16 > 0) {
- this.m_vFakeBlocks.insertElementAt(new FakeItemBlock(var1 + var4, var16, var2.getLastKey(), var18, var12 + var15 + var5), var9 + 1);
- var17 = var9 + 2;
- }
-
- this.insertRealBlock(var13 - var14, var2, var3);
- } else {
- this.insertRealBlock(var12, var2, var3);
- if (var16 > 0) {
- var11.setBegin(var1 + var4);
- var14 = var11.getNum() - var16;
- var11.setNum(var16);
- var11.posChange(var5);
- var11.setKeyAfter(var2.getLastKey());
- } else {
- this.m_vFakeBlocks.removeElementAt(var9);
- var17 = var9;
- }
- }
-
- if (var6 > 0) {
- for(int var22 = var17; var22 < this.m_vFakeBlocks.size(); ++var22) {
- ((FakeItemBlock)this.m_vFakeBlocks.elementAt(var22)).posChange(-var6);
- }
-
- int var23 = ((ListView)this).getVerticalMax();
- ((ListView)this).setVerticalMax(var23 - var6);
- }
- }
-
- }
-
- protected void listPaint(Graphics var1, Image var2) {
- int var3 = ((ListView)this).getTop();
- int var4 = this.getWidth(var1);
- ((ListView)this).setHorizontalMax(var4);
- Vector var5 = this.getRealBlockToShow(var3, ((ListView)this).getVisible());
- Enumeration var6 = var5.elements();
-
- while(var6.hasMoreElements()) {
- RealItemBlock var7 = (RealItemBlock)var6.nextElement();
- var7.display(var1, var3, ((ListView)this).getVisible(), ((ListView)this).getUnitHeight(), ((Component)this).getBackground(), var2);
- }
-
- if (this.m_bLoading) {
- this.displayLoadingMsg(var1);
- }
-
- }
-
- public abstract void mergeItems(BlockContainer var1, boolean var2, INumChunkedData[] var3, int[] var4, int var5, int[] var6, int var7);
-
- private void endLoading() {
- if (this.m_bLoading) {
- this.m_bLoading = false;
- ((Component)this).repaint();
- }
-
- }
-
- public void findAndSelect(String var1) {
- if (var1 != null && var1.length() != 0) {
- if (!this.m_bProcess) {
- this.m_sFindKey = var1;
- this.m_bActive = false;
- this.findCK();
- return;
- }
-
- this.m_sBackFindKey = var1;
- this.m_bBackActive = false;
- }
-
- }
-
- public void dispatchToDo(String var1) {
- if (var1.equals("checkReady")) {
- this.checkReady();
- } else if (var1.equals("checkAgain")) {
- this.checkAgain();
- } else {
- super.dispatchToDo(var1);
- }
- }
-
- public void putData(IChunkedData var1) {
- this.endLoading();
- if (this.m_nNeedToFindKeyIndex == -1) {
- ((ListView)this).setTimeout("checkReady", 1);
- } else {
- this.m_sKeyAfter = ((INumChunkedData)var1).getKeyByPosition(this.m_nNeedToFindKeyIndex);
- this.m_bNeedCalc = true;
- this.m_bScrl = true;
- this.m_nNeedToFindKeyIndex = -1;
- if (this.m_sKeyAfter != null) {
- ((ListView)this).setTimeout("checkReady", 1);
- } else {
- this.markEnd();
- ((ListView)this).setTimeout("checkAgain", 50);
- }
- }
- }
-
- private void getLimit(INumChunkedData[] var1, int[] var2, int[] var3, int[] var4, int var5) {
- var3[var5] = var1[var5].getNum();
- var4[var5] = -1;
- if (var1[var5].getUsedItems() != null) {
- var1[var5].getUsedItems().getLimit(var2, var3, var4, var5);
- }
-
- }
-
- private boolean findCKInRealBlocks() {
- if (this.m_sFindKey != null) {
- if (this.m_vRealBlocks != null && this.m_vRealBlocks.size() > 0) {
- int var1 = 0;
- int var2 = this.m_vRealBlocks.size() - 1;
- boolean var6 = false;
-
- int var3;
- RealItemBlock var4;
- int var5;
- do {
- var3 = (var1 + var2) / 2;
- var4 = (RealItemBlock)this.m_vRealBlocks.elementAt(var3);
- var5 = var4.getClosestEntryId(this.m_sFindKey);
- if (var5 < 0) {
- var2 = var3 - 1;
- } else {
- if (var5 < var4.getNum()) {
- var6 = true;
- break;
- }
-
- var1 = var3 + 1;
- }
- } while(var1 <= var2);
-
- if (!var6) {
- if (var3 == var1 - 1) {
- ++var3;
- }
-
- if (var3 < this.m_vRealBlocks.size() && var3 - 1 >= 0) {
- RealItemBlock var7 = (RealItemBlock)this.m_vRealBlocks.elementAt(var3);
- String var8 = var7.getFirstKey();
- if (var8.length() > this.m_sFindKey.length() && Language.compare(var8.substring(0, this.m_sFindKey.length()), this.m_sFindKey) == 0) {
- var4 = var7;
- var5 = var7.getClosestEntryId(var8);
- } else {
- var4 = (RealItemBlock)this.m_vRealBlocks.elementAt(var3 - 1);
- var5 = var4.getClosestEntryId(var4.getLastKey());
- }
- } else if (var3 >= this.m_vRealBlocks.size()) {
- var4 = (RealItemBlock)this.m_vRealBlocks.elementAt(var3 - 1);
- var5 = var4.getClosestEntryId(var4.getLastKey());
- } else if (var3 - 1 < 0) {
- var4 = (RealItemBlock)this.m_vRealBlocks.elementAt(var3);
- var5 = var4.getClosestEntryId(var4.getFirstKey());
- }
- }
-
- if (var4 != null) {
- int var9 = var4.getTop() + var5;
- IEntry var10 = var4.getEntry(var9);
- ((ListView)this).setTop(var9);
- ((Component)this).repaint();
- ((ListView)this).selectEntry(((ListView)this).getTop(), var9, var10);
- if (this.m_bActive) {
- var10.action(this);
- }
- }
- }
-
- this.m_sFindKey = this.m_sBackFindKey;
- this.m_bActive = this.m_bBackActive;
- if (this.m_sBackFindKey != null) {
- this.m_sBackFindKey = null;
- this.m_bBackActive = false;
- this.findCK();
- return false;
- }
- }
-
- return true;
- }
-
- public void active() {
- if (this.m_sBackFindKey != null) {
- this.m_bBackActive = true;
- } else if (this.m_sFindKey != null) {
- this.m_bActive = true;
- } else {
- super.active();
- }
- }
-
- public void checkReady() {
- int var1 = this.m_chunkedInfos.size();
- boolean var2 = false;
- int var4 = 0;
- boolean var5 = this.m_sKeyBefore == null;
- String var6 = var5 ? this.m_sKeyAfter : this.m_sKeyBefore;
- if (var6 == null) {
- this.markEnd();
- ((ListView)this).setTimeout("checkAgain", 50);
- } else {
- INumChunkedData[] var3;
- if (this.m_sCheckKey != null && var6 == this.m_sCheckKey && this.m_nLoadingChunk != 0) {
- var4 = this.m_nLoadingChunk;
- var3 = this.m_aDataCon;
- } else {
- this.m_nCheck = 0;
- this.m_sCheckKey = var6;
- var3 = new INumChunkedData[this.m_chunkedInfos.size()];
- }
-
- for(int var7 = this.m_nCheck; var7 < var1; ++var7) {
- INumChunkedData var8 = (INumChunkedData)((IChunkedInfo)this.m_chunkedInfos.elementAt(var7)).getChunkedData(var5, var6);
- if (var8 != null) {
- if (!var8.isLoaded()) {
- var2 = true;
- this.m_nLoadingChunk = var4;
- this.m_nCheck = var7;
- this.m_aDataCon = var3;
- this.beginLoading();
- var8.load(this);
- return;
- }
-
- var3[var4++] = var8;
- }
- }
-
- if (!var2) {
- int var16 = var4;
- this.m_nLoadingChunk = 0;
- this.m_sKeyAfter = this.m_sKeyBefore = this.m_sShowKey = null;
- int[] var17 = new int[var4];
- int[] var9 = new int[var4];
- int[] var10 = new int[var4];
- int[] var11 = new int[var4];
- if (this.m_bNeedCalc || this.m_bFindCK) {
- this.m_nIns = 0;
- }
-
- for(int var12 = 0; var12 < var16; ++var12) {
- INumChunkedData var13 = var3[var12];
- var17[var12] = var13.getKeyPosition(var5, var6);
- if (var17[var12] == -1 && !var5 || var17[var12] == var3[var12].getNum() && var5) {
- this.m_nIns = -1;
- break;
- }
-
- if (this.m_bNeedCalc || this.m_bFindCK) {
- this.m_nIns += var17[var12] + var13.getLastIndex() - var13.getNum();
- if (!var5) {
- this.m_nIns += var3[var12].getEntry(var17[var12]).getNextSpan();
- }
- }
-
- var9[var12] = var17[var12];
- this.getLimit(var3, var17, var10, var11, var12);
- }
-
- if (this.m_nIns != -1 || this.m_bFindCK) {
- BlockContainer var18 = new BlockContainer(this.m_nNeeded);
- boolean var19 = this.writeItems(var18, var3, var17, var11, var10, var5, 1);
- if (var18.getConsumed() != 0) {
- this.updateUsedK(var3, var9, var17, var5);
- int var14;
- if (!var5) {
- var14 = this.m_nIns - var18.getConsumed() + 1;
- } else {
- var14 = this.m_nIns;
- }
-
- this.insertIdxKs(var14, var18, this.m_bScrl);
- ((Component)this).repaint();
- this.m_bScrl = false;
- if (this.m_bFindCK) {
- this.m_bFindCK = false;
- this.m_bNeedCalc = true;
- this.m_sKeyBefore = var18.getFirstKey();
- this.m_nIns = -1;
- ((ListView)this).setTimeout("checkReady", 50);
- return;
- }
- } else if (this.m_bFindCK) {
- this.m_bFindCK = false;
- this.m_bNeedCalc = true;
- this.m_sKeyBefore = this.getFirstKeyFromPos(var3, var17);
- this.m_nIns = -1;
- ((ListView)this).setTimeout("checkReady", 50);
- return;
- }
-
- if (!this.findCKInRealBlocks()) {
- return;
- }
-
- this.m_nNeeded -= var18.getCurrent();
- if (var19) {
- this.m_nIns = -1;
- this.markEnd();
- ((ListView)this).setTimeout("checkAgain", 50);
- } else {
- if (var5) {
- this.m_nIns += var18.getConsumed();
- } else {
- this.m_nIns -= var18.getConsumed();
- }
-
- ((ListView)this).setTimeout("checkReady", 50);
- }
-
- this.m_bNeedCalc = false;
- return;
- }
-
- if (!this.findCKInRealBlocks()) {
- return;
- }
-
- this.markEnd();
- ((ListView)this).setTimeout("checkAgain", 50);
- }
-
- }
- }
-
- private IEntry getEntryByPosInternal(int var1) {
- IEntry var2 = null;
- Vector var3 = this.getRealBlockToShow(var1, 1);
- if (var3 != null && var3.size() == 1) {
- RealItemBlock var4 = (RealItemBlock)var3.elementAt(0);
- var2 = var4.getEntry(var1);
- }
-
- return var2;
- }
-
- protected int getWidth(Graphics var1) {
- int var2 = 0;
- int var3 = 0;
- Enumeration var4 = this.m_vRealBlocks.elements();
-
- while(var4.hasMoreElements()) {
- RealItemBlock var5 = (RealItemBlock)var4.nextElement();
- var3 = var5.getWidth(var1);
- if (var3 > var2) {
- var2 = var3;
- }
- }
-
- return var2;
- }
-
- public boolean writeItems(BlockContainer var1, INumChunkedData[] var2, int[] var3, int[] var4, int[] var5, boolean var6, int var7) {
- int var8 = var3.length;
- int[] var9 = new int[var8];
-
- for(int var10 = 0; var10 < var8; ++var10) {
- var9[var10] = var3[var10];
- }
-
- int var17;
- do {
- String var11 = null;
- int[] var12 = new int[var8];
- var17 = 0;
-
- for(int var13 = 0; var13 < var8; ++var13) {
- if (var2[var13].getNum() > 0 && var3[var13] != -1 && var6 && var3[var13] < var5[var13] || !var6 && var3[var13] > var4[var13]) {
- IEntry var14 = var2[var13].getEntry(var3[var13]);
- String var15 = var14.getName();
- if (var11 != null && (!var6 || Language.compare(var11, var15) <= 0) && (var6 || Language.compare(var11, var15) >= 0)) {
- if (Language.compare(var11, var15) == 0) {
- var12[var17++] = var13;
- }
- } else {
- var11 = var15;
- var17 = 0;
- var12[var17++] = var13;
- }
- } else if (var7 == 1 && var5[var13] != var4[var13]) {
- if (var6 && var3[var13] == var5[var13]) {
- this.m_sKeyAfter = var2[var13].getEntry(var9[var13]).getName();
- return false;
- }
-
- if (!var6 && var3[var13] == var4[var13]) {
- this.m_sKeyBefore = var2[var13].getEntry(var9[var13]).getName();
- return false;
- }
- }
- }
-
- if (var17 >= 1) {
- for(int var18 = 0; var18 < var17; ++var18) {
- var9[var12[var18]] = var3[var12[var18]];
- }
-
- this.mergeItems(var1, var6, var2, var12, var17, var3, var7);
- this.adjustPosition(var6, var2, var12, var17, var3);
- if (var7 == 1 && var1.getNeeded() <= var1.getCurrent()) {
- return true;
- }
- }
- } while(var17 > 0);
-
- return true;
- }
-
- public abstract void adjustPosition(boolean var1, INumChunkedData[] var2, int[] var3, int var4, int[] var5);
-
- private Vector getRealBlockToShow(int var1, int var2) {
- int var3 = 0;
- int var4 = this.m_vRealBlocks.size() - 1;
- int var5 = -1;
- int var6 = 0;
- int var7 = 0;
- Vector var9 = new Vector();
- boolean var10 = false;
- if (this.m_vRealBlocks.size() == 0) {
- return var9;
- } else {
- RealItemBlock var8;
- do {
- var5 = var3 + var4 >> 1;
- var8 = (RealItemBlock)this.m_vRealBlocks.elementAt(var5);
- var6 = var8.getTop();
- var7 = var6 + var8.getNum();
- if (var6 >= var1 + var2) {
- var4 = var5 - 1;
- } else {
- if (var7 > var1) {
- var10 = true;
- break;
- }
-
- var3 = var5 + 1;
- }
- } while(var4 >= var3);
-
- if (var10) {
- var9.addElement(var8);
-
- for(int var11 = var5 - 1; var11 >= 0; --var11) {
- var8 = (RealItemBlock)this.m_vRealBlocks.elementAt(var11);
- var6 = var8.getTop();
- var7 = var6 + var8.getNum();
- if (var7 <= var1) {
- break;
- }
-
- var9.addElement(var8);
- }
-
- for(int var20 = var5 + 1; var20 < this.m_vRealBlocks.size(); ++var20) {
- var8 = (RealItemBlock)this.m_vRealBlocks.elementAt(var20);
- var6 = var8.getTop();
- int var10000 = var6 + var8.getNum();
- if (var6 >= var1 + var2) {
- break;
- }
-
- var9.addElement(var8);
- }
- }
-
- return var9;
- }
- }
-
- private void insertRealBlock(int var1, BlockContainer var2, boolean var3) {
- RealItemBlock var4 = new RealItemBlock(var1, var2);
- int var5 = 0;
- int var6 = this.m_vRealBlocks.size() - 1;
- int var7 = 0;
- boolean var8 = false;
-
- while(var6 >= var5) {
- var7 = var5 + var6 >> 1;
- RealItemBlock var9 = (RealItemBlock)this.m_vRealBlocks.elementAt(var7);
- RealItemBlock var10;
- if (var7 + 1 <= var6) {
- var10 = (RealItemBlock)this.m_vRealBlocks.elementAt(var7 + 1);
- } else {
- var10 = null;
- }
-
- if (var9.getTop() > var1) {
- var6 = var7 - 1;
- } else {
- if (var10 == null || var10.getTop() >= var1) {
- ++var7;
- var8 = true;
- break;
- }
-
- var5 = var7 + 1;
- }
- }
-
- this.m_vRealBlocks.insertElementAt(var4, var7);
- int var11 = var2.getConsumed() - var2.getCurrent();
- if (var11 != 0) {
- for(int var12 = var7 + 1; var12 < this.m_vRealBlocks.size(); ++var12) {
- RealItemBlock var14 = (RealItemBlock)this.m_vRealBlocks.elementAt(var12);
- var14.posChange(-var11);
- }
- }
-
- if (var3) {
- ((ListView)this).setTop(var1);
- }
-
- if (this.m_virtualEntry != null) {
- IEntry var15 = this.getEntryByPosInternal(this.m_virtualEntry.getPos());
- if (var15 != null) {
- this.m_virtualEntry.fillReal(var15);
- this.m_virtualEntry = null;
- }
- }
-
- }
-
- 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);
- }
-
- protected void procClicked() {
- if (!this.m_bProcess) {
- super.procClicked();
- }
-
- }
-
- private void beginLoading() {
- this.m_bLoading = true;
- }
-
- public DynListView(Vector var1) {
- if (m_sLoadingMsg == null) {
- m_sLoadingMsg = ResourceLib.GetRes("LoadingData");
- }
-
- this.m_chunkedInfos = var1;
- this.m_bProcess = false;
- this.m_bLoading = false;
- this.m_nNeedToFindKeyIndex = -1;
- this.m_nIns = -1;
- this.m_vFakeBlocks = new Vector();
- this.m_vRealBlocks = new Vector();
- ((ListView)this).setUnitHeight(16);
- this.init();
- }
-
- public void checkAgain() {
- if (!this.m_bProcess) {
- if (this.m_sBackFindKey != null) {
- this.m_sFindKey = this.m_sBackFindKey;
- this.m_bActive = this.m_bBackActive;
- this.m_sBackFindKey = null;
- this.m_bBackActive = false;
- this.findCK();
- } else {
- this.markBegin();
- this.getUnitIdx(((ListView)this).getTop(), ((ListView)this).getVisible());
- }
- } else {
- ((ListView)this).setTimeout("checkAgain", 50);
- }
- }
-
- protected void procMoved() {
- if (!this.m_bProcess) {
- super.procMoved();
- }
-
- }
-
- private void markBegin() {
- this.m_bProcess = true;
- }
-
- private int getTotalNum() {
- int var1 = 0;
- Enumeration var2 = this.m_chunkedInfos.elements();
-
- while(var2.hasMoreElements()) {
- Object var3 = var2.nextElement();
- if (var3 instanceof IChunkedInfo) {
- var1 += ((IChunkedInfo)var3).getTotalNum();
- }
- }
-
- return var1;
- }
-
- protected IEntry getEntryByPos(int var1) {
- Object var2 = this.getEntryByPosInternal(var1);
- if (var2 == null) {
- this.m_virtualEntry = new VirtualEntry(var1);
- var2 = this.m_virtualEntry;
- }
-
- return (IEntry)var2;
- }
-
- private String getFirstKeyFromPos(INumChunkedData[] var1, int[] var2) {
- int var3 = var2.length;
- String var4 = Language.getBiggestChar();
-
- for(int var5 = 0; var5 < var3; ++var5) {
- if (var1[var5].getNum() > 0 && var2[var5] >= 0 && var2[var5] < var1[var5].getNum()) {
- IEntry var6 = var1[var5].getEntry(var2[var5]);
- String var7 = var6.getName();
- if (var4 == null || Language.compare(var4, var7) > 0) {
- var4 = var7;
- }
- }
- }
-
- return var4;
- }
-
- private String getEndString() {
- String var1 = Language.getBiggestChar();
- String var2 = var1 + var1 + var1 + var1 + var1 + var1 + var1 + var1;
- return var2;
- }
-
- private void updateUsedK(INumChunkedData[] var1, int[] var2, int[] var3, boolean var4) {
- for(int var5 = 0; var5 < var2.length; ++var5) {
- int var6 = 0;
- int var7 = 0;
- if (var4) {
- var6 = var2[var5];
- var7 = var3[var5] - 1;
- } else {
- if (var3[var5] != -1) {
- var6 = var3[var5] + var1[var5].getEntry(var3[var5]).getNextSpan() + 1;
- } else {
- var6 = 0;
- }
-
- var7 = var2[var5] + var1[var5].getEntry(var2[var5]).getNextSpan();
- }
-
- if (var6 <= var7) {
- var1[var5].getUsedItems().addUsedItem(var6, var7);
- if (var1[var5].getUsedItems().isCovered(0, var1[var5].getNum() - 1)) {
- var1[var5].setDone(true);
- }
- }
- }
-
- }
-
- private void getUnitIdx(int var1, int var2) {
- if (this.m_vFakeBlocks.size() == 0) {
- this.markEnd();
- } else {
- int var3 = 0;
- int var4 = this.m_vFakeBlocks.size() - 1;
- int var5 = -1;
- int var6 = 0;
- int var7 = 0;
- boolean var9 = false;
-
- FakeItemBlock var8;
- do {
- var5 = var3 + var4 >> 1;
- var8 = (FakeItemBlock)this.m_vFakeBlocks.elementAt(var5);
- var6 = var8.getTop();
- var7 = var6 + var8.getNum();
- if (var6 >= var1 + var2) {
- var4 = var5 - 1;
- } else {
- if (var7 > var1) {
- var9 = true;
- break;
- }
-
- var3 = var5 + 1;
- }
- } while(var4 >= var3);
-
- if (var9) {
- if (var6 >= var1) {
- this.m_sKeyAfter = var8.getKeyAfter();
- this.m_nNeeded = var2 - var6 + var1;
- this.m_nIns = var8.getBegin();
- this.checkReady();
- } else if (var7 <= var1 + var2) {
- this.m_sKeyBefore = var8.getKeyBefore();
- this.m_nNeeded = var7 - var1;
- this.m_bNeedCalc = true;
- this.checkReady();
- } else {
- this.m_nNeeded = ((ListView)this).getVisible();
- int var10 = var8.getBegin() + (var1 - var6);
- this.showItemsInEvaluation(var10);
- }
- } else {
- this.markEnd();
- }
- }
- }
-
- protected void procScroll() {
- if (!this.m_bProcess) {
- this.markBegin();
- this.getUnitIdx(((ListView)this).getTop(), ((ListView)this).getVisible());
- super.procScroll();
- }
-
- }
-
- private void findCK() {
- if (this.m_sFindKey != null) {
- this.m_sKeyAfter = this.m_sFindKey;
- this.m_bFindCK = true;
- this.m_nNeeded = 1;
- if (!this.m_bProcess) {
- this.markBegin();
- }
-
- this.checkReady();
- }
-
- }
-
- public Dimension getPreferredSize() {
- return ((Component)this).getParent().getSize();
- }
-
- private void init() {
- this.m_nNeeded = 100;
- this.m_nItems = this.getTotalNum();
- this.m_vFakeBlocks.addElement(new FakeItemBlock(0, this.m_nItems, "", this.getEndString(), 0));
- ((ListView)this).setVerticalMax(this.m_nItems);
- this.getMaxChunkInfo();
- }
-
- private void markEnd() {
- if (this.m_bProcess) {
- this.m_bProcess = false;
- BsscHelpRedirector.showStatus(ResourceLib.GetRes("Done"));
- }
-
- }
-
- private void getMaxChunkInfo() {
- int var1 = 0;
- IChunkedInfo var2 = null;
- Enumeration var3 = this.m_chunkedInfos.elements();
-
- while(var3.hasMoreElements()) {
- Object var4 = var3.nextElement();
- if (var4 instanceof IChunkedInfo) {
- int var5 = ((IChunkedInfo)var4).getTotalNum();
- if (var5 > var1) {
- var2 = (IChunkedInfo)var4;
- var1 = var5;
- }
- }
- }
-
- this.m_nRef = var1;
- this.m_ciRef = var2;
- }
-
- private void showItemsInEvaluation(int var1) {
- if (this.m_nItems != 0) {
- double var2 = (double)var1 / (double)this.m_nItems;
- int var4 = (int)Math.floor(var2 * (double)this.m_nRef);
- INumChunkedData var5 = (INumChunkedData)this.m_ciRef.getChunkByIdx(var4);
- if (var5 != null) {
- if (!var5.isLoaded()) {
- this.m_nNeedToFindKeyIndex = var4;
- this.beginLoading();
- var5.load(this);
- } else {
- this.m_sKeyAfter = var5.getKeyByPosition(var4);
- if (this.m_sKeyAfter != null) {
- this.m_bNeedCalc = true;
- this.m_bScrl = true;
- this.checkReady();
- } else {
- this.markEnd();
- ((ListView)this).setTimeout("checkAgain", 50);
- }
- }
- } else {
- this.markEnd();
- ((ListView)this).setTimeout("checkAgain", 50);
- }
- } else {
- this.markEnd();
- ((ListView)this).setTimeout("checkAgain", 50);
- }
- }
- }
-