Search in sources :

Example 11 with ActionNode

use of com.codename1.rad.nodes.ActionNode in project CodeRAD by shannah.

the class ActionNode method findAttribute.

@Override
public Attribute findAttribute(Class type) {
    Attribute att = super.findAttribute(type);
    if (att != null) {
        return att;
    }
    Node parent = getParent();
    if (parent instanceof ActionNode) {
        return parent.findAttribute(type);
    }
    return null;
}
Also used : ActionStyleAttribute(com.codename1.rad.attributes.ActionStyleAttribute)

Example 12 with ActionNode

use of com.codename1.rad.nodes.ActionNode in project CodeRAD by shannah.

the class Controller method extendAction.

/**
 * Extends an existing action from one of the parent controllers, and registers it as an action
 * on this controller.
 * @param category The category to register the action to.
 * @param overwriteAttributes Whether to overwrite existing attributes of the action.  If false, attributes
 *                            provided will be ignored when extending actions that already have those attributes
 *                            defined.
 * @param attributes Attributes to add to the action.
 * @return The action that was added.
 * @since 2.0
 */
public ActionNode extendAction(ActionNode.Category category, boolean overwriteAttributes, Attribute... attributes) {
    ActionNode action = getInheritedAction(category);
    if (action == null) {
        action = UI.action(attributes);
    } else {
        action = (ActionNode) action.createProxy(action.getParent());
        action.setAttributes(overwriteAttributes, attributes);
    }
    addActions(category, action);
    return action;
}
Also used : ActionNode(com.codename1.rad.nodes.ActionNode)

Example 13 with ActionNode

use of com.codename1.rad.nodes.ActionNode in project CodeRAD by shannah.

the class DefaultActionViewFactory method update.

public static void update(Button btn, Entity entity, ActionNode action) {
    boolean repaint = false;
    boolean revalidate = false;
    Condition cond = action.getCondition();
    if (cond != null) {
        boolean hidden = !cond.getValue().test(entity);
        if (hidden != btn.isHidden()) {
            btn.setHidden(hidden);
            btn.setVisible(!hidden);
            revalidate = true;
        }
    }
    EnabledCondition enabledCond = action.getEnabledCondition();
    if (enabledCond != null) {
        boolean enabled = enabledCond.getValue().test(entity);
        if (enabled != btn.isEnabled()) {
            btn.setEnabled(enabled);
            repaint = true;
        }
    }
    if (action.getLabel() != null) {
        String currTextVal = btn.getText();
        String newTextVal = action.getLabelText(entity);
        if (!Objects.equals(currTextVal, newTextVal)) {
            btn.setText(newTextVal);
            repaint = true;
        }
    }
    if (!action.isTextStyle() && !"".equals(btn.getText().trim())) {
        btn.setText("");
        repaint = true;
    }
    if (action.getUIID() != null) {
        String currUiid = btn.getUIID();
        String newUiid = action.getUIID(entity, "Button");
        if (!Objects.equals(currUiid, newUiid)) {
            btn.setUIID(newUiid);
            repaint = true;
        }
    }
    if (btn instanceof CheckBox) {
        SelectedCondition selectedCond = action.getSelectedCondition();
        if (selectedCond != null) {
            boolean selected = selectedCond.getValue().test(entity);
            if (selected != btn.isSelected()) {
                ((CheckBox) btn).setSelected(selected);
                repaint = true;
                ActionNode newState = selected ? action.getSelected() : action.getUnselected();
                ActionNode oldState = selected ? action.getUnselected() : action.getSelected();
                if (oldState != newState) {
                    String currText = btn.getText();
                    String newText = newState.getLabelText(entity);
                    if (!newState.isTextStyle()) {
                        newText = "";
                    }
                    if (!Objects.equals(newText, currText)) {
                        btn.setText(newText);
                    }
                }
            }
        }
    }
    Badge badge = action.getBadge();
    if (badge != null) {
        btn.setBadgeText(badge.getValue(entity));
        BadgeUIID badgeUiid = action.getBadgeUIID();
        if (badgeUiid != null) {
            btn.setBadgeUIID(badgeUiid.getValue());
        }
    }
    if (revalidate || repaint) {
        Form f = btn.getComponentForm();
        if (f != null) {
            if (revalidate) {
                Component entityView = findEntityViewParent(btn);
                if (entityView instanceof Container) {
                    ((Container) entityView).revalidateLater();
                } else {
                    entityView.repaint();
                }
            } else {
                btn.repaint();
            }
        }
    }
}
Also used : EnabledCondition(com.codename1.rad.nodes.ActionNode.EnabledCondition) Condition(com.codename1.rad.attributes.Condition) SelectedCondition(com.codename1.rad.attributes.SelectedCondition) SelectedCondition(com.codename1.rad.attributes.SelectedCondition) Container(com.codename1.ui.Container) Form(com.codename1.ui.Form) CheckBox(com.codename1.ui.CheckBox) EnabledCondition(com.codename1.rad.nodes.ActionNode.EnabledCondition) ActionNode(com.codename1.rad.nodes.ActionNode) Badge(com.codename1.rad.attributes.Badge) Component(com.codename1.ui.Component) BadgeUIID(com.codename1.rad.attributes.BadgeUIID)

