| /******************************************************************************* |
| * Copyright (c) 2000, 2007 IBM Corporation and others. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * Brock Janiczak (brockj@tpg.com.au) - Bug 77944 [Change Sets] Comment dialog: Use comment as title |
| *******************************************************************************/ |
| package org.eclipse.team.internal.ccvs.ui.subscriber; |
| |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.dialogs.IDialogConstants; |
| import org.eclipse.jface.dialogs.TitleAreaDialog; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.swt.layout.*; |
| import org.eclipse.swt.widgets.*; |
| import org.eclipse.team.internal.ccvs.ui.*; |
| import org.eclipse.team.internal.core.subscribers.ActiveChangeSet; |
| import org.eclipse.ui.PlatformUI; |
| |
| /** |
| * Dialog for creating and editing commit set |
| * title and comment |
| */ |
| public class CommitSetDialog extends TitleAreaDialog { |
| |
| public final static short NEW = 0; |
| public final static short EDIT = 1; |
| |
| private static final int DEFAULT_WIDTH_IN_CHARS= 80; |
| |
| private final ActiveChangeSet set; |
| private CommitCommentArea commitCommentArea; |
| private Text nameText; |
| private Button customTitleButton; |
| private final String title; |
| private final String description; |
| private String comment; |
| private short mode; |
| protected String customTitle; |
| |
| public CommitSetDialog(Shell parentShell, ActiveChangeSet set, IResource[] files, short mode) { |
| super(parentShell); |
| this.set = set; |
| this.mode = mode; |
| this.title = mode == NEW ? CVSUIMessages.WorkspaceChangeSetCapability_2 |
| : CVSUIMessages.WorkspaceChangeSetCapability_7; |
| this.description = mode == NEW ? CVSUIMessages.WorkspaceChangeSetCapability_3 |
| : CVSUIMessages.WorkspaceChangeSetCapability_8; |
| |
| if (files == null) { |
| files = set.getResources(); |
| } |
| |
| int shellStyle = getShellStyle(); |
| setShellStyle(shellStyle | SWT.RESIZE | SWT.MAX); |
| commitCommentArea = new CommitCommentArea(); |
| // Get a project from which the commit template can be obtained |
| if (files.length > 0) |
| commitCommentArea.setProject(files[0].getProject()); |
| } |
| |
| @Override |
| protected Control createContents(Composite parent) { |
| Control contents = super.createContents(parent); |
| setTitle(title); |
| setMessage(description); |
| return contents; |
| } |
| |
| @Override |
| protected Control createDialogArea(Composite parent) { |
| Composite parentComposite = (Composite) super.createDialogArea(parent); |
| |
| // create a composite with standard margins and spacing |
| Composite composite = new Composite(parentComposite, SWT.NONE); |
| GridLayout layout = new GridLayout(); |
| layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); |
| layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); |
| layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); |
| layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); |
| composite.setLayout(layout); |
| composite.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| composite.setFont(parentComposite.getFont()); |
| |
| if (hasCommitTemplate()) { |
| if (set.hasComment()) { |
| // Only set the comment if the set has a custom comment. |
| // Otherwise, the template should be used |
| comment = set.getComment(); |
| commitCommentArea.setProposedComment(comment); |
| } |
| } else { |
| comment = set.getComment(); |
| commitCommentArea.setProposedComment(comment); |
| } |
| |
| commitCommentArea.createArea(composite); |
| commitCommentArea.addPropertyChangeListener(event -> { |
| if (event.getProperty() == CommitCommentArea.OK_REQUESTED) { |
| okPressed(); |
| } else if (event.getProperty() == CommitCommentArea.COMMENT_MODIFIED) { |
| comment = (String) event.getNewValue(); |
| if (!customTitleButton.getSelection()) { |
| nameText.setText(commitCommentArea.getFirstLineOfComment()); |
| } |
| updateEnablements(); |
| } |
| }); |
| |
| createOptionsArea(composite); |
| createNameArea(composite); |
| |
| initializeValues(); |
| updateEnablements(); |
| |
| Dialog.applyDialogFont(parent); |
| return composite; |
| } |
| |
| @Override |
| protected Point getInitialSize() { |
| final Point size= super.getInitialSize(); |
| size.x= convertWidthInCharsToPixels(DEFAULT_WIDTH_IN_CHARS); |
| size.y += convertHeightInCharsToPixels(8); |
| return size; |
| } |
| |
| private void createNameArea(Composite parent) { |
| Composite composite = new Composite(parent, SWT.NONE); |
| GridLayout layout = new GridLayout(); |
| layout.marginHeight = 0; |
| layout.marginWidth = 0; |
| layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); |
| layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); |
| layout.numColumns = 2; |
| composite.setLayout(layout); |
| composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| composite.setFont(parent.getFont()); |
| |
| Label label = new Label(composite, SWT.NONE); |
| label.setText(CVSUIMessages.CommitSetDialog_0); |
| label.setLayoutData(new GridData(GridData.BEGINNING)); |
| |
| nameText = new Text(composite, SWT.BORDER); |
| nameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| nameText.addModifyListener(e -> { |
| customTitle = nameText.getText(); |
| updateEnablements(); |
| }); |
| } |
| |
| private void initializeValues() { |
| String initialText = set.getTitle(); |
| if (initialText == null) initialText = ""; //$NON-NLS-1$ |
| nameText.setText(initialText); |
| nameText.setSelection(0, initialText.length()); |
| |
| if (customTitleButton != null) { |
| customTitleButton.setSelection(!commitCommentArea.getFirstLineOfComment().equals(initialText)); |
| } |
| } |
| |
| private void createOptionsArea(Composite composite) { |
| Composite radioArea = new Composite(composite, SWT.NONE); |
| RowLayout radioAreaLayout = new RowLayout(SWT.VERTICAL); |
| radioAreaLayout.marginLeft = 0; |
| radioAreaLayout.marginRight = 0; |
| radioAreaLayout.marginTop = 0; |
| radioAreaLayout.marginBottom = 0; |
| radioArea.setLayout(radioAreaLayout); |
| |
| customTitleButton = createCheckButton(radioArea, CVSUIMessages.CommitSetDialog_2); |
| SelectionAdapter listener = new SelectionAdapter() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| if (customTitleButton.getSelection()) { |
| nameText.setText(customTitle); |
| } else { |
| nameText.setText(commitCommentArea.getFirstLineOfComment()); |
| } |
| updateEnablements(); |
| } |
| }; |
| customTitleButton.addSelectionListener(listener); |
| |
| } |
| |
| private Button createCheckButton(Composite parent, String label) { |
| Button button = new Button(parent, SWT.CHECK); |
| button.setText(label); |
| return button; |
| } |
| |
| private void updateEnablements() { |
| setErrorMessage(null); |
| String name; |
| |
| nameText.setEnabled(customTitleButton.getSelection()); |
| |
| if (customTitleButton.getSelection()) { |
| name = customTitle; |
| } else { |
| name = commitCommentArea.getFirstLineOfComment(); |
| } |
| |
| if (name.length() == 0) { |
| setPageComplete(false); |
| return; |
| } |
| |
| // check if the new change set already exists |
| if (mode == NEW |
| && CVSUIPlugin.getPlugin().getChangeSetManager().getSet(name) != null) { |
| setPageComplete(false); |
| setErrorMessage(CVSUIMessages.WorkspaceChangeSetCapability_9); |
| return; |
| } |
| |
| // check if the edited change set already exists, do not display the |
| // error message when new the name is the same as the old one |
| if (mode == EDIT && !name.equals(set.getName()) |
| && CVSUIPlugin.getPlugin().getChangeSetManager().getSet(name) != null) { |
| setPageComplete(false); |
| setErrorMessage(CVSUIMessages.WorkspaceChangeSetCapability_9); |
| return; |
| } |
| |
| |
| setPageComplete(true); |
| } |
| |
| final protected void setPageComplete(boolean complete) { |
| Button okButton = getButton(IDialogConstants.OK_ID); |
| if(okButton != null ) { |
| okButton.setEnabled(complete); |
| } |
| } |
| |
| private boolean hasCommitTemplate() { |
| return commitCommentArea.hasCommitTemplate(); |
| } |
| |
| @Override |
| protected void okPressed() { |
| String title = null; |
| if (customTitleButton.getSelection()) { |
| title= customTitle; |
| } else { |
| title= commitCommentArea.getFirstLineOfComment(); |
| } |
| |
| set.setTitle(title); |
| // Call getComment so the comment gets saved |
| set.setComment(commitCommentArea.getComment(true)); |
| |
| super.okPressed(); |
| } |
| |
| |
| protected Label createWrappingLabel(Composite parent, String text) { |
| Label label = new Label(parent, SWT.LEFT | SWT.WRAP); |
| label.setText(text); |
| GridData data = new GridData(); |
| data.horizontalSpan = 1; |
| data.horizontalAlignment = GridData.FILL; |
| data.horizontalIndent = 0; |
| data.grabExcessHorizontalSpace = true; |
| data.widthHint = 200; |
| label.setLayoutData(data); |
| return label; |
| } |
| |
| @Override |
| protected Control createButtonBar(Composite parent) { |
| Control control = super.createButtonBar(parent); |
| updateEnablements(); |
| return control; |
| } |
| |
| @Override |
| protected void configureShell(Shell shell) { |
| super.configureShell(shell); |
| shell.setText(title); |
| // set F1 help |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, |
| IHelpContextIds.COMMIT_SET_DIALOG); |
| |
| } |
| } |