package com.aelitis.azureus.ui.swt.shells.main;
import java.util.Map;
import org.eclipse.swt.widgets.Menu;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.config.ParameterListener;
import org.gudy.azureus2.core3.config.impl.ConfigurationChecker;
import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.core3.util.DisplayFormatters;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.ui.*;
import org.gudy.azureus2.plugins.ui.menus.MenuItem;
import org.gudy.azureus2.plugins.ui.menus.MenuItemListener;
import org.gudy.azureus2.plugins.ui.menus.MenuManager;
import org.gudy.azureus2.pluginsimpl.local.PluginInitializer;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.mainwindow.MenuFactory;
import org.gudy.azureus2.ui.swt.views.ConfigView;
import org.gudy.azureus2.ui.swt.views.LoggerView;
import org.gudy.azureus2.ui.swt.views.PeersSuperView;
import org.gudy.azureus2.ui.swt.views.stats.StatsView;
import com.aelitis.azureus.core.AzureusCore;
import com.aelitis.azureus.core.AzureusCoreFactory;
import com.aelitis.azureus.core.AzureusCoreRunningListener;
import com.aelitis.azureus.core.cnetwork.ContentNetwork;
import com.aelitis.azureus.core.cnetwork.ContentNetworkManagerFactory;
import com.aelitis.azureus.ui.UIFunctions;
import com.aelitis.azureus.ui.UIFunctionsManager;
import com.aelitis.azureus.ui.common.table.TableView;
import com.aelitis.azureus.ui.common.viewtitleinfo.ViewTitleInfo;
import com.aelitis.azureus.ui.common.viewtitleinfo.ViewTitleInfoManager;
import com.aelitis.azureus.ui.mdi.*;
import com.aelitis.azureus.ui.selectedcontent.SelectedContentManager;
import com.aelitis.azureus.ui.swt.feature.FeatureManagerUI;
import com.aelitis.azureus.ui.swt.mdi.*;
import com.aelitis.azureus.ui.swt.views.skin.*;
import com.aelitis.azureus.ui.swt.views.skin.sidebar.SideBar;
import com.aelitis.azureus.util.ConstantsVuze;
import com.aelitis.azureus.util.DataSourceUtils;
import com.aelitis.azureus.util.FeatureUtils;
public class MainMDISetup
{
public static void setupSideBar(final MultipleDocumentInterfaceSWT mdi,
final MdiListener l) {
if (Utils.isAZ2UI()) {
setupSidebarClassic(mdi);
} else {
setupSidebarVuzeUI(mdi);
}
mdi.registerEntry(SideBar.SIDEBAR_TORRENT_DETAILS_PREFIX + ".*",
new MdiEntryCreationListener2() {
public MdiEntry createMDiEntry(MultipleDocumentInterface mdi,
String id, Object datasource, Map<?, ?> params) {
return createTorrentDetailEntry(mdi, id, datasource);
}
});
PluginInitializer.getDefaultInterface().getUIManager().addUIListener(
new UIManagerListener2() {
public void UIDetached(UIInstance instance) {
}
public void UIAttached(UIInstance instance) {
}
public void UIAttachedComplete(UIInstance instance) {
PluginInitializer.getDefaultInterface().getUIManager().removeUIListener(
this);
MdiEntry currentEntry = mdi.getCurrentEntry();
if (currentEntry != null) {
// User or another plugin selected an entry
return;
}
final String CFG_STARTTAB = "v3.StartTab";
final String CFG_STARTTAB_DS = "v3.StartTab.ds";
String startTab;
String datasource = null;
boolean showWelcome = COConfigurationManager.getBooleanParameter("v3.Show Welcome");
if (ConfigurationChecker.isNewVersion()) {
showWelcome = true;
}
ContentNetwork startupCN = ContentNetworkManagerFactory.getSingleton().getStartupContentNetwork();
if (startupCN == null || !startupCN.isServiceSupported(ContentNetwork.SERVICE_WELCOME)) {
showWelcome = false;
}
if (showWelcome) {
startTab = SideBar.SIDEBAR_SECTION_WELCOME;
} else {
if (!COConfigurationManager.hasParameter(CFG_STARTTAB, true)) {
COConfigurationManager.setParameter(CFG_STARTTAB,
SideBar.SIDEBAR_SECTION_LIBRARY);
}
startTab = COConfigurationManager.getStringParameter(CFG_STARTTAB);
datasource = COConfigurationManager.getStringParameter(
CFG_STARTTAB_DS, null);
}
if (startTab.equals(MultipleDocumentInterface.SIDEBAR_SECTION_PLUS)) {
SBC_PlusFTUX.setSourceRef("lastview");
}
if (!mdi.loadEntryByID(startTab, true, false, datasource)) {
mdi.showEntryByID(SideBar.SIDEBAR_SECTION_LIBRARY);
}
if (l != null) {
mdi.addListener(l);
}
}
});
;
COConfigurationManager.addAndFireParameterListener(
"Beta Programme Enabled", new ParameterListener() {
public void parameterChanged(String parameterName) {
boolean enabled = COConfigurationManager.getBooleanParameter("Beta Programme Enabled");
if (enabled) {
mdi.loadEntryByID(
MultipleDocumentInterface.SIDEBAR_SECTION_BETAPROGRAM, false);
}
}
});
mdi.registerEntry(StatsView.VIEW_ID, new MdiEntryCreationListener() {
public MdiEntry createMDiEntry(String id) {
MdiEntry entry = mdi.createEntryFromEventListener(
MultipleDocumentInterface.SIDEBAR_HEADER_PLUGINS, new StatsView(),
id, true, null, null);
return entry;
}
});
mdi.registerEntry(PeersSuperView.VIEW_ID, new MdiEntryCreationListener() {
public MdiEntry createMDiEntry(String id) {
MdiEntry entry = mdi.createEntryFromEventListener(
MultipleDocumentInterface.SIDEBAR_HEADER_TRANSFERS, new PeersSuperView(),
id, true, null, null);
// TODO: come up with a better icon?
entry.setImageLeftID("image.sidebar.plugin");
return entry;
}
});
mdi.registerEntry(LoggerView.VIEW_ID, new MdiEntryCreationListener() {
public MdiEntry createMDiEntry(String id) {
MdiEntry entry = mdi.createEntryFromEventListener(
MultipleDocumentInterface.SIDEBAR_HEADER_PLUGINS, new LoggerView(),
id, true, null, null);
return entry;
}
});
mdi.registerEntry(MultipleDocumentInterface.SIDEBAR_SECTION_TAGS,
new MdiEntryCreationListener() {
public MdiEntry createMDiEntry(String id) {
MdiEntry entry = mdi.createEntryFromSkinRef(
MultipleDocumentInterface.SIDEBAR_HEADER_TRANSFERS,
MultipleDocumentInterface.SIDEBAR_SECTION_TAGS, "tagsview",
"{mdi.entry.tagsoverview}", null, null, true, null);
// TODO: Don't steal blue icon
entry.setImageLeftID("image.sidebar.tag-blue");
return entry;
}
});
PluginInterface pi = PluginInitializer.getDefaultInterface();
if (pi != null) {
UIManager uim = pi.getUIManager();
if (uim != null) {
MenuItem menuItem = uim.getMenuManager().addMenuItem(
MenuManager.MENU_MENUBAR, "tags.view.heading");
menuItem.addListener(new MenuItemListener() {
public void selected(MenuItem menu, Object target) {
UIFunctionsManager.getUIFunctions().getMDI().showEntryByID(
MultipleDocumentInterface.SIDEBAR_SECTION_TAGS);
}
});
}
}
// System.out.println("Activate sidebar " + startTab + " took "
// + (SystemTime.getCurrentTime() - startTime) + "ms");
// startTime = SystemTime.getCurrentTime();
}
private static void setupSidebarClassic(final MultipleDocumentInterfaceSWT mdi) {
mdi.registerEntry(MultipleDocumentInterface.SIDEBAR_SECTION_LIBRARY,
new MdiEntryCreationListener() {
public MdiEntry createMDiEntry(String id) {
boolean uiClassic = COConfigurationManager.getStringParameter("ui").equals(
"az2");
String title = uiClassic ? "{MyTorrentsView.mytorrents}"
: ("{sidebar."
+ MultipleDocumentInterface.SIDEBAR_SECTION_LIBRARY + "}");
MdiEntry entry = mdi.createEntryFromSkinRef(null,
MultipleDocumentInterface.SIDEBAR_SECTION_LIBRARY, "library",
title, null, null, false,
MultipleDocumentInterface.SIDEBAR_POS_FIRST);
entry.setImageLeftID("image.sidebar.library");
return entry;
}
});
mdi.showEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_LIBRARY);
mdi.registerEntry(ConfigView.VIEW_ID, new MdiEntryCreationListener() {
public MdiEntry createMDiEntry(String id) {
MdiEntry entry = mdi.createEntryFromEventListener(
MultipleDocumentInterface.SIDEBAR_HEADER_PLUGINS, new ConfigView(),
id, true, null, null);
return entry;
}
});
}
private static void setupSidebarVuzeUI(final MultipleDocumentInterfaceSWT mdi) {
MdiEntry entry;
String[] preferredOrder = new String[] {
MultipleDocumentInterface.SIDEBAR_HEADER_TRANSFERS,
MultipleDocumentInterface.SIDEBAR_HEADER_VUZE,
MultipleDocumentInterface.SIDEBAR_HEADER_DISCOVERY,
MultipleDocumentInterface.SIDEBAR_HEADER_DEVICES,
MultipleDocumentInterface.SIDEBAR_HEADER_SUBSCRIPTIONS,
MultipleDocumentInterface.SIDEBAR_HEADER_DVD,
MultipleDocumentInterface.SIDEBAR_HEADER_PLUGINS,
};
mdi.setPreferredOrder(preferredOrder);
for (int i = 0; i < preferredOrder.length; i++) {
String id = preferredOrder[i];
mdi.registerEntry(id, new MdiEntryCreationListener() {
public MdiEntry createMDiEntry(String id) {
MdiEntry entry = mdi.createHeader(id, "sidebar." + id, null);
if ( entry == null ){
return( null );
}
entry.setDefaultExpanded(true);
if (id.equals(MultipleDocumentInterface.SIDEBAR_HEADER_PLUGINS)) {
entry.addListener(new MdiChildCloseListener() {
public void mdiChildEntryClosed(MdiEntry parent, MdiEntry child,
boolean user) {
if (mdi.getChildrenOf(parent.getId()).size() == 0) {
parent.close(true);
}
}
});
PluginInterface pi = PluginInitializer.getDefaultInterface();
UIManager uim = pi.getUIManager();
MenuManager menuManager = uim.getMenuManager();
MenuItem menuItem;
menuItem = menuManager.addMenuItem("sidebar."
+ MultipleDocumentInterface.SIDEBAR_HEADER_PLUGINS,
"label.plugin.options");
menuItem.addListener(new MenuItemListener() {
public void selected(MenuItem menu, Object target) {
UIFunctions uif = UIFunctionsManager.getUIFunctions();
if (uif != null) {
uif.openView(UIFunctions.VIEW_CONFIG, "plugins");
}
}
});
}
return entry;
}
});
}
/*
ContentNetworkManager cnm = ContentNetworkManagerFactory.getSingleton();
if (cnm != null) {
ContentNetwork[] contentNetworks = cnm.getContentNetworks();
for (ContentNetwork cn : contentNetworks) {
if (cn == null) {
continue;
}
if (cn.getID() == ConstantsVuze.getDefaultContentNetwork().getID()) {
cn.setPersistentProperty(ContentNetwork.PP_ACTIVE, Boolean.TRUE);
continue;
}
Object oIsActive = cn.getPersistentProperty(ContentNetwork.PP_ACTIVE);
boolean isActive = (oIsActive instanceof Boolean)
? ((Boolean) oIsActive).booleanValue() : false;
if (isActive) {
mdi.createContentNetworkSideBarEntry(cn);
}
}
}
*/
if ( COConfigurationManager.getBooleanParameter( "Show Options In Side Bar" )){
mdi.registerEntry(ConfigView.VIEW_ID, new MdiEntryCreationListener() {
public MdiEntry createMDiEntry(String id) {
MdiEntry entry = mdi.createEntryFromEventListener(
MultipleDocumentInterface.SIDEBAR_HEADER_PLUGINS, new ConfigView(),
id, true, null, null);
return entry;
}
});
}
mdi.registerEntry(MultipleDocumentInterface.SIDEBAR_SECTION_ABOUTPLUGINS,
new MdiEntryCreationListener() {
public MdiEntry createMDiEntry(String id) {
MdiEntry entry = mdi.createEntryFromSkinRef(
MultipleDocumentInterface.SIDEBAR_HEADER_PLUGINS,
MultipleDocumentInterface.SIDEBAR_SECTION_ABOUTPLUGINS,
"main.generic.browse", "{mdi.entry.about.plugins}", null, null,
true, MultipleDocumentInterface.SIDEBAR_POS_FIRST);
String url = ConstantsVuze.getDefaultContentNetwork().getSiteRelativeURL(
"plugins", true);
entry.setDatasource(url);
entry.setImageLeftID("image.sidebar.plugin");
return entry;
}
});
//loadEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_ABOUTPLUGINS, true, false);
// building plugin views needs UISWTInstance, which needs core.
final int burnInfoShown = COConfigurationManager.getIntParameter(
"burninfo.shown", 0);
if (burnInfoShown == 0) {
AzureusCoreFactory.addCoreRunningListener(new AzureusCoreRunningListener() {
public void azureusCoreRunning(AzureusCore core) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
if (FeatureManagerUI.enabled) {
// blah, can't add until plugin initialization is done
mdi.loadEntryByID(
MultipleDocumentInterface.SIDEBAR_SECTION_PLUS, false);
if (!FeatureUtils.hasFullBurn()) {
mdi.loadEntryByID(
MultipleDocumentInterface.SIDEBAR_SECTION_BURN_INFO,
false);
}
COConfigurationManager.setParameter("burninfo.shown",
burnInfoShown + 1);
}
}
});
}
});
}
SB_Transfers.setup(mdi);
new SB_Vuze(mdi);
new SB_Discovery(mdi);
mdi.loadEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_LIBRARY, false);
mdi.loadEntryByID(
MultipleDocumentInterface.SIDEBAR_SECTION_LIBRARY_UNOPENED, false);
mdi.loadEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_SUBSCRIPTIONS,
false);
mdi.loadEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_DEVICES, false);
mdi.loadEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_ACTIVITIES, false);
}
protected static MdiEntry createTorrentDetailEntry(
MultipleDocumentInterface mdi, String id, Object ds) {
if (ds == null) {
return null;
}
final MdiEntry torrentDetailEntry = mdi.createEntryFromSkinRef(
SideBar.SIDEBAR_HEADER_TRANSFERS, id, "torrentdetails", "", null, ds,
true, null);
final ViewTitleInfo viewTitleInfo = new ViewTitleInfo() {
public Object getTitleInfoProperty(int propertyID) {
Object ds = ((BaseMdiEntry) torrentDetailEntry).getDatasourceCore();
if (propertyID == TITLE_EXPORTABLE_DATASOURCE) {
return DataSourceUtils.getHash(ds);
} else if (propertyID == TITLE_LOGID) {
return "DMDetails";
} else if (propertyID == TITLE_IMAGEID) {
return "image.sidebar.details";
}
DownloadManager manager = SBC_TorrentDetailsView.dataSourceToDownloadManager(ds);
if (manager == null) {
return null;
}
if (propertyID == TITLE_TEXT) {
if (Utils.isAZ2UI()) {
int completed = manager.getStats().getCompleted();
return DisplayFormatters.formatPercentFromThousands(completed)
+ " : " + manager.getDisplayName();
}
return manager.getDisplayName();
}
if (propertyID == TITLE_INDICATOR_TEXT && !Utils.isAZ2UI()) {
int completed = manager.getStats().getCompleted();
if (completed != 1000) {
return (completed / 10) + "%";
}
} else if (propertyID == TITLE_INDICATOR_TEXT_TOOLTIP) {
String s = "";
int completed = manager.getStats().getCompleted();
if (completed != 1000) {
s = (completed / 10) + "% Complete\n";
}
String eta = DisplayFormatters.formatETA(manager.getStats().getSmoothedETA());
if (eta.length() > 0) {
s += MessageText.getString("TableColumn.header.eta") + ": " + eta
+ "\n";
}
return manager.getDisplayName() + ( s.length()==0?"":( ": " + s));
}
return null;
}
};
if (torrentDetailEntry instanceof MdiEntrySWT) {
((MdiEntrySWT) torrentDetailEntry).addListener(new MdiSWTMenuHackListener() {
public void menuWillBeShown(MdiEntry entry, Menu menuTree) {
// todo: This even work?
TableView<?> tv = SelectedContentManager.getCurrentlySelectedTableView();
menuTree.setData("TableView", tv);
DownloadManager manager = SBC_TorrentDetailsView.dataSourceToDownloadManager(torrentDetailEntry.getDatasource());
if (manager != null) {
menuTree.setData("downloads", new DownloadManager[] {
manager
});
}
menuTree.setData("is_detailed_view", new Boolean(true));
MenuFactory.buildTorrentMenu(menuTree);
}
});
}
torrentDetailEntry.addListener(new MdiEntryDatasourceListener() {
public void mdiEntryDatasourceChanged(MdiEntry entry) {
Object newDataSource = entry.getDatasource();
if (newDataSource instanceof String) {
final String s = (String) newDataSource;
if (!AzureusCoreFactory.isCoreRunning()) {
AzureusCoreFactory.addCoreRunningListener(new AzureusCoreRunningListener() {
public void azureusCoreRunning(AzureusCore core) {
torrentDetailEntry.setDatasource(DataSourceUtils.getDM(s));
}
});
return;
}
}
ViewTitleInfoManager.refreshTitleInfo(viewTitleInfo);
}
});
torrentDetailEntry.setViewTitleInfo(viewTitleInfo);
return torrentDetailEntry;
}
}