--- /dev/null
+package com.quantum.ui.dialog;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+
+import com.quantum.Messages;
+import com.quantum.model.Bookmark;
+import com.quantum.model.BookmarkCollection;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.swt.SWT;
+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.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @author BC
+ */
+public class BookmarkSelectionDialog extends Dialog {
+
+ private List list;
+ private String selection = null;
+ private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+
+ /**
+ * @param parentShell
+ */
+ public BookmarkSelectionDialog(Shell parentShell) {
+ super(parentShell);
+ int style = getShellStyle() | SWT.TITLE;
+ setShellStyle(style);
+ }
+
+ protected void configureShell(Shell shell) {
+ super.configureShell(shell);
+ shell.setText(Messages.getString("BookmarkSelectionDialog.title"));
+ }
+
+ /**
+ * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ */
+ protected Control createDialogArea(Composite parent) {
+
+ Composite composite = new Composite(parent, 0);
+ GridLayout layout = new GridLayout();
+ composite.setLayout(layout);
+ layout.numColumns = 1;
+ layout.verticalSpacing = 1;
+
+ Label label = new Label(composite, SWT.NULL);
+ label.setText(Messages.getString("BookmarkSelectionDialog.text"));
+
+ this.list = new List(composite, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL);
+ Bookmark[] bookmarks = BookmarkCollection.getInstance().getBookmarks();
+
+ for (int i = 0, length = (bookmarks == null) ? 0 : bookmarks.length; i < length; i++) {
+ this.list.add(bookmarks[i].getName());
+ if (i == 0) {
+ this.list.select(i);
+ setSelection(bookmarks[i].getName());
+ }
+ }
+
+ final List list = this.list;
+ list.addListener(SWT.Selection, new Listener() {
+ public void handleEvent (Event event) {
+ String[] selections = list.getSelection();
+ if (selections != null && selections.length > 0) {
+ BookmarkSelectionDialog.this.setSelection(selections[0]);
+ }
+ }
+ });
+
+ GridData full = new GridData();
+ full.horizontalAlignment = GridData.FILL;
+ full.verticalAlignment = GridData.FILL;
+ full.heightHint = convertHeightInCharsToPixels(3);
+ this.list.setLayoutData(full);
+
+ return composite;
+ }
+
+ /**
+ * @param listener
+ */
+ public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
+ this.propertyChangeSupport.addPropertyChangeListener(listener);
+ }
+
+ /**
+ * @param listener
+ */
+ public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
+ this.propertyChangeSupport.removePropertyChangeListener(listener);
+ }
+
+ private void setSelection(String selection) {
+ String original = this.selection;
+ if (this.selection == null || !this.selection.equals(selection)) {
+ this.selection = selection;
+ this.propertyChangeSupport.firePropertyChange("selection", original, this.selection);
+ }
+ }
+}