Example 14 with ActionNode

use of com.codename1.rad.nodes.ActionNode in project CodeRAD by shannah.

the class DefaultActionViewFactory method initUI.

public static void initUI(Button btn, Entity entity, ActionNode action) {
    btn.setBlockLead(true);
    boolean text = action.isTextStyle();
    boolean includeIcon = action.isIconStyle();
    UIID uiid = action.getUIID();
    if (uiid != null) {
        btn.setUIID(uiid.getValue(entity));
    }
    IconUIID iconUiid = action.getIconUIID();
    if (iconUiid != null) {
        btn.setIconUIID(iconUiid.getValue());
    }
    Button button = btn;
    if (action.getLabel() != null && text) {
        button.setText(action.getLabel().getValue(entity.getEntity()));
    }
    if (!text && button.getText().length() > 0) {
        button.setText("");
    }
    if (action.getImageIcon() != null && includeIcon) {
        button.setIcon(action.getImageIcon().getValue());
        if (action.getSelected() != action && action.getSelected().getImageIcon() != action.getImageIcon()) {
            button.setRolloverIcon(action.getSelected().getImageIcon().getValue());
        }
        if (action.getPressed() != action && action.getPressed().getImageIcon() != action.getImageIcon()) {
            button.setPressedIcon(action.getPressed().getImageIcon().getValue());
        }
        if (action.getDisabled() != action && action.getDisabled().getImageIcon() != action.getImageIcon()) {
            button.setDisabledIcon(action.getDisabled().getImageIcon().getValue());
        }
    }
    if (action.getMaterialIcon() != null && includeIcon) {
        char unselectedIcon = action.getMaterialIcon().getValue();
        char selectedIcon = action.getSelected().getMaterialIcon().getValue();
        char pressedIcon = action.getPressed().getMaterialIcon().getValue();
        char selectedPressed = pressedIcon;
        if (action.getPressed() == action) {
            selectedPressed = selectedIcon;
        }
        char disabledIcon = action.getDisabled().getMaterialIcon().getValue();
        // button.setMaterialIcon(action.getMaterialIcon().getValue());
        FontImage.setMaterialIcon(btn, new char[] { unselectedIcon, selectedIcon, pressedIcon, selectedPressed, disabledIcon }, -1);
    }
    if (action.getTextIcon() != null && includeIcon) {
        String iconText = action.getTextIcon().getValue(entity);
        Button iconLabel = new Button(iconText);
        if (btn.getIconStyleComponent() != btn) {
            iconLabel.setUIID(btn.getIconStyleComponent().getUIID());
        } else {
            iconLabel.setUIID(btn.getUIID());
            // IF the button has a border and padding set, we don't
            // want to to also be applied to the icon.
            iconLabel.getAllStyles().stripMarginAndPadding();
        }
        iconLabel.setWidth(iconLabel.getPreferredW());
        iconLabel.setHeight(iconLabel.getPreferredH());
        btn.setIcon(new ComponentImage(iconLabel, iconLabel.getWidth(), iconLabel.getHeight()));
    }
    if (includeIcon && text) {
        ActionStyle style = action.getActionStyle();
        if (style != null) {
            switch(style) {
                case IconTop:
                    button.setTextPosition(BOTTOM);
                    break;
                case IconBottom:
                    button.setTextPosition(TOP);
                    break;
                case IconLeft:
                    button.setTextPosition(RIGHT);
                    break;
                case IconRight:
                    button.setTextPosition(LEFT);
            }
        }
    }
    button.addActionListener(evt -> {
        action.fireEvent(entity, button);
        update(button, entity, action);
    });
    update(button, entity, action);
    action.decorateComponent(btn);
}
Also used : ComponentImage(ca.weblite.shared.components.ComponentImage) Button(com.codename1.ui.Button) MultiButton(com.codename1.components.MultiButton) IconUIID(com.codename1.rad.attributes.IconUIID) IconUIID(com.codename1.rad.attributes.IconUIID) BadgeUIID(com.codename1.rad.attributes.BadgeUIID) UIID(com.codename1.rad.attributes.UIID)

Example 15 with ActionNode

use of com.codename1.rad.nodes.ActionNode in project CodeRAD by shannah.

the class DefaultActionViewFactory method initUI.

