package org.gudy.azureus2.ui.swt.views.table.impl; import java.util.Map; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.gudy.azureus2.core3.internat.MessageText; import org.gudy.azureus2.core3.util.AEDiagnosticsEvidenceGenerator; import org.gudy.azureus2.core3.util.IndentWriter; import org.gudy.azureus2.plugins.ui.UIPluginViewToolBarListener; import org.gudy.azureus2.plugins.ui.toolbar.UIToolBarItem; import org.gudy.azureus2.ui.swt.Messages; import org.gudy.azureus2.ui.swt.plugins.UISWTView; import org.gudy.azureus2.ui.swt.plugins.UISWTViewEvent; import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTViewCoreEventListener; import org.gudy.azureus2.ui.swt.views.table.TableViewSWT; import com.aelitis.azureus.ui.common.ToolBarItem; public abstract class TableViewTab<DATASOURCETYPE> implements UISWTViewCoreEventListener, UIPluginViewToolBarListener, AEDiagnosticsEvidenceGenerator { private TableViewSWT<DATASOURCETYPE> tv; private Object parentDataSource; private final String propertiesPrefix; private Composite composite; private UISWTView swtView; public TableViewTab(String propertiesPrefix) { this.propertiesPrefix = propertiesPrefix; } public TableViewSWT<DATASOURCETYPE> getTableView() { return tv; } public final void initialize(Composite composite) { tv = initYourTableView(); if (parentDataSource != null) { tv.setParentDataSource(parentDataSource); } Composite parent = initComposite(composite); tv.initialize(parent); if (parent != composite) { this.composite = composite; } else { this.composite = tv.getComposite(); } tableViewTabInitComplete(); } public void tableViewTabInitComplete() { } public Composite initComposite(Composite composite) { return composite; } public abstract TableViewSWT<DATASOURCETYPE> initYourTableView(); public final void dataSourceChanged(Object newDataSource) { this.parentDataSource = newDataSource; if (tv != null) { tv.setParentDataSource(newDataSource); } } public final void refresh() { if (tv != null) { tv.refreshTable(false); } } private final void delete() { if (tv != null) { tv.delete(); } } public String getFullTitle() { return MessageText.getString(getPropertiesPrefix() + ".title.full"); } /* (non-Javadoc) * @see org.gudy.azureus2.core3.util.AEDiagnosticsEvidenceGenerator#generate(org.gudy.azureus2.core3.util.IndentWriter) */ public void generate(IndentWriter writer) { if (tv != null) { tv.generate(writer); } } public Composite getComposite() { return composite; } /* (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) { if (item.getID().equals("editcolumns")) { if (tv instanceof TableViewSWTImpl) { ((TableViewSWT<?>)tv).showColumnEditor(); return true; } } return false; } /* (non-Javadoc) * @see com.aelitis.azureus.ui.common.ToolBarEnabler2#refreshToolBarItems(java.util.Map) */ public void refreshToolBarItems(Map<String, Long> list) { list.put("editcolumns", UIToolBarItem.STATE_ENABLED); } public String getPropertiesPrefix() { return propertiesPrefix; } public Menu getPrivateMenu() { return null; } public void viewActivated() { // cheap hack.. calling isVisible freshens table's visible status (and // updates subviews) if (tv instanceof TableViewSWTImpl) { ((TableViewSWTImpl<?>)tv).isVisible(); } } private void viewDeactivated() { if (tv instanceof TableViewSWTImpl) { ((TableViewSWTImpl<?>)tv).isVisible(); } } public boolean eventOccurred(UISWTViewEvent event) { switch (event.getType()) { case UISWTViewEvent.TYPE_CREATE: swtView = (UISWTView) event.getData(); swtView.setToolBarListener(this); swtView.setTitle(getFullTitle()); break; case UISWTViewEvent.TYPE_DESTROY: delete(); break; case UISWTViewEvent.TYPE_INITIALIZE: initialize((Composite) event.getData()); break; case UISWTViewEvent.TYPE_LANGUAGEUPDATE: swtView.setTitle(getFullTitle()); updateLanguage(); Messages.updateLanguageForControl(composite); break; case UISWTViewEvent.TYPE_DATASOURCE_CHANGED: dataSourceChanged(event.getData()); break; case UISWTViewEvent.TYPE_FOCUSGAINED: viewActivated(); break; case UISWTViewEvent.TYPE_FOCUSLOST: viewDeactivated(); break; case UISWTViewEvent.TYPE_REFRESH: refresh(); break; } return true; } public void updateLanguage() { } public UISWTView getSWTView() { return swtView; } }