package org.limewire.ui.swing.callback; import java.awt.event.ActionEvent; import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.JOptionPane; import org.jdesktop.application.Application; import org.limewire.bittorrent.Torrent; import org.limewire.core.api.callback.GuiCallback; import org.limewire.core.api.callback.GuiCallbackService; import org.limewire.core.api.download.DownloadAction; import org.limewire.core.api.download.DownloadException; import org.limewire.core.api.magnet.MagnetLink; import org.limewire.inject.EagerSingleton; import org.limewire.ui.swing.components.FocusJOptionPane; import org.limewire.ui.swing.components.MultiLineLabel; import org.limewire.ui.swing.properties.FileInfoPanelFactory; import org.limewire.ui.swing.properties.TorrentDownloadSelector; import org.limewire.ui.swing.util.DownloadExceptionHandler; import org.limewire.ui.swing.util.GuiUtils; import org.limewire.ui.swing.util.I18n; import org.limewire.ui.swing.util.MagnetHandler; import org.limewire.ui.swing.util.SwingUtils; import com.google.inject.Inject; import com.google.inject.Provider; @EagerSingleton public class GuiCallbackImpl implements GuiCallback { private final Provider<DownloadExceptionHandler> downloadExceptionHandler; private final Provider<MagnetHandler> magnetHandler; private final Provider<FileInfoPanelFactory> fileInfoPanelFactory; @Inject public GuiCallbackImpl(Provider<DownloadExceptionHandler> downloadExceptionHandler, Provider<MagnetHandler> magnetHandler, Provider<FileInfoPanelFactory> fileInfoPanelFactory) { this.downloadExceptionHandler = downloadExceptionHandler; this.magnetHandler = magnetHandler; this.fileInfoPanelFactory = fileInfoPanelFactory; } @Inject void register(GuiCallbackService guiCallbackService) { guiCallbackService.setGuiCallback(this); } @Override public void handleDownloadException(DownloadAction downLoadAction, DownloadException e, boolean supportsNewSaveDir) { downloadExceptionHandler.get().handleDownloadException(downLoadAction, e, supportsNewSaveDir); } private boolean yesNoQuestion(String message) { return FocusJOptionPane.showConfirmDialog(GuiUtils.getMainFrame(), new MultiLineLabel(I18n .tr(message), 400), "", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION; } @Override public void restoreApplication() { SwingUtils.invokeLater(new Runnable() { @Override public void run() { ActionMap actionMap = Application.getInstance().getContext().getActionMap(); Action restoreView = actionMap.get("restoreView"); restoreView.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "restoreView")); } }); } @Override public String translate(String s) { return I18n.tr(s); } @Override public void handleMagnet(MagnetLink magnetLink) { magnetHandler.get().handleMagnet(magnetLink); } @Override public boolean promptUserQuestion(String marktr) { return yesNoQuestion(I18n.tr(marktr)); } @Override public void warnUser(String filename, final String warning) { final String truncated; if (filename.length() < 70) truncated = filename; else truncated = filename.substring(0, 70) + "..."; SwingUtils.invokeLater(new Runnable() { @Override public void run() { FocusJOptionPane.showMessageDialog(GuiUtils.getMainFrame(), truncated + "\n" + warning, I18n.tr("Warning"), JOptionPane.WARNING_MESSAGE); } }); } @Override public boolean promptTorrentFilePriorities(Torrent torrent) { int result = TorrentDownloadSelector.showBittorrentSelector(torrent, fileInfoPanelFactory .get()); return result == JOptionPane.OK_OPTION; } }