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;
}
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);
}
}
}
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;
}
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();
}
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;
}
Aggregations