IDEMPIERE-4790 : Deactivating ToolbarDetail Customize button throws NPE when using Toggle button (#689)

This commit is contained in:
Nicolas Micoud 2021-05-17 11:43:29 +02:00 committed by GitHub
parent da96ecdc19
commit 3b4d371fb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 27 additions and 9 deletions

View File

@ -89,7 +89,7 @@ public class DetailPane extends Panel implements EventListener<Event>, IdSpace {
/**
* generated serial id
*/
private static final long serialVersionUID = -6994505162094868814L;
private static final long serialVersionUID = -6839563468328913930L;
private static final String BTN_PROCESS_ID = "BtnProcess";
@ -535,9 +535,12 @@ public class DetailPane extends Panel implements EventListener<Event>, IdSpace {
protected void onToggle(Event e) {
var adTabPanel = getSelectedADTabpanel();
if(!(adTabPanel instanceof ADSortTab)) {
adTabPanel.switchRowPresentation();
getSelectedPanel().getToolbarButton(BTN_CUSTOMIZE_ID).setDisabled(!adTabPanel.isGridView());
adTabPanel.switchRowPresentation();
ToolBarButton btnCustomize = getSelectedPanel().getToolbarButton(BTN_CUSTOMIZE_ID);
if (btnCustomize != null)
btnCustomize.setDisabled(!adTabPanel.isGridView());
Tabpanel tabPanel = (Tabpanel) tabbox.getSelectedTabpanel();
tabPanel.setToggleToFormView(!adTabPanel.isGridView());
tabPanel.afterToggle();
@ -1111,8 +1114,8 @@ public class DetailPane extends Panel implements EventListener<Event>, IdSpace {
getRecordToolbar().dynamicDisplay();
}
boolean enableCustomize = !adTabPanel.getGridTab().isSortTab() && adTabPanel.isGridView();
List<ToolBarButton> btns = getToolbar().getChildren();
Optional<ToolBarButton> optional = btns.stream().filter(e -> BTN_CUSTOMIZE_ID.equals(e.getId())).findFirst();
Optional<ToolBarButton> optional = getToolbarButtons().stream().filter(e -> BTN_CUSTOMIZE_ID.equals(e.getId())).findFirst();
if (optional.isPresent())
optional.get().setDisabled(!enableCustomize);
}
@ -1207,11 +1210,26 @@ public class DetailPane extends Panel implements EventListener<Event>, IdSpace {
* @return {@link ToolBarButton}
*/
public ToolBarButton getToolbarButton(String id) {
List<ToolBarButton> list = toolbar.getChildren();
Optional<ToolBarButton> optional = list.stream().filter(e -> e.getId().equals(id)).findFirst();
Optional<ToolBarButton> optional = getToolbarButtons().stream().filter(e -> e.getId().equals(id)).findFirst();
return optional.isPresent() ? optional.get() : null;
}
/**
*
* @return buttons from the detail toolbar
*/
private List<ToolBarButton> getToolbarButtons() {
List<ToolBarButton> list = new ArrayList<>();
for (Component c : toolbar.getChildren()) {
if (c instanceof ToolBarButton)
list.add((ToolBarButton) c);
}
return list;
}
private void createOverflowButton() {
overflowButton = new A();
overflowButton.setTooltiptext(Msg.getMsg(Env.getCtx(), "ShowMore"));