Search in sources :

Example 1 with IIcon

use of mcjty.lib.gui.icons.IIcon in project RFToolsControl by McJty.

the class GuiProgrammer method setupGridPanel.

private Panel setupGridPanel() {
    Panel panel = new Panel(mc, this).setLayout(new PositionalLayout()).setLayoutHint(new PositionalLayout.PositionalHint(5, 5, 246, 130));
    gridList = new WidgetList(mc, this).setLayoutHint(new PositionalLayout.PositionalHint(0, 0, 236, 130)).setPropagateEventsToChildren(true).setInvisibleSelection(true).setDrawHorizontalLines(false).setRowheight(ICONSIZE + 1);
    Slider slider = new Slider(mc, this).setVertical().setScrollable(gridList).setLayoutHint(new PositionalLayout.PositionalHint(237, 0, 9, 130));
    for (int y = 0; y < GRID_HEIGHT; y++) {
        Panel rowPanel = new Panel(mc, this).setLayout(new HorizontalLayout().setSpacing(-1).setHorizontalMargin(0).setVerticalMargin(0));
        for (int x = 0; x < GRID_WIDTH; x++) {
            int finalX = x;
            int finalY = y;
            IconHolder holder = new IconHolder(mc, this) {

                @Override
                public List<String> getTooltips() {
                    return getGridIconTooltips(finalX, finalY);
                }
            }.setDesiredWidth(ICONSIZE + 2).setDesiredHeight(ICONSIZE + 2).setBorder(1).setBorderColor(0xff777777).setSelectable(true).setUserObject(new GridPos(finalX, finalY)).addIconHoverEvent(((iconHolder, iIcon, dx, dy) -> {
                handleConnectorHighlight(finalX, finalY, iIcon, dx, dy);
            })).addIconLeavesEvent(((parent, icon) -> {
                iconLeavesFromX = finalX;
                iconLeavesFromY = finalY;
                return true;
            })).addIconArrivesEvent(((parent, icon) -> {
                if (icon != null && !loading) {
                    handleNewIconOverlay(icon, finalX, finalY);
                }
                return true;
            })).addIconClickedEvent((parent, icon, dx, dy) -> {
                gridIconClicked(icon, finalX, finalY, dx, dy);
                return true;
            });
            rowPanel.addChild(holder);
        }
        gridList.addChild(rowPanel);
    }
    panel.addChild(gridList).addChild(slider);
    return panel;
}
Also used : GenericGuiContainer(mcjty.lib.container.GenericGuiContainer) ProgramCardInstance(mcjty.rftoolscontrol.logic.grid.ProgramCardInstance) GeneralConfiguration(mcjty.rftoolscontrol.config.GeneralConfiguration) OpcodeCategory(mcjty.rftoolscontrol.api.code.OpcodeCategory) Opcode(mcjty.rftoolscontrol.api.code.Opcode) ParameterDescription(mcjty.rftoolscontrol.api.parameters.ParameterDescription) ParameterEditors(mcjty.rftoolscontrol.logic.editors.ParameterEditors) Keyboard(org.lwjgl.input.Keyboard) StringUtils(org.apache.commons.lang3.StringUtils) StyleConfig(mcjty.lib.base.StyleConfig) Panel(mcjty.lib.gui.widgets.Panel) Pair(org.apache.commons.lang3.tuple.Pair) PositionalLayout(mcjty.lib.gui.layout.PositionalLayout) ParameterEditor(mcjty.rftoolscontrol.logic.editors.ParameterEditor) Clipboard(java.awt.datatransfer.Clipboard) UnsupportedFlavorException(java.awt.datatransfer.UnsupportedFlavorException) ParameterTypeTools(mcjty.rftoolscontrol.logic.registry.ParameterTypeTools) VerticalLayout(mcjty.lib.gui.layout.VerticalLayout) List(java.util.List) Button(mcjty.lib.gui.widgets.Button) IIcon(mcjty.lib.gui.icons.IIcon) Connection(mcjty.rftoolscontrol.logic.Connection) TextField(mcjty.lib.gui.widgets.TextField) java.util(java.util) mcjty.lib.gui.widgets(mcjty.lib.gui.widgets) ParameterValue(mcjty.rftoolscontrol.api.parameters.ParameterValue) DataFlavor(java.awt.datatransfer.DataFlavor) HorizontalAlignment(mcjty.lib.gui.layout.HorizontalAlignment) OpcodeOutput(mcjty.rftoolscontrol.api.code.OpcodeOutput) Label(mcjty.lib.gui.widgets.Label) Window(mcjty.lib.gui.Window) GridInstance(mcjty.rftoolscontrol.logic.grid.GridInstance) ItemStack(net.minecraft.item.ItemStack) HorizontalLayout(mcjty.lib.gui.layout.HorizontalLayout) ProgramValidator(mcjty.rftoolscontrol.logic.compiled.ProgramValidator) GuiTools(mcjty.rftoolscontrol.gui.GuiTools) Logging(mcjty.lib.varia.Logging) ProgramCardItem(mcjty.rftoolscontrol.items.ProgramCardItem) StringSelection(java.awt.datatransfer.StringSelection) RFToolsControl(mcjty.rftoolscontrol.RFToolsControl) Parameter(mcjty.rftoolscontrol.api.parameters.Parameter) RFToolsCtrlMessages(mcjty.rftoolscontrol.network.RFToolsCtrlMessages) GridPos(mcjty.rftoolscontrol.logic.grid.GridPos) SelectionEvent(mcjty.lib.gui.events.SelectionEvent) Opcodes(mcjty.rftoolscontrol.logic.registry.Opcodes) TextFormatting(net.minecraft.util.text.TextFormatting) IOException(java.io.IOException) WindowManager(mcjty.lib.gui.WindowManager) java.awt(java.awt) Slot(net.minecraft.inventory.Slot) ResourceLocation(net.minecraft.util.ResourceLocation) ImageIcon(mcjty.lib.gui.icons.ImageIcon) ClickType(net.minecraft.inventory.ClickType) Panel(mcjty.lib.gui.widgets.Panel) GridPos(mcjty.rftoolscontrol.logic.grid.GridPos) PositionalLayout(mcjty.lib.gui.layout.PositionalLayout) HorizontalLayout(mcjty.lib.gui.layout.HorizontalLayout)

