first commit

This commit is contained in:
2025-07-28 13:56:49 +05:30
commit e9eb805edb
3438 changed files with 520990 additions and 0 deletions

View File

@@ -0,0 +1,177 @@
package jxl.biff.drawing;
import common.Assert;
import common.Logger;
import jxl.biff.IntegerHelper;
import jxl.biff.Type;
import jxl.biff.WritableRecordData;
import jxl.read.biff.Record;
public class ObjRecord extends WritableRecordData {
private static final Logger logger = Logger.getLogger(ObjRecord.class);
private ObjType type;
private boolean read;
private int objectId;
private static final class ObjType {
public int value;
public String desc;
private static ObjType[] types = new ObjType[0];
ObjType(int v, String d) {
this.value = v;
this.desc = d;
ObjType[] oldtypes = types;
types = new ObjType[types.length + 1];
System.arraycopy(oldtypes, 0, types, 0, oldtypes.length);
types[oldtypes.length] = this;
}
public String toString() {
return this.desc;
}
public static ObjType getType(int val) {
ObjType retval = ObjRecord.UNKNOWN;
for (int i = 0; i < types.length && retval == ObjRecord.UNKNOWN; i++) {
if ((types[i]).value == val)
retval = types[i];
}
return retval;
}
}
public static final ObjType TBD2 = new ObjType(1, "TBD2");
public static final ObjType TBD = new ObjType(2, "TBD");
public static final ObjType CHART = new ObjType(5, "Chart");
public static final ObjType TEXT = new ObjType(6, "Text");
public static final ObjType BUTTON = new ObjType(7, "Button");
public static final ObjType PICTURE = new ObjType(8, "Picture");
public static final ObjType CHECKBOX = new ObjType(14, "Checkbox");
public static final ObjType OPTION = new ObjType(12, "Option");
public static final ObjType EDITBOX = new ObjType(13, "Edit Box");
public static final ObjType LABEL = new ObjType(14, "Label");
public static final ObjType DIALOGUEBOX = new ObjType(15, "Dialogue Box");
public static final ObjType LISTBOX = new ObjType(18, "List Box");
public static final ObjType GROUPBOX = new ObjType(19, "Group Box");
public static final ObjType COMBOBOX = new ObjType(20, "Combo Box");
public static final ObjType MSOFFICEDRAWING = new ObjType(30, "MS Office Drawing");
public static final ObjType FORMCONTROL = new ObjType(20, "Form Combo Box");
public static final ObjType EXCELNOTE = new ObjType(25, "Excel Note");
public static final ObjType UNKNOWN = new ObjType(255, "Unknown");
private static final int COMMON_DATA_LENGTH = 22;
private static final int CLIPBOARD_FORMAT_LENGTH = 6;
private static final int PICTURE_OPTION_LENGTH = 6;
private static final int NOTE_STRUCTURE_LENGTH = 26;
private static final int END_LENGTH = 4;
public ObjRecord(Record t) {
super(t);
byte[] data = t.getData();
int objtype = IntegerHelper.getInt(data[4], data[5]);
this.read = true;
this.type = ObjType.getType(objtype);
if (this.type == UNKNOWN)
logger.warn("unknown object type code " + objtype);
this.objectId = IntegerHelper.getInt(data[6], data[7]);
}
ObjRecord(int objId, ObjType t) {
super(Type.OBJ);
this.objectId = objId;
this.type = t;
}
public byte[] getData() {
if (this.read)
return getRecord().getData();
if (this.type == PICTURE || this.type == CHART)
return getPictureData();
if (this.type == EXCELNOTE)
return getNoteData();
Assert.verify(false);
return null;
}
private byte[] getPictureData() {
int dataLength = 38;
int pos = 0;
byte[] data = new byte[dataLength];
IntegerHelper.getTwoBytes(21, data, pos);
IntegerHelper.getTwoBytes(18, data, pos + 2);
IntegerHelper.getTwoBytes(this.type.value, data, pos + 4);
IntegerHelper.getTwoBytes(this.objectId, data, pos + 6);
IntegerHelper.getTwoBytes(24593, data, pos + 8);
pos += 22;
IntegerHelper.getTwoBytes(7, data, pos);
IntegerHelper.getTwoBytes(2, data, pos + 2);
IntegerHelper.getTwoBytes(65535, data, pos + 4);
pos += 6;
IntegerHelper.getTwoBytes(8, data, pos);
IntegerHelper.getTwoBytes(2, data, pos + 2);
IntegerHelper.getTwoBytes(1, data, pos + 4);
pos += 6;
IntegerHelper.getTwoBytes(0, data, pos);
IntegerHelper.getTwoBytes(0, data, pos + 2);
pos += 4;
return data;
}
private byte[] getNoteData() {
int dataLength = 52;
int pos = 0;
byte[] data = new byte[dataLength];
IntegerHelper.getTwoBytes(21, data, pos);
IntegerHelper.getTwoBytes(18, data, pos + 2);
IntegerHelper.getTwoBytes(this.type.value, data, pos + 4);
IntegerHelper.getTwoBytes(this.objectId, data, pos + 6);
IntegerHelper.getTwoBytes(16401, data, pos + 8);
pos += 22;
IntegerHelper.getTwoBytes(13, data, pos);
IntegerHelper.getTwoBytes(22, data, pos + 2);
pos += 26;
IntegerHelper.getTwoBytes(0, data, pos);
IntegerHelper.getTwoBytes(0, data, pos + 2);
pos += 4;
return data;
}
public Record getRecord() {
return super.getRecord();
}
public ObjType getType() {
return this.type;
}
int getObjectId() {
return this.objectId;
}
}