/* * Copyright (C) Yutaka Matsuno 2010-2012 All rights reserved. */ package net.dependableos.dcase.diagram.editor.preferences; import java.util.List; import net.dependableos.dcase.diagram.editor.message.Messages; import net.dependableos.dcase.diagram.editor.ui.BookmarkEditDialog; import net.dependableos.dcase.diagram.editor.ui.BookmarkItem; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; /** * A preference page class for the bookmarks. */ public class BookmarkPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { /** * the width of the button. */ private static final int BUTTON_WIDTH = 80; /** * the number of columns. */ private static final int COLUMN_NUMBER = 2; /** * the height of dialog. */ private static final int HEIGHT_HINT = 200; /** * the vertical span. * the table occupy the 7 rows to represent the operation buttons. */ private static final int VERTICAL_SPAN = 7; /** * a list control for bookmark items. */ private org.eclipse.swt.widgets.List bookmarkList; /** * a list of bookmark items. */ private final List<BookmarkItem> bookmarkItems; /** * the selected Bookmark item. */ private BookmarkItem selectedBookmarkItem = null; /** * Constructor. */ public BookmarkPreferencePage() { super(); this.bookmarkItems = BookmarkItem.getListFromPreferrence(); } /** * Initializes this preference page for the given workbench. * * @param workbench the workbench * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) */ public void init(IWorkbench workbench) { // suppresses creation of the standard Default and Apply buttons noDefaultAndApplyButton(); } /** * {@inheritDoc} */ @Override protected Control createContents(Composite parent) { // configure GridLayout. GridLayout layout = new GridLayout(); layout.numColumns = COLUMN_NUMBER; layout.marginHeight = 0; layout.marginWidth = 0; parent.setLayout(layout); parent.setLayoutData(new GridData(GridData.FILL_BOTH)); parent.setFont(parent.getFont()); //creates the list. initializeBookmarkList(parent); //creates the operation buttons. createOperationButton(parent); return parent; } /** * Configures the select list. * * @param panel parent. */ private void initializeBookmarkList(Composite panel) { if (bookmarkList == null) { bookmarkList = new org.eclipse.swt.widgets.List( panel, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.FULL_SELECTION); GridData gridData = new GridData(GridData.FILL_BOTH); gridData.grabExcessVerticalSpace = true; gridData.verticalSpan = VERTICAL_SPAN; gridData.heightHint = HEIGHT_HINT; bookmarkList.setLayoutData(gridData); } bookmarkList.removeAll(); String[] items = new String[bookmarkItems.size()]; for (int i = 0; i < bookmarkItems.size(); i++) { items[i] = bookmarkItems.get(i).getName(); } bookmarkList.setItems(items); if (selectedBookmarkItem != null) { for (int i = 0; i < bookmarkItems.size(); i++) { if (selectedBookmarkItem.equals(bookmarkItems.get(i))) { bookmarkList.select(i); break; } } } bookmarkList.redraw(); } /** * Saves the bookmarks into the preferences. * @return <code>false</code> to abort the container's OK * processing and <code>true</code> to allow the OK to happen */ @Override public boolean performOk() { BookmarkItem.saveToPreferrence(bookmarkItems); return super.performOk(); } /** * Creates buttons. * * @param panel parent composite. */ private void createOperationButton(final Composite panel) { // creates the creation button. Button addButton = new Button(panel, SWT.PUSH | SWT.CENTER); addButton.setText(Messages.BookmarkPreferencePage_0); GridData createGridData = new GridData( GridData.HORIZONTAL_ALIGN_BEGINNING); createGridData.widthHint = BUTTON_WIDTH; addButton.setLayoutData(createGridData); addButton.addSelectionListener(new SelectionAdapter() { // the event method executed when creation button is pushed. public void widgetSelected(SelectionEvent e) { BookmarkEditDialog dialog = new BookmarkEditDialog(panel.getShell(), bookmarkItems, BookmarkEditDialog.CREATE); if (dialog.open() == Dialog.OK) { initializeBookmarkList(panel); } } }); // creates the edit button. Button editButton = new Button(panel, SWT.PUSH | SWT.CENTER); editButton.setText(Messages.BookmarkPreferencePage_1); GridData editGridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); editGridData.widthHint = BUTTON_WIDTH; editButton.setLayoutData(editGridData); editButton.addSelectionListener(new SelectionAdapter() { // the event method executed when the edit button is pushed. public void widgetSelected(SelectionEvent e) { BookmarkItem bookmark = getSelectedBookmarkItem(); if (bookmark != null) { BookmarkEditDialog dialog = new BookmarkEditDialog(panel.getShell(), bookmarkItems, BookmarkEditDialog.EDIT); dialog.setSelected(bookmark); if (dialog.open() == Dialog.OK) { selectedBookmarkItem = bookmark; initializeBookmarkList(panel); } } } }); // creates the deletion button. Button delButton = new Button(panel, SWT.PUSH | SWT.CENTER); delButton.setText(Messages.BookmarkPreferencePage_2); GridData delGridData = new GridData( GridData.HORIZONTAL_ALIGN_BEGINNING); delGridData.widthHint = BUTTON_WIDTH; delButton.setLayoutData(delGridData); delButton.addSelectionListener(new SelectionAdapter() { // the event method executed when the deletion button is pushed. public void widgetSelected(SelectionEvent e) { BookmarkItem item = getSelectedBookmarkItem(); bookmarkItems.remove(item); initializeBookmarkList(panel); } }); Label blankLabel = new Label(panel, SWT.NONE); blankLabel.setText(""); //$NON-NLS-1$ } /** * Returns the selected bookmark item. * @return the selected bookmark item. */ private BookmarkItem getSelectedBookmarkItem() { int index = bookmarkList.getSelectionIndex(); if (index >= 0) { return bookmarkItems.get(index); } else { return null; } } }