The Table Viewer is created and displayed in a Dialog Class. The columns and button creation is in a TableViewer class.
I have added a column in my JFace table that is populated with buttons. I have tried to insert a image of the table with no luck. So I will try my best to explain the table.
____________________________________________________________
|Date________|_____Item______|____Filename_____|_____button|
|01/09/13....|.....metal.....|...metal.pdf.....|....[adobe]|
|01/09/13....|.....metal01...|...metal01.pdf...|....[adobe]|
|01/09/13....|.....metal02...|...metal02.pdf...|....[adobe]|
____________________________________________________________
I want the corresponding file open when the user clicks the button in the same row.
Column / Button Code
case 6:
Map<Object, Button> buttons = new HashMap<Object, Button>();
TableItem item = (TableItem) cell.getItem();
Button button;
if(buttons.containsKey(cell.getElement())) {
button = buttons.get(cell.getElement());
}
else
{
button = new Button((Composite) cell.getViewerRow().getControl(),SWT.PUSH);
//button.setText("Adobe");
button.setImage(loadImage("/images/AdobeIcon.png"));
buttons.put(cell.getElement(), button);
}
TableEditor editor = new TableEditor(item.getParent());
editor.grabHorizontal = true;
editor.grabVertical = true;
editor.setEditor(button , item, cell.getColumnIndex());
button.addListener(SWT.Selection, new SelectionListener(item, button, cell.getElement()));
editor.layout();
}
Selection Listener Class Code
class SelectionListener implements Listener {
TableItem item;
Button editButton;
Object element;
//////////////////////////////////////////////////////////////////////////
// Constructor //
//////////////////////////////////////////////////////////////////////////
public SelectionListener(TableItem item, Button editButton, Object element) {
this.item = item;
this.editButton = editButton;
this.element = element;
}
//////////////////////////////////////////////////////////////////////////
// handleEvent //
//////////////////////////////////////////////////////////////////////////
@Override
public void handleEvent(Event event) {
AplotSaveDataModel.SaveData selected = (( AplotSaveDataModel.SaveData)element);
int index = AplotSaveDataModel.getInstance().getIndexOf(selected);
final File viewerFile = new File(AplotSaveDataModel.getInstance().getSelectedPDFFileName(index));
try {
Desktop.getDesktop().open(viewerFile);
}
catch (IOException e) {
e.printStackTrace();
}
}
AplotSaveDataModel.SaveData selected = (( AplotSaveDataModel.SaveData)element);
This value does change when a differnt row is clicked
int index = AplotSaveDataModel.getInstance().getIndexOf(selected);
Allways Returns 0
This is the getIndexOf method in AplotSaveDataModel
public int getIndexOf(SaveData selected) {
return data.indexOf(selected); //data is a arraylist
}
I think that the above method may be the issue.
What is happening - It does not matter which button is clicked. The file in row 0 is always opened, because the index it always return 0
I am wondering if data.indexOf(selected) returns 0 is element is found and -1 if not.
I would be glad to change the code above, if there is a easier way to preform what is needed. I just want when the button is clicked the file opens that is in the same row has the button.
Thanks in advance for any help you can give me.