/* * Copyright 2006-2017 ICEsoft Technologies Canada Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the * License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package org.icepdf.core.pobjects.annotations; import org.icepdf.core.pobjects.Name; import java.util.HashMap; /** * An appearance dictionary dictionary entry for N, R or D can be associated * with one or more appearance streams. For example a Widget btn annotation * can have an /ON an /Off state. This class sill store one or more * named appearance streams for a dictionary entry. * * @since 5.1 */ public class Appearance { private HashMap<Name, AppearanceState> appearance; private Name selectedName = Annotation.APPEARANCE_STREAM_NORMAL_KEY; private Name offName = new Name("Off"); private Name onName = new Name("Yes"); /** * Create a new instance of an Appearance stream. */ public Appearance() { appearance = new HashMap<Name, AppearanceState>(2); } public boolean hasAlternativeAppearance() { return offName != null || onName != null; } public void addAppearance(Name name, AppearanceState appearanceState) { appearance.put(name, appearanceState); if (name.getName().toLowerCase().equals("off")) { offName = name; } else { onName = name; } } public Name getOffName() { return offName; } public Name getOnName() { return onName; } public Name getSelectedName() { return selectedName; } public void setSelectedName(Name selectedName) { this.selectedName = selectedName; } public AppearanceState getSelectedAppearanceState() { AppearanceState state = appearance.get(selectedName); return state; } public AppearanceState getAppearanceState(Name name) { AppearanceState state = appearance.get(name); return state; } /** * Updates or adds the APPEARANCE_STATE_KEY with the currently selected state. * * @param entries parent annotation dictionary to update. */ protected void updateAppearanceDictionary(HashMap<Object, Object> entries) { entries.put(Annotation.APPEARANCE_STATE_KEY, selectedName); } }