/** * */ package com.aelitis.azureus.ui.swt.columns.torrent; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.*; import org.eclipse.swt.widgets.*; import org.gudy.azureus2.core3.disk.DiskManagerFileInfo; import org.gudy.azureus2.core3.download.DownloadManager; import org.gudy.azureus2.core3.download.DownloadManagerState; import org.gudy.azureus2.core3.internat.MessageText; import org.gudy.azureus2.core3.util.DisplayFormatters; import org.gudy.azureus2.core3.util.SystemTime; import org.gudy.azureus2.core3.util.TimeFormatter; import org.gudy.azureus2.core3.util.UrlUtils; import org.gudy.azureus2.ui.swt.Messages; import org.gudy.azureus2.ui.swt.TorrentUtil; import org.gudy.azureus2.ui.swt.Utils; import org.gudy.azureus2.ui.swt.mainwindow.Colors; import org.gudy.azureus2.ui.swt.mainwindow.SWTThread; import org.gudy.azureus2.ui.swt.shells.GCStringPrinter; import org.gudy.azureus2.ui.swt.views.FilesViewMenuUtil; import org.gudy.azureus2.ui.swt.views.table.TableCellSWT; import org.gudy.azureus2.ui.swt.views.table.TableCellSWTPaintListener; import org.gudy.azureus2.ui.swt.views.table.utils.CoreTableColumn; import com.aelitis.azureus.core.download.DownloadManagerEnhancer; import com.aelitis.azureus.core.download.EnhancedDownloadManager; import com.aelitis.azureus.ui.common.table.TableRowCore; import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT; import com.aelitis.azureus.ui.swt.imageloader.ImageLoader; import com.aelitis.azureus.ui.swt.skin.SWTSkinFactory; import com.aelitis.azureus.ui.swt.skin.SWTSkinProperties; import com.aelitis.azureus.ui.swt.utils.ColorCache; import com.aelitis.azureus.ui.swt.utils.FontUtils; import org.gudy.azureus2.plugins.download.DownloadTypeIncomplete; import org.gudy.azureus2.plugins.ui.tables.*; /** * @author TuxPaper * @created Jun 13, 2006 * */ public class ColumnProgressETA extends CoreTableColumn implements TableCellAddedListener, TableCellMouseListener, TableCellRefreshListener, TableCellSWTPaintListener { public static final Class DATASOURCE_TYPE = DownloadTypeIncomplete.class; public static final String COLUMN_ID = "ProgressETA"; private static final int borderWidth = 1; private static final int COLUMN_WIDTH = 200; public static final long SHOW_ETA_AFTER_MS = 30000; private final static Object CLICK_KEY = new Object(); private static Font fontText = null; Display display; private Color cBG; private Color cBorder; private Color cText; Color textColor; private Image imgArrowButton; private Image imgPriHi; private Image imgPriNormal; private Image imgPriStopped; private Image imgBGTorrent; private Image imgBGfile; private Color cTextDrop; /** * */ public ColumnProgressETA(String sTableID) { super(DATASOURCE_TYPE, COLUMN_ID, ALIGN_CENTER, COLUMN_WIDTH, sTableID); addDataSourceType(DiskManagerFileInfo.class); initializeAsGraphic(COLUMN_WIDTH); setAlignment(ALIGN_LEAD); setMinWidth(COLUMN_WIDTH); display = SWTThread.getInstance().getDisplay(); SWTSkinProperties skinProperties = SWTSkinFactory.getInstance().getSkinProperties(); cBG = skinProperties.getColor("color.progress.bg"); if (cBG == null) { cBG = Colors.blues[Colors.BLUES_DARKEST]; } cBorder = skinProperties.getColor("color.progress.border"); if (cBorder == null) { cBorder = Colors.grey; } cText = skinProperties.getColor("color.progress.text"); if (cText == null) { cText = Colors.black; } cTextDrop = skinProperties.getColor("color.progress.text.drop"); ImageLoader imageLoader = ImageLoader.getInstance(); imgArrowButton = imageLoader.getImage("image.fileprogress.arrowbtn"); imgPriHi = imageLoader.getImage("image.fileprogress.pri.hi"); imgPriNormal = imageLoader.getImage("image.fileprogress.pri.normal"); imgPriStopped = imageLoader.getImage("image.fileprogress.pri.stopped"); imgBGTorrent = imageLoader.getImage("image.progress.bg.torrent"); imgBGfile = imageLoader.getImage("image.progress.bg.file"); } public void fillTableColumnInfo(TableColumnInfo info) { info.addCategories(new String[] { CAT_CONTENT, CAT_ESSENTIAL, CAT_TIME, }); info.setProficiency(TableColumnInfo.PROFICIENCY_BEGINNER); } public void cellAdded(TableCell cell) { cell.setMarginHeight(3); cell.setMarginWidth(8); } public void cellMouseTrigger(TableCellMouseEvent event) { Object ds = event.cell.getDataSource(); if (ds instanceof DiskManagerFileInfo) { fileInfoMouseTrigger(event); return; } DownloadManager dm = (DownloadManager) ds; if (dm == null) { return; } String clickable = (String) dm.getUserData(CLICK_KEY); if (clickable == null) { return; } event.skipCoreFunctionality = true; if (event.eventType == TableCellMouseEvent.EVENT_MOUSEUP) { String url = UrlUtils.getURL(clickable); if (url != null) { Utils.launch(url); } } } private static final int MAX_PROGRESS_FILL_HEIGHT = 19; public void refresh(TableCell cell) { Object ds = cell.getDataSource(); int percentDone = getPercentDone(ds); long sortValue = 0; if (ds instanceof DownloadManager) { DownloadManager dm = (DownloadManager) cell.getDataSource(); long completedTime = dm.getDownloadState().getLongParameter( DownloadManagerState.PARAM_DOWNLOAD_COMPLETED_TIME); if (completedTime <= 0 || !dm.isDownloadComplete(false)) { sortValue = Long.MAX_VALUE - 10000 + percentDone; } else { sortValue = completedTime; } } else if (ds instanceof DiskManagerFileInfo) { DiskManagerFileInfo fileInfo = (DiskManagerFileInfo) ds; int st = fileInfo.getStorageType(); if ((st == DiskManagerFileInfo.ST_COMPACT || st == DiskManagerFileInfo.ST_REORDER_COMPACT) && fileInfo.isSkipped()) { sortValue = 1; } else if (fileInfo.isSkipped()) { sortValue = 2; } else if (fileInfo.getPriority() > 0) { int pri = fileInfo.getPriority(); sortValue = 4; if (pri > 1) { sortValue += pri; } } else { sortValue = 3; } sortValue = (fileInfo.getDownloadManager().getState() * 10000) + percentDone + sortValue; } long eta = getETA(cell); long speed = getSpeed(ds); //System.out.println("REFRESH " + sortValue + ";" + ds); boolean sortChanged = cell.setSortValue(sortValue); if (sortChanged) { UIFunctionsManagerSWT.getUIFunctionsSWT().refreshIconBar(); } long lastETA = 0; long lastSpeed = 0; TableRow row = cell.getTableRow(); if (row != null) { Object data = row.getData("lastETA"); if (data instanceof Number) { lastETA = ((Number) data).longValue(); } row.setData("lastETA", new Long(eta)); data = row.getData("lastSpeed"); if (data instanceof Number) { lastSpeed = ((Number) data).longValue(); } row.setData("lastSpeed", new Long(speed)); } if (!sortChanged && (lastETA != eta || lastSpeed != speed)) { cell.invalidate(); } } // @see org.gudy.azureus2.ui.swt.views.table.TableCellSWTPaintListener#cellPaint(org.eclipse.swt.graphics.GC, org.gudy.azureus2.ui.swt.views.table.TableCellSWT) public void cellPaint(GC gc, TableCellSWT cell) { Object ds = cell.getDataSource(); if (ds instanceof DiskManagerFileInfo) { fillInfoProgressETA(cell.getTableRowCore(), gc, (DiskManagerFileInfo) ds, cell.getBounds()); return; } if( !(ds instanceof DownloadManager )){ return; } DownloadManager dm = (DownloadManager) cell.getDataSource(); int percentDone = getPercentDone(ds); long eta = getETA(cell); //Compute bounds ... int newWidth = cell.getWidth(); if (newWidth <= 0) { return; } int newHeight = cell.getHeight(); Color fgFirst = gc.getForeground(); final Color fgOriginal = fgFirst; Rectangle cellBounds = cell.getBounds(); int xStart = cellBounds.x; int yStart = cellBounds.y; int xRelProgressFillStart = borderWidth; int yRelProgressFillStart = borderWidth; int xRelProgressFillEnd = newWidth - xRelProgressFillStart - borderWidth; int yRelProgressFillEnd = yRelProgressFillStart + 13; boolean showSecondLine = yRelProgressFillEnd + 10 < newHeight; if (xRelProgressFillEnd < 10 || xRelProgressFillEnd < 10) { return; } String sETALine = null; // Draw Progress bar if (percentDone < 1000) { ImageLoader imageLoader = ImageLoader.getInstance(); Rectangle boundsImgBG; if (!ImageLoader.isRealImage(imgBGTorrent)) { boundsImgBG = new Rectangle(0, 0, 0, 13); } else { boundsImgBG = imgBGTorrent.getBounds(); } if (fontText == null) { fontText = FontUtils.getFontWithHeight(gc.getFont(), gc, boundsImgBG.height - 3); } if (!showSecondLine) { yRelProgressFillStart = (cellBounds.height / 2) - ((boundsImgBG.height + 2) / 2); } yRelProgressFillEnd = yRelProgressFillStart + boundsImgBG.height; int progressWidth = newWidth - 2; gc.setForeground(cBorder); gc.drawRectangle(xStart + xRelProgressFillStart - 1, yStart + yRelProgressFillStart - 1, progressWidth + 1, boundsImgBG.height + 1); int pctWidth = (int) (percentDone * (progressWidth - 1) / 1000); gc.setBackground(cBG); gc.fillRectangle(xStart + xRelProgressFillStart, yStart + yRelProgressFillStart, pctWidth, boundsImgBG.height); gc.setBackground(Colors.white); gc.fillRectangle(xStart + xRelProgressFillStart + pctWidth, yStart + yRelProgressFillStart, progressWidth - pctWidth, boundsImgBG.height); if (boundsImgBG.width > 0) { gc.drawImage(imgBGTorrent, 0, 0, boundsImgBG.width, boundsImgBG.height, xStart + xRelProgressFillStart, yStart + yRelProgressFillStart, progressWidth - 2, boundsImgBG.height); } } if (sETALine == null ) { if (dm.isUnauthorisedOnTracker()) { sETALine = dm.getTrackerStatus(); // fgFirst = Colors.colorError; pftt, no colours allowed apparently } else { if (dm.isDownloadComplete(true)) { //sETALine = DisplayFormatters.formatByteCountToKiBEtc(dm.getSize()); } else if (eta > 0) { String sETA = TimeFormatter.format(eta); sETALine = MessageText.getString( "MyTorrents.column.ColumnProgressETA.2ndLine", new String[] { sETA }); } else { sETALine = DisplayFormatters.formatDownloadStatus(dm).toUpperCase(); } } int cursor_id; if (sETALine != null && sETALine.indexOf("http://") == -1) { dm.setUserData(CLICK_KEY, null); cursor_id = SWT.CURSOR_ARROW; } else { dm.setUserData(CLICK_KEY, sETALine); cursor_id = SWT.CURSOR_HAND; if (!cell.getTableRow().isSelected()) { fgFirst = Colors.blue; } } ((TableCellSWT) cell).setCursorID(cursor_id); } gc.setTextAntialias(SWT.ON); gc.setFont(fontText); if (showSecondLine && sETALine != null) { gc.setForeground(fgFirst); boolean over = GCStringPrinter.printString(gc, sETALine, new Rectangle( xStart + 2, yStart + yRelProgressFillEnd, xRelProgressFillEnd, newHeight - yRelProgressFillEnd), true, false, SWT.CENTER); cell.setToolTip(over ? sETALine : null); } int middleY = (yRelProgressFillEnd - 12) / 2; if (percentDone == 1000 || dm.isDownloadComplete(false)) { gc.setForeground(fgFirst); long value; long completedTime = dm.getDownloadState().getLongParameter( DownloadManagerState.PARAM_DOWNLOAD_COMPLETED_TIME); if (completedTime <= 0) { value = dm.getDownloadState().getLongParameter( DownloadManagerState.PARAM_DOWNLOAD_ADDED_TIME); } else { value = completedTime; } if ( getTableID() == TableManager.TABLE_MYTORRENTS_ALL_BIG ){ if ( percentDone == 1000 ){ gc.setForeground( fgOriginal ); }else{ gc.setForeground(Colors.black); } }else{ gc.setForeground(cText); } String s = MessageText.getString( "MyTorrents.column.ColumnProgressETA.compon", new String[]{ DisplayFormatters.formatDateShort(value)}); if ( percentDone < 1000 ){ s = DisplayFormatters.formatPercentFromThousands((int)percentDone) + " " + s; // " " + Character.toLowerCase(s.charAt(0))+s.substring(1); } GCStringPrinter.printString(gc, s, new Rectangle(xStart + 2, yStart, newWidth - 4, newHeight), true, false, SWT.WRAP); } else { long lSpeed = getSpeed(ds); String sSpeed = lSpeed <= 0 ? "" : " (" + DisplayFormatters.formatByteCountToKiBEtcPerSec(lSpeed, true) + ")"; String sPercent = DisplayFormatters.formatPercentFromThousands(percentDone); Rectangle area = new Rectangle(xStart + xRelProgressFillStart + 3, yStart + yRelProgressFillStart, xRelProgressFillEnd - xRelProgressFillStart - 6, yRelProgressFillEnd - yRelProgressFillStart); GCStringPrinter sp = new GCStringPrinter(gc, sPercent + sSpeed, area, true, false, SWT.LEFT); if (cTextDrop != null) { area.x++; area.y++; gc.setForeground(cTextDrop); sp.printString(); area.x--; area.y--; } gc.setForeground(cText); sp.printString(); Point pctExtent = sp.getCalculatedSize(); area.width -= (pctExtent.x + 3); area.x += (pctExtent.x + 3); if (!showSecondLine && sETALine != null) { boolean fit = GCStringPrinter.printString(gc, sETALine, area.intersection(cellBounds), true, false, SWT.RIGHT); cell.setToolTip(fit ? null:sETALine); } } gc.setFont(null); } private int getPercentDone(Object ds) { if (ds instanceof DownloadManager) { return ((DownloadManager) ds).getStats().getDownloadCompleted(true); } else if (ds instanceof DiskManagerFileInfo) { DiskManagerFileInfo fileInfo = (DiskManagerFileInfo) ds; long length = fileInfo.getLength(); if (length == 0) { return 1000; } return (int) (fileInfo.getDownloaded() * 1000 / length); } return 0; } private long getETA(TableCell cell) { Object ds = cell.getDataSource(); if (ds instanceof DiskManagerFileInfo) { return 0; } DownloadManager dm = (DownloadManager) cell.getDataSource(); long diff = SystemTime.getCurrentTime() - dm.getStats().getTimeStarted(); if (diff > SHOW_ETA_AFTER_MS) { return dm.getStats().getETA(); } return 0; } private int getState(TableCell cell) { DownloadManager dm = (DownloadManager) cell.getDataSource(); if (dm == null) { return DownloadManager.STATE_ERROR; } return dm.getState(); } private boolean isStopped(TableCell cell) { int state = getState(cell); return state == DownloadManager.STATE_QUEUED || state == DownloadManager.STATE_STOPPED || state == DownloadManager.STATE_STOPPING || state == DownloadManager.STATE_ERROR; } private long getSpeed(Object ds) { if (!(ds instanceof DownloadManager)) { return 0; } return ((DownloadManager) ds).getStats().getDataReceiveRate(); } public EnhancedDownloadManager getEDM(DownloadManager dm) { DownloadManagerEnhancer dmEnhancer = DownloadManagerEnhancer.getSingleton(); if (dmEnhancer == null) { return null; } return dmEnhancer.getEnhancedDownload(dm); } private void log(TableCell cell, String s) { System.out.println(((TableRowCore) cell.getTableRow()).getIndex() + ":" + System.currentTimeMillis() + ": " + s); } private Font progressFont; private void fillInfoProgressETA(TableRowCore row, GC gc, DiskManagerFileInfo fileInfo, Rectangle cellArea) { long percent = 0; long bytesDownloaded = fileInfo.getDownloaded(); long length = fileInfo.getLength(); if (bytesDownloaded < 0) { return; } else if (length == 0) { percent = 1000; } else if (fileInfo.getLength() != 0) { percent = (1000 * bytesDownloaded) / length; } gc.setAdvanced(true); gc.setTextAntialias(SWT.ON); final int BUTTON_WIDTH = imgArrowButton.getBounds().width; final int HILOW_WIDTH = imgPriHi.getBounds().width; final int BUTTON_HEIGHT = imgArrowButton.getBounds().height; final int HILOW_HEIGHT = imgPriHi.getBounds().height; final int PADDING_X = 12; final int PADDING_TEXT = 5; final int PROGRESS_HEIGHT = imgBGfile.getBounds().height; final int PROGRESS_TO_HILOW_GAP = 3; final int HILOW_TO_BUTTON_GAP = 3; cellArea.width -= 3; int ofsX = PADDING_X; int ofsY = (cellArea.height / 2) - (PROGRESS_HEIGHT / 2) - 1; int progressWidth = cellArea.width - (ofsX * 2) - PROGRESS_TO_HILOW_GAP - HILOW_WIDTH - HILOW_TO_BUTTON_GAP - BUTTON_WIDTH; if ( progressWidth > 0 ){ if (progressFont == null) { progressFont = FontUtils.getFontWithHeight(gc.getFont(), gc, PROGRESS_HEIGHT - 2); } gc.setFont(progressFont); gc.setForeground(ColorCache.getSchemedColor(display, fileInfo.isSkipped() ? "#95a6b2" : "#88acc1")); gc.drawRectangle(cellArea.x + ofsX, cellArea.y + ofsY - 1, progressWidth, PROGRESS_HEIGHT + 1); int pctWidth = (int) (percent * (progressWidth - 1) / 1000); gc.setBackground(ColorCache.getSchemedColor(display, fileInfo.isSkipped() ? "#a6bdce" : "#8ccfff")); gc.fillRectangle(cellArea.x + ofsX + 1, cellArea.y + ofsY, pctWidth, PROGRESS_HEIGHT); gc.setBackground(Colors.white); gc.fillRectangle(cellArea.x + ofsX + pctWidth + 1, cellArea.y + ofsY, progressWidth - pctWidth - 1, PROGRESS_HEIGHT); Rectangle boundsImgBG = imgBGfile.getBounds(); gc.drawImage(imgBGfile, boundsImgBG.x, boundsImgBG.y, boundsImgBG.width, boundsImgBG.height, cellArea.x + ofsX + 1, cellArea.y + ofsY, progressWidth - 1, PROGRESS_HEIGHT); } Color colorText = ColorCache.getSchemedColor(display, fileInfo.isSkipped() ? "#556875" : "#2678b1"); Rectangle printBounds = new Rectangle( cellArea.x + PADDING_X + PADDING_TEXT, cellArea.y, progressWidth - (PADDING_TEXT * 2), cellArea.height); ofsY = (cellArea.height / 2) - (BUTTON_HEIGHT / 2) - 1; Rectangle buttonBounds = new Rectangle(cellArea.x + cellArea.width - BUTTON_WIDTH - PADDING_X, cellArea.y + ofsY, BUTTON_WIDTH, BUTTON_HEIGHT); row.setData("buttonBounds", buttonBounds); ofsY = (cellArea.height / 2) - (HILOW_HEIGHT / 2) - 1; Rectangle hilowBounds = new Rectangle(buttonBounds.x - HILOW_TO_BUTTON_GAP - HILOW_WIDTH, cellArea.y + ofsY, HILOW_WIDTH, HILOW_HEIGHT); row.setData("hilowBounds", hilowBounds); gc.setForeground(colorText); String s = DisplayFormatters.formatPercentFromThousands((int) percent); GCStringPrinter.printString(gc, s, printBounds, true, false, SWT.LEFT); //gc.setForeground(ColorCache.getRandomColor()); String tmp = null; if (fileInfo.getDownloadManager().getState() == DownloadManager.STATE_STOPPED) { tmp = MessageText.getString("FileProgress.stopped"); } else { int st = fileInfo.getStorageType(); if ((st == DiskManagerFileInfo.ST_COMPACT || st == DiskManagerFileInfo.ST_REORDER_COMPACT) && fileInfo.isSkipped()) { tmp = MessageText.getString("FileProgress.deleted"); } else if (fileInfo.isSkipped()) { tmp = MessageText.getString("FileProgress.stopped"); } else if (fileInfo.getPriority() > 0) { int pri = fileInfo.getPriority(); if (pri > 1) { tmp = MessageText.getString("FileItem.high"); tmp += " (" + pri + ")"; } } else { //tmp = MessageText.getString("FileItem.normal"); } } if (tmp != null) { GCStringPrinter.printString(gc, tmp.toUpperCase(), printBounds, false, false, SWT.RIGHT); } gc.drawImage(imgArrowButton, buttonBounds.x, buttonBounds.y); Image imgPriority = fileInfo.isSkipped() ? imgPriStopped : fileInfo.getPriority() > 0 ? imgPriHi : imgPriNormal; gc.drawImage(imgPriority, hilowBounds.x, hilowBounds.y); //System.out.println(cellArea + s + ";" + Debug.getCompressedStackTrace()); // make relative to row, because mouse events are hilowBounds.y -= cellArea.y; hilowBounds.x -= cellArea.x; buttonBounds.x -= cellArea.x; buttonBounds.y -= cellArea.y; } public void fileInfoMouseTrigger(TableCellMouseEvent event) { if (event.eventType != TableRowMouseEvent.EVENT_MOUSEDOWN) { return; } final Object dataSource = ((TableRowCore) event.row).getDataSource(true); if (dataSource instanceof DiskManagerFileInfo) { final DiskManagerFileInfo fileInfo = (DiskManagerFileInfo) dataSource; Rectangle hilowBounds = (Rectangle) event.row.getData("hilowBounds"); if (event.button == 1 && hilowBounds != null && hilowBounds.contains(event.x, event.y)) { if (fileInfo.getPriority() > 0) { fileInfo.setPriority(0); } else { fileInfo.setPriority(1); } ((TableRowCore) event.row).redraw(); } Rectangle buttonBounds = (Rectangle) event.row.getData("buttonBounds"); if (buttonBounds != null && buttonBounds.contains(event.x, event.y)) { Menu menu = new Menu(Display.getDefault().getActiveShell(), SWT.POP_UP); MenuItem itemHigh = new MenuItem(menu, SWT.RADIO); Messages.setLanguageText(itemHigh, "priority.high"); itemHigh.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { FilesViewMenuUtil.changePriority(FilesViewMenuUtil.PRIORITY_HIGH, new Object[] { dataSource }); } }); itemHigh.setSelection(fileInfo.getPriority() != 0); MenuItem itemNormal = new MenuItem(menu, SWT.RADIO); Messages.setLanguageText(itemNormal, "priority.normal"); itemNormal.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { FilesViewMenuUtil.changePriority(FilesViewMenuUtil.PRIORITY_NORMAL, new Object[] { dataSource }); } }); itemNormal.setSelection(fileInfo.getPriority() == 0); new MenuItem(menu, SWT.SEPARATOR); boolean canStart = fileInfo.isSkipped() || fileInfo.getDownloadManager().getState() == DownloadManager.STATE_STOPPED; MenuItem itemStop = new MenuItem(menu, SWT.PUSH); Messages.setLanguageText(itemStop, "v3.MainWindow.button.stop"); itemStop.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { FilesViewMenuUtil.changePriority( FilesViewMenuUtil.PRIORITY_SKIPPED, new Object[] { dataSource }); } }); itemStop.setEnabled(!canStart); MenuItem itemStart = new MenuItem(menu, SWT.PUSH); Messages.setLanguageText(itemStart, "v3.MainWindow.button.start"); itemStart.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { if (fileInfo.getDownloadManager().getState() == DownloadManager.STATE_STOPPED) { TorrentUtil.queueDataSources(new Object[] { dataSource }, true); } FilesViewMenuUtil.changePriority(FilesViewMenuUtil.PRIORITY_NORMAL, new Object[] { dataSource }); } }); itemStart.setEnabled(canStart); new MenuItem(menu, SWT.SEPARATOR); MenuItem itemDelete = new MenuItem(menu, SWT.PUSH); Messages.setLanguageText(itemDelete, "v3.MainWindow.button.delete"); itemDelete.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { FilesViewMenuUtil.changePriority(FilesViewMenuUtil.PRIORITY_DELETE, new Object[] { dataSource }); } }); menu.setVisible(true); event.skipCoreFunctionality = true; } /* if (buttonBounds != null && buttonBounds.contains(event.x, event.y)) { int st = fileInfo.getStorageType(); if ((st == DiskManagerFileInfo.ST_COMPACT || st == DiskManagerFileInfo.ST_REORDER_COMPACT) && fileInfo.isSkipped()) { // deleted: Move to normal fileInfo.setPriority(0); fileInfo.setSkipped(false); } else if (fileInfo.isSkipped()) { // skipped: move to normal fileInfo.setPriority(0); fileInfo.setSkipped(false); } else if (fileInfo.getPriority() > 0) { // high: move to skipped fileInfo.setSkipped(true); } else { // normal: move to high fileInfo.setPriority(1); } //((TableRowCore) event.row).invalidate(); ((TableRowCore) event.row).redraw(); } */ } } }