/*
* Created on 2 juil. 2003
* Copyright (C) 2003, 2004, 2005, 2006 Aelitis, 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; either version 2
* of the License, or (at your option) any later version.
* 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.
*
* AELITIS, SAS au capital de 46,603.30 euros
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*
*/
package com.aelitis.azureus.ui.swt.views.skin;
import java.util.ArrayList;
import java.util.Map;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.gudy.azureus2.core3.disk.DiskManagerFileInfo;
import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.download.DownloadManagerListener;
import org.gudy.azureus2.core3.global.GlobalManager;
import org.gudy.azureus2.core3.global.GlobalManagerAdapter;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.peer.PEPeer;
import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.DisplayFormatters;
import org.gudy.azureus2.plugins.download.DownloadException;
import org.gudy.azureus2.plugins.ui.UIPluginViewToolBarListener;
import org.gudy.azureus2.pluginsimpl.local.download.DownloadImpl;
import org.gudy.azureus2.pluginsimpl.local.download.DownloadManagerImpl;
import org.gudy.azureus2.ui.swt.Messages;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.debug.ObfusticateTab;
import org.gudy.azureus2.ui.swt.mainwindow.MenuFactory;
import org.gudy.azureus2.ui.swt.plugins.*;
import org.gudy.azureus2.ui.swt.plugins.UISWTInstance.UISWTViewEventListenerWrapper;
import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTViewCore;
import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTViewEventListenerHolder;
import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTViewImpl;
import org.gudy.azureus2.ui.swt.views.MyTorrentsView;
import org.gudy.azureus2.ui.swt.views.PeersView;
import org.gudy.azureus2.ui.swt.views.piece.PieceInfoView;
import org.gudy.azureus2.ui.swt.views.table.TableViewSWT;
import org.gudy.azureus2.ui.swt.views.table.impl.TableViewTab;
import com.aelitis.azureus.core.AzureusCore;
import com.aelitis.azureus.core.AzureusCoreFactory;
import com.aelitis.azureus.core.AzureusCoreRunningListener;
import com.aelitis.azureus.ui.UIFunctions;
import com.aelitis.azureus.ui.UIFunctionsManager;
import com.aelitis.azureus.ui.common.ToolBarEnabler;
import com.aelitis.azureus.ui.common.ToolBarItem;
import com.aelitis.azureus.ui.common.table.TableView;
import com.aelitis.azureus.ui.common.table.TableViewFilterCheck;
import com.aelitis.azureus.ui.common.updater.UIUpdatable;
import com.aelitis.azureus.ui.common.viewtitleinfo.ViewTitleInfoManager;
import com.aelitis.azureus.ui.selectedcontent.ISelectedContent;
import com.aelitis.azureus.ui.selectedcontent.SelectedContentListener;
import com.aelitis.azureus.ui.selectedcontent.SelectedContentManager;
import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
import com.aelitis.azureus.ui.swt.UIFunctionsSWT;
import com.aelitis.azureus.ui.swt.mdi.MdiEntrySWT;
import com.aelitis.azureus.ui.swt.mdi.MultipleDocumentInterfaceSWT;
import com.aelitis.azureus.ui.swt.skin.SWTSkinObject;
import com.aelitis.azureus.ui.swt.skin.SWTSkinObjectText;
import com.aelitis.azureus.ui.swt.skin.SWTSkinObjectTextbox;
import com.aelitis.azureus.ui.swt.utils.ColorCache;
import com.aelitis.azureus.util.DataSourceUtils;
/**
* Torrent download view, consisting of several information tabs
*
* @author Olivier
*
*/
public class SBC_TorrentDetailsView
extends SkinView
implements DownloadManagerListener, ObfusticateTab,
UIUpdatable, UIPluginViewToolBarListener, SelectedContentListener
{
private DownloadManager manager;
private CTabFolder folder;
private ArrayList<UISWTViewCore> tabViews = new ArrayList<UISWTViewCore>();
int lastCompleted = -1;
private GlobalManagerAdapter gmListener;
private Composite parent;
protected UISWTViewCore activeView;
private FilterCheckHandler filter_check_handler;
private volatile int selection_count = 0;
private volatile long selection_size;
private volatile long selection_done;
private SWTSkinObjectTextbox soFilterTextBox;
private SWTSkinObjectText soInfoArea;
private MdiEntrySWT mdi_entry;
/**
*
*/
public SBC_TorrentDetailsView() {
// assumed if we are opening a Download Manager View that we
// have a DownloadManager and thus an AzureusCore
AzureusCoreFactory.addCoreRunningListener(new AzureusCoreRunningListener() {
public void azureusCoreRunning(AzureusCore core) {
GlobalManager gm = AzureusCoreFactory.getSingleton().getGlobalManager();
gmListener = new GlobalManagerAdapter() {
public void downloadManagerRemoved(DownloadManager dm) {
if (dm.equals(manager)) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
getMainSkinObject().dispose();
}
});
}
}
};
gm.addListener(gmListener, false);
}
});
}
public static DownloadManager dataSourceToDownloadManager(Object ds) {
DownloadManager dm = null;
if (ds instanceof DownloadImpl) {
DownloadImpl dataSourcePlugin = (DownloadImpl) ds;
dm = dataSourcePlugin.getDownload();
} else if (ds instanceof DownloadManager) {
dm = (DownloadManager) ds;
} else if (ds instanceof Object[]
&& ((Object[]) ds)[0] instanceof DownloadManager) {
Object[] o = (Object[]) ds;
dm = (DownloadManager) o[0];
} else if (ds instanceof String) {
final String s = (String) ds;
dm = DataSourceUtils.getDM(s);
} else {
dm = null;
}
return dm;
}
private void dataSourceChanged(Object newDataSource) {
if (manager != null) {
manager.removeListener(this);
}
manager = dataSourceToDownloadManager(newDataSource);
if (newDataSource instanceof Object[]
&& ((Object[]) newDataSource)[1] instanceof PEPeer) {
Object[] o = (Object[]) newDataSource;
PeersView pv = (PeersView) showView(PeersView.class);
if (pv != null) {
pv.selectPeer((PEPeer) o[1]);
}
}
if (manager != null) {
manager.addListener(this);
}
for (int i = 0; i < tabViews.size(); i++) {
UISWTViewCore view = tabViews.get(i);
if (view != null) {
view.triggerEvent(UISWTViewEvent.TYPE_DATASOURCE_CHANGED, newDataSource);
}
}
refreshTitle();
}
private void delete() {
UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
if (uiFunctions != null) {
uiFunctions.getUIUpdater().removeUpdater(this);
}
if (manager != null) {
manager.removeListener(this);
}
try {
GlobalManager gm = AzureusCoreFactory.getSingleton().getGlobalManager();
gm.removeListener(gmListener);
} catch (Exception e) {
Debug.out(e);
}
SelectedContentManager.removeCurrentlySelectedContentListener(this);
if (folder != null && !folder.isDisposed()) {
folder.setSelection(0);
}
//Don't ask me why, but without this an exception is thrown further (in folder.dispose() )
//TODO : Investigate to see if it's a platform (OSX-Carbon) BUG, and report to SWT team.
if (Utils.isCarbon) {
if (folder != null && !folder.isDisposed()) {
Utils.disposeSWTObjects(folder.getItems());
}
}
for (int i = 0; i < tabViews.size(); i++) {
UISWTViewCore view = tabViews.get(i);
try {
if (view != null) {
view.triggerEvent(UISWTViewEvent.TYPE_DESTROY, null);
}
} catch (Throwable t) {
Debug.out(t);
}
}
tabViews.clear();
Utils.disposeSWTObjects(new Object[] {
folder,
parent
});
}
private void initialize(Composite composite) {
Composite main_area = new Composite(composite, SWT.NULL);
main_area.setLayout(new FormLayout());
//boolean az2 = Utils.isAZ2UI();
//Color bg_color = ColorCache.getColor(composite.getDisplay(), "#c0cbd4");
FormData formData;
this.parent = composite;
if (folder == null) {
folder = new CTabFolder(main_area, SWT.LEFT);
folder.setBorderVisible(true);
} else {
System.out.println("ManagerView::initialize : folder isn't null !!!");
}
formData = Utils.getFilledFormData();
folder.setLayoutData(formData);
if (composite.getLayout() instanceof FormLayout) {
main_area.setLayoutData(Utils.getFilledFormData());
} else if (composite.getLayout() instanceof GridLayout) {
main_area.setLayoutData(new GridData(GridData.FILL_BOTH));
}
folder.setTabHeight(20);
// Call plugin listeners
UIFunctionsSWT uiFunctions = UIFunctionsManagerSWT.getUIFunctionsSWT();
if (uiFunctions != null) {
UISWTInstance pluginUI = uiFunctions.getUISWTInstance();
if ( pluginUI != null ){
MyTorrentsView.registerPluginViews(pluginUI);
// unfortunately views for the manager view are currently registered
// against 'MyTorrents'...
for (String id : new String[] {
UISWTInstance.VIEW_MYTORRENTS,
UISWTInstance.VIEW_TORRENT_DETAILS
}) {
UISWTViewEventListenerWrapper[] pluginViews = pluginUI.getViewListeners(id);
for (UISWTViewEventListenerWrapper l : pluginViews) {
if (id == UISWTInstance.VIEW_MYTORRENTS
&& l.getViewID() == PieceInfoView.MSGID_PREFIX) {
// Simple hack to exlude PieceInfoView tab as it's already within Pieces View
continue;
}
if (l != null) {
try {
UISWTViewImpl view = new UISWTViewImpl(
UISWTInstance.VIEW_TORRENT_DETAILS, l.getViewID(), l, null);
addSection(view);
} catch (Throwable e) {
Debug.out(e);
}
}
}
}
}
}
SelectedContentManager.addCurrentlySelectedContentListener(this);
Menu menu = new Menu(folder);
menu.setData("downloads", new DownloadManager[] {
manager
});
menu.setData("is_detailed_view", true);
MenuFactory.buildTorrentMenu(menu);
folder.setMenu(menu);
// Initialize view when user selects it
folder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
CTabItem item = (CTabItem) e.item;
selectView(item);
}
});
Utils.execSWTThreadLater(0, new AERunnable() {
public void runSupport() {
if (!folder.isDisposed() && folder.getItemCount() > 0) {
selectView(folder.getItem(0));
}
}
});
Utils.relayout(folder);
}
private void selectView(CTabItem item) {
if (item == null) {
return;
}
if (folder.getSelection() != item) {
folder.setSelection(item);
}
folder.getShell().setCursor(
folder.getDisplay().getSystemCursor(SWT.CURSOR_WAIT));
try {
// Send one last refresh to previous tab, just in case it
// wants to do something when view goes invisible
refresh();
if (activeView != null) {
activeView.triggerEvent(UISWTViewEvent.TYPE_FOCUSLOST, null);
UISWTViewEventListener listener = activeView.getEventListener();
if (listener instanceof UISWTViewEventListenerHolder) {
listener = ((UISWTViewEventListenerHolder) listener).getDelegatedEventListener(activeView);
}
// unhook filtering
if (listener instanceof TableViewTab<?>
&& listener instanceof TableViewFilterCheck<?>) {
TableViewTab<?> tvt = (TableViewTab<?>) listener;
TableViewSWT tv = tvt.getTableView();
tv.disableFilterCheck();
}
}
UISWTViewCore view = (UISWTViewCore) item.getData("IView");
if (view == null) {
Class<?> cla = (Class<?>) item.getData("claEventListener");
UISWTViewEventListener l = (UISWTViewEventListener) cla.newInstance();
view = new UISWTViewImpl(UISWTInstance.VIEW_MAIN, cla.getSimpleName(),
l, manager);
item.setData("IView", view);
}
if (mdi_entry != null) {
String id = "";
if (activeView instanceof UISWTViewImpl) {
id = "" + ((UISWTViewImpl) activeView).getViewID();
id = id.substring(id.lastIndexOf(".") + 1);
} else if (activeView != null) {
String simpleName = activeView.getClass().getName();
id = simpleName.substring(simpleName.lastIndexOf(".") + 1);
} else {
id = "??";
}
mdi_entry.setLogID("DMDetails-" + id);
}
activeView = view;
if (item.getControl() == null) {
view.triggerEvent(UISWTViewEvent.TYPE_DATASOURCE_CHANGED, manager);
view.initialize(folder);
item.setControl(view.getComposite());
}
UISWTViewEventListener listener = view.getEventListener();
if (listener instanceof UISWTViewEventListenerHolder) {
listener = ((UISWTViewEventListenerHolder) listener).getDelegatedEventListener(view);
}
// hook in filtering
if (listener instanceof TableViewTab<?>
&& listener instanceof TableViewFilterCheck<?>) {
TableViewTab<Object> tvt = (TableViewTab<Object>) listener;
TableViewFilterCheck delegate = (TableViewFilterCheck) tvt;
soFilterTextBox.setVisible(true);
filter_check_handler = new FilterCheckHandler(tvt, delegate);
tvt.getTableView().enableFilterCheck(soFilterTextBox.getTextControl(),
filter_check_handler);
} else {
filter_check_handler = null;
soFilterTextBox.setVisible(false);
}
item.getControl().setFocus();
SelectedContentManager.clearCurrentlySelectedContent();
view.triggerEvent(UISWTViewEvent.TYPE_FOCUSGAINED, null);
UIFunctionsSWT uiFunctions = UIFunctionsManagerSWT.getUIFunctionsSWT();
if (uiFunctions != null) {
uiFunctions.refreshIconBar(); // For edit columns view
}
refresh();
mdi_entry.redraw();
ViewTitleInfoManager.refreshTitleInfo(mdi_entry.getViewTitleInfo());
} catch (Exception e) {
Debug.out(e);
} finally {
folder.getShell().setCursor(null);
}
}
public void currentlySelectedContentChanged(
ISelectedContent[] currentContent, String viewId) {
selection_count = currentContent.length;
long total_size = 0;
long total_done = 0;
for ( ISelectedContent sc: currentContent ){
DownloadManager dm = sc.getDownloadManager();
if ( dm != null ){
int file_index = sc.getFileIndex();
if ( file_index == -1 ){
DiskManagerFileInfo[] file_infos = dm.getDiskManagerFileInfoSet().getFiles();
for ( DiskManagerFileInfo file_info: file_infos ){
if ( !file_info.isSkipped()){
total_size += file_info.getLength();
total_done += file_info.getDownloaded();
}
}
}else{
DiskManagerFileInfo file_info = dm.getDiskManagerFileInfoSet().getFiles()[file_index];
if ( !file_info.isSkipped()){
total_size += file_info.getLength();
total_done += file_info.getDownloaded();
}
}
}
}
selection_size = total_size;
selection_done = total_done;
if (filter_check_handler != null) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
filter_check_handler.updateHeader();
}
});
} else if (soInfoArea != null) {
TableView view = SelectedContentManager.getCurrentlySelectedTableView();
String s = "";
if (view != null) {
int total = view.size(false);
s = MessageText.getString("library.unopened.header"
+ (total > 1 ? ".p" : ""), new String[] {
String.valueOf(total)
});
if (selection_count > 1) {
s += getSelectionText();
}
}
soInfoArea.setText(s);
}
}
private String
getSelectionText()
{
String str = ", " +
MessageText.getString(
"label.num_selected", new String[]{ String.valueOf( selection_count )});
if ( selection_size > 0 ){
if ( selection_size == selection_done ){
str += " (" + DisplayFormatters.formatByteCountToKiBEtc( selection_size ) + ")";
}else{
str += " (" + DisplayFormatters.formatByteCountToKiBEtc( selection_done ) + "/" + DisplayFormatters.formatByteCountToKiBEtc( selection_size ) + ")";
}
}
return( str );
}
protected Object showView(Class view_class) {
CTabItem[] items = folder.getItems();
for (int i = 0; i < items.length; i++) {
CTabItem item = items[i];
UISWTViewCore view = (UISWTViewCore) item.getData("IView");
UISWTViewEventListener listener = view.getEventListener();
if (listener instanceof UISWTViewEventListenerHolder) {
UISWTViewEventListenerHolder lh = (UISWTViewEventListenerHolder) listener;
UISWTViewEventListener delegated_listener = lh.getDelegatedEventListener(view);
if (view_class.isInstance(delegated_listener)) {
selectView(item);
return (delegated_listener);
}
}
}
return (null);
}
private UISWTViewCore getActiveView() {
return activeView;
}
/**
* Called when view is visible
*/
private void refresh() {
if (folder == null || folder.isDisposed())
return;
try {
UISWTViewCore view = getActiveView();
if (view != null) {
view.triggerEvent(UISWTViewEvent.TYPE_REFRESH, null);
}
CTabItem[] items = folder.getItems();
for (int i = 0; i < items.length; i++) {
CTabItem item = items[i];
view = (UISWTViewCore) item.getData("IView");
try {
if (item.isDisposed() || view == null) {
continue;
}
String lastTitle = item.getText();
String newTitle = view.getFullTitle();
if (lastTitle == null || !lastTitle.equals(newTitle)) {
item.setText(escapeAccelerators(newTitle));
}
String lastToolTip = item.getToolTipText();
String newToolTip = view.getFullTitle();
if (lastToolTip == null || !lastToolTip.equals(newToolTip)) {
item.setToolTipText(newToolTip);
}
} catch (Exception e) {
Debug.printStackTrace(e);
}
}
} catch (Exception e) {
Debug.printStackTrace(e);
}
}
/**
*
*
* @since 3.1.0.1
*/
private void refreshTitle() {
int completed = manager == null ? -1 : manager.getStats().getCompleted();
if (lastCompleted != completed) {
if (mdi_entry != null) {
ViewTitleInfoManager.refreshTitleInfo(mdi_entry.getViewTitleInfo());
}
lastCompleted = completed;
}
}
protected static String escapeAccelerators(String str) {
if (str == null) {
return (str);
}
return (str.replaceAll("&", "&&"));
}
/* (non-Javadoc)
* @see org.gudy.azureus2.plugins.ui.UIPluginViewToolBarListener#refreshToolBarItems(java.util.Map)
*/
public void refreshToolBarItems(Map<String, Long> list) {
UISWTViewCore active_view = getActiveView();
if (active_view != null) {
UIPluginViewToolBarListener l = active_view.getToolBarListener();
if (l != null) {
l.refreshToolBarItems(list);
return;
}
}
}
/* (non-Javadoc)
* @see org.gudy.azureus2.plugins.ui.toolbar.UIToolBarActivationListener#toolBarItemActivated(com.aelitis.azureus.ui.common.ToolBarItem, long, java.lang.Object)
*/
public boolean toolBarItemActivated(ToolBarItem item, long activationType,
Object datasource) {
UISWTViewCore active_view = getActiveView();
if (active_view != null) {
UIPluginViewToolBarListener l = active_view.getToolBarListener();
if (l != null && l.toolBarItemActivated(item, activationType, datasource)) {
return true;
}
}
String itemKey = item.getID();
if (itemKey.equals("editcolumns")) {
if (active_view instanceof ToolBarEnabler) {
return ((ToolBarEnabler) active_view).toolBarItemActivated(itemKey);
}
}
return false;
}
public void downloadComplete(DownloadManager manager) {
}
public void completionChanged(DownloadManager manager, boolean bCompleted) {
}
public void filePriorityChanged(DownloadManager download,
org.gudy.azureus2.core3.disk.DiskManagerFileInfo file) {
}
public void stateChanged(DownloadManager manager, int state) {
if (folder == null || folder.isDisposed())
return;
Display display = folder.getDisplay();
if (display == null || display.isDisposed())
return;
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
if (uiFunctions != null) {
uiFunctions.refreshIconBar();
}
}
});
}
public void positionChanged(DownloadManager download, int oldPosition,
int newPosition) {
}
public void addSection(UISWTViewImpl view) {
Object pluginDataSource = null;
try {
pluginDataSource = DownloadManagerImpl.getDownloadStatic(manager);
} catch (DownloadException e) {
/* Ignore */
}
addSection(view, pluginDataSource);
}
private void addSection(UISWTViewCore view, Object dataSource) {
if (view == null)
return;
view.triggerEvent(UISWTViewEvent.TYPE_DATASOURCE_CHANGED, dataSource);
CTabItem item = new CTabItem(folder, SWT.NULL);
Messages.setLanguageText(item, view.getTitleID());
item.setData("IView", view);
tabViews.add(view);
}
public String getObfusticatedHeader() {
int completed = manager.getStats().getCompleted();
return DisplayFormatters.formatPercentFromThousands(completed) + " : "
+ manager;
}
public DownloadManager getDownload() {
return manager;
}
// @see org.gudy.azureus2.ui.swt.IconBarEnabler#isSelected(java.lang.String)
public boolean isSelected(String itemKey) {
return false;
}
// @see com.aelitis.azureus.ui.common.updater.UIUpdatable#getUpdateUIName()
public String getUpdateUIName() {
return "DMDetails";
}
// @see com.aelitis.azureus.ui.common.updater.UIUpdatable#updateUI()
public void updateUI() {
refreshTitle();
refresh();
}
private class FilterCheckHandler
implements TableViewFilterCheck.TableViewFilterCheckEx<Object>
{
private TableViewTab<Object> tvt;
private TableViewFilterCheck delegate;
boolean enabled;
int value;
private FilterCheckHandler(TableViewTab<Object> _tvt,
TableViewFilterCheck _delegate)
{
tvt = _tvt;
delegate = _delegate;
updateHeader();
}
public boolean filterCheck(Object ds, String filter, boolean regex) {
return (delegate.filterCheck(ds, filter, regex));
};
public void filterSet(String filter) {
boolean was_enabled = enabled;
enabled = filter != null && filter.length() > 0;
delegate.filterSet(filter);
if (enabled != was_enabled) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
updateHeader();
}
});
}
}
public void viewChanged(TableView<Object> view) {
value = view.size(false);
if (enabled) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
updateHeader();
}
});
}
}
private void updateHeader() {
int total = manager.getNumFileInfos();
String s = MessageText.getString("library.unopened.header"
+ (total > 1 ? ".p" : ""), new String[] {
String.valueOf(total)
});
if (enabled) {
String extra = MessageText.getString("filter.header.matches1",
new String[] {
String.valueOf(value)
});
s += " " + extra;
}
if (selection_count > 1) {
s += getSelectionText();
}
if (soInfoArea != null) {
soInfoArea.setText(s);
}
}
}
// @see com.aelitis.azureus.ui.swt.views.skin.SkinView#skinObjectInitialShow(com.aelitis.azureus.ui.swt.skin.SWTSkinObject, java.lang.Object)
public Object skinObjectInitialShow(SWTSkinObject skinObject, Object params) {
SWTSkinObject soListArea = getSkinObject("torrentdetails-list-area");
soFilterTextBox = (SWTSkinObjectTextbox) getSkinObject("torrentdetails-filter");
soInfoArea = (SWTSkinObjectText) getSkinObject("torrentdetails-info");
MultipleDocumentInterfaceSWT mdi = UIFunctionsManagerSWT.getUIFunctionsSWT().getMDISWT();
if (mdi != null) {
mdi_entry = mdi.getEntryFromSkinObject(skinObject);
if ( mdi_entry == null ){
// We *really* need to not use 'current' here as it is inaccurate (try opening multiple torrent details view
// at once to see this)
Debug.out( "Failed to get MDI entry from skin object, reverting to using 'current'" );
mdi_entry = mdi.getCurrentEntrySWT();
}
mdi_entry.addToolbarEnabler(this);
}
initialize((Composite) soListArea.getControl());
return null;
}
// @see com.aelitis.azureus.ui.swt.views.skin.SkinView#skinObjectShown(com.aelitis.azureus.ui.swt.skin.SWTSkinObject, java.lang.Object)
public Object skinObjectShown(SWTSkinObject skinObject, Object params) {
UISWTViewCore view = getActiveView();
if (view != null) {
view.triggerEvent(UISWTViewEvent.TYPE_FOCUSGAINED, null);
}
refresh();
return super.skinObjectShown(skinObject, params);
}
// @see com.aelitis.azureus.ui.swt.views.skin.SkinView#skinObjectHidden(com.aelitis.azureus.ui.swt.skin.SWTSkinObject, java.lang.Object)
public Object skinObjectHidden(SWTSkinObject skinObject, Object params) {
UISWTViewCore view = getActiveView();
if (view != null) {
view.triggerEvent(UISWTViewEvent.TYPE_FOCUSLOST, null);
}
return super.skinObjectHidden(skinObject, params);
}
// @see com.aelitis.azureus.ui.swt.views.skin.SkinView#skinObjectDestroyed(com.aelitis.azureus.ui.swt.skin.SWTSkinObject, java.lang.Object)
public Object skinObjectDestroyed(SWTSkinObject skinObject, Object params) {
delete();
return super.skinObjectDestroyed(skinObject, params);
}
// @see com.aelitis.azureus.ui.swt.skin.SWTSkinObjectAdapter#updateLanguage(com.aelitis.azureus.ui.swt.skin.SWTSkinObject, java.lang.Object)
public Object updateLanguage(SWTSkinObject skinObject, Object params) {
Messages.updateLanguageForControl(folder);
return super.updateLanguage(skinObject, params);
}
// @see com.aelitis.azureus.ui.swt.skin.SWTSkinObjectAdapter#dataSourceChanged(com.aelitis.azureus.ui.swt.skin.SWTSkinObject, java.lang.Object)
public Object dataSourceChanged(SWTSkinObject skinObject, Object params) {
dataSourceChanged(params);
return super.dataSourceChanged(skinObject, params);
};
}