package hu.ppke.itk.itkStock.client.rss; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; public class RSSConfigManagerGUI extends Composite { private String dialogCloseResult; public RSSConfigManagerGUI(Composite parent, int style) { super(parent, style); buildWindow(); } private void buildWindow(){ // Create the layout GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false); gridData.horizontalSpan= 2; this.setLayoutData(gridData); this.setLayout(new GridLayout(2, false)); // Create table with saved feeds (shows the saved feeds) final Table table = new Table(this, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION); table.setLinesVisible(true); table.setHeaderVisible(true); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.heightHint = 200; table.setLayoutData(data); TableColumn column = new TableColumn(table, SWT.FILL); column.setText("Feed"); column.pack(); List<String> feedList = RSSConfigManager.defaultManager().getFeeds(); for (String string : feedList) { TableItem item = new TableItem(table, SWT.NONE); item.setText (0,string); } table.getColumn(0).pack(); //Buttons staff //Create the buttons layout Composite buttonsPlace = new Composite(this, SWT.NONE); gridData = new GridData(SWT.FILL, SWT.FILL, false, false); buttonsPlace.setLayoutData(gridData); buttonsPlace.setLayout(new GridLayout(1, false)); //Create add button (Add a new feed to the table and also to the config file Button addButton = new Button(buttonsPlace, SWT.NONE); addButton.setText("Add"); addButton.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { showAddDialog(); if (dialogCloseResult != null) { TableItem item = new TableItem(table, SWT.NONE); item.setText(0, dialogCloseResult); RSSConfigManager.defaultManager().addFeed(dialogCloseResult); } } @Override public void widgetDefaultSelected(SelectionEvent arg0) { // TODO Auto-generated method stub } }); //Create remove button (Remove all selected feeds (rows) from the table //and also delete from the config file Button removeButton = new Button(buttonsPlace, SWT.NONE); removeButton.setText("Remove"); removeButton.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { TableItem selectedItems[] = table.getSelection(); ArrayList<String> list = new ArrayList<String>(); for (TableItem item : selectedItems) { list.add(item.getText()); table.remove(table.indexOf(item)); } if (list.size() > 0) { RSSConfigManager.defaultManager().removeFeeds(list); } } @Override public void widgetDefaultSelected(SelectionEvent arg0) {} }); //Separator new Label(buttonsPlace, SWT.SEPARATOR | SWT.HORIZONTAL); // Create select all button (Select all row of the table) Button selectAllButton = new Button(buttonsPlace, SWT.NONE); selectAllButton.setText("Select all"); selectAllButton.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { table.selectAll(); } @Override public void widgetDefaultSelected(SelectionEvent arg0) {} }); //Create deselect all button (deselect all selected row from the table) Button deselectAll = new Button(buttonsPlace, SWT.NONE); deselectAll.setText("Deselect all"); deselectAll.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { table.deselectAll(); } @Override public void widgetDefaultSelected(SelectionEvent arg0) {} }); } // Show a dialog when the user wants to add new feed. //If she/he wants to add it, it will add to the table and also save //to the config file. public String showAddDialog() { Shell parent = (Shell) getParent(); final Shell shell = new Shell(parent, SWT.TITLE | SWT.BORDER | SWT.APPLICATION_MODAL); shell.setText("Add new feed"); shell.setLayout(new GridLayout(2, true)); Label label = new Label(shell, SWT.NULL); label.setText("Please enter a valid rss feed URL:"); final Text text = new Text(shell, SWT.SINGLE | SWT.BORDER); final Button buttonOK = new Button(shell, SWT.PUSH); buttonOK.setText("Ok"); buttonOK.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); Button buttonCancel = new Button(shell, SWT.PUSH); buttonCancel.setText("Cancel"); text.addListener(SWT.Modify, new Listener() { @Override public void handleEvent(Event arg0) { try { dialogCloseResult = text.getText(); buttonOK.setEnabled(true); } catch (Exception e) { buttonOK.setEnabled(false); } } }); buttonOK.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { shell.dispose(); } }); buttonCancel.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { dialogCloseResult = null; shell.dispose(); } }); shell.addListener(SWT.Traverse, new Listener() { public void handleEvent(Event event) { if(event.detail == SWT.TRAVERSE_ESCAPE) event.doit = false; } }); text.setText(""); shell.pack(); shell.open(); Display display = parent.getDisplay(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } return dialogCloseResult; } }