Package org.eclipse.egit.ui.internal.stash

Source Code of org.eclipse.egit.ui.internal.stash.StashCreateUI$StashCreateDialog

/******************************************************************************
*  Copyright (c) 2012, 2013 GitHub Inc 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:
*    Kevin Sawicki (GitHub Inc.) - initial API and implementation
*    Stefan Lay (SAP AG)
*****************************************************************************/
package org.eclipse.egit.ui.internal.stash;

import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.egit.core.op.StashCreateOperation;
import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.JobFamilies;
import org.eclipse.egit.ui.UIUtils;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.swt.SWT;
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.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;

/**
* The UI wrapper for {@link StashCreateOperation} */
public class StashCreateUI {

  private Repository repo;

  /**
   * @param repo
   */
  public StashCreateUI(Repository repo) {
    this.repo = repo;
  }

  /**
   * @param shell
   *            the shell to use for showing the message input dialog
   * @return true if a stash create operation was triggered
   */
  public boolean createStash(Shell shell) {
    if (!UIUtils.saveAllEditors(repo))
      return false;
    StashCreateDialog commitMessageDialog = new StashCreateDialog(shell);
    if (commitMessageDialog.open() != Window.OK)
      return false;
    String message = commitMessageDialog.getValue();
    if (message.length() == 0)
      message = null;

    boolean includeUntracked = commitMessageDialog.getIncludeUntracked();

    final StashCreateOperation op = new StashCreateOperation(repo, message,
        includeUntracked);
    Job job = new WorkspaceJob(UIText.StashCreateCommand_jobTitle) {

      @Override
      public IStatus runInWorkspace(IProgressMonitor monitor) {
        monitor.beginTask("", 1); //$NON-NLS-1$
        try {
          op.execute(monitor);
          RevCommit commit = op.getCommit();
          if (commit == null)
            showNoChangesToStash();

        } catch (CoreException e) {
          Activator
              .logError(UIText.StashCreateCommand_stashFailed, e);
        }
        return Status.OK_STATUS;
      }

      @Override
      public boolean belongsTo(Object family) {
        if (JobFamilies.STASH.equals(family))
          return true;
        return super.belongsTo(family);
      }
    };
    job.setUser(true);
    job.setRule(op.getSchedulingRule());
    job.schedule();
    return true;

  }

  private static void showNoChangesToStash() {
    Display.getDefault().asyncExec(new Runnable() {

      public void run() {
        Shell shell = PlatformUI.getWorkbench()
            .getActiveWorkbenchWindow().getShell();
        MessageDialog.openInformation(shell,
            UIText.StashCreateCommand_titleNoChanges,
            UIText.StashCreateCommand_messageNoChanges);
      }
    });
  }

  private static class StashCreateDialog extends Dialog {

    /**
     * Commit message widget.
     */
    private Text text;

    /**
     * Include untracked checkbox.
     */
    private Button untrackedButton;

    /**
     * The input value; the empty string by default.
     */
    private String commitMessage = ""; //$NON-NLS-1$

    private boolean includeUntracked;

    public StashCreateDialog(Shell shell) {
      super(shell);
    }

    @Override
    protected Control createDialogArea(Composite parent) {
      Composite composite = (Composite) super.createDialogArea(parent);

      getShell().setText(
          UIText.StashCreateCommand_titleEnterCommitMessage);

      Label label = new Label(composite, SWT.WRAP);
      label.setText(UIText.StashCreateCommand_messageEnterCommitMessage);
      GridData data = new GridData(GridData.GRAB_HORIZONTAL
          | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL
          | GridData.VERTICAL_ALIGN_CENTER);
      data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
      label.setLayoutData(data);
      label.setFont(parent.getFont());

      text = new Text(composite, SWT.SINGLE | SWT.BORDER);
      text.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
          | GridData.HORIZONTAL_ALIGN_FILL));

      untrackedButton = new Button(composite, SWT.CHECK);
      untrackedButton
          .setText(UIText.StashCreateCommand_includeUntrackedLabel);

      text.setFocus();
      return composite;
    }

    protected void buttonPressed(int buttonId) {
      if (buttonId == IDialogConstants.OK_ID) {
        commitMessage = text.getText();
        includeUntracked = untrackedButton.getSelection();
      } else {
        commitMessage = null;
        includeUntracked = false;
      }
      super.buttonPressed(buttonId);
    }

    public String getValue() {
      return commitMessage;
    }

    public boolean getIncludeUntracked() {
      return includeUntracked;
    }


  }

}
TOP

Related Classes of org.eclipse.egit.ui.internal.stash.StashCreateUI$StashCreateDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.