Example 2 with IIcon

use of mcjty.lib.gui.icons.IIcon in project RFToolsControl by McJty.

the class GuiProgrammer method selectIcon.

private void selectIcon(Window parent, Widget<?> focused) {
    if (parent == window && focused instanceof IconHolder) {
        clearEditorPanel();
        IconHolder iconHolder = (IconHolder) focused;
        IIcon icon = iconHolder.getIcon();
        if (icon != null) {
            setEditorPanel(iconHolder, icon);
        }
    }
}
Also used : IIcon(mcjty.lib.gui.icons.IIcon)

Example 3 with IIcon

use of mcjty.lib.gui.icons.IIcon in project RFToolsControl by McJty.

the class GuiProgrammer method makeGridInstance.

private ProgramCardInstance makeGridInstance(boolean selectionOnly) {
    ProgramCardInstance instance = ProgramCardInstance.newInstance();
    for (int x = 0; x < GRID_WIDTH; x++) {
        for (int y = 0; y < GRID_HEIGHT; y++) {
            IconHolder holder = getHolder(x, y);
            IIcon icon = holder.getIcon();
            if (icon != null) {
                if (selectionOnly && !icon.hasOverlay("S")) {
                    continue;
                }
                String operandId = icon.getID();
                GridInstance.Builder builder = GridInstance.builder(operandId);
                for (Connection connection : Connection.values()) {
                    if (icon.hasOverlay(connection.getId())) {
                        if (connection.isPrimary()) {
                            builder.primaryConnection(connection);
                        } else {
                            builder.secondaryConnection(connection);
                        }
                    }
                }
                Opcode opcode = Opcodes.OPCODES.get(operandId);
                Map<String, Object> data = icon.getData();
                for (ParameterDescription description : opcode.getParameters()) {
                    ParameterValue value = data == null ? null : (ParameterValue) data.get(description.getName());
                    if (value == null) {
                        value = ParameterValue.constant(null);
                    }
                    Parameter parameter = Parameter.builder().type(description.getType()).value(value).build();
                    builder.parameter(parameter);
                }
                instance.putGridInstance(x, y, builder.build());
            }
        }
    }
    return instance;
}
Also used : ParameterValue(mcjty.rftoolscontrol.api.parameters.ParameterValue) IIcon(mcjty.lib.gui.icons.IIcon) Connection(mcjty.rftoolscontrol.logic.Connection) Opcode(mcjty.rftoolscontrol.api.code.Opcode) ProgramCardInstance(mcjty.rftoolscontrol.logic.grid.ProgramCardInstance) GridInstance(mcjty.rftoolscontrol.logic.grid.GridInstance) Parameter(mcjty.rftoolscontrol.api.parameters.Parameter) ParameterDescription(mcjty.rftoolscontrol.api.parameters.ParameterDescription)

Example 4 with IIcon

