/** * Created on May 10, 2013 * * Copyright 2011 Vuze, LLC. All rights reserved. * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License only. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package com.aelitis.azureus.ui.swt.views.skin; import java.util.ArrayList; import org.eclipse.swt.graphics.Image; import org.gudy.azureus2.core3.util.Constants; import org.gudy.azureus2.core3.util.Debug; import com.aelitis.azureus.core.cnetwork.ContentNetwork; import com.aelitis.azureus.core.cnetwork.ContentNetworkManager; import com.aelitis.azureus.core.cnetwork.ContentNetworkManagerFactory; import com.aelitis.azureus.core.util.FeatureAvailability; import com.aelitis.azureus.ui.common.viewtitleinfo.ViewTitleInfo; import com.aelitis.azureus.ui.mdi.*; import com.aelitis.azureus.ui.swt.imageloader.ImageLoader; import com.aelitis.azureus.ui.swt.mdi.BaseMdiEntry; import com.aelitis.azureus.util.ConstantsVuze; import com.aelitis.azureus.util.ContentNetworkUtils; /** * @author TuxPaper * @created May 10, 2013 * */ public class SB_Discovery { private ArrayList<MdiEntry> children = new ArrayList<MdiEntry>(); private ViewTitleInfo titleInfo; public SB_Discovery(MultipleDocumentInterface mdi) { setup(mdi); } private void setup(final MultipleDocumentInterface mdi) { MdiEntry entry = mdi.createEntryFromSkinRef( MultipleDocumentInterface.SIDEBAR_HEADER_DISCOVERY, ContentNetworkUtils.getTarget(ConstantsVuze.getDefaultContentNetwork()), "main.area.browsetab", "{sidebar.VuzeHDNetwork}", null, null, false, null); entry.setImageLeftID("image.sidebar.vuze"); if (Constants.isWindows && FeatureAvailability.isGamesEnabled()) { mdi.registerEntry(MultipleDocumentInterface.SIDEBAR_SECTION_GAMES, new MdiEntryCreationListener() { public MdiEntry createMDiEntry(String id) { MdiEntry entry = mdi.createEntryFromSkinRef( MultipleDocumentInterface.SIDEBAR_HEADER_DISCOVERY, MultipleDocumentInterface.SIDEBAR_SECTION_GAMES, "main.generic.browse", "{mdi.entry.games}", null, null, true, null); ((BaseMdiEntry) entry).setPreferredAfterID(ContentNetworkUtils.getTarget(ConstantsVuze.getDefaultContentNetwork())); String url = ConstantsVuze.getDefaultContentNetwork().getSiteRelativeURL( "starts/games.start", false); entry.setDatasource(url); entry.setImageLeftID("image.sidebar.games"); return entry; } }); mdi.loadEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_GAMES, false, true, null); } mdi.registerEntry("ContentNetwork\\..*", new MdiEntryCreationListener() { public MdiEntry createMDiEntry(String id) { long networkID = Long.parseLong(id.substring(15)); return handleContentNetworkSwitch(mdi, id, networkID); } }); mdi.addListener(new MdiEntryLoadedListener() { public void mdiEntryLoaded(MdiEntry entry) { if (MultipleDocumentInterface.SIDEBAR_HEADER_DISCOVERY.equals(entry.getParentID())) { children.add(entry); entry.addListener(new MdiChildCloseListener() { public void mdiChildEntryClosed(MdiEntry parent, MdiEntry child, boolean user) { children.remove(child); } }); } if (!entry.getId().equals(MultipleDocumentInterface.SIDEBAR_HEADER_DISCOVERY)) { return; } setupHeader(entry); } }); } private void setupHeader(final MdiEntry entry) { titleInfo = new ViewTitleInfo() { public Object getTitleInfoProperty(int propertyID) { if (propertyID == ViewTitleInfo.TITLE_INDICATOR_TEXT) { if (entry.isExpanded()) { return null; } StringBuilder sb = new StringBuilder(); MdiEntry[] entries = entry.getMDI().getEntries(); for (MdiEntry subEntry : entries) { //System.out.println(subEntry.getId()); if (subEntry.getId().startsWith("Subscription_")) { continue; } if (entry.getId().equals(subEntry.getParentID())) { ViewTitleInfo titleInfo = subEntry.getViewTitleInfo(); if (titleInfo != null) { Object text = titleInfo.getTitleInfoProperty(TITLE_INDICATOR_TEXT); if (text instanceof String) { if (sb.length() > 0) { sb.append(" | "); } sb.append(text); } } } } if (sb.length() > 0) { return sb.toString(); } } else if (propertyID == ViewTitleInfo.TITLE_INDICATOR_TEXT_TOOLTIP) { if (entry.isExpanded()) { return null; } StringBuilder sb = new StringBuilder(); MdiEntry[] entries = entry.getMDI().getEntries(); for (MdiEntry subEntry : entries) { if (entry.getId().equals(subEntry.getParentID())) { ViewTitleInfo titleInfo = subEntry.getViewTitleInfo(); if (titleInfo != null) { Object text = titleInfo.getTitleInfoProperty(TITLE_INDICATOR_TEXT); if (text instanceof String) { if (sb.length() > 0) { sb.append("\n"); } sb.append(subEntry.getTitle() + ": " + text); } } } } if (sb.length() > 0) { return sb.toString(); } } return null; } }; entry.setViewTitleInfo(titleInfo); } /** * @param tabID * @return * * @since 4.0.0.3 */ protected BaseMdiEntry handleContentNetworkSwitch(MultipleDocumentInterface mdi, String tabID, long networkID) { String defaultID = ContentNetworkUtils.getTarget(ConstantsVuze.getDefaultContentNetwork()); try { ContentNetworkManager cnManager = ContentNetworkManagerFactory.getSingleton(); if (cnManager == null) { mdi.showEntryByID(defaultID); return null; } ContentNetwork cn = cnManager.getContentNetwork(networkID); if (cn == null) { mdi.showEntryByID(defaultID); return null; } if (networkID == ContentNetwork.CONTENT_NETWORK_VUZE) { mdi.showEntryByID(defaultID); cn.setPersistentProperty(ContentNetwork.PP_ACTIVE, Boolean.TRUE); return null; } return createContentNetworkSideBarEntry(mdi, cn); } catch (Exception e) { Debug.out(e); } mdi.showEntryByID(defaultID); return null; } private BaseMdiEntry createContentNetworkSideBarEntry(MultipleDocumentInterface mdi, ContentNetwork cn) { String entryID = ContentNetworkUtils.getTarget(cn); if (mdi.entryExists(entryID)) { return null; } String name = cn.getName(); Object prop = cn.getProperty(ContentNetwork.PROPERTY_REMOVEABLE); boolean closeable = (prop instanceof Boolean) ? ((Boolean) prop).booleanValue() : false; final BaseMdiEntry entry = (BaseMdiEntry) mdi.createEntryFromSkinRef( MultipleDocumentInterface.SIDEBAR_HEADER_DISCOVERY, entryID, "main.area.browsetab", name, null, cn, closeable, null); Image image = ImageLoader.getInstance().getImage("image.sidebar.vuze"); entry.setImageLeft(image); cn.setPersistentProperty(ContentNetwork.PP_ACTIVE, Boolean.TRUE); cn.setPersistentProperty(ContentNetwork.PP_SHOW_IN_MENU, Boolean.TRUE); return entry; } }