📄 swtskin.java
字号:
final String[] sDirections = {
"top",
"bottom",
"left",
"right"
};
// Because layout data is cached, we can't just set the data's properties
// We need to create a brand new FormData.
Object data = controlToLayout.getLayoutData();
if (data != null && !(data instanceof FormData)) {
return;
}
FormData oldFormData = (FormData) controlToLayout.getLayoutData();
if (oldFormData == null) {
oldFormData = new FormData();
}
FormData newFormData = new FormData(oldFormData.width, oldFormData.height);
String templateID = properties.getStringValue(sConfigID
+ ".attach.template");
if (templateID == null) {
//templateID = skinObject.getSkinObjectID();
}
for (int i = 0; i < sDirections.length; i++) {
Control control = null;
int offset = 0;
int percent = 0;
String sAlign = null;
int align = SWT.DEFAULT;
// grab any defaults from existing attachment
FormAttachment attachment;
switch (i) {
case 0:
attachment = oldFormData.top;
break;
case 1:
attachment = oldFormData.bottom;
break;
case 2:
attachment = oldFormData.left;
break;
case 3:
attachment = oldFormData.right;
break;
default:
attachment = null;
}
if (attachment != null) {
control = attachment.control;
offset = attachment.offset;
align = attachment.alignment;
// XXX Assumed: Denominator is 100
percent = attachment.numerator;
}
// parse skin config
String suffix = ".attach." + sDirections[i];
String prefix = sConfigID;
String[] sParams;
sParams = properties.getStringArray(sConfigID + suffix);
if (sParams == null && templateID != null) {
sParams = properties.getStringArray(templateID + suffix);
prefix = templateID;
}
if (sParams == null) {
if (attachment != null) {
if (control == null) {
attachment = new FormAttachment(percent, offset);
} else {
attachment = new FormAttachment(control, offset, align);
}
}
} else if (sParams.length == 0
|| (sParams.length == 1 && sParams[0].length() == 0)) {
attachment = null;
} else {
if (sParams[0].length() > 0 && Character.isDigit(sParams[0].charAt(0))) {
// Percent, Offset
try {
percent = Integer.parseInt(sParams[0]);
} catch (Exception e) {
}
if (sParams.length > 1) {
try {
offset = Integer.parseInt(sParams[1]);
} catch (Exception e) {
}
}
attachment = new FormAttachment(percent, offset);
} else {
// Object, Offset, Alignment
String sWidget = sParams[0];
SWTSkinObject configSkinObject = getSkinObjectByID(sWidget);
int iNextPos;
if (configSkinObject != null) {
control = configSkinObject.getControl();
iNextPos = 1;
} else {
iNextPos = 0;
if (sWidget.length() != 0) {
System.err.println("ERROR: Trying to attach " + sDirections[i]
+ " of widget '" + skinObject + "' to non-existant widget '"
+ sWidget + "'. Attachment Parameters: "
+ properties.getStringValue(prefix + suffix));
}
}
for (int j = iNextPos; j < sParams.length; j++) {
if (sParams[j].length() > 0) {
char c = sParams[j].charAt(0);
if (Character.isDigit(c) || c == '-') {
try {
offset = Integer.parseInt(sParams[j]);
} catch (Exception e) {
}
} else {
sAlign = sParams[j];
}
}
}
if (sAlign != null) {
align = SWTSkinUtils.getAlignment(sAlign, align);
}
attachment = new FormAttachment(control, offset, align);
}
}
if (controlToLayout.getData("DEBUG") != null && attachment != null) {
if (controlToLayout instanceof Group) {
Group group = (Group) controlToLayout;
String sValue = properties.getStringValue(prefix + suffix);
String sText = group.getText() + "; "
+ sDirections[i].substring(0, 1) + "="
+ (sValue == null ? "(def)" : sValue);
if (sText.length() < 20) {
group.setText(sText);
}
group.setToolTipText(sText);
}
}
if (DEBUGLAYOUT) {
System.out.println("Attach: " + sConfigID + suffix + ": "
+ properties.getStringValue(prefix + suffix) + "/" + attachment);
}
// create new attachment
switch (i) {
case 0:
newFormData.top = attachment;
break;
case 1:
newFormData.bottom = attachment;
break;
case 2:
newFormData.left = attachment;
break;
case 3:
newFormData.right = attachment;
break;
}
}
if (Constants.isWindows && (controlToLayout instanceof Browser) && false) {
if (newFormData.top != null) {
newFormData.top.offset -= 2;
}
if (newFormData.right != null) {
newFormData.right.offset += 2;
}
if (newFormData.left != null) {
newFormData.left.offset -= 2;
}
if (newFormData.bottom != null) {
newFormData.bottom.offset += 2;
}
}
newFormData.height = properties.getIntValue(sConfigID + ".height",
newFormData.height);
newFormData.width = properties.getIntValue(sConfigID + ".width",
newFormData.width);
controlToLayout.setLayoutData(newFormData);
}
private SWTSkinObject createContainer(SWTSkinProperties properties,
String sID, final String sConfigID, SWTSkinObject parentSkinObject,
boolean bForceCreate, boolean bPropogate, SWTSkinObject intoSkinObject) {
String[] sItems = properties.getStringArray(sConfigID + ".widgets");
if (sItems == null && !bForceCreate) {
return null;
}
if (DEBUGLAYOUT) {
System.out.println("createContainer: " + sID + ";"
+ properties.getStringValue(sConfigID + ".widgets"));
}
SWTSkinObject skinObject = getSkinObjectByID(sID, parentSkinObject);
if (skinObject == null) {
if (intoSkinObject == null) {
skinObject = new SWTSkinObjectContainer(this, properties, sID,
sConfigID, parentSkinObject);
addToControlMap(skinObject);
} else {
skinObject = intoSkinObject;
}
} else {
if (!(skinObject instanceof SWTSkinObjectContainer)) {
return skinObject;
}
}
if (!bPropogate) {
bPropogate = properties.getIntValue(sConfigID + ".propogate", 0) == 1;
}
if (!bPropogate && (parentSkinObject instanceof SWTSkinObjectContainer)) {
bPropogate = ((SWTSkinObjectContainer) parentSkinObject).getPropogation();
}
if (bPropogate) {
((SWTSkinObjectContainer) skinObject).setPropogation(true);
}
if (sItems != null) {
String[] paramValues = null;
if (properties instanceof SWTSkinPropertiesParam) {
paramValues = ((SWTSkinPropertiesParam) properties).getParamValues();
}
// Cloning is only for one level. Children get the original properties
// object
if (properties instanceof SWTSkinPropertiesClone) {
properties = ((SWTSkinPropertiesClone) properties).getOriginalProperties();
}
// Propogate any parameter values.
// XXX This could get ugly, we should could the # of
// SWTSkinPropertiesParam to determine if this needs optimizing
// ie. if a top container has paramValues, every child will get a new
// object. How would this affect memory/performace?
if (paramValues != null) {
properties = new SWTSkinPropertiesParamImpl(properties, paramValues);
}
for (int i = 0; i < sItems.length; i++) {
String sItemID = sItems[i];
linkIDtoParent(properties, sItemID, sItemID, skinObject, false, true);
}
}
if (bLayoutComplete) {
attachControl(skinObject);
}
return skinObject;
}
private SWTSkinObject createSash(SWTSkinProperties properties, String sID,
String sConfigID, SWTSkinObject parentSkinObject, final boolean bVertical) {
int style = bVertical ? SWT.VERTICAL : SWT.HORIZONTAL;
final String[] sItems = properties.getStringArray(sConfigID + ".widgets");
SWTSkinObject skinObject;
Composite createOn;
if (parentSkinObject == null) {
createOn = shell;
} else {
createOn = (Composite) parentSkinObject.getControl();
}
if (sItems == null) {
// No widgets, so it's a sash
Sash sash = new Sash(createOn, style);
skinObject = new SWTSkinObjectBasic(this, properties, sash, sID,
sConfigID, "sash", parentSkinObject);
addToControlMap(skinObject);
sash.setBackground(sash.getDisplay().getSystemColor(SWT.COLOR_RED));
sash.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
Sash sash = (Sash) e.widget;
final boolean FASTDRAG = true;
if (FASTDRAG && e.detail == SWT.DRAG) {
return;
}
Rectangle parentArea = sash.getParent().getClientArea();
FormData formData = (FormData) sash.getLayoutData();
formData.left = new FormAttachment(e.x * 100 / parentArea.width);
sash.getParent().layout();
}
});
} else {
// Widgets exist, so use a SashForm to split them
final SashForm sashForm = new SashForm(createOn, style);
skinObject = new SWTSkinObjectContainer(this, properties, sashForm, sID,
sConfigID, "sash", parentSkinObject);
addToControlMap(skinObject);
int iSashWidth = properties.getIntValue(sConfigID + ".sash.width", -1);
if (iSashWidth > 0) {
sashForm.SASH_WIDTH = iSashWidth;
}
for (int i = 0; i < sItems.length; i++) {
String sChildID = sItems[i];
linkIDtoParent(properties, sChildID, sChildID, skinObject, false, true);
}
}
if (bLayoutComplete) {
attachControl(skinObject);
}
return skinObject;
}
private SWTSkinObject createMySash(SWTSkinProperties properties,
final String sID, String sConfigID, String[] typeParams,
SWTSkinObject parentSkinObject, final boolean bVertical) {
SWTSkinObject skinObject = new SWTSkinObjectSash(this, properties, sID,
sConfigID, typeParams, parentSkinObject, bVertical);
addToControlMap(skinObject);
if (bLayoutComplete) {
attachControl(skinObject);
}
return skinObject;
}
/**
* Create a tab using a template.
* <p>
* (objectid).view.template.(sTemplateKey)=(Reference to Template skin object)
*
* @param sID ID to give the new tab
* @param sTemplateKey Template Key to read to get the tab's template skin object
* @param tabHolder Where to read the template key from
*
* @return The new tab, or null if tab could not be created
*/
public SWTSkinObjectTab createTab(String sID, String sTemplateKey,
SWTSkinObject tabHolder) {
String sTemplateID = SWTSkinTabSet.getTemplateID(this, tabHolder,
sTemplateKey);
if (sTemplateID == null) {
return null;
}
SWTSkinObject skinObject = linkIDtoParent(skinProperties, sID, sTemplateID,
tabHolder, true, true);
// SWTSkinObjectTab skinObject = _createTab(skinProperties, sID, sTemplateID,
// tabHolder);
if (bLayoutComplete && skinObject != null) {
((Composite) skinObject.getControl()).getParent().layout(true);
}
if (skinObject instanceof SWTSkinObjectTab) {
return (SWTSkinObjectTab) skinObject;
}
System.err.println(skinObject + " not a SWTSkinObjectTab! Template: "
+ sTemplateID);
return null;
}
/**
* @param configID
*/
private SWTSkinObjectTab _createTab(SWTSkinProperties properties, String sID,
String sConfigID, SWTSkinObject parentSkinObject) {
//System.out.println("createTab " + sID + ", " + sConfigID + ", " + sParentID);
SWTSkinObjectTab skinObjectTab = new SWTSkinObjectTab(this, properties,
sID, sConfigID, parentSkinObject);
createContainer(properties, sID, sConfigID, parentSkinObject, true, true,
skinObjectTab);
addToControlMap(skinObjectTab);
String sTabSet = properties.getStringValue(sConfigID + ".tabset", "default");
SWTSkinTabSet tabset = (SWTSkinTabSet) mapTabSetToControls.get(sTabSet);
if (tabset == null) {
tabset = new SWTSkinTabSet(this, sTabSet);
mapTabSetToControls.put(sTabSet, tabset);
if (DEBUGLAYOUT) {
System.out.println("New TabSet: " + sTabSet);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -