/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE file at the root of the source * tree and available online at * * https://github.com/keeps/roda */ package org.roda.wui.client.common.dialogs; import org.roda.core.data.v2.index.IsIndexed; import org.roda.core.data.v2.index.filter.Filter; import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; import org.roda.wui.client.common.search.SearchPanel; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.SelectionChangeEvent.Handler; import config.i18n.client.ClientMessages; public class DefaultSelectDialog<T extends IsIndexed, O> extends DialogBox implements SelectDialog<T> { private static final Binder binder = GWT.create(Binder.class); @SuppressWarnings("rawtypes") interface Binder extends UiBinder<Widget, DefaultSelectDialog> { } private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField(provided = true) SearchPanel searchPanel; @UiField Button cancelButton; @UiField Button selectButton; @UiField Button emptyParentButton; @UiField(provided = true) AsyncTableCell<T, O> searchResultsPanel; public DefaultSelectDialog(String title, Filter filter, String searchField, AsyncTableCell<T, O> searchResultsPanel, boolean hidePreFilters) { this.searchResultsPanel = searchResultsPanel; searchPanel = new SearchPanel(filter, searchField, true, messages.selectAipSearchPlaceHolder(), false, false, hidePreFilters); searchPanel.setList(searchResultsPanel); setWidget(binder.createAndBindUi(this)); setAutoHideEnabled(false); setModal(true); setGlassEnabled(true); setAnimationEnabled(false); setText(title); center(); emptyParentButton.setVisible(false); selectButton.setEnabled(false); this.searchResultsPanel.getSelectionModel().addSelectionChangeHandler(new Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { selectButton.setEnabled(DefaultSelectDialog.this.getValue() != null); } }); } @Override public void showAndCenter() { if (Window.getClientWidth() < 800) { this.setWidth(Window.getClientWidth() + "px"); } show(); center(); } public void setSingleSelectionMode() { selectButton.setEnabled(false); searchResultsPanel.getSelectionModel().addSelectionChangeHandler(new Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { if (DefaultSelectDialog.this.getValue() != null) { onChange(); hide(); } } }); } public void hidePreFilters() { searchPanel.hidePreFilters(); } @UiHandler("cancelButton") void buttonCancelHandler(ClickEvent e) { hide(); } @UiHandler("selectButton") void buttonSelectHandler(ClickEvent e) { onChange(); hide(); } @UiHandler("emptyParentButton") void buttonEmptyParentHandler(ClickEvent e) { searchResultsPanel.getSelectionModel().clear(); onChange(); hide(); } @Override public HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> handler) { return addHandler(handler, ValueChangeEvent.getType()); } protected void onChange() { ValueChangeEvent.fire(this, getValue()); } public T getValue() { return searchResultsPanel.getSelectionModel().getSelectedObject(); } public BasicAsyncTableCell<T> getList() { return (BasicAsyncTableCell<T>) searchResultsPanel; } public void setEmptyParentButtonVisible(boolean visible) { emptyParentButton.setVisible(visible); } }