/******************************************************************************* * Copyright (c) 2004, 2010 BREDEX GmbH. * 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: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.client.ui.rcp.wizards.refactor.param; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.jubula.client.core.model.IParamDescriptionPO; import org.eclipse.jubula.client.ui.constants.ContextHelpIds; import org.eclipse.jubula.client.ui.rcp.Plugin; import org.eclipse.jubula.client.ui.rcp.i18n.Messages; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; 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.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; /** * @author BREDEX GmbH * @created May 03, 2013 */ public class ChangeCtdsColumnUsagePage extends WizardPage implements ISelectionChangedListener, SelectionListener, KeyListener { /** * Map, which contains for each selectable parameter name * a corresponding set of execution Test Cases. */ private final ExistingAndNewParameterData m_paramData; /** The old parameter name combo box. */ private ComboViewer m_oldParamNameCombo; /** The new parameter name combo box. */ private Combo m_newParamNameCombo; /** * @param paramData The data of the parameter names including a map of * the Test Cases. */ public ChangeCtdsColumnUsagePage( ExistingAndNewParameterData paramData) { super(Messages.ChangeCtdsColumnUsageSelectPageTitle, Messages.ChangeCtdsColumnUsageSelectPageTitle, null); setDescription(Messages.ChangeCtdsColumnUsageSelectPageDescription); m_paramData = paramData; setPageComplete(false); } /** * {@inheritDoc} */ public void createControl(Composite parent) { // shrink height of dialog content to 100 pixel (originally about 200 pixel) if (parent.getLayoutData() instanceof GridData) { GridData gridData = (GridData) parent.getLayoutData(); gridData.heightHint = 100; } Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(2, true)); composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); setControl(composite); Group groupLeft = createGroup(composite, Messages.ChangeParameterUsageOldNameLabel); m_oldParamNameCombo = new ComboViewer(groupLeft, SWT.READ_ONLY); m_oldParamNameCombo.getCombo().setLayoutData( new GridData(GridData.FILL_HORIZONTAL)); m_oldParamNameCombo.setContentProvider( new ParameterDescriptionContentProvider()); m_oldParamNameCombo.setLabelProvider( new ParameterDescriptionLabelProvider()); m_oldParamNameCombo.setInput(m_paramData); m_oldParamNameCombo.addSelectionChangedListener(this); Group groupRight = createGroup(composite, Messages.ChangeParameterUsageNewNameLabel); m_newParamNameCombo = new Combo(groupRight, SWT.READ_ONLY); m_newParamNameCombo.setLayoutData( new GridData(GridData.FILL_HORIZONTAL)); m_newParamNameCombo.addSelectionListener(this); m_newParamNameCombo.addKeyListener(this); } /** * @param parent The parent composite. * @param text The title text. * @return A vertically centered and horizontal filled group * with the given title text and horizontal. */ private static Group createGroup(Composite parent, String text) { Group group = new Group(parent, SWT.NONE); group.setLayout(new GridLayout(1, false)); group.setLayoutData(new GridData( SWT.FILL, SWT.CENTER, true, true)); group.setText(text); return group; } /** * Called, when the selection of the old parameter name in the tree view changed. * {@inheritDoc} */ public void selectionChanged(SelectionChangedEvent event) { IParamDescriptionPO paramDesc = getSelectedParamDescription(); if (paramDesc != null) { m_newParamNameCombo.setItems( m_paramData.setOldParamDescription(paramDesc)); if (m_newParamNameCombo.getItemCount() == 1) { m_newParamNameCombo.select(0); } } m_newParamNameCombo.setEnabled(paramDesc != null); checkPageComplete(); } /** * @return The selected parameter description of the old parameter names tree, * or null if no parameter description is selected. */ private IParamDescriptionPO getSelectedParamDescription() { StructuredSelection treeSelection = (StructuredSelection) m_oldParamNameCombo.getSelection(); Object selection = treeSelection.getFirstElement(); if (selection instanceof IParamDescriptionPO) { return (IParamDescriptionPO) selection; } return null; } /** * Called, when the combo box selection has been changed. Calls {@link #checkPageComplete()}. * {@inheritDoc} */ public void widgetSelected(SelectionEvent e) { if (e.getSource() == m_newParamNameCombo) { checkPageComplete(); } } /** * Do nothing. * {@inheritDoc} */ public void widgetDefaultSelected(SelectionEvent e) { // do nothing } /** * Do nothing. * {@inheritDoc} */ public void keyPressed(KeyEvent e) { // do nothing } /** * Called, when something is typed into the combo box. Calls only {@link #checkPageComplete()}. * {@inheritDoc} */ public void keyReleased(KeyEvent e) { checkPageComplete(); } /** * Checks, if this page has been completed or not and set the complete state: * The new parameter name must not be empty. */ private void checkPageComplete() { m_paramData.setNewParamName(m_newParamNameCombo.getText()); setPageComplete(m_paramData.isComplete() && m_newParamNameCombo.isEnabled()); } /** * Show help contend attached to wizard after selecting the ? icon, * or pressing F1 on Windows / Shift+F1 on Linux / Help on MAC. * {@inheritDoc} */ public void performHelp() { Plugin.getHelpSystem().displayHelp(ContextHelpIds .SEARCH_REFACTOR_CHANGE_CTDS_COLUMN_USAGE_WIZARD_PAGE); } }