/* * This library is part of OpenCms - * the Open Source Content Management System * * Copyright (c) Alkacon Software GmbH (http://www.alkacon.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * For further information about Alkacon Software, please see the * company website: http://www.alkacon.com * * For further information about OpenCms, please see the * project website: http://www.opencms.org * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.opencms.ade.galleries.client.preview.ui; import org.opencms.ade.galleries.client.Messages; import org.opencms.ade.galleries.client.preview.CmsImagePreviewHandler.Attribute; import org.opencms.ade.galleries.client.ui.css.I_CmsLayoutBundle; import org.opencms.ade.galleries.shared.CmsImageInfoBean; import org.opencms.gwt.client.ui.CmsPushButton; import org.opencms.gwt.client.ui.I_CmsButton.Size; import org.opencms.gwt.client.ui.input.CmsCheckBox; import org.opencms.gwt.client.ui.input.CmsSelectBox; import org.opencms.gwt.client.ui.input.CmsTextBox; import org.opencms.gwt.client.ui.input.I_CmsFormWidget; import org.opencms.gwt.client.util.CmsJSONMap; import org.opencms.gwt.shared.property.CmsClientProperty; import org.opencms.util.CmsStringUtil; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; /** * Simple image tag properties form, use in editor mode only.<p> * * @since 8.0. */ public class CmsImageEditorForm extends Composite { /** Ui binder interface. */ protected interface I_CmsImageEditorFormatsTabUiBinder extends UiBinder<Widget, CmsImageEditorForm> { // GWT interface, nothing to do } /** Ui binder instance. */ private static I_CmsImageEditorFormatsTabUiBinder m_uiBinder = GWT.create(I_CmsImageEditorFormatsTabUiBinder.class); /** The reset copyright button. */ @UiField protected CmsPushButton m_buttonResetCopyright; /** The reset alt/title button. */ @UiField protected CmsPushButton m_buttonResetTitle; /** The insert copyright check-box. */ @UiField protected CmsCheckBox m_checkboxInsertCopyright; /** The insert link to original check-box. */ @UiField protected CmsCheckBox m_checkboxInsertLinkOrig; /** The insert subtitle check-box. */ @UiField protected CmsCheckBox m_checkboxInsertSubtitle; /** The insert spacing check-box. */ @UiField protected CmsCheckBox m_checkboxSpacing; /** The alt/title input field. */ @UiField protected CmsTextBox m_inputAltTitle; /** The copyright input field. */ @UiField protected CmsTextBox m_inputCopyright; /** The hSpace input field. */ @UiField protected CmsTextBox m_inputHSpace; /** The vSpace input field. */ @UiField protected CmsTextBox m_inputVSpace; /** The alignment select-box label. */ @UiField protected Label m_labelAlign; /** The alt/title field label. */ @UiField protected Label m_labelAltTitle; /** The copyright field label. */ @UiField protected Label m_labelCopyright; /** The hSpace field label. */ @UiField protected Label m_labelHSpace; /** The image spacing check-box label. */ @UiField protected Label m_labelImageSpacing; /** The insert copyright check-box label. */ @UiField protected Label m_labelInsertCopyright; /** The insert link to original check-box label. */ @UiField protected Label m_labelInsertLinkOrig; /** The insert subtitles check-box label. */ @UiField protected Label m_labelInsertSubtitle; /** The vSpace field label. */ @UiField protected Label m_labelVSpace; /** The alignment select-box. */ @UiField CmsSelectBox m_selectAlign; /** The form fields. */ private Map<Attribute, I_CmsFormWidget> m_fields; /** The initial image attribute values. */ private CmsJSONMap m_initialImageAttributes; /** * Constructor.<p> */ public CmsImageEditorForm() { initWidget(m_uiBinder.createAndBindUi(this)); m_labelAltTitle.setText(Messages.get().key(Messages.GUI_IMAGE_TITLE_ALT_0)); m_labelCopyright.setText(Messages.get().key(Messages.GUI_IMAGE_COPYRIGHT_0)); m_labelImageSpacing.setText(Messages.get().key(Messages.GUI_IMAGE_SPACING_0)); m_labelInsertSubtitle.setText(Messages.get().key(Messages.GUI_IMAGE_INSERT_SUBTITLE_0)); m_labelInsertCopyright.setText(Messages.get().key(Messages.GUI_IMAGE_INSERT_COPYRIGHT_0)); m_labelHSpace.setText(Messages.get().key(Messages.GUI_IMAGE_HSPACE_0)); m_labelVSpace.setText(Messages.get().key(Messages.GUI_IMAGE_VSPACE_0)); m_labelInsertLinkOrig.setText(Messages.get().key(Messages.GUI_IMAGE_INSERT_LINK_TO_ORG_0)); m_buttonResetTitle.setSize(Size.small); m_buttonResetTitle.setText(Messages.get().key(Messages.GUI_IMAGE_RESET_TITLE_0)); m_buttonResetCopyright.setSize(Size.small); m_buttonResetCopyright.setText(Messages.get().key(Messages.GUI_IMAGE_RESET_COPYRIGHT_0)); m_labelAlign.setText(Messages.get().key(Messages.GUI_IMAGE_ALIGN_0)); m_selectAlign.addOption("", Messages.get().key(Messages.GUI_IMAGE_ALIGN_NOT_SET_0)); m_selectAlign.addOption("left", Messages.get().key(Messages.GUI_IMAGE_ALIGN_LEFT_0)); m_selectAlign.addOption("right", Messages.get().key(Messages.GUI_IMAGE_ALIGN_RIGHT_0)); m_fields = new HashMap<Attribute, I_CmsFormWidget>(); m_fields.put(Attribute.alt, m_inputAltTitle); m_fields.put(Attribute.hspace, m_inputHSpace); m_fields.put(Attribute.vspace, m_inputVSpace); m_fields.put(Attribute.align, m_selectAlign); m_fields.put(Attribute.copyright, m_inputCopyright); m_fields.put(Attribute.insertCopyright, m_checkboxInsertCopyright); m_fields.put(Attribute.insertSubtitle, m_checkboxInsertSubtitle); m_fields.put(Attribute.insertSpacing, m_checkboxSpacing); m_fields.put(Attribute.insertLinkOrig, m_checkboxInsertLinkOrig); } /** * Displays the provided image information.<p> * * @param imageInfo the image information * @param imageAttributes the image attributes * @param initialFill flag to indicate that a new image has been selected */ public void fillContent(CmsImageInfoBean imageInfo, CmsJSONMap imageAttributes, boolean initialFill) { m_initialImageAttributes = imageAttributes; boolean hasSpacing = false; for (Entry<Attribute, I_CmsFormWidget> entry : m_fields.entrySet()) { String val = imageAttributes.getString(entry.getKey().name()); if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(val)) { entry.getValue().setFormValueAsString(val); if ((entry.getKey() == Attribute.hspace) || (entry.getKey() == Attribute.vspace)) { hasSpacing = true; } } else { if (entry.getKey() == Attribute.alt) { entry.getValue().setFormValueAsString( imageInfo.getProperties().get(CmsClientProperty.PROPERTY_TITLE)); } if (entry.getKey() == Attribute.copyright) { entry.getValue().setFormValueAsString(imageInfo.getCopyright()); } if (initialFill && (entry.getKey() == Attribute.align)) { entry.getValue().setFormValueAsString("left"); } } } m_checkboxSpacing.setFormValueAsString("" + hasSpacing); } /** * Adds necessary attributes to the map.<p> * * @param attributes the attribute map * @return the attribute map */ public Map<String, String> getImageAttributes(Map<String, String> attributes) { for (Entry<Attribute, I_CmsFormWidget> entry : m_fields.entrySet()) { String val = entry.getValue().getFormValueAsString(); if (CmsStringUtil.isEmptyOrWhitespaceOnly(val)) { continue; } attributes.put(entry.getKey().name(), val); // put the same value in 'alt' and 'title' attribute if (entry.getKey() == Attribute.alt) { attributes.put(Attribute.title.name(), val); } } return attributes; } /** * Hides the enhanced image options in this form.<p> * * @param hide if <code>true</code> the enhanced options will get hidden */ public void hideEnhancedOptions(boolean hide) { if (hide) { addStyleName(I_CmsLayoutBundle.INSTANCE.previewDialogCss().hiding()); } else { removeStyleName(I_CmsLayoutBundle.INSTANCE.previewDialogCss().hiding()); } } /** * Handles the click on 'reset copyright' button.<p> * * @param event the click event */ @UiHandler("m_buttonResetCopyright") protected void onResetCopyrightClick(ClickEvent event) { resetValue(Attribute.copyright); } /** * Handles the click on 'reset title' button.<p> * * @param event the click event */ @UiHandler("m_buttonResetTitle") protected void onResetTitleClick(ClickEvent event) { resetValue(Attribute.alt); } /** * Handles value changes on the insert spacing check box.<p> * * @param event the event to handle */ @UiHandler("m_checkboxSpacing") protected void onChangeSpacing(ValueChangeEvent<Boolean> event) { // if spacing is activated and no previous values present, set '5' as default if (event.getValue().booleanValue()) { m_inputHSpace.setEnabled(true); m_inputVSpace.setEnabled(true); m_inputHSpace.setFormValueAsString("5"); m_inputVSpace.setFormValueAsString("5"); } else { m_inputHSpace.setFormValueAsString(""); m_inputVSpace.setFormValueAsString(""); m_inputHSpace.setEnabled(false); m_inputVSpace.setEnabled(false); } } /** * Resets the value for the given attribute to it's initial value.<p> * * @param attribute the attribute to reset */ protected void resetValue(Attribute attribute) { String initValue = ""; if (m_initialImageAttributes.containsKey(attribute.name())) { initValue = m_initialImageAttributes.getString(attribute.name()); } if (m_fields.containsKey(attribute)) { m_fields.get(attribute).setFormValueAsString(initValue); } } }