From c20df506533b8e8513ca1b3df14e4d129b409ffe Mon Sep 17 00:00:00 2001 From: angryziber Date: Wed, 20 Sep 2006 20:49:31 +0000 Subject: [PATCH] Delete IP implemented, ResultTable is created before the menu, so it can be used in initialization of menu actions git-svn-id: https://ipscan.svn.sourceforge.net/svnroot/ipscan/ipscan@25 375186e5-ef17-0410-b0b6-91563547dcda --- .../azib/ipscan/core/ScanningResultList.java | 10 +++++++++ src/net/azib/ipscan/gui/MainMenu.java | 2 +- src/net/azib/ipscan/gui/MainWindow.java | 7 ++++--- src/net/azib/ipscan/gui/ResultTable.java | 13 ++++++++++-- .../ipscan/gui/actions/CommandsActions.java | 21 ++++++++++++++++--- 5 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/net/azib/ipscan/core/ScanningResultList.java b/src/net/azib/ipscan/core/ScanningResultList.java index e3d7e355..41c9550e 100755 --- a/src/net/azib/ipscan/core/ScanningResultList.java +++ b/src/net/azib/ipscan/core/ScanningResultList.java @@ -92,4 +92,14 @@ public class ScanningResultList { return (String) scanningResults.get(tableIndex); } + /** + * @param indices + */ + public void remove(int[] indices) { + // this removal is probably O(n^2)... + for (int i = 0; i < indices.length; i++) { + scanningResults.remove(i); + } + } + } diff --git a/src/net/azib/ipscan/gui/MainMenu.java b/src/net/azib/ipscan/gui/MainMenu.java index 586307c7..6ea40a7a 100755 --- a/src/net/azib/ipscan/gui/MainMenu.java +++ b/src/net/azib/ipscan/gui/MainMenu.java @@ -102,7 +102,7 @@ public class MainMenu { new Object[] {"menu.commands.details", null, new CommandsActions.Details(mainWindow.getResultTable())}, null, new Object[] {"menu.commands.rescan", new Integer(SWT.CONTROL | 'R'), null}, - new Object[] {"menu.commands.delete", new Integer(SWT.DEL), null}, + new Object[] {"menu.commands.delete", new Integer(SWT.DEL), new CommandsActions.Delete(mainWindow.getResultTable())}, null, new Object[] {"menu.commands.copy", new Integer(SWT.CONTROL | 'C'), null}, new Object[] {"menu.commands.copyDetails", null, null}, diff --git a/src/net/azib/ipscan/gui/MainWindow.java b/src/net/azib/ipscan/gui/MainWindow.java index 10e5c2eb..eac8adc6 100755 --- a/src/net/azib/ipscan/gui/MainWindow.java +++ b/src/net/azib/ipscan/gui/MainWindow.java @@ -83,11 +83,12 @@ public class MainWindow { // load and set icon Image image = new Image(shell.getDisplay(), Labels.getInstance().getImageAsStream("icon")); shell.setImage(image); + resultTable = new ResultTable(shell); createMenu(); createControls(); createStatusBar(); - createTable(); + initTable(); shell.setBounds(Config.getDimensionsConfig().getWindowBounds()); shell.setMaximized(Config.getDimensionsConfig().isWindowMaximized); @@ -146,8 +147,8 @@ public class MainWindow { /** * This method initializes resultTable */ - private void createTable() { - resultTable = new ResultTable(shell, mainMenu.getColumnsPopupMenu()); + private void initTable() { + resultTable.setColumnsMenu(mainMenu.getColumnsPopupMenu()); FormData formData = new FormData(); formData.top = new FormAttachment(feederArea); formData.left = new FormAttachment(0); diff --git a/src/net/azib/ipscan/gui/ResultTable.java b/src/net/azib/ipscan/gui/ResultTable.java index 393590cd..1bd7de8a 100755 --- a/src/net/azib/ipscan/gui/ResultTable.java +++ b/src/net/azib/ipscan/gui/ResultTable.java @@ -41,12 +41,15 @@ public class ResultTable extends Table { private String feederInfo; private Menu columnsMenu; - public ResultTable(Composite parent, Menu columnsMenu) { + public ResultTable(Composite parent) { super(parent, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION | SWT.VIRTUAL); - this.columnsMenu = columnsMenu; initialize(); } + void setColumnsMenu(Menu columnsMenu) { + this.columnsMenu = columnsMenu; + } + private void initialize() { setHeaderVisible(true); setLinesVisible(true); @@ -147,6 +150,12 @@ public class ResultTable extends Table { return scanningResults.getResultsAsString(selectedIndex); } + public void remove(int[] indices) { + // we need to remove the elements from our real storage as well + scanningResults.remove(indices); + super.remove(indices); + } + /** * Initializes a new scan. * (clears all elments, etc) diff --git a/src/net/azib/ipscan/gui/actions/CommandsActions.java b/src/net/azib/ipscan/gui/actions/CommandsActions.java index 2b243cf0..ea7e9859 100755 --- a/src/net/azib/ipscan/gui/actions/CommandsActions.java +++ b/src/net/azib/ipscan/gui/actions/CommandsActions.java @@ -30,10 +30,10 @@ import org.eclipse.swt.widgets.MenuItem; public class CommandsActions { public static class Details implements Listener { - ResultTable resultTable; + private ResultTable resultTable; - public Details(ResultTable table) { - resultTable = table; + public Details(ResultTable resultTable) { + this.resultTable = resultTable; } public void handleEvent(Event event) { @@ -42,6 +42,21 @@ public class CommandsActions { } } + public static class Delete implements Listener { + private ResultTable resultTable; + + public Delete(ResultTable resultTable) { + this.resultTable = resultTable; + } + + public void handleEvent(Event event) { + checkSelection(resultTable); + int firstSelection = resultTable.getSelectionIndex(); + resultTable.remove(resultTable.getSelectionIndices()); + resultTable.setSelection(firstSelection); + } + } + /** * Checks that there is at least one item selected in the results list. * @param mainWindow