📄 drawinggroup.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 + -