/** * 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 java.util.List; import java.util.Map; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Text; import org.gudy.azureus2.core3.config.COConfigurationManager; import org.gudy.azureus2.plugins.ui.UIPluginViewToolBarListener; import org.gudy.azureus2.plugins.ui.tables.TableColumn; import org.gudy.azureus2.plugins.ui.tables.TableColumnCreationListener; import org.gudy.azureus2.ui.swt.Utils; import org.gudy.azureus2.ui.swt.views.table.TableViewSWT; import org.gudy.azureus2.ui.swt.views.table.TableViewSWTMenuFillListener; import org.gudy.azureus2.ui.swt.views.table.impl.TableViewFactory; import org.gudy.azureus2.ui.swt.views.utils.TagUIUtils; import com.aelitis.azureus.core.tag.*; import com.aelitis.azureus.ui.UIFunctions; import com.aelitis.azureus.ui.UIFunctionsManager; import com.aelitis.azureus.ui.common.ToolBarItem; import com.aelitis.azureus.ui.common.table.TableColumnCore; import com.aelitis.azureus.ui.common.table.TableRowCore; import com.aelitis.azureus.ui.common.table.TableSelectionListener; import com.aelitis.azureus.ui.common.table.TableViewFilterCheck; import com.aelitis.azureus.ui.common.table.impl.TableColumnManager; import com.aelitis.azureus.ui.common.updater.UIUpdatable; import com.aelitis.azureus.ui.swt.columns.tag.*; import com.aelitis.azureus.ui.swt.skin.SWTSkinObject; /** * @author TuxPaper * @created May 10, 2013 * */ public class SBC_TagsOverview extends SkinView implements UIUpdatable, UIPluginViewToolBarListener, TableViewFilterCheck<Tag>, TagManagerListener, TagTypeListener, TableViewSWTMenuFillListener, TableSelectionListener { private static final String TABLE_TAGS = "TagsView"; TableViewSWT<Tag> tv; private Text txtFilter; private Composite table_parent; private boolean columnsAdded = false; private boolean tm_listener_added; // @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) { return false; } // @see com.aelitis.azureus.ui.common.table.TableViewFilterCheck#filterSet(java.lang.String) public void filterSet(String filter) { } // @see org.gudy.azureus2.plugins.ui.UIPluginViewToolBarListener#refreshToolBarItems(java.util.Map) public void refreshToolBarItems(Map<String, Long> list) { } // @see com.aelitis.azureus.ui.common.updater.UIUpdatable#updateUI() public void updateUI() { if (tv != null) { tv.refreshTable(false); } } // @see com.aelitis.azureus.ui.common.updater.UIUpdatable#getUpdateUIName() public String getUpdateUIName() { return "TagsView"; } // @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) { initColumns(); return null; } protected void initColumns() { synchronized (SBC_TagsOverview.class) { if (columnsAdded) { return; } columnsAdded = true; } TableColumnManager tableManager = TableColumnManager.getInstance(); tableManager.registerColumn(Tag.class, ColumnTagCount.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagCount(column); } }); tableManager.registerColumn(Tag.class, ColumnTagColor.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagColor(column); } }); tableManager.registerColumn(Tag.class, ColumnTagName.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagName(column); } }); tableManager.registerColumn(Tag.class, ColumnTagType.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagType(column); } }); tableManager.registerColumn(Tag.class, ColumnTagPublic.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagPublic(column); } }); tableManager.registerColumn(Tag.class, ColumnTagUpRate.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagUpRate(column); } }); tableManager.registerColumn(Tag.class, ColumnTagDownRate.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagDownRate(column); } }); tableManager.registerColumn(Tag.class, ColumnTagUpLimit.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagUpLimit(column); } }); tableManager.registerColumn(Tag.class, ColumnTagDownLimit.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagDownLimit(column); } }); tableManager.registerColumn(Tag.class, ColumnTagRSSFeed.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagRSSFeed(column); } }); tableManager.registerColumn(Tag.class, ColumnTagUploadPriority.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagUploadPriority(column); } }); tableManager.registerColumn(Tag.class, ColumnTagMinSR.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagMinSR(column); } }); tableManager.registerColumn(Tag.class, ColumnTagMaxSR.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagMaxSR(column); } }); tableManager.registerColumn(Tag.class, ColumnTagXCode.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagXCode(column); } }); tableManager.registerColumn(Tag.class, ColumnTagInitialSaveLocation.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagInitialSaveLocation(column); } }); tableManager.registerColumn(Tag.class, ColumnTagMoveOnComp.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagMoveOnComp(column); } }); tableManager.registerColumn(Tag.class, ColumnTagCopyOnComp.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagCopyOnComp(column); } }); tableManager.registerColumn(Tag.class, ColumnTagProperties.COLUMN_ID, new TableColumnCreationListener() { public void tableColumnCreated(TableColumn column) { new ColumnTagProperties(column); } }); tableManager.setDefaultColumnNames(TABLE_TAGS, new String[] { ColumnTagColor.COLUMN_ID, ColumnTagName.COLUMN_ID, ColumnTagCount.COLUMN_ID, ColumnTagType.COLUMN_ID, ColumnTagPublic.COLUMN_ID, ColumnTagUpRate.COLUMN_ID, ColumnTagDownRate.COLUMN_ID, ColumnTagUpLimit.COLUMN_ID, ColumnTagDownLimit.COLUMN_ID, }); tableManager.setDefaultSortColumnName(TABLE_TAGS, ColumnTagName.COLUMN_ID); } // @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) { if (tv != null) { tv.delete(); tv = null; } Utils.disposeSWTObjects(new Object[] { table_parent, }); TagManager tagManager = TagManagerFactory.getTagManager(); if (tagManager != null) { List<TagType> tagTypes = tagManager.getTagTypes(); for (TagType tagType : tagTypes) { tagType.removeTagTypeListener(this); } tagManager.removeTagManagerListener(this); tm_listener_added = false; } return super.skinObjectHidden(skinObject, params); } // @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) { super.skinObjectShown(skinObject, params); SWTSkinObject so_list = getSkinObject("tags-list"); if (so_list != null) { initTable((Composite) so_list.getControl()); } else { System.out.println("NO tags-list"); return null; } if (tv == null) { return null; } TagManager tagManager = TagManagerFactory.getTagManager(); if (tagManager != null) { if ( !tm_listener_added ){ tm_listener_added = true; tagManager.addTagManagerListener(this, true); } } return null; } @Override public Object skinObjectDestroyed( SWTSkinObject skinObject, Object params) { if ( tm_listener_added ){ tm_listener_added = false; TagManager tagManager = TagManagerFactory.getTagManager(); tagManager.removeTagManagerListener( this ); for ( TagType tt: tagManager.getTagTypes()){ tt.removeTagTypeListener( this ); } } return super.skinObjectDestroyed(skinObject, params); } /** * @param control * * @since 4.6.0.5 */ private void initTable(Composite control) { if ( tv == null ){ tv = TableViewFactory.createTableViewSWT(Tag.class, TABLE_TAGS, TABLE_TAGS, new TableColumnCore[0], ColumnTagName.COLUMN_ID, SWT.MULTI | SWT.FULL_SELECTION | SWT.VIRTUAL); if (txtFilter != null) { tv.enableFilterCheck(txtFilter, this); } tv.setRowDefaultHeight(16); table_parent = new Composite(control, SWT.BORDER); table_parent.setLayoutData(Utils.getFilledFormData()); GridLayout layout = new GridLayout(); layout.marginHeight = layout.marginWidth = layout.verticalSpacing = layout.horizontalSpacing = 0; table_parent.setLayout(layout); tv.addMenuFillListener( this ); tv.addSelectionListener(this, false); tv.initialize(table_parent); } control.layout(true); } public void fillMenu( String sColumnName, Menu menu ) { List<Object> ds = tv.getSelectedDataSources(); List<Tag> tags = new ArrayList<Tag>(); for ( Object obj: ds ){ if ( obj instanceof Tag ){ tags.add((Tag)obj); } } if ( tags.size() == 1 ){ TagUIUtils.createSideBarMenuItems( menu, tags.get(0) ); } } public void addThisColumnSubMenu( String sColumnName, Menu menuThisColumn ) { } public void selected( TableRowCore[] row ) { } public void deselected( TableRowCore[] rows ) { } public void focusChanged( TableRowCore focus ) { } public void defaultSelected( TableRowCore[] rows, int stateMask ) { if ( rows.length == 1 ){ Object obj = rows[0].getDataSource(); if ( obj instanceof Tag ){ Tag tag = (Tag)obj; UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions(); if ( uiFunctions != null ){ if ( !COConfigurationManager.getBooleanParameter("Library.TagInSideBar")){ COConfigurationManager.setParameter("Library.TagInSideBar", true ); } if ( !tag.isVisible()){ tag.setVisible( true ); } uiFunctions.openView( UIFunctions.VIEW_TAG, tag ); } } } } public void mouseEnter( TableRowCore row ) { } public void mouseExit( TableRowCore row) { } // @see com.aelitis.azureus.ui.common.table.TableViewFilterCheck#filterCheck(java.lang.Object, java.lang.String, boolean) public boolean filterCheck(Tag ds, String filter, boolean regex) { return false; } // @see com.aelitis.azureus.core.tag.TagManagerListener#tagTypeAdded(com.aelitis.azureus.core.tag.TagManager, com.aelitis.azureus.core.tag.TagType) public void tagTypeAdded(TagManager manager, TagType tag_type) { tag_type.addTagTypeListener(this, true); } // @see com.aelitis.azureus.core.tag.TagManagerListener#tagTypeRemoved(com.aelitis.azureus.core.tag.TagManager, com.aelitis.azureus.core.tag.TagType) public void tagTypeRemoved(TagManager manager, TagType tag_type) { tag_type.removeTagTypeListener(this); } // @see com.aelitis.azureus.core.tag.TagTypeListener#tagTypeChanged(com.aelitis.azureus.core.tag.TagType) public void tagTypeChanged(TagType tag_type) { tv.tableInvalidate(); } // @see com.aelitis.azureus.core.tag.TagTypeListener#tagAdded(com.aelitis.azureus.core.tag.Tag) public void tagAdded(Tag tag) { tv.addDataSource(tag); } // @see com.aelitis.azureus.core.tag.TagTypeListener#tagChanged(com.aelitis.azureus.core.tag.Tag) public void tagChanged(Tag tag) { if (tv == null || tv.isDisposed()) { return; } TableRowCore row = tv.getRow(tag); if (row != null) { row.invalidate(true); } } // @see com.aelitis.azureus.core.tag.TagTypeListener#tagRemoved(com.aelitis.azureus.core.tag.Tag) public void tagRemoved(Tag tag) { tv.removeDataSource(tag); } }