package org.limewire.ui.swing.statusbar;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import org.jdesktop.application.Resource;
import org.limewire.core.api.library.FileProcessingEvent;
import org.limewire.core.api.library.LibraryManager;
import org.limewire.listener.EventListener;
import org.limewire.listener.SwingEDTEvent;
import org.limewire.ui.swing.action.AbstractAction;
import org.limewire.ui.swing.components.Disposable;
import org.limewire.ui.swing.components.HyperlinkButton;
import org.limewire.ui.swing.components.PopupHeaderBar;
import org.limewire.ui.swing.util.GuiUtils;
import org.limewire.ui.swing.util.I18n;
import org.limewire.ui.swing.util.IconManager;
import org.limewire.ui.swing.util.PainterUtils;
import org.limewire.util.FileUtils;
import com.google.inject.Inject;
public class FileProcessingPopupContentPanel extends JPanel implements Disposable {
@Resource private Color border = PainterUtils.TRASPARENT;
@Resource private Font font;
@Resource private Color foreground;
private final LibraryManager libraryManager;
private final JLabel processingLine;
private final HyperlinkButton stopButton;
private EventListener<FileProcessingEvent> listener;
@Inject
public FileProcessingPopupContentPanel(final FileProcessingPanel parent, final LibraryManager libraryManager) {
super(new BorderLayout());
this.libraryManager = libraryManager;
GuiUtils.assignResources(this);
add(new PopupHeaderBar(I18n.tr("Adding Files"), new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false);
parent.repaint();
}
}), BorderLayout.NORTH);
setBorder(BorderFactory.createMatteBorder(1, 1, 0, 1, border));
processingLine = new JLabel(I18n.tr("Scanning..."));
stopButton = new HyperlinkButton(new AbstractAction(I18n.tr("stop")){
@Override
public void actionPerformed(ActionEvent e) {
libraryManager.getLibraryManagedList().cancelPendingTasks();
}
});
processingLine.setFont(font);
processingLine.setForeground(foreground);
processingLine.setMaximumSize(new Dimension(140, 40));
stopButton.setFont(font);
JPanel bottomPanel = new JPanel(new MigLayout("insets 0 6 2 6, gap 5, fill"));
bottomPanel.add(processingLine);
bottomPanel.add(stopButton, "gapbefore push");
add(bottomPanel, BorderLayout.CENTER);
}
@Inject
void register(final IconManager iconManager) {
listener = new EventListener<FileProcessingEvent>() {
@Override
@SwingEDTEvent
public void handleEvent(final FileProcessingEvent event) {
switch (event.getType()) {
case PROCESSING:
processingLine.setText(event.getSource().getName());
processingLine.setIcon(iconManager.getIconForExtension(FileUtils.getFileExtension(event.getSource().getName())));
stopButton.setVisible(true);
break;
}
}
};
libraryManager.getLibraryManagedList().addFileProcessingListener(listener);
}
public void notifyDone() {
stopButton.setVisible(false);
processingLine.setText(I18n.tr("All Completed"));
processingLine.setIcon(null);
}
@Override
public void dispose() {
libraryManager.getLibraryManagedList().removeFileProcessingListener(listener);
}
}