⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawinggroup.java

📁 实现JAVA界面的代码GWT
💻 JAVA
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi 
// Source File Name:   DrawingGroup.java

package jxl.biff.drawing;

import common.Assert;
import common.Logger;
import java.io.IOException;
import java.util.*;
import jxl.read.biff.Record;
import jxl.write.biff.File;

// Referenced classes of package jxl.biff.drawing:
//            Dgg, Drawing, BlipStoreEntry, DrawingGroupObject, 
//            EscherRecordData, EscherContainer, BStoreContainer, DggContainer, 
//            Opt, SplitMenuColors, MsoDrawingGroupRecord, EscherStream, 
//            Origin, EscherRecordType, EscherRecord, ObjRecord, 
//            Chart, MsoDrawingRecord

public class DrawingGroup
    implements EscherStream
{

    private static Logger logger;
    private byte drawingData[];
    private EscherContainer escherData;
    private BStoreContainer bstoreContainer;
    private boolean initialized;
    private ArrayList drawings;
    private int numBlips;
    private int numCharts;
    private int drawingGroupId;
    private boolean drawingsOmitted;
    private Origin origin;
    private HashMap imageFiles;
    private int maxObjectId;
    private int maxShapeId;
    static Class class$jxl$biff$drawing$DrawingGroup; /* synthetic field */

    public DrawingGroup(Origin o)
    {
        origin = o;
        initialized = o == Origin.WRITE;
        drawings = new ArrayList();
        imageFiles = new HashMap();
        drawingsOmitted = false;
        maxObjectId = 1;
        maxShapeId = 1024;
    }

    public DrawingGroup(DrawingGroup dg)
    {
        drawingData = dg.drawingData;
        escherData = dg.escherData;
        bstoreContainer = dg.bstoreContainer;
        initialized = dg.initialized;
        drawingData = dg.drawingData;
        escherData = dg.escherData;
        bstoreContainer = dg.bstoreContainer;
        numBlips = dg.numBlips;
        numCharts = dg.numCharts;
        drawingGroupId = dg.drawingGroupId;
        drawingsOmitted = dg.drawingsOmitted;
        origin = dg.origin;
        imageFiles = (HashMap)dg.imageFiles.clone();
        maxObjectId = dg.maxObjectId;
        maxShapeId = dg.maxShapeId;
        drawings = new ArrayList();
    }

    public void add(MsoDrawingGroupRecord mso)
    {
        addData(mso.getData());
    }

    public void add(Record cont)
    {
        addData(cont.getData());
    }

    private void addData(byte msodata[])
    {
        if(drawingData == null)
        {
            drawingData = new byte[msodata.length];
            System.arraycopy(msodata, 0, drawingData, 0, msodata.length);
            return;
        } else
        {
            byte newdata[] = new byte[drawingData.length + msodata.length];
            System.arraycopy(drawingData, 0, newdata, 0, drawingData.length);
            System.arraycopy(msodata, 0, newdata, drawingData.length, msodata.length);
            drawingData = newdata;
            return;
        }
    }

    final void addDrawing(DrawingGroupObject d)
    {
        drawings.add(d);
        maxObjectId = Math.max(maxObjectId, d.getObjectId());
        maxShapeId = Math.max(maxShapeId, d.getShapeId());
    }

    public void add(Chart c)
    {
        numCharts++;
    }

    public void add(DrawingGroupObject d)
    {
        if(origin == Origin.READ)
        {
            origin = Origin.READ_WRITE;
            BStoreContainer bsc = getBStoreContainer();
            Dgg dgg = (Dgg)escherData.getChildren()[0];
            drawingGroupId = dgg.getCluster(1).drawingGroupId - numBlips - 1;
            numBlips = bsc == null ? 0 : bsc.getNumBlips();
            if(bsc != null)
                Assert.verify(numBlips == bsc.getNumBlips());
        }
        if(!(d instanceof Drawing))
        {
            maxObjectId++;
            maxShapeId++;
            d.setDrawingGroup(this);
            d.setObjectId(maxObjectId, numBlips + 1, maxShapeId);
            if(drawings.size() > maxObjectId)
                logger.warn("drawings length " + drawings.size() + " exceeds the max object id " + maxObjectId);
            return;
        }
        Drawing drawing = (Drawing)d;
        Drawing refImage = (Drawing)imageFiles.get(d.getImageFilePath());
        if(refImage == null)
        {
            maxObjectId++;
            maxShapeId++;
            drawings.add(drawing);
            drawing.setDrawingGroup(this);
            drawing.setObjectId(maxObjectId, numBlips + 1, maxShapeId);
            numBlips++;
            imageFiles.put(drawing.getImageFilePath(), drawing);
        } else
        {
            refImage.setReferenceCount(refImage.getReferenceCount() + 1);
            drawing.setDrawingGroup(this);
            drawing.setObjectId(refImage.getObjectId(), refImage.getBlipId(), refImage.getShapeId());
        }
    }

    public void remove(DrawingGroupObject d)
    {
        if(getBStoreContainer() == null)
            return;
        if(origin == Origin.READ)
        {
            origin = Origin.READ_WRITE;
            numBlips = getBStoreContainer().getNumBlips();
            Dgg dgg = (Dgg)escherData.getChildren()[0];
            drawingGroupId = dgg.getCluster(1).drawingGroupId - numBlips - 1;
        }
        EscherRecord children[] = getBStoreContainer().getChildren();
        BlipStoreEntry bse = (BlipStoreEntry)children[d.getBlipId() - 1];
        bse.dereference();
        if(bse.getReferenceCount() == 0)
        {
            getBStoreContainer().remove(bse);
            Iterator i = drawings.iterator();
            do
            {
                if(!i.hasNext())
                    break;
                DrawingGroupObject drawing = (DrawingGroupObject)i.next();
                if(drawing.getBlipId() > d.getBlipId())
                    drawing.setObjectId(drawing.getObjectId(), drawing.getBlipId() - 1, drawing.getShapeId());
            } while(true);
            numBlips--;
        }
    }

    private void initialize()
    {
        EscherRecordData er = new EscherRecordData(this, 0);
        Assert.verify(er.isContainer());
        escherData = new EscherContainer(er);
        Assert.verify(escherData.getLength() == drawingData.length);
        Assert.verify(escherData.getType() == EscherRecordType.DGG_CONTAINER);
        initialized = true;
    }

    private BStoreContainer getBStoreContainer()
    {
        if(bstoreContainer == null)
        {
            if(!initialized)
                initialize();
            EscherRecord children[] = escherData.getChildren();
            if(children.length > 1 && children[1].getType() == EscherRecordType.BSTORE_CONTAINER)
                bstoreContainer = (BStoreContainer)children[1];
        }
        return bstoreContainer;
    }

    public byte[] getData()
    {
        return drawingData;
    }

    public void write(File outputFile)
        throws IOException
    {
        if(origin == Origin.WRITE)
        {
            DggContainer dggContainer = new DggContainer();
            Dgg dgg = new Dgg(numBlips + numCharts + 1, numBlips);
            dgg.addCluster(1, 0);
            dgg.addCluster(numBlips + 1, 0);
            dggContainer.add(dgg);
            int drawingsAdded = 0;
            BStoreContainer bstoreCont = new BStoreContainer();
            Iterator i = drawings.iterator();
            do
            {
                if(!i.hasNext())
                    break;
                Object o = i.next();
                if(o instanceof Drawing)
                {
                    Drawing d = (Drawing)o;
                    BlipStoreEntry bse = new BlipStoreEntry(d);
                    bstoreCont.add(bse);
                    drawingsAdded++;
                }
            } while(true);
            if(drawingsAdded > 0)
            {
                bstoreCont.setNumBlips(drawingsAdded);
                dggContainer.add(bstoreCont);
            }
            Opt opt = new Opt();
            dggContainer.add(opt);
            SplitMenuColors splitMenuColors = new SplitMenuColors();
            dggContainer.add(splitMenuColors);
            drawingData = dggContainer.getData();
        } else
        if(origin == Origin.READ_WRITE)
        {
            DggContainer dggContainer = new DggContainer();
            Dgg dgg = new Dgg(numBlips + numCharts + 1, numBlips);
            dgg.addCluster(1, 0);
            dgg.addCluster(drawingGroupId + numBlips + 1, 0);
            dggContainer.add(dgg);
            BStoreContainer bstoreCont = new BStoreContainer();
            bstoreCont.setNumBlips(numBlips);
            BStoreContainer readBStoreContainer = getBStoreContainer();
            if(readBStoreContainer != null)
            {
                EscherRecord children[] = readBStoreContainer.getChildren();
                for(int i = 0; i < children.length; i++)
                {
                    BlipStoreEntry bse = (BlipStoreEntry)children[i];
                    bstoreCont.add(bse);
                }

            }
            Iterator i = drawings.iterator();
            do
            {
                if(!i.hasNext())
                    break;
                DrawingGroupObject dgo = (DrawingGroupObject)i.next();
                if(dgo instanceof Drawing)
                {
                    Drawing d = (Drawing)dgo;
                    if(d.getOrigin() == Origin.WRITE)
                    {
                        BlipStoreEntry bse = new BlipStoreEntry(d);
                        bstoreCont.add(bse);
                    }
                }
            } while(true);
            dggContainer.add(bstoreCont);
            Opt opt = new Opt();
            opt.addProperty(191, false, false, 0x80008);
            opt.addProperty(385, false, false, 0x8000009);
            opt.addProperty(448, false, false, 0x8000040);
            dggContainer.add(opt);
            SplitMenuColors splitMenuColors = new SplitMenuColors();
            dggContainer.add(splitMenuColors);
            drawingData = dggContainer.getData();
        }
        MsoDrawingGroupRecord msodg = new MsoDrawingGroupRecord(drawingData);
        outputFile.write(msodg);
    }

    final int getNumberOfBlips()
    {
        return numBlips;
    }

    byte[] getImageData(int blipId)
    {
        numBlips = getBStoreContainer().getNumBlips();
        Assert.verify(blipId <= numBlips);
        Assert.verify(origin == Origin.READ || origin == Origin.READ_WRITE);
        EscherRecord children[] = getBStoreContainer().getChildren();
        BlipStoreEntry bse = (BlipStoreEntry)children[blipId - 1];
        return bse.getImageData();
    }

    public void setDrawingsOmitted(MsoDrawingRecord mso, ObjRecord obj)
    {
        drawingsOmitted = true;
        if(obj != null)
            maxObjectId = Math.max(maxObjectId, obj.getObjectId());
    }

    public boolean hasDrawingsOmitted()
    {
        return drawingsOmitted;
    }

    public void updateData(DrawingGroup dg)
    {
        drawingsOmitted = dg.drawingsOmitted;
        maxObjectId = dg.maxObjectId;
        maxShapeId = dg.maxShapeId;
    }

    static Class class$(String x0)
    {
        return Class.forName(x0);
        ClassNotFoundException x1;
        x1;
        throw new NoClassDefFoundError(x1.getMessage());
    }

    static 
    {
        logger = Logger.getLogger(class$jxl$biff$drawing$DrawingGroup != null ? class$jxl$biff$drawing$DrawingGroup : (class$jxl$biff$drawing$DrawingGroup = class$("jxl.biff.drawing.DrawingGroup")));
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -