📄 tableviewswtimpl.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: TableViewSWTImpl.java
package org.gudy.azureus2.ui.swt.views.table.impl;
import com.aelitis.azureus.ui.common.table.TableCellCore;
import com.aelitis.azureus.ui.common.table.TableColumnCore;
import com.aelitis.azureus.ui.common.table.TableGroupRowRunner;
import com.aelitis.azureus.ui.common.table.TableGroupRowVisibilityRunner;
import com.aelitis.azureus.ui.common.table.TableRowCore;
import com.aelitis.azureus.ui.common.table.TableSelectedRowsListener;
import com.aelitis.azureus.ui.common.table.TableStructureEventDispatcher;
import com.aelitis.azureus.ui.common.table.TableStructureModificationListener;
import com.aelitis.azureus.ui.common.table.TableView;
import com.aelitis.azureus.ui.common.table.impl.TableViewImpl;
import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
import com.aelitis.azureus.ui.swt.UIFunctionsSWT;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabFolder2Adapter;
import org.eclipse.swt.custom.CTabFolderEvent;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.DragSource;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Sash;
import org.eclipse.swt.widgets.ScrollBar;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.gudy.azureus2.core3.config.ParameterListener;
import org.gudy.azureus2.core3.config.impl.ConfigurationManager;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.logging.LogEvent;
import org.gudy.azureus2.core3.logging.LogIDs;
import org.gudy.azureus2.core3.logging.Logger;
import org.gudy.azureus2.core3.util.AEDiagnostics;
import org.gudy.azureus2.core3.util.AEDiagnosticsLogger;
import org.gudy.azureus2.core3.util.AEMonitor;
import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.core3.util.Constants;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.IndentWriter;
import org.gudy.azureus2.core3.util.LightHashMap;
import org.gudy.azureus2.core3.util.LightHashSet;
import org.gudy.azureus2.core3.util.SystemTime;
import org.gudy.azureus2.core3.util.Timer;
import org.gudy.azureus2.core3.util.TimerEvent;
import org.gudy.azureus2.core3.util.TimerEventPerformer;
import org.gudy.azureus2.plugins.ui.tables.TableCellMouseEvent;
import org.gudy.azureus2.plugins.ui.tables.TableRowRefreshListener;
import org.gudy.azureus2.pluginsimpl.local.ui.tables.TableContextMenuItemImpl;
import org.gudy.azureus2.ui.common.util.MenuItemManager;
import org.gudy.azureus2.ui.swt.MenuBuildUtils;
import org.gudy.azureus2.ui.swt.Messages;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.debug.ObfusticateImage;
import org.gudy.azureus2.ui.swt.debug.UIDebugGenerator;
import org.gudy.azureus2.ui.swt.mainwindow.Colors;
import org.gudy.azureus2.ui.swt.plugins.UISWTViewEventListener;
import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTInstanceImpl;
import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTViewImpl;
import org.gudy.azureus2.ui.swt.shells.GCStringPrinter;
import org.gudy.azureus2.ui.swt.views.IView;
import org.gudy.azureus2.ui.swt.views.columnsetup.TableColumnSetupWindow;
import org.gudy.azureus2.ui.swt.views.table.TableCellSWT;
import org.gudy.azureus2.ui.swt.views.table.TableRowSWT;
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.TableViewSWTPanelCreator;
import org.gudy.azureus2.ui.swt.views.table.utils.TableColumnManager;
import org.gudy.azureus2.ui.swt.views.table.utils.TableColumnSWTUtils;
import org.gudy.azureus2.ui.swt.views.table.utils.TableContextMenuManager;
import org.gudy.azureus2.ui.swt.views.utils.VerticalAligner;
// Referenced classes of package org.gudy.azureus2.ui.swt.views.table.impl:
// TableRowImpl, TableTooltips, TableCellImpl
public class TableViewSWTImpl extends TableViewImpl
implements ParameterListener, TableViewSWT, TableStructureModificationListener, ObfusticateImage
{
private class ColumnMoveListener
implements Listener
{
final TableViewSWTImpl this$0;
public void handleEvent(Event event)
{
TableColumn column = (TableColumn)event.widget;
if (column == null)
return;
TableColumnCore tableColumnCore = (TableColumnCore)column.getData("TableColumnCore");
if (tableColumnCore == null)
return;
Table table = column.getParent();
TableColumn tableColumns[] = table.getColumns();
int iAddedPosition;
for (iAddedPosition = 0; iAddedPosition < tableColumns.length && column != tableColumns[iAddedPosition]; iAddedPosition++);
if (iAddedPosition >= tableColumns.length)
return;
int iColumnOrder[];
try
{
iColumnOrder = table.getColumnOrder();
}
catch (NoSuchMethodError e)
{
return;
}
int i = 0;
do
{
if (i >= iColumnOrder.length)
break;
if (iColumnOrder[i] == iAddedPosition)
{
int iNewPosition = i - (bSkipFirstColumn ? 1 : 0);
if (tableColumnCore.getPosition() != iNewPosition)
{
if (iNewPosition == -1)
{
iColumnOrder[0] = 0;
iColumnOrder[1] = iAddedPosition;
table.setColumnOrder(iColumnOrder);
iNewPosition = 0;
}
tableColumnCore.setPositionNoShift(iNewPosition);
tableColumnCore.saveSettings(null);
TableStructureEventDispatcher.getInstance(sTableID).columnOrderChanged(iColumnOrder);
}
break;
}
i++;
} while (true);
}
private ColumnMoveListener()
{
this$0 = TableViewSWTImpl.this;
super();
}
}
private class ColumnSelectionListener
implements Listener
{
final TableViewSWTImpl this$0;
public void handleEvent(final Event event)
{
if (TableViewSWTImpl.COLUMN_CLICK_DELAY)
{
final Timer timer = new Timer("Column Selection Wait");
timer.addEvent(System.currentTimeMillis() + 85L, new TimerEventPerformer() {
final Event val$event;
final Timer val$timer;
final ColumnSelectionListener this$1;
public void perform(TimerEvent timerEvent)
{
Utils.execSWTThread(new AERunnable() {
final 1 this$2;
public void runSupport()
{
if (lLastColumnResizeOn == -1L || System.currentTimeMillis() - lLastColumnResizeOn > 220L)
reallyHandleEvent(event);
}
{
this$2 = 1.this;
super();
}
});
timer.destroy();
}
{
this$1 = ColumnSelectionListener.this;
event = event1;
timer = timer1;
super();
}
});
} else
{
reallyHandleEvent(event);
}
}
private void reallyHandleEvent(Event event)
{
TableColumn column = (TableColumn)event.widget;
if (column == null)
return;
TableColumnCore tableColumnCore = (TableColumnCore)column.getData("TableColumnCore");
if (tableColumnCore != null)
{
sortColumnReverse(tableColumnCore);
columnVisibilitiesChanged = true;
refreshTable(true);
}
}
private ColumnSelectionListener()
{
this$0 = TableViewSWTImpl.this;
super();
}
}
private static interface SourceReplaceListener
{
public abstract void sourcesChanged();
public abstract void cleanup(Text text);
}
private static final LogIDs LOGID;
private static final boolean DISABLEVIRTUAL = SWT.getVersion() < 3138;
private static final boolean COLUMN_CLICK_DELAY;
private static final boolean DEBUG_SORTER = false;
private static final ConfigurationManager configMan = ConfigurationManager.getInstance();
private static final String CFG_SORTDIRECTION = "config.style.table.defaultSortOrder";
private static final long BREAKOFF_ADDTOMAP = 1000L;
private static final long BREAKOFF_ADDROWSTOSWT = 800L;
private static final boolean TRIGGER_PAINT_ON_SELECTIONS = false;
protected String sTableID;
protected String sPropertiesPrefix;
protected String sDefaultSortOn;
private boolean bSkipFirstColumn;
private Point ptIconSize;
private TableColumnCore basicItems[];
private TableColumnCore tableColumns[];
private Composite mainComposite;
private Composite tableComposite;
private Table table;
private TableEditor editor;
protected int iTableStyle;
private boolean bTableVirtual;
private Menu menu;
private Menu menuThisColumn;
private Map mapDataSourceToRow;
private AEMonitor dataSourceToRow_mon;
private List sortedRows;
private AEMonitor sortedRows_mon;
private AEMonitor sortColumn_mon;
protected TableColumnCore sortColumn;
private long lLastSortedOn;
private int iMouseX;
protected int loopFactor;
protected int graphicsUpdate;
protected int reOrderDelay;
private int checkColumnWidthsEvery;
private TableColumnCore columnsOrdered[];
private boolean columnsVisible[];
private ColumnMoveListener columnMoveListener;
private LightHashSet dataSourcesToAdd;
private LightHashSet dataSourcesToRemove;
private boolean bReallyAddingDataSources;
public boolean bEnableTabViews;
private CTabFolder tabFolder;
private ArrayList tabViews;
private int lastTopIndex;
private int lastBottomIndex;
protected IView coreTabViews[];
private long lCancelSelectionTriggeredOn;
private long lLastColumnResizeOn;
private List listenersMenuFill;
private TableViewSWTPanelCreator mainPanelCreator;
private List listenersKey;
private boolean columnPaddingAdjusted;
private boolean columnVisibilitiesChanged;
private Class classDataSourceType;
private AEMonitor listeners_mon;
private ArrayList refreshListeners;
private Font fontBold;
private Rectangle clientArea;
private boolean isVisible;
private boolean menuEnabled;
private boolean headerVisible;
private int selectedRowIndexes[];
private List listSelectedCoreDataSources;
private org.gudy.azureus2.ui.swt.Utils.addDataSourceCallback processDataSourceQueueCallback = new org.gudy.azureus2.ui.swt.Utils.addDataSourceCallback() {
final TableViewSWTImpl this$0;
public void process()
{
processDataSourceQueue();
}
public void debug(String str)
{
TableViewSWTImpl.this.debug(str);
}
{
this$0 = TableViewSWTImpl.this;
super();
}
};
private int lastHorizontalPos;
private SourceReplaceListener cellEditNotifier;
public TableViewSWTImpl(String _sTableID, String _sPropertiesPrefix, TableColumnCore _basicItems[], String _sDefaultSortOn, int _iTableStyle)
{
ptIconSize = null;
dataSourceToRow_mon = new AEMonitor("TableView:OTSI");
sortedRows_mon = new AEMonitor("TableView:sR");
sortColumn_mon = new AEMonitor("TableView:sC");
iMouseX = -1;
graphicsUpdate = configMan.getIntParameter("Graphics Update");
reOrderDelay = configMan.getIntParameter("ReOrder Delay");
checkColumnWidthsEvery = !Constants.isOSX || SWT.getVersion() >= 3054 ? 0 : 10000 / configMan.getIntParameter("GUI Refresh");
columnMoveListener = new ColumnMoveListener();
dataSourcesToAdd = new LightHashSet(4);
dataSourcesToRemove = new LightHashSet(4);
bReallyAddingDataSources = false;
bEnableTabViews = false;
tabViews = new ArrayList(1);
lastTopIndex = 0;
lastBottomIndex = -1;
coreTabViews = null;
lCancelSelectionTriggeredOn = -1L;
lLastColumnResizeOn = -1L;
listenersMenuFill = new ArrayList(1);
listenersKey = new ArrayList(1);
columnPaddingAdjusted = false;
columnVisibilitiesChanged = true;
listeners_mon = new AEMonitor("tablelisteners");
menuEnabled = true;
headerVisible = true;
sTableID = _sTableID;
basicItems = _basicItems;
sPropertiesPrefix = _sPropertiesPrefix;
sDefaultSortOn = _sDefaultSortOn;
iTableStyle = _iTableStyle | 0x200;
if (DISABLEVIRTUAL)
iTableStyle &= 0xefffffff;
bTableVirtual = (iTableStyle & 0x10000000) != 0;
mapDataSourceToRow = new LightHashMap();
sortedRows = new ArrayList();
}
public TableViewSWTImpl(String _sTableID, String _sPropertiesPrefix, TableColumnCore _basicItems[], String _sDefaultSortOn)
{
this(_sTableID, _sPropertiesPrefix, _basicItems, _sDefaultSortOn, 0x10010004);
}
private void initializeColumnDefs()
{
TableColumnManager tcManager = TableColumnManager.getInstance();
if (basicItems != null)
{
if (tcManager.getTableColumnCount(sTableID) != basicItems.length)
tcManager.addColumns(basicItems);
basicItems = null;
}
tableColumns = tcManager.getAllTableColumnCoreAsArray(classDataSourceType, sTableID);
tcManager.ensureIntegrety(sTableID);
}
public void setColumnList(TableColumnCore columns[], String defaultSortColumnID, boolean defaultSortOrder, boolean titleIsMinWidth)
{
TableColumnManager tcManager = TableColumnManager.getInstance();
if (tcManager.getTableColumnCount(sTableID) != columns.length)
tcManager.addColumns(basicItems);
tableColumns = tcManager.getAllTableColumnCoreAsArray(classDataSourceType, sTableID);
tcManager.ensureIntegrety(sTableID);
}
public void initialize(Composite composite)
{
composite.setRedraw(false);
mainComposite = createSashForm(composite);
menu = createMenu();
table = createTable(tableComposite);
clientArea = table.getClientArea();
editor = new TableEditor(table);
editor.minimumWidth = 80;
editor.grabHorizontal = true;
initializeTable(table);
triggerLifeCycleListener(0);
configMan.addParameterListener("Graphics Update", this);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -