package org.xmind.core.internal.dom; import org.w3c.dom.Element; import org.xmind.core.Core; import org.xmind.core.ISheet; import org.xmind.core.ISheetSetting; import org.xmind.core.event.ICoreEventSource; import org.xmind.core.event.ICoreEventSupport; import org.xmind.core.util.DOMUtils; public class SheetSetting implements ISheetSetting { private Element sheetEle; private SheetImpl ownedSheet; public SheetSetting(Element sheetEle, SheetImpl ownedSheet) { this.sheetEle = sheetEle; this.ownedSheet = ownedSheet; } public boolean isInfoItemVisible(String type, String key, String defaultMode) { String mode = getInfoItemMode(type, DOMConstants.ATTR_MODE); if (mode == null) mode = defaultMode; return mode != null && mode.equals(DOMConstants.VAL_CARDMODE); } public void setInfoItemVisible(String type, String key, String defaultMode, boolean visible) { if (visible) { if (!isInfoItemVisible(type, key, defaultMode)) { setInfoItemMode(type, key, DOMConstants.VAL_CARDMODE); fireValueChange(ownedSheet, Core.Visibility, Boolean.FALSE, Boolean.TRUE); } } else { if (isInfoItemVisible(type, key, defaultMode)) { setInfoItemMode(type, key, DOMConstants.VAL_ICONMODE); fireValueChange(ownedSheet, Core.Visibility, Boolean.TRUE, Boolean.FALSE); } } } public String getInfoItemMode(String type, String key) { Element infoItemEle = getInfoItemEle(type); if (infoItemEle == null) return null; return DOMUtils.getAttribute(infoItemEle, DOMConstants.ATTR_MODE); } public void setInfoItemMode(String type, String key, String value) { Element infoItemEle = ensureInfoItemEle(type); DOMUtils.setAttribute(infoItemEle, key, value); } public Element getSheetEle() { return sheetEle; } public SheetImpl getOwnedSheet() { return ownedSheet; } private Element getInfoItemEle(String type) { if (sheetEle != null) { Element settingsEle = DOMUtils.getFirstChildElementByTag(sheetEle, DOMConstants.TAG_SHEET_SETTINGS); if (settingsEle == null) return null; Element infoItemsEle = DOMUtils.getFirstChildElementByTag( settingsEle, DOMConstants.TAG_INFO_ITEMS); if (infoItemsEle == null) return null; Element[] infoItemEles = DOMUtils.getChildElementsByTag( infoItemsEle, DOMConstants.TAG_INFO_ITEM); if (infoItemEles == null || infoItemEles.length == 0) return null; for (Element infoItemEle : infoItemEles) { String eleType = DOMUtils.getAttribute(infoItemEle, DOMConstants.ATTR_TYPE); if (type.equals(eleType)) return infoItemEle; } } return null; } private Element ensureInfoItemEle(String type) { Element sheetSettingsEle = DOMUtils.ensureChildElement(sheetEle, DOMConstants.TAG_SHEET_SETTINGS); Element infoItemsEle = DOMUtils.ensureChildElement(sheetSettingsEle, DOMConstants.TAG_INFO_ITEMS); Element infoItemEle = getInfoItemEle(type); if (infoItemEle == null) { infoItemEle = DOMUtils.createElement(infoItemsEle, DOMConstants.TAG_INFO_ITEM); DOMUtils.setAttribute(infoItemEle, DOMConstants.ATTR_TYPE, type); } return infoItemEle; } private void fireValueChange(ISheet sheet, String visibility, Boolean oldValue, Boolean newValue) { if (sheet instanceof ICoreEventSource) getCoreEventSupport(sheet).dispatchValueChange( (ICoreEventSource) sheet, visibility, oldValue, newValue); } private ICoreEventSupport getCoreEventSupport(ISheet sheet) { return (ICoreEventSupport) sheet.getAdapter(ICoreEventSupport.class); } }