diff options
Diffstat (limited to 'org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/bugzilla/saveQuery/GetQueryDialog.java')
-rw-r--r-- | org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/bugzilla/saveQuery/GetQueryDialog.java | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/bugzilla/saveQuery/GetQueryDialog.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/bugzilla/saveQuery/GetQueryDialog.java new file mode 100644 index 000000000..5531a6e02 --- /dev/null +++ b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/bugzilla/saveQuery/GetQueryDialog.java @@ -0,0 +1,203 @@ +/******************************************************************************* + * Copyright (c) 2003 - 2005 University Of British Columbia and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ +package org.eclipse.mylar.bugzilla.saveQuery; + +import java.util.ArrayList; +import java.util.Iterator; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.mylar.bugzilla.search.BugzillaSearchPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MouseAdapter; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +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.swt.widgets.List; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.Shell; + + +/** + * Dialog to display, manage and run stored queries. + */ +public class GetQueryDialog extends Dialog +{ + + /** The Ok button. */ + private Button okButton; + + /** The title of the dialog. */ + private String title; + + private SavedQueryFile input; + + public GetQueryDialog(Shell parentShell, String dialogTitle, SavedQueryFile in) { + super(parentShell); + this.title = dialogTitle; + input = in; + setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); + } + + @Override + protected void configureShell(Shell shell) { + super.configureShell(shell); + shell.setText(title); + } + + @Override + protected void createButtonsForButtonBar(Composite parent) { + // create OK and Details buttons + okButton = createButton(parent, IDialogConstants.OK_ID, "Run", true); + okButton.setEnabled(false); + createButton(parent, IDialogConstants.CANCEL_ID, "Close", false); + } + + /** + * Creates the list widget to display stored queries. + */ + @Override + final protected Control createDialogArea(Composite parent) { + Composite composite = (Composite)super.createDialogArea(parent); + + createMainDialogArea(composite); + + return composite; + } + + protected void createMainDialogArea(Composite parent) { + Label label = new Label(parent, SWT.LEFT); + label.setText("Select a saved query:"); + rememberPattern = new List(parent, SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER); + ArrayList<String> names = input.getNames(); + int pos = 0; + + for (Iterator<String> it = names.iterator(); it.hasNext(); ) { + rememberPattern.add(it.next(), pos); + pos++; + } + + GridData gd = new GridData(GridData.FILL_HORIZONTAL); + gd.horizontalSpan = 5; + gd.heightHint = 60; + + rememberPattern.setLayoutData(gd); + rememberPattern.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent event) { + selIndex = rememberPattern.getSelectionIndex(); + okButton.setEnabled(selIndex >= 0); + } + }); + rememberPattern.addMouseListener(new MouseAdapter() { + @Override + public void mouseDoubleClick(MouseEvent e) { + okPressed(); + } + }); + + // Configure the context menu + MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$ + menuMgr.add(new RunQueryAction("&Run query")); + menuMgr.add(new Separator()); + menuMgr.add(new RemoveAction("Remo&ve")); + menuMgr.add(new RemoveAllAction("Remove &all")); + Menu menu = menuMgr.createContextMenu(rememberPattern); + rememberPattern.setMenu(menu); + + } + + final protected void setPageComplete(boolean complete) { + if (okButton != null) { + okButton.setEnabled(complete); + } + } + + private String queryNameText; + + private List rememberPattern; + + public String getText() { + return queryNameText; + } + + /** + * Deletes a selected named query. + */ + private void remove() { + int index = rememberPattern.getSelectionIndex(); + if(index != -1) + BugzillaSearchPage.getInput().remove(new int []{index}); + rememberPattern.remove(index); + rememberPattern.setSelection(-1); + selIndex = -1; + okButton.setEnabled(false); + } + + private void removeAll() { + BugzillaSearchPage.getInput().removeAll(); + rememberPattern.removeAll(); + rememberPattern.setSelection(-1); + selIndex = -1; + okButton.setEnabled(false); + } + + /** Index of the selected query, or -1 if none. */ + int selIndex = -1; + + /** + * Returns index of the selected query or -1 if none are selected. + */ + public int getSelected() { + return selIndex; + } + + private class RunQueryAction extends Action { + RunQueryAction(String text) { + super(text); + } + + @Override + public void run() { + GetQueryDialog.this.okPressed(); + } + } + + private class RemoveAction extends Action { + RemoveAction(String text) { + super(text); + } + + @Override + public void run() { + GetQueryDialog.this.remove(); + } + } + + private class RemoveAllAction extends Action { + RemoveAllAction(String text) { + super(text); + } + + @Override + public void run() { + GetQueryDialog.this.removeAll(); + } + } +} |