package net.autosauler.ballance.client.gui; import net.autosauler.ballance.client.Services; import com.allen_sauer.gwt.log.client.Log; import com.extjs.gxt.ui.client.GXT; import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.HtmlContainer; import com.extjs.gxt.ui.client.widget.Window; import com.extjs.gxt.ui.client.widget.button.Button; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.RequestException; import com.google.gwt.http.client.Response; import com.google.gwt.i18n.client.LocaleInfo; import com.google.gwt.user.client.rpc.AsyncCallback; public class HelpDialog extends Window { /** * Button constant that displays a single OK button. */ public static final String OK = "ok"; /** * Button constant that displays a single CLOSE button. */ public static final String CLOSE = "close"; /** * The OK button text (defaults to 'OK'); */ public String okText = GXT.MESSAGES.messageBox_ok(); private final HtmlContainer hc; /** * The Close button text (defaults to 'Close'). */ public String closeText = GXT.MESSAGES.messageBox_close(); private boolean hideOnButtonClick = false; private String buttons; private final SelectionListener<ButtonEvent> l = new SelectionListener<ButtonEvent>() { @Override public void componentSelected(ButtonEvent ce) { onButtonPressed(ce.getButton()); } }; public HelpDialog(String title) { setButtons(OK); setHeading("Help: " + title); setSize(500, 400); setHideOnButtonClick(true); setModal(true); setResizable(true); setBlinkModal(true); hc = new HtmlContainer(); this.add(hc); setScrollMode(Scroll.AUTO); } /** * Creates the buttons based on button creation constant */ protected void createButtons() { getButtonBar().removeAll(); setFocusWidget(null); if (buttons.indexOf(OK) != -1) { Button okBtn = new Button(okText); okBtn.setItemId(OK); okBtn.addSelectionListener(l); setFocusWidget(okBtn); addButton(okBtn); } if (buttons.indexOf(CLOSE) != -1) { Button closeBtn = new Button(closeText); closeBtn.setItemId(CLOSE); closeBtn.addSelectionListener(l); addButton(closeBtn); } } public Button getButtonById(String string) { return (Button) fbar.getItemByItemId(string); } /** * Returns the button's. * * @return the buttons the buttons */ public String getButtons() { return buttons; } /** * Returns true if the dialog will be hidden on any button click. * * @return the hide on button click state */ public boolean isHideOnButtonClick() { return hideOnButtonClick; } public void loadHelpText(String url) { MainPanel.setCommInfo(true); try { new RequestBuilder(RequestBuilder.GET, url).sendRequest("", new RequestCallback() { @Override public void onError(Request res, Throwable throwable) { MainPanel.setCommInfo(false); Log.error(throwable.getMessage()); } @Override public void onResponseReceived(Request request, Response response) { MainPanel.setCommInfo(false); String text = response.getText(); setHelpText(text); } }); } catch (RequestException e) { MainPanel.setCommInfo(false); Log.error(e.getMessage()); } } public void loadHelpText(String folderurl, String filename) { String locale = LocaleInfo.getCurrentLocale().getLocaleName(); String url = folderurl + "/" + locale + "/" + filename; MainPanel.setCommInfo(true); try { new RequestBuilder(RequestBuilder.GET, url).sendRequest("", new RequestCallback() { @Override public void onError(Request res, Throwable throwable) { MainPanel.setCommInfo(false); Log.error(throwable.getMessage()); } @Override public void onResponseReceived(Request request, Response response) { MainPanel.setCommInfo(false); String text = response.getText(); setHelpText(text); } }); } catch (RequestException e) { MainPanel.setCommInfo(false); Log.error(e.getMessage()); } } public void loadStructureHelp(String structname) { String locale = LocaleInfo.getCurrentLocale().getLocaleName(); MainPanel.setCommInfo(true); Services.structure.getHelp(locale, structname, new AsyncCallback<String>() { @Override public void onFailure(Throwable caught) { MainPanel.setCommInfo(false); new AlertDialog(caught).show(); } @Override public void onSuccess(String result) { MainPanel.setCommInfo(false); setHelpText(result); } }); } /** * Called after a button in the button bar is selected. If * {@link #setHideOnButtonClick(boolean)} is true, hides the dialog when any * button is pressed. * * @param button * the button */ protected void onButtonPressed(Button button) { if ((button == getButtonBar().getItemByItemId(CLOSE)) || hideOnButtonClick) { hide(button); } else if (button == getButtonBar().getItemByItemId(OK)) { hide(button); } } /** * Sets the buttons to display (defaults to OK). Must be one of: * * <pre> * FileUploadDialog.OK * FileUploadDialog.CANCEL * FileUploadDialog.OKCANCEL * </pre> */ public void setButtons(String buttons) { this.buttons = buttons; createButtons(); } public void setHelpText(String htmltext) { hc.setHtml(htmltext); show(); } /** * True to hide the dialog on any button click. * * @param hideOnButtonClick * true to hide */ public void setHideOnButtonClick(boolean hideOnButtonClick) { this.hideOnButtonClick = hideOnButtonClick; } }