/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.dashbuilder.displayer.client.widgets; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.web.bindery.event.shared.HandlerRegistration; import org.dashbuilder.displayer.DisplayerSettings; import org.dashbuilder.displayer.client.resources.i18n.CommonConstants; import org.gwtbootstrap3.client.shared.event.ModalHiddenEvent; import org.gwtbootstrap3.client.shared.event.ModalHiddenHandler; import org.gwtbootstrap3.client.shared.event.ModalShownEvent; import org.gwtbootstrap3.client.shared.event.ModalShownHandler; import org.gwtbootstrap3.client.ui.ModalBody; import org.uberfire.ext.widgets.common.client.common.popups.BaseModal; import org.uberfire.ext.widgets.common.client.common.popups.ButtonPressed; import org.uberfire.ext.widgets.common.client.common.popups.footers.ModalFooterOKCancelButtons; import org.uberfire.mvp.Command; import javax.enterprise.context.Dependent; import javax.inject.Inject; @Dependent public class DisplayerEditorPopup extends BaseModal { interface Binder extends UiBinder<ModalBody, DisplayerEditorPopup> {} private static Binder uiBinder = GWT.create(Binder.class); @UiField(provided = true) DisplayerEditor editor; private HandlerRegistration showHandlerRegistration; private String editDisplayerTitle = CommonConstants.INSTANCE.displayer_editor_title(); private String newDisplayerTitle = CommonConstants.INSTANCE.displayer_editor_new(); private ButtonPressed buttonPressed = ButtonPressed.CLOSE; @Inject public DisplayerEditorPopup(DisplayerEditor editor) { this.editor = editor; add(uiBinder.createAndBindUi(this)); ModalFooterOKCancelButtons footer = createModalFooterOKCancelButtons(); footer.enableCancelButton(true); footer.enableOkButton(true); add(footer); setWidth(1200+"px"); addHiddenHandler(); } public DisplayerEditorPopup init(DisplayerSettings settings) { ModalShownHandler shownHandler = createShownHandler(settings); this.showHandlerRegistration = this.addShownHandler(shownHandler); show(); return this; } public DisplayerSettings getDisplayerSettings() { return editor.getDisplayerSettings(); } public void setNewDisplayerTitle(String newDisplayerTitle) { this.newDisplayerTitle = newDisplayerTitle; } public void setEditDisplayerTitle(String editDisplayerTitle) { this.editDisplayerTitle = editDisplayerTitle; } public void setOnSaveCommand(Command saveCommand) { this.editor.setOnSaveCommand(saveCommand); } public void setOnCloseCommand(Command closeCommand) { this.editor.setOnCloseCommand(closeCommand); } /** * <p>The popup must be visible in order that the table can display the different row's values. So after popup is shown, initialize the editor.</p> */ protected ModalShownHandler createShownHandler(final DisplayerSettings settings) { return new ModalShownHandler() { @Override public void onShown(ModalShownEvent modalShownEvent) { editor.init(settings); setTitle(editor.isBrandNewDisplayer() ? newDisplayerTitle : editDisplayerTitle); removeShownHandler(); } }; } protected void removeShownHandler() { if (this.showHandlerRegistration != null) { this.showHandlerRegistration.removeHandler(); this.showHandlerRegistration = null; } } protected void addHiddenHandler() { addHiddenHandler(new ModalHiddenHandler() { @Override public void onHidden(ModalHiddenEvent hiddenEvent) { if (userPressedCloseOrCancel()) { editor.close(); } } } ); } private boolean userPressedCloseOrCancel() { return ButtonPressed.CANCEL.equals(buttonPressed) || ButtonPressed.CLOSE.equals(buttonPressed); } protected ModalFooterOKCancelButtons createModalFooterOKCancelButtons() { return new ModalFooterOKCancelButtons( new com.google.gwt.user.client.Command() { @Override public void execute() { buttonPressed = ButtonPressed.OK; hide(); editor.save(); } }, new com.google.gwt.user.client.Command() { @Override public void execute() { buttonPressed = ButtonPressed.CANCEL; hide(); } }); } }