use of mcjty.lib.gui.icons.IIcon in project RFToolsControl by McJty.

the class GuiProgrammer method getIconTooltipGrid.

private List<String> getIconTooltipGrid(int x, int y) {
    IconHolder holder = getHolder(x, y);
    IIcon icon = holder.getIcon();
    if (icon != null) {
        Opcode opcode = Opcodes.OPCODES.get(icon.getID());
        List<String> description = opcode.getDescription();
        List<String> tooltips = new ArrayList<>();
        if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) {
            tooltips.add(description.get(0) + TextFormatting.WHITE + " [" + x + "," + y + "]");
            Map<String, Object> data = icon.getData() == null ? Collections.emptyMap() : icon.getData();
            for (ParameterDescription parameter : opcode.getParameters()) {
                String name = parameter.getName();
                ParameterValue value = (ParameterValue) data.get(name);
                if (value != null) {
                    tooltips.add(TextFormatting.BLUE + "Par " + name + ": " + ParameterTypeTools.stringRepresentation(parameter.getType(), value));
                } else {
                    tooltips.add(TextFormatting.BLUE + "Par " + name + ": NULL");
                }
            }
        } else {
            tooltips.add(description.get(0));
            tooltips.add("<Shift for more info>");
        }
        return tooltips;
    }
    return Collections.emptyList();
}
Also used : ParameterValue(mcjty.rftoolscontrol.api.parameters.ParameterValue) IIcon(mcjty.lib.gui.icons.IIcon) Opcode(mcjty.rftoolscontrol.api.code.Opcode) ParameterDescription(mcjty.rftoolscontrol.api.parameters.ParameterDescription)

Example 5 with IIcon

use of mcjty.lib.gui.icons.IIcon in project RFToolsControl by McJty.

the class GuiProgrammer method loadGridInstance.

private void loadGridInstance(Map.Entry<GridPos, GridInstance> entry, int x, int y) {
    GridInstance gridInstance = entry.getValue();
    IIcon icon = ICONS.get(gridInstance.getId());
    if (icon == null) {
        // Ignore missing icon
        Logging.logError("Opcode with id '" + gridInstance.getId() + "' is missing!");
        return;
    }
    icon = icon.clone();
    if (gridInstance.getPrimaryConnection() != null) {
        icon.addOverlay(CONNECTION_ICONS.get(gridInstance.getPrimaryConnection()));
    }
    if (gridInstance.getSecondaryConnection() != null) {
        icon.addOverlay(CONNECTION_ICONS.get(gridInstance.getSecondaryConnection()));
    }
    Opcode opcode = Opcodes.OPCODES.get(icon.getID());
    List<Parameter> parameters = gridInstance.getParameters();
    for (int i = 0; i < parameters.size(); i++) {
        String name = opcode.getParameters().get(i).getName();
        icon.addData(name, parameters.get(i).getParameterValue());
    }
    loading = true;
    getHolder(x, y).setIcon(icon);
    loading = false;
}
Also used : GridInstance(mcjty.rftoolscontrol.logic.grid.GridInstance) IIcon(mcjty.lib.gui.icons.IIcon) Opcode(mcjty.rftoolscontrol.api.code.Opcode) Parameter(mcjty.rftoolscontrol.api.parameters.Parameter)

Aggregations

IIcon (mcjty.lib.gui.icons.IIcon)8 Opcode (mcjty.rftoolscontrol.api.code.Opcode)6 Parameter (mcjty.rftoolscontrol.api.parameters.Parameter)4 ParameterDescription (mcjty.rftoolscontrol.api.parameters.ParameterDescription)4 ParameterValue (mcjty.rftoolscontrol.api.parameters.ParameterValue)4 GridInstance (mcjty.rftoolscontrol.logic.grid.GridInstance)4 Connection (mcjty.rftoolscontrol.logic.Connection)3 java.awt (java.awt)2 Clipboard (java.awt.datatransfer.Clipboard)2 DataFlavor (java.awt.datatransfer.DataFlavor)2 StringSelection (java.awt.datatransfer.StringSelection)2 UnsupportedFlavorException (java.awt.datatransfer.UnsupportedFlavorException)2 IOException (java.io.IOException)2 java.util (java.util)2 List (java.util.List)2 StyleConfig (mcjty.lib.base.StyleConfig)2 GenericGuiContainer (mcjty.lib.container.GenericGuiContainer)2 Window (mcjty.lib.gui.Window)2 WindowManager (mcjty.lib.gui.WindowManager)2 SelectionEvent (mcjty.lib.gui.events.SelectionEvent)2