diff --git a/src/main/java/gregtech/api/mui/GTGuis.java b/src/main/java/gregtech/api/mui/GTGuis.java index 568f925cb6f..f955cd922f8 100644 --- a/src/main/java/gregtech/api/mui/GTGuis.java +++ b/src/main/java/gregtech/api/mui/GTGuis.java @@ -72,47 +72,82 @@ public static ModularPanel defaultPanel(MetaItem.MetaValueItem valueItem) { return createPanel(valueItem.unlocalizedName); } - public static ModularPanel createPopupPanel(String name, int width, int height) { - return createPopupPanel(name, width, height, false, false); + public static PopupPanel createPopupPanel(String name, int width, int height) { + return defaultPopupPanel(name) + .size(width, height); } - public static ModularPanel createPopupPanel(String name, int width, int height, boolean disableBelow, - boolean closeOnOutsideClick) { - return new PopupPanel(name, width, height, disableBelow, closeOnOutsideClick); + public static PopupPanel createPopupPanel(String name, int width, int height, boolean deleteCachedPanel) { + return createPopupPanel(name, width, height) + .deleteCachedPanel(deleteCachedPanel); } - public static ModularPanel defaultPopupPanel(String name) { - return defaultPopupPanel(name, false, false); + public static PopupPanel defaultPopupPanel(String name) { + return new PopupPanel(name) + .size(DEFAULT_WIDTH, DEFAULT_HIEGHT); } - public static ModularPanel defaultPopupPanel(String name, boolean disableBelow, - boolean closeOnOutsideClick) { - return new PopupPanel(name, DEFAULT_WIDTH, DEFAULT_HIEGHT, disableBelow, closeOnOutsideClick); + public static PopupPanel defaultPopupPanel(String name, boolean disableBelow, + boolean closeOnOutsideClick, boolean deleteCachedPanel) { + return defaultPopupPanel(name) + .disablePanelsBelow(disableBelow) + .closeOnOutOfBoundsClick(closeOnOutsideClick) + .deleteCachedPanel(deleteCachedPanel); } - private static class PopupPanel extends ModularPanel { + public static class PopupPanel extends ModularPanel { - private final boolean disableBelow; - private final boolean closeOnOutsideClick; + private boolean disableBelow; + private boolean closeOnOutsideClick; + private boolean deleteCachedPanel; - public PopupPanel(@NotNull String name, int width, int height, boolean disableBelow, - boolean closeOnOutsideClick) { + private PopupPanel(@NotNull String name) { super(name); - size(width, height).align(Alignment.Center); + align(Alignment.Center); background(GTGuiTextures.BACKGROUND_POPUP); child(ButtonWidget.panelCloseButton().top(5).right(5) .onMousePressed(mouseButton -> { if (mouseButton == 0 || mouseButton == 1) { this.closeIfOpen(true); - if (isSynced() && getSyncHandler() instanceof IPanelHandler handler) { - handler.deleteCachedPanel(); - } return true; } return false; })); + } + + @Override + public void onClose() { + super.onClose(); + if (deleteCachedPanel && isSynced() && getSyncHandler() instanceof IPanelHandler handler) { + handler.deleteCachedPanel(); + } + } + + public PopupPanel disablePanelsBelow(boolean disableBelow) { this.disableBelow = disableBelow; + return this; + } + + public PopupPanel closeOnOutOfBoundsClick(boolean closeOnOutsideClick) { this.closeOnOutsideClick = closeOnOutsideClick; + return this; + } + + public PopupPanel deleteCachedPanel(boolean deleteCachedPanel) { + this.deleteCachedPanel = deleteCachedPanel; + return this; + } + + @Override + public PopupPanel size(int w, int h) { + super.size(w, h); + return this; + } + + @Override + public PopupPanel size(int val) { + super.size(val); + return this; } @Override diff --git a/src/main/java/gregtech/common/covers/ender/CoverAbstractEnderLink.java b/src/main/java/gregtech/common/covers/ender/CoverAbstractEnderLink.java index 552c6bb4075..3bde5ee79d9 100644 --- a/src/main/java/gregtech/common/covers/ender/CoverAbstractEnderLink.java +++ b/src/main/java/gregtech/common/covers/ender/CoverAbstractEnderLink.java @@ -288,7 +288,7 @@ protected PanelSyncHandler.IPanelBuilder entrySelector(EntryTypes type) { for (String name : VirtualEnderRegistry.getEntryNames(getOwner(), type)) { rows.add(createRow(name, syncManager, type)); } - return GTGuis.createPopupPanel("entry_selector", 168, 112) + return GTGuis.createPopupPanel("entry_selector", 168, 112, true) .child(IKey.lang("cover.generic.ender.known_channels") .color(UI_TITLE_COLOR) .asWidget() @@ -310,7 +310,7 @@ protected PanelSyncHandler.IPanelBuilder entrySelector(EntryTypes type) { protected PanelSyncHandler.IPanelBuilder entryDescription(String key, T entry) { return (syncManager, syncHandler) -> { var sync = new StringSyncValue(entry::getDescription, entry::setDescription); - return GTGuis.createPopupPanel(key, 168, 36 + 6) + return GTGuis.createPopupPanel(key, 168, 36 + 6, true) .child(IKey.lang("cover.generic.ender.set_description.title", entry.getColorStr()) .color(UI_TITLE_COLOR) .asWidget() diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 0d91fd97cf8..d12a346724a 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -75,7 +75,7 @@ public void initUI(Consumer widgetGroup) {} @Override public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager) { - return GTGuis.createPopupPanel("ore_dict_filter", 188, 76) + return GTGuis.createPopupPanel("ore_dict_filter", 188, 76, false) .padding(7) .child(CoverWithUI.createTitleRow(getContainerStack())) .child(createWidgets(syncManager).top(22)); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index b36acc61283..f91d5105799 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -39,7 +39,7 @@ public void configureFilterTanks(int amount) { @Override public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager) { - return GTGuis.createPopupPanel("simple_fluid_filter", 98, 81) + return GTGuis.createPopupPanel("simple_fluid_filter", 98, 81, false) .padding(4) .child(CoverWithUI.createTitleRow(getContainerStack())) .child(createWidgets(syncManager).top(22)); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index d69e6de7649..dbeabae9c0b 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -94,7 +94,7 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager) { - return GTGuis.createPopupPanel("simple_item_filter", 98, 81) + return GTGuis.createPopupPanel("simple_item_filter", 98, 81, false) .child(CoverWithUI.createTitleRow(getContainerStack())) .child(createWidgets(syncManager).top(22).left(4)); } diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index d7cbf29c463..b86f37b0cde 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -98,7 +98,7 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager) { - return GTGuis.createPopupPanel("smart_item_filter", 98 + 27, 81) + return GTGuis.createPopupPanel("smart_item_filter", 98 + 27, 81, false) .child(CoverWithUI.createTitleRow(getContainerStack())) .child(createWidgets(syncManager).top(22).left(4)); }