package org.limewire.ui.swing.search; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; import org.jdesktop.application.Resource; import org.jdesktop.swingx.JXPanel; import org.jdesktop.swingx.VerticalLayout; import org.limewire.core.api.Application; import org.limewire.core.api.search.sponsored.SponsoredResult; import org.limewire.ui.swing.components.MultiLineLabel; import org.limewire.ui.swing.home.HomeMediator; import org.limewire.ui.swing.listener.ActionHandListener; import org.limewire.ui.swing.mainframe.StoreMediator; import org.limewire.ui.swing.nav.NavCategory; import org.limewire.ui.swing.nav.NavItem; import org.limewire.ui.swing.nav.Navigator; import org.limewire.ui.swing.util.GuiUtils; import org.limewire.ui.swing.util.NativeLaunchUtils; import org.mozilla.browser.MozillaInitialization; import com.google.inject.Inject; public class SponsoredResultsPanel extends JXPanel { private final Application application; private final Navigator navigator; private final HomeMediator homeMediator; private final StoreMediator storeMediator; @Resource private int textWidth; @Resource private int areaWidth; @Resource private Color headingColor; @Resource private Color bodyColor; @Resource private Color urlColor; @Resource private Font headingFont; @Resource private Font bodyFont; @Resource private Font urlFont; @Inject public SponsoredResultsPanel(Navigator navigator, StoreMediator storeMediator, HomeMediator homeMediator, Application application) { GuiUtils.assignResources(this); this.application = application; this.navigator = navigator; this.storeMediator = storeMediator; this.homeMediator = homeMediator; setLayout(new VerticalLayout(10)); setBorder(BorderFactory.createEmptyBorder(8,5,0,0)); setMaximumSize(new Dimension(areaWidth, Integer.MAX_VALUE)); setMinimumSize(new Dimension(areaWidth, Short.MAX_VALUE)); } @Override public Dimension getPreferredSize() { Dimension d = super.getPreferredSize(); d.width = areaWidth; return d; } public void addEntry(SponsoredResult result){ add(new SponsoredResultView(result)); } private class SponsoredResultView extends JPanel { private SponsoredResult result; public SponsoredResultView(SponsoredResult result){ super(new VerticalLayout()); this.result = result; MultiLineLabel link = new MultiLineLabel("<html><u>"+result.getTitle()+"</u><html>", textWidth); link.setForeground(headingColor); link.setFont(headingFont); link.addMouseListener(new ActionHandListener(new SponsoredResultListener(result))); link.setBorder(BorderFactory.createEmptyBorder()); MultiLineLabel textArea = new MultiLineLabel(result.getText(), textWidth); textArea.setForeground(bodyColor); textArea.setFont(bodyFont); textArea.setBorder(BorderFactory.createEmptyBorder()); JLabel urlLabel = new JLabel(result.getVisibleUrl()); urlLabel.setForeground(urlColor); urlLabel.setFont(urlFont); urlLabel.setBorder(BorderFactory.createEmptyBorder()); add(link); add(textArea); add(urlLabel); } public SponsoredResult getSponsoredResult() { return result; } } private class SponsoredResultListener implements ActionListener { private final SponsoredResult result; public SponsoredResultListener(SponsoredResult result){ this.result = result; } @Override public void actionPerformed(ActionEvent e) { if(!MozillaInitialization.isInitialized()) { NativeLaunchUtils.openURL(application.addClientInfoToUrl(result.getUrl())); } else { switch(result.getTarget()) { case HOME: homeMediator.getComponent().load(result.getUrl()); navigator.getNavItem(NavCategory.LIMEWIRE, HomeMediator.NAME).select(); break; case STORE: storeMediator.getComponent().load(result.getUrl()); NavItem item = navigator.getNavItem(NavCategory.LIMEWIRE, StoreMediator.NAME); if(item != null) { item.select(); } break; case EXTERNAL: default: NativeLaunchUtils.openURL(application.addClientInfoToUrl(result.getUrl())); } } } } }