package edu.washington.cs.oneswarm.ui.gwt.client.newui; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.KeyDownEvent; import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.ClickListener; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import edu.washington.cs.oneswarm.ui.gwt.client.OneSwarmDialogBox; import edu.washington.cs.oneswarm.ui.gwt.client.OneSwarmGWT; import edu.washington.cs.oneswarm.ui.gwt.client.OneSwarmRPCClient; import edu.washington.cs.oneswarm.ui.gwt.client.ReportableErrorDialogBox; import edu.washington.cs.oneswarm.ui.gwt.client.i18n.OSMessages; import edu.washington.cs.oneswarm.ui.gwt.rpc.OneSwarmException; import edu.washington.cs.oneswarm.ui.gwt.rpc.StringTools; import edu.washington.cs.oneswarm.ui.gwt.rpc.TorrentInfo; public class TorrentErrorDialogBox extends OneSwarmDialogBox { static final int WIDTH = 350; // static final int HEIGHT = 250; private static OSMessages msg = OneSwarmGWT.msg; VerticalPanel mainPanel = new VerticalPanel(); public static final String CSS_ERROR_TEXT = "os-error_text"; Button dismissButton = new Button(msg.button_dismiss()); Button fixButton = new Button(msg.button_fix()); Button fixAllButton = new Button(msg.button_fix_all()); private TorrentInfo mTorrent; private EntireUIRoot mRoot; public TorrentErrorDialogBox(final TorrentInfo inTorrent, EntireUIRoot inRoot) { super(false, false, true); mTorrent = inTorrent; mRoot = inRoot; setText(msg.torrent_error_dialog_warning() + ": " + StringTools.truncate(inTorrent.getName(), 32, true)); mainPanel.setWidth(WIDTH + "px"); // mainPanel.setHeight(HEIGHT+"px"); final TextArea errorText = new TextArea(); errorText.setText(msg.torrent_error_dialog_text()); errorText.addKeyDownHandler(new KeyDownHandler() { public void onKeyDown(KeyDownEvent event) { errorText.cancelKey(); } }); errorText.setWidth(WIDTH + "px"); errorText.setVisibleLines(8); errorText.addStyleName(CSS_ERROR_TEXT); mainPanel.add(errorText); HorizontalPanel status_and_button = new HorizontalPanel(); // status_and_button.setWidth("100%"); status_and_button.add(fixButton); status_and_button.add(fixAllButton); status_and_button.add(dismissButton); status_and_button.setSpacing(3); dismissButton.addClickHandler(this); fixButton.addClickHandler(this); fixAllButton.addClickHandler(this); mainPanel.add(status_and_button); mainPanel.setCellHorizontalAlignment(status_and_button, HorizontalPanel.ALIGN_RIGHT); setWidget(mainPanel); show(); setVisible(false); center(); setVisible(true); } public void onClick(ClickEvent event) { Object source = event.getSource(); if (source.equals(dismissButton)) { hide(); } else if (source.equals(fixButton)) { OneSwarmRPCClient.getService().fixPermissions(OneSwarmRPCClient.getSessionID(), mTorrent, false, new AsyncCallback<Void>() { public void onFailure(Throwable caught) { if (caught instanceof OneSwarmException) { new ReportableErrorDialogBox((OneSwarmException) caught, false); } else { new ReportableErrorDialogBox(caught.toString(), false); } } public void onSuccess(Void result) { mRoot.refreshSwarms(); } }); } else if (source.equals(fixAllButton)) { OneSwarmRPCClient.getService().fixPermissions(OneSwarmRPCClient.getSessionID(), mTorrent, true, new AsyncCallback<Void>() { public void onFailure(Throwable caught) { if (caught instanceof OneSwarmException) { new ReportableErrorDialogBox((OneSwarmException) caught, false); } else { new ReportableErrorDialogBox(caught.toString(), false); } } public void onSuccess(Void result) { mRoot.refreshSwarms(); } }); } super.onClick(event); } }