package edu.washington.cs.oneswarm.ui.gwt.client.newui.publish; import java.util.List; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.ErrorEvent; import com.google.gwt.event.dom.client.ErrorHandler; import com.google.gwt.http.client.URL; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.VerticalPanel; 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.fileDialog.FileBrowser; import edu.washington.cs.oneswarm.ui.gwt.client.i18n.OSMessages; import edu.washington.cs.oneswarm.ui.gwt.client.newui.OneSwarmCss; import edu.washington.cs.oneswarm.ui.gwt.rpc.StringTools; import edu.washington.cs.oneswarm.ui.gwt.rpc.TorrentInfo; public class PublishSwarmInfoPanel extends VerticalPanel { protected static OSMessages msg = OneSwarmGWT.msg; String mPreviewPath = null; TextArea descriptionBox = new TextArea(); ListBox categoriesListBox = new ListBox(); public PublishSwarmInfoPanel(TorrentInfo info) { HorizontalPanel hp = new HorizontalPanel(); VerticalPanel lhs = new VerticalPanel(); Button includePreview = new Button(msg.button_select_preview()); includePreview.addStyleName(OneSwarmCss.SMALL_BUTTON); final Image previewImage = new Image(GWT.getModuleBaseURL() + "image?infohash=" + info.getTorrentID()); previewImage.addErrorHandler(new ErrorHandler() { public void onError(ErrorEvent event) { mPreviewPath = null; previewImage.setVisible(false); Window.alert(msg.publish_preview_image_error()); } }); includePreview.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { FileBrowser dialog = new FileBrowser( OneSwarmRPCClient.getSessionID(), false, new AsyncCallback<String>() { public void onFailure(Throwable caught) { caught.printStackTrace(); } public void onSuccess(String result) { if (result == null) { return; } mPreviewPath = result; previewImage.setUrl(GWT.getModuleBaseURL() + "image?path=" + URL.encode(result) + "&scale=128"); previewImage.setVisible(true); } }); dialog.show(); } }); lhs.add(previewImage); lhs.add(includePreview); lhs.setCellHorizontalAlignment(includePreview, HorizontalPanel.ALIGN_CENTER); lhs.setCellHorizontalAlignment(previewImage, ALIGN_CENTER); VerticalPanel rhs = new VerticalPanel(); descriptionBox.setVisibleLines(5); descriptionBox.setWidth("280px"); HorizontalPanel categoryHP = new HorizontalPanel(); Label l = new Label(msg.publish_category_label() + ":"); categoryHP.add(l); categoryHP.add(categoriesListBox); categoryHP.setCellVerticalAlignment(l, HorizontalPanel.ALIGN_MIDDLE); categoriesListBox.setEnabled(false); rhs.add(categoryHP); rhs.add(new Label(info.getName())); rhs.add(new Label(info.getNumFiles() + " " + msg.publish_files_label())); rhs.add(new Label(msg.publish_size_label() + ": " + StringTools.formatRate(info.getTotalSize(), ""))); descriptionBox.setText(msg.publish_comment_label()); rhs.add(descriptionBox); if (OneSwarmGWT.isRemoteAccess() == false) { hp.add(lhs); } hp.add(rhs); hp.setCellVerticalAlignment(rhs, ALIGN_MIDDLE); lhs.setSpacing(3); add(hp); } public void updateCategories(List<String> categories) { categoriesListBox.clear(); if (categories == null) { categoriesListBox.setEnabled(false); categoriesListBox.addItem(msg.publish_no_categories()); return; } if (categories.size() == 0) { categoriesListBox.setEnabled(false); categoriesListBox.addItem(msg.publish_no_categories()); return; } for (String s : categories) { categoriesListBox.addItem(s); } categoriesListBox.setEnabled(true); } public String getDescription() { if (descriptionBox.getText().equals(msg.publish_comment_label())) { return ""; } else { return descriptionBox.getText(); } } public String getPreviewPath() { return mPreviewPath; } public String getCategory() { if (categoriesListBox.isEnabled() == false) { return null; } return categoriesListBox.getItemText(categoriesListBox.getSelectedIndex()); } }