void (@NotNull Presentation presentation, @Nullable Component customComponent, boolean forceNullComponent, boolean allFlags) { if (presentation == this) { return; } boolean oldEnabled = isEnabled(), oldVisible = isVisible(); if (allFlags) { myFlags = BitUtil.set(presentation.myFlags, IS_TEMPLATE, isTemplate()); } else { myFlags = BitUtil.set(myFlags, IS_ENABLED, BitUtil.isSet(presentation.myFlags, IS_ENABLED)); myFlags = BitUtil.set(myFlags, IS_VISIBLE, BitUtil.isSet(presentation.myFlags, IS_VISIBLE)); } fireBooleanPropertyChange(PROP_ENABLED, oldEnabled, isEnabled()); fireBooleanPropertyChange(PROP_VISIBLE, oldVisible, isVisible()); setTextWithMnemonic(presentation.getTextWithPossibleMnemonic()); setDescription(presentation.descriptionSupplier); setIconSupplier(presentation.icon); setSelectedIcon(presentation.getSelectedIcon()); setDisabledIcon(presentation.getDisabledIcon()); setHoveredIcon(presentation.getHoveredIcon()); setWeight(presentation.getWeight()); if (!myUserMap.equals(presentation.myUserMap)) { Set<String> allKeys = new HashSet<>(presentation.myUserMap.keySet()); allKeys.addAll(myUserMap.keySet()); if (!allKeys.isEmpty()) { for (String key : allKeys) { if (key.equals(CustomComponentAction.COMPONENT_KEY.toString()) && (customComponent != null || forceNullComponent)) { putClientProperty(key, customComponent); } else { putClientProperty(key, presentation.getClientProperty(key)); } } } } }