
com.sibvisions.rad.ui.vaadin.impl.component.AbstractVaadinButton Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jvxvaadin-server Show documentation
Show all versions of jvxvaadin-server Show documentation
Vaadin UI implementation for JVx
The newest version!
/*
* Copyright 2012 SIB Visions GmbH
*
* 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.
*
*
* History
*
* 17.10.2012 - [CB] - creation
* 11.04.2019 - [DJ] - #1694: button alignment made more consistent with other implementations
* 17.04.2019 - [DJ] - #1694: flex property used for button alignment(jvx_valo bugfix)
*/
package com.sibvisions.rad.ui.vaadin.impl.component;
import jvx.rad.ui.IAlignmentConstants;
import jvx.rad.ui.IDimension;
import jvx.rad.ui.IImage;
import jvx.rad.ui.component.IButton;
import jvx.rad.ui.event.ActionHandler;
import jvx.rad.ui.event.Key;
import jvx.rad.ui.event.UIActionEvent;
import jvx.rad.ui.event.UIKeyEvent;
import com.sibvisions.rad.ui.vaadin.ext.ui.AccessibilityUtil;
import com.sibvisions.rad.ui.vaadin.ext.ui.MouseOverButton;
import com.sibvisions.rad.ui.vaadin.ext.ui.client.CssExtensionAttribute;
import com.sibvisions.rad.ui.vaadin.ext.ui.extension.CssExtension;
import com.sibvisions.rad.ui.vaadin.impl.VaadinImage;
import com.sibvisions.util.ArrayUtil;
import com.vaadin.event.ShortcutAction;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
/**
* The AbstractVaadinButton
is the base class for vaadin implementations of IButton
.
*
* @author Benedikt Cermak
* @see jvx.rad.ui.component.IButton
* @see MouseOverButton
*/
public abstract class AbstractVaadinButton extends AbstractVaadinCaptionComponent
implements IButton,
ClickListener
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class members
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/** the accelerator for this Key. */
private Key keyAccelerator = null;
/** mouse over image. **/
private VaadinImage imgMouseOver = null;
/** vertical Position of the text. **/
private int iVerticalPosition = IAlignmentConstants.ALIGN_CENTER;
/** horizontal Position of the text. **/
private int iHorizontalPosition = IAlignmentConstants.ALIGN_RIGHT;
/** the gap between the icon and the text. **/
private int iImageTextGap = 4;
/** border on Mouse entered. **/
private boolean bBorderOnMouseEntered = false;
/** border painted. **/
private boolean bBorderPainted = true;
/** indicates whether this button acts as default-button. */
private boolean bIsDefault = false;
/** indicates whether the image text-gap was set manually. */
private boolean bImageTextGapSet = false;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Initialization
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* Creates a new instance of AbstractVaadinButton
.
*
* @param pAbstractButton an instance of {@link com.vaadin.ui.Button}
*/
public AbstractVaadinButton(MouseOverButton pAbstractButton)
{
super(pAbstractButton);
//no text -> sets margins
setText(null);
addInternStyleName("default-padding");
setHorizontalAlignment(ALIGN_CENTER);
setVerticalAlignment(ALIGN_CENTER);
setVerticalTextPosition(ALIGN_CENTER);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Interface implementation
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* {@inheritDoc}
*/
public Key getAccelerator()
{
return keyAccelerator;
}
/**
* {@inheritDoc}
*/
public void setAccelerator(Key pAccelerator)
{
if (pAccelerator != null)
{
int keyCode = pAccelerator.getKeyChar();
switch (pAccelerator.getKeyCode())
{
case UIKeyEvent.VK_ENTER: keyCode = KeyCode.ENTER; break;
case UIKeyEvent.VK_ESCAPE: keyCode = KeyCode.ESCAPE; break;
case UIKeyEvent.VK_PAGE_UP: keyCode = KeyCode.PAGE_UP; break;
case UIKeyEvent.VK_PAGE_DOWN: keyCode = KeyCode.PAGE_DOWN; break;
case UIKeyEvent.VK_LEFT: keyCode = KeyCode.ARROW_LEFT; break;
case UIKeyEvent.VK_UP: keyCode = KeyCode.ARROW_UP; break;
case UIKeyEvent.VK_RIGHT: keyCode = KeyCode.ARROW_RIGHT; break;
case UIKeyEvent.VK_DOWN: keyCode = KeyCode.ARROW_DOWN; break;
case UIKeyEvent.VK_BACK_SPACE: keyCode = KeyCode.BACKSPACE; break;
case UIKeyEvent.VK_DELETE: keyCode = KeyCode.DELETE; break;
case UIKeyEvent.VK_INSERT: keyCode = KeyCode.INSERT; break;
case UIKeyEvent.VK_END: keyCode = KeyCode.END; break;
case UIKeyEvent.VK_HOME: keyCode = KeyCode.HOME; break;
case UIKeyEvent.VK_F1: keyCode = KeyCode.F1; break;
case UIKeyEvent.VK_F2: keyCode = KeyCode.F2; break;
case UIKeyEvent.VK_F3: keyCode = KeyCode.F3; break;
case UIKeyEvent.VK_F4: keyCode = KeyCode.F4; break;
case UIKeyEvent.VK_F5: keyCode = KeyCode.F5; break;
case UIKeyEvent.VK_F6: keyCode = KeyCode.F6; break;
case UIKeyEvent.VK_F7: keyCode = KeyCode.F7; break;
case UIKeyEvent.VK_F8: keyCode = KeyCode.F8; break;
case UIKeyEvent.VK_F9: keyCode = KeyCode.F9; break;
case UIKeyEvent.VK_F10: keyCode = KeyCode.F10; break;
case UIKeyEvent.VK_F11: keyCode = KeyCode.F11; break;
case UIKeyEvent.VK_F12: keyCode = KeyCode.F12; break;
default:
}
int[] vaadinModifiers = mapToVaadinModifiers(pAccelerator.getModifiers());
resource.setClickShortcut(keyCode, vaadinModifiers);
}
else
{
resource.removeClickShortcut();
}
keyAccelerator = pAccelerator;
}
/**
* Maps the modifiers bitMask to vaadin modifiers array.
*
* @param pModifiers the ui modifiers
* @return array of vaadin modifiers
*/
private int[] mapToVaadinModifiers(int pModifiers)
{
int[] vaadinModifiers = new int[4];
int i = 0;
if ((pModifiers & UIKeyEvent.SHIFT_MASK) == UIKeyEvent.SHIFT_MASK)
{
vaadinModifiers[i++] = ShortcutAction.ModifierKey.SHIFT;
}
if ((pModifiers & UIKeyEvent.CTRL_MASK) == UIKeyEvent.CTRL_MASK)
{
vaadinModifiers[i++] = ShortcutAction.ModifierKey.CTRL;
}
if ((pModifiers & UIKeyEvent.ALT_MASK) == UIKeyEvent.ALT_MASK)
{
vaadinModifiers[i++] = ShortcutAction.ModifierKey.ALT;
}
if ((pModifiers & UIKeyEvent.META_MASK) == UIKeyEvent.META_MASK)
{
vaadinModifiers[i++] = ShortcutAction.ModifierKey.META;
}
vaadinModifiers = ArrayUtil.truncate(vaadinModifiers, i);
return vaadinModifiers;
}
/**
* {@inheritDoc}
*/
public int getImageTextGap()
{
return iImageTextGap;
}
/**
* {@inheritDoc}
*/
public void setImageTextGap(int pImageTextGap)
{
bImageTextGapSet = true;
iImageTextGap = pImageTextGap;
updateGap();
}
/**
* {@inheritDoc}
*/
public void setVerticalTextPosition(int pVerticalPosition)
{
CssExtension csse = getCssExtension();
positionCaptionBesideImage();
// special behaviour of vertical alignment if horizontally centered
if (iHorizontalPosition == IAlignmentConstants.ALIGN_CENTER)
{
if (pVerticalPosition == IAlignmentConstants.ALIGN_BOTTOM)
{
addTextPositionAttributesToExtension(csse, "center", "column");
resource.setIconBeforeText(true);
}
else if (pVerticalPosition == IAlignmentConstants.ALIGN_CENTER)
{
if (verticalAlignment == IAlignmentConstants.ALIGN_CENTER
&& horizontalAlignment == IAlignmentConstants.ALIGN_CENTER)
{
// all ALIGN_CENTER
positionCaptionOverImage();
}
else
{
addTextPositionAttributesToExtension(csse, "center", "row");
resource.setIconBeforeText(true);
}
}
else if (pVerticalPosition == IAlignmentConstants.ALIGN_TOP)
{
addTextPositionAttributesToExtension(csse, "center", "column");
resource.setIconBeforeText(false);
}
}
else
{
if (pVerticalPosition == IAlignmentConstants.ALIGN_BOTTOM)
{
addTextPositionAttributesToExtension(csse, "flex-end", "row");
}
else if (pVerticalPosition == IAlignmentConstants.ALIGN_CENTER)
{
addTextPositionAttributesToExtension(csse, "center", "row");
}
else if (pVerticalPosition == IAlignmentConstants.ALIGN_TOP)
{
addTextPositionAttributesToExtension(csse, "flex-start", "row");
}
}
iVerticalPosition = pVerticalPosition;
updateGap();
}
/**
* {@inheritDoc}
*/
public int getVerticalTextPosition()
{
return iVerticalPosition;
}
/**
* {@inheritDoc}
*/
public void setHorizontalTextPosition(int pHorizontalPosition)
{
CssExtension csse = getCssExtension();
positionCaptionBesideImage();
if (pHorizontalPosition == IAlignmentConstants.ALIGN_LEFT)
{
resource.setIconBeforeText(false);
addTextPositionAttributesToExtension(csse, getVerticalTextPositionValue(), "row");
}
else if (pHorizontalPosition == IAlignmentConstants.ALIGN_CENTER)
{
if (iVerticalPosition == IAlignmentConstants.ALIGN_CENTER
&& verticalAlignment == IAlignmentConstants.ALIGN_CENTER
&& horizontalAlignment == IAlignmentConstants.ALIGN_CENTER)
{
positionCaptionOverImage();
}
else
{
if (iVerticalPosition == IAlignmentConstants.ALIGN_TOP)
{
addTextPositionAttributesToExtension(csse, "center", "column");
resource.setIconBeforeText(false);
}
else if (iVerticalPosition == IAlignmentConstants.ALIGN_BOTTOM)
{
addTextPositionAttributesToExtension(csse, "center", "column");
resource.setIconBeforeText(true);
}
else
{
addTextPositionAttributesToExtension(csse, "center", "row");
resource.setIconBeforeText(true);
}
}
}
else if (pHorizontalPosition == IAlignmentConstants.ALIGN_RIGHT)
{
resource.setIconBeforeText(true);
addTextPositionAttributesToExtension(csse, getVerticalTextPositionValue(), "row");
}
iHorizontalPosition = pHorizontalPosition;
updateGap();
}
/**
* {@inheritDoc}
*/
public int getHorizontalTextPosition()
{
return iHorizontalPosition;
}
/**
* {@inheritDoc}
*/
public boolean isBorderOnMouseEntered()
{
return bBorderOnMouseEntered;
}
/**
* {@inheritDoc}
*/
public void setBorderOnMouseEntered(boolean pBorderOnMouseEntered)
{
updateBorderOnMouseEnteredStyles(pBorderOnMouseEntered);
setBorderPainted(!pBorderOnMouseEntered);
bBorderOnMouseEntered = pBorderOnMouseEntered;
}
/**
* {@inheritDoc}
*/
public void setBorderPainted(boolean pBorderPainted)
{
updateBorderPaintedStyles(pBorderPainted);
bBorderPainted = pBorderPainted;
}
/**
* {@inheritDoc}
*/
public boolean isBorderPainted()
{
return bBorderPainted;
}
/**
* {@inheritDoc}
*/
public void setMouseOverImage(IImage pImage)
{
imgMouseOver = (VaadinImage)pImage;
if (imgMouseOver == null)
{
resource.setMouseOverImage(null);
}
else
{
resource.setMouseOverImage(imgMouseOver.getResource());
}
}
/**
* {@inheritDoc}
*/
public IImage getMouseOverImage()
{
return imgMouseOver;
}
/**
* {@inheritDoc}
*/
public void setPressedImage(IImage pImage)
{
// Not supported
}
/**
* {@inheritDoc}
*/
public IImage getPressedImage()
{
// Not supported
return null;
}
/**
* {@inheritDoc}
*/
public void setDefaultButton(boolean pDefault)
{
resource.setDefault(pDefault);
bIsDefault = pDefault;
}
/**
* {@inheritDoc}
*/
public boolean isDefaultButton()
{
return bIsDefault;
}
// ClickListener
/**
* {@inheritDoc}
*/
public void buttonClick(ClickEvent pEvent)
{
if (eventActionPerformed != null)
{
getFactory().synchronizedDispatchEvent(eventActionPerformed, new UIActionEvent(eventSource,
UIActionEvent.ACTION_PERFORMED,
System.currentTimeMillis(),
0,
sActionCommand));
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Overwritten methods
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* {@inheritDoc}
*/
@Override
public void setEnabled(boolean pEnabled)
{
super.setEnabled(pEnabled);
updateBorderOnMouseEnteredStyles(isBorderOnMouseEntered());
updateBorderPaintedStyles(isBorderPainted());
}
/**
* {@inheritDoc}
*/
@Override
public void setText(String pText)
{
super.setText(pText);
if (pText == null || pText.length() <= 0)
{
addInternStyleName("no-caption");
}
else
{
removeInternStyleName("no-caption");
}
updateGap();
updateAccessibility();
}
/**
* {@inheritDoc}
*/
@Override
public void setToolTipText(String pToolTipText)
{
super.setToolTipText(pToolTipText);
updateAccessibility();
}
/**
* {@inheritDoc}
*/
@Override
public void setImage(IImage pImage)
{
super.setImage(pImage);
if (getMouseOverImage() != null) // reset the MouseOverButton with the new icon
{
setMouseOverImage(imgMouseOver);
}
updateGap();
}
/**
* {@inheritDoc}
*/
@Override
public void setSize(IDimension pSize)
{
super.setSize(pSize);
if (pSize != null)
{
if (pSize.getWidth() <= 32 && pSize.getHeight() <= 32)
{
removeInternStyleName("default-padding");
}
else
{
addInternStyleName("default-padding");
}
}
}
/**
* {@inheritDoc}
*/
@Override
public ActionHandler eventAction()
{
if (eventActionPerformed == null)
{
resource.addClickListener(this);
}
return super.eventAction();
}
/**
* {@inheritDoc}
*/
@Override
public void setVerticalAlignment(int pVerticalAlignment)
{
CssExtension csse = getCssExtension();
CssExtensionAttribute csaVerticalAlign = new CssExtensionAttribute();
csaVerticalAlign.setElementClassName("v-button");
csaVerticalAlign.setAttribute("align-content");
positionCaptionBesideImage();
if (isEveryAlignmentCentered())
{
addTextPositionAttributesToExtension(csse, "center", "row");
}
if (pVerticalAlignment == IAlignmentConstants.ALIGN_BOTTOM)
{
csaVerticalAlign.setValue("end");
csse.addAttribute(csaVerticalAlign);
}
else if (pVerticalAlignment == IAlignmentConstants.ALIGN_CENTER)
{
csaVerticalAlign.setValue("center");
csse.addAttribute(csaVerticalAlign);
if (horizontalAlignment == IAlignmentConstants.ALIGN_CENTER
&& iHorizontalPosition == IAlignmentConstants.ALIGN_CENTER
&& iVerticalPosition == IAlignmentConstants.ALIGN_CENTER)
{
positionCaptionOverImage();
}
}
else if (pVerticalAlignment == IAlignmentConstants.ALIGN_TOP)
{
csaVerticalAlign.setValue("start");
csse.addAttribute(csaVerticalAlign);
}
else if (pVerticalAlignment == IAlignmentConstants.ALIGN_STRETCH)
{
resource.setHeight("100%");
}
verticalAlignment = pVerticalAlignment;
}
/**
* {@inheritDoc}
*/
@Override
public void setHorizontalAlignment(int pHorizontalAlignment)
{
CssExtension csse = getCssExtension();
CssExtensionAttribute csaHorizontalAlign = new CssExtensionAttribute();
csaHorizontalAlign.setElementClassName("v-button");
csaHorizontalAlign.setAttribute("justify-content");
csse.removeAttribute(csaHorizontalAlign);
positionCaptionBesideImage();
if (isEveryAlignmentCentered())
{
addTextPositionAttributesToExtension(csse, "center", null);
}
if (pHorizontalAlignment == IAlignmentConstants.ALIGN_LEFT)
{
csaHorizontalAlign.setValue("start");
csse.addAttribute(csaHorizontalAlign);
}
else if (pHorizontalAlignment == IAlignmentConstants.ALIGN_CENTER)
{
csaHorizontalAlign.setValue("center");
csse.addAttribute(csaHorizontalAlign);
if (verticalAlignment == IAlignmentConstants.ALIGN_CENTER
&& iHorizontalPosition == IAlignmentConstants.ALIGN_CENTER
&& iVerticalPosition == IAlignmentConstants.ALIGN_CENTER)
{
positionCaptionOverImage();
}
}
else if (pHorizontalAlignment == IAlignmentConstants.ALIGN_RIGHT)
{
csaHorizontalAlign.setValue("end");
csse.addAttribute(csaHorizontalAlign);
}
else if (pHorizontalAlignment == IAlignmentConstants.ALIGN_STRETCH)
{
resource.setWidth("100%");
}
horizontalAlignment = pHorizontalAlignment;
updateGap();
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// User-defined methods
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* Updates the text gap. This method takes care of the current text position.
*/
private void updateGap()
{
String sMargin = null;
removeCaptionMargins();
if (iHorizontalPosition == ALIGN_CENTER)
{
if (iVerticalPosition == IAlignmentConstants.ALIGN_BOTTOM)
{
sMargin = "margin-top";
}
else if (iVerticalPosition == IAlignmentConstants.ALIGN_TOP)
{
sMargin = "margin-bottom";
}
else if (!isEveryAlignmentCentered())
{
sMargin = "margin-left";
}
}
else if (iHorizontalPosition == IAlignmentConstants.ALIGN_LEFT)
{
sMargin = "margin-right";
}
else if (!isEveryAlignmentCentered())
{
sMargin = "margin-left";
}
if (sMargin != null)
{
CssExtensionAttribute cssAttribute = null;
String sText = getText();
if (sText != null && sText.trim().length() > 0 && (getImage() != null || resource.getIcon() != null))
{
if (!bImageTextGapSet)
{
cssAttribute = new CssExtensionAttribute(sMargin, "4px");
}
else
{
cssAttribute = new CssExtensionAttribute(sMargin, iImageTextGap + "px");
}
}
if (cssAttribute != null)
{
cssAttribute.setElementClassName("v-button-caption");
cssAttribute.setSearchDirection(CssExtensionAttribute.SEARCH_DOWN);
getCssExtension().addAttribute(cssAttribute);
}
}
}
/**
* Updates the styles regarding the border painted option.
*
* @param pBorderPainted true
to paint the border, false
to hide it
*/
protected void updateBorderPaintedStyles(boolean pBorderPainted)
{
removeInternStyleName("v-button-noborder");
if (!pBorderPainted)
{
addInternStyleName("v-button-noborder");
}
}
/**
* Updates the styles regarding the border on mouse-over option.
*
* @param pBorderOnMouseEntered true
to show the border on mouse-over,
* false
to show it always
*/
protected void updateBorderOnMouseEnteredStyles(boolean pBorderOnMouseEntered)
{
removeInternStyleName("v-button-borderonmouse");
if (pBorderOnMouseEntered)
{
if (isEnabled())
{
addInternStyleName("v-button-borderonmouse");
}
}
}
/**
* Positions caption over the image. Removes margins and sets the position of caption over the button image. Both image and caption are centered.
*/
private void positionCaptionOverImage()
{
CssExtension csse = getCssExtension();
csse.addAttribute("display", "block");
removeAttributeFromClass(csse, "v-button-wrap", "display");
CssExtensionAttribute csaPosition = new CssExtensionAttribute("position", "absolute", "v-button-caption", CssExtensionAttribute.SEARCH_DOWN);
CssExtensionAttribute csaTop = new CssExtensionAttribute("top", "50%", "v-button-caption", CssExtensionAttribute.SEARCH_DOWN);
CssExtensionAttribute csaLeft = new CssExtensionAttribute("left", "50%", "v-button-caption", CssExtensionAttribute.SEARCH_DOWN);
CssExtensionAttribute csaTransform = new CssExtensionAttribute("transform", "translate(-50%, -50%)", "v-button-caption", CssExtensionAttribute.SEARCH_DOWN);
//remove all margins, no gap needed, because now caption should be positioned directly over the image
removeCaptionMargins();
csse.addAttribute(csaPosition);
csse.addAttribute(csaTop);
csse.addAttribute(csaLeft);
csse.addAttribute(csaTransform);
}
/**
* Removes all margin properties from css.
*/
private void removeCaptionMargins()
{
CssExtension csse = getCssExtension();
CssExtensionAttribute csaMarginTop = new CssExtensionAttribute("margin-top", "4px", "v-button-caption", CssExtensionAttribute.SEARCH_DOWN);
CssExtensionAttribute csaMarginBottom = new CssExtensionAttribute("margin-bottom", "4px", "v-button-caption", CssExtensionAttribute.SEARCH_DOWN);
CssExtensionAttribute csaMarginLeft = new CssExtensionAttribute("margin-left", "4px", "v-button-caption", CssExtensionAttribute.SEARCH_DOWN);
CssExtensionAttribute csaMarginRight = new CssExtensionAttribute("margin-right", "4px", "v-button-caption", CssExtensionAttribute.SEARCH_DOWN);
csse.removeAttribute(csaMarginTop);
csse.removeAttribute(csaMarginBottom);
csse.removeAttribute(csaMarginRight);
csse.removeAttribute(csaMarginLeft);
}
/**
* Removes all css attributes needed for caption positioned over the button image.
*/
private void positionCaptionBesideImage()
{
CssExtension csse = getCssExtension();
csse.addAttribute("display", "inline-grid");
CssExtensionAttribute csaPosition = new CssExtensionAttribute("position", "absolute", "v-button-caption", CssExtensionAttribute.SEARCH_DOWN);
CssExtensionAttribute csaTop = new CssExtensionAttribute("top", "50%", "v-button-caption", CssExtensionAttribute.SEARCH_DOWN);
CssExtensionAttribute csaLeft = new CssExtensionAttribute("left", "50%", "v-button-caption", CssExtensionAttribute.SEARCH_DOWN);
CssExtensionAttribute csaTransform = new CssExtensionAttribute("transform", "translate(-50%, -50%)", "v-button-caption", CssExtensionAttribute.SEARCH_DOWN);
csse.removeAttribute(csaPosition);
csse.removeAttribute(csaTop);
csse.removeAttribute(csaLeft);
csse.removeAttribute(csaTransform);
updateGap();
}
/**
* Checks if all text and position alignments are {@code IAlignmentConstants.ALIGN_CENTER}. In this special case caption should be positioned over the button image.
*
* @return Returns {@code true} if special case, {@code false} for other cases.
*/
private boolean isEveryAlignmentCentered()
{
return (horizontalAlignment == IAlignmentConstants.ALIGN_CENTER
&& verticalAlignment == IAlignmentConstants.ALIGN_CENTER
&& iHorizontalPosition == IAlignmentConstants.ALIGN_CENTER
&& iVerticalPosition == IAlignmentConstants.ALIGN_CENTER
);
}
/**
* Removes display attribute from specified css class.
*
* @param pExtension the css extension
* @param pClassName the css class name
* @param pAttribute the attribute name
*/
private void removeAttributeFromClass(CssExtension pExtension, String pClassName, String pAttribute)
{
CssExtensionAttribute csaFlex = new CssExtensionAttribute();
csaFlex.setElementClassName(pClassName);
csaFlex.setAttribute(pAttribute);
csaFlex.setSearchDirection(CssExtensionAttribute.SEARCH_DOWN);
pExtension.removeAttribute(csaFlex);
}
/**
* Adds text position attributes to the specified css class. It adds two attributes: display and align-items.
*
* @param pExtension the css extension
* @param pAlignmentValue the alignment attribute value
* @param pDirection whether icon and caption should be aligned in a row or a column
*/
private void addTextPositionAttributesToExtension(CssExtension pExtension, String pAlignmentValue, String pDirection)
{
CssExtensionAttribute csaFlex = new CssExtensionAttribute("display", "inline-flex", "v-button-wrap", CssExtensionAttribute.SEARCH_DOWN);
CssExtensionAttribute csaAlignment = new CssExtensionAttribute("align-items", pAlignmentValue, "v-button-wrap", CssExtensionAttribute.SEARCH_DOWN);
pExtension.addAttribute(csaFlex);
pExtension.addAttribute(csaAlignment);
if (pDirection != null)
{
CssExtensionAttribute csaColumnDirection = new CssExtensionAttribute("flex-direction", pDirection, "v-button-wrap", CssExtensionAttribute.SEARCH_DOWN);
pExtension.addAttribute(csaColumnDirection);
}
}
/**
* Maps vertical text position int values to css attribute value.
*
* @return the attribute value
*/
private String getVerticalTextPositionValue()
{
if (iVerticalPosition == IAlignmentConstants.ALIGN_TOP)
{
return "flex-start";
}
else if (iVerticalPosition == IAlignmentConstants.ALIGN_BOTTOM)
{
return "flex-end";
}
else
{
return "center";
}
}
/**
* Updates the accessibility attributes of this button.
*/
private void updateAccessibility()
{
AccessibilityUtil.setLabel(getAttributesExtension(), getToolTipText(), getText());
}
} // AbstractVaadinButton
© 2015 - 2025 Weber Informatics LLC | Privacy Policy