public static void initUI(MultiButton btn, Entity entity, ActionNode action) {
    btn.setBlockLead(true);
    boolean text = action.isTextStyle();
    boolean includeIcon = action.isIconStyle();
    UIID uiid = action.getUIID();
    if (uiid != null) {
        btn.setUIID(uiid.getValue(entity));
    }
    IconUIID iconUiid = action.getIconUIID();
    if (iconUiid != null) {
        btn.setIconUIID(iconUiid.getValue());
    }
    MultiButton button = btn;
    if (action.getLabel() != null && text) {
        button.setTextLines(action.getLabel().getValue(entity.getEntity()));
    }
    if (action.getImageIcon() != null && includeIcon) {
        button.setIcon(action.getImageIcon().getValue());
        if (action.getSelected() != action && action.getSelected().getImageIcon() != action.getImageIcon()) {
            button.setRolloverIcon(action.getSelected().getImageIcon().getValue());
        }
        if (action.getPressed() != action && action.getPressed().getImageIcon() != action.getImageIcon()) {
            button.setPressedIcon(action.getPressed().getImageIcon().getValue());
        }
        if (action.getDisabled() != action && action.getDisabled().getImageIcon() != action.getImageIcon()) {
            button.setDisabledIcon(action.getDisabled().getImageIcon().getValue());
        }
    }
    if (action.getMaterialIcon() != null && includeIcon) {
        char unselectedIcon = action.getMaterialIcon().getValue();
        char selectedIcon = action.getSelected().getMaterialIcon().getValue();
        char pressedIcon = action.getPressed().getMaterialIcon().getValue();
        char selectedPressed = pressedIcon;
        if (action.getPressed() == action) {
            selectedPressed = selectedIcon;
        }
        char disabledIcon = action.getDisabled().getMaterialIcon().getValue();
        // button.setMaterialIcon(action.getMaterialIcon().getValue());
        FontImage.setMaterialIcon(btn, new char[] { unselectedIcon, selectedIcon, pressedIcon, selectedPressed, disabledIcon }, -1);
    }
    if (action.getTextIcon() != null && includeIcon) {
        String iconText = action.getTextIcon().getValue(entity);
        Button iconLabel = new Button(iconText);
        if (btn.getIconStyleComponent() != btn) {
            iconLabel.setUIID(btn.getIconStyleComponent().getUIID());
        } else {
            iconLabel.setUIID(btn.getUIID());
            // IF the button has a border and padding set, we don't
            // want to to also be applied to the icon.
            iconLabel.getAllStyles().stripMarginAndPadding();
        }
        iconLabel.setWidth(iconLabel.getPreferredW());
        iconLabel.setHeight(iconLabel.getPreferredH());
        btn.setIcon(new ComponentImage(iconLabel, iconLabel.getWidth(), iconLabel.getHeight()));
    }
    if (includeIcon && text) {
        ActionStyle style = action.getActionStyle();
        if (style != null) {
            switch(style) {
                case IconTop:
                    button.setTextPosition(BOTTOM);
                    break;
                case IconBottom:
                    button.setTextPosition(TOP);
                    break;
                case IconLeft:
                    button.setTextPosition(RIGHT);
                    break;
                case IconRight:
                    button.setTextPosition(LEFT);
            }
        }
    }
    if (!text) {
        button.setText("");
    }
    button.addActionListener(evt -> {
        action.fireEvent(entity, button);
        update(button, entity, action);
    });
    update(button, entity, action);
    action.decorateComponent(btn);
}
Also used : ComponentImage(ca.weblite.shared.components.ComponentImage) Button(com.codename1.ui.Button) MultiButton(com.codename1.components.MultiButton) IconUIID(com.codename1.rad.attributes.IconUIID) IconUIID(com.codename1.rad.attributes.IconUIID) BadgeUIID(com.codename1.rad.attributes.BadgeUIID) UIID(com.codename1.rad.attributes.UIID) MultiButton(com.codename1.components.MultiButton)

Aggregations

ActionNode (com.codename1.rad.nodes.ActionNode)16 Form (com.codename1.ui.Form)6 EntityList (com.codename1.rad.models.EntityList)5 ListNode (com.codename1.rad.nodes.ListNode)5 Container (com.codename1.ui.Container)5 BadgeUIID (com.codename1.rad.attributes.BadgeUIID)4 UIID (com.codename1.rad.attributes.UIID)4 Entity (com.codename1.rad.models.Entity)4 Button (com.codename1.ui.Button)4 BorderLayout (com.codename1.ui.layouts.BorderLayout)4 GridLayout (com.codename1.ui.layouts.GridLayout)4 ControllerEvent (com.codename1.rad.controllers.ControllerEvent)3 EntityListProvider (com.codename1.rad.models.EntityListProvider)3 BoxLayout (com.codename1.ui.layouts.BoxLayout)3 Map (java.util.Map)3 ComponentImage (ca.weblite.shared.components.ComponentImage)2 MultiButton (com.codename1.components.MultiButton)2 Log (com.codename1.io.Log)2 NetworkEvent (com.codename1.io.NetworkEvent)2 IconUIID (com.codename1.rad.attributes.IconUIID)2