Package at.bestsolution.efxclipse.tooling.jdt.ui.internal.editors

Source Code of at.bestsolution.efxclipse.tooling.jdt.ui.internal.editors.AddFontDialog

/*******************************************************************************
* Copyright (c) 2012 BestSolution.at 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:
*     Martin Bluehweis<martin.bluehweis@bestsolution.at> - initial API and implementation
*******************************************************************************/
package at.bestsolution.efxclipse.tooling.jdt.ui.internal.editors;

import static at.bestsolution.efxclipse.tooling.jdt.ui.internal.editors.model.anttasks.parameters.ParametersPackage.Literals.KEY_VALUE_PAIR__KEY;
import static at.bestsolution.efxclipse.tooling.jdt.ui.internal.editors.model.anttasks.parameters.ParametersPackage.Literals.KEY_VALUE_PAIR__VALUE;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.databinding.EMFUpdateValueStrategy;
import org.eclipse.emf.databinding.IEMFValueProperty;
import org.eclipse.emf.databinding.edit.EMFEditProperties;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.jface.dialogs.MessageDialog;
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.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.FilteredResourcesSelectionDialog;
import org.eclipse.ui.dialogs.ResourceSelectionDialog;

import at.bestsolution.efxclipse.tooling.jdt.ui.internal.JavaFXUIPlugin;
import at.bestsolution.efxclipse.tooling.jdt.ui.internal.editors.model.anttasks.AntTask;
import at.bestsolution.efxclipse.tooling.jdt.ui.internal.editors.model.anttasks.parameters.KeyValuePair;
import at.bestsolution.efxclipse.tooling.jdt.ui.internal.editors.model.anttasks.parameters.ParametersFactory;

/**
* @author martin
*
*/
public class AddFontDialog extends AddDialog<KeyValuePair> {
  private KeyValuePair o;
  private Text tFontName;
  private Text tFile;
  private final EditingDomain editingDomain;
  private final AntTask task;
  private final IContainer resourceContainer;

  /**
   * @param parentShell
   *            parent shell
   * @param editingDomain
   *            the editing domain
   * @param task
   *            ant task working on
   */
  public AddFontDialog( final Shell parentShell, final EditingDomain editingDomain, final AntTask task, final IContainer resourceContainer ) {
    super( parentShell );
    this.editingDomain = editingDomain;
    this.task = task;
    this.resourceContainer = resourceContainer;
  }

  @Override
  protected Control createDialogContent( Composite parent ) {
    o = ParametersFactory.eINSTANCE.createKeyValuePair();
    Composite area = new Composite( parent, SWT.NONE );
    area.setLayout( new GridLayout( 1, false ) );
    area.setLayoutData( new GridData( GridData.FILL_BOTH ) );

    getShell().setText( "Add font " );
    setTitle( "Add font" );
    setMessage( "Enter informations about the font to add" );

    Composite container = new Composite( area, SWT.NONE );
    container.setLayout( new GridLayout( 3, false ) );
    container.setLayoutData( new GridData( GridData.FILL_BOTH ) );

    IWidgetValueProperty tProp = WidgetProperties.text( SWT.Modify );

    {
      Label l = new Label( container, SWT.NONE );
      l.setText( "Font name*:" );
      tFontName = new Text( container, SWT.BORDER );
      GridData tFontGD = new GridData( GridData.FILL_HORIZONTAL );
      tFontGD.horizontalSpan = 2;
      tFontName.setLayoutData( tFontGD );
      IEMFValueProperty prop = EMFEditProperties.value( editingDomain, KEY_VALUE_PAIR__KEY );
      dbContext.bindValue( tProp.observeDelayed( DELAY, tFontName ), prop.observe( o ), new EMFUpdateValueStrategy(
          EMFUpdateValueStrategy.POLICY_ON_REQUEST ), new EMFUpdateValueStrategy() );
    }

    {
      Label l = new Label( container, SWT.NONE );
      l.setText( "File*:" );

      tFile = new Text( container, SWT.BORDER );
      tFile.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
      tFile.setEditable( false );
      IEMFValueProperty prop = EMFEditProperties.value( editingDomain, KEY_VALUE_PAIR__VALUE );
      dbContext.bindValue( tProp.observeDelayed( DELAY, tFile ), prop.observe( o ),
          new EMFUpdateValueStrategy( EMFUpdateValueStrategy.POLICY_ON_REQUEST ), new EMFUpdateValueStrategy() );
      Button b = new Button( container, SWT.NONE );
      b.setText( "Browse ..." );
      b.addSelectionListener( new SelectionAdapter() {
        @Override
        public void widgetSelected( final SelectionEvent e ) {
          FilteredResourcesSelectionDialog d = new FilteredResourcesSelectionDialog( getShell(), false, resourceContainer, IResource.FILE ) {
            @Override
            protected IStatus validateItem( final Object item ) {
              IFile f = (IFile) item;
              if ( f.getParent() instanceof IProject ) {
                return new Status( IStatus.ERROR, JavaFXUIPlugin.PLUGIN_ID, "The selected resource has to be part of the source folder" );
              }
              if ( !f.getName().endsWith( ".ttf" ) ) {
                return new Status( IStatus.ERROR, JavaFXUIPlugin.PLUGIN_ID, "The selected resource does not seem to be a font" );
              }
              return super.validateItem( item );
            }
          };
         
          if ( d.open() == ResourceSelectionDialog.OK ) {
            Object[] rv = d.getResult();
            if ( rv.length == 1 ) {
              IFile f = (IFile) rv[0];
              IJavaElement j = JavaCore.create( f.getParent() );
              if ( j instanceof IPackageFragment ) {
                IPackageFragment p = (IPackageFragment) j;
                tFile.setText( p.getElementName().replace( '.', '/' ) + "/" + f.getName() );
              }
              else if ( j instanceof IPackageFragmentRoot ) {
                IPackageFragmentRoot p = (IPackageFragmentRoot) j;
                tFile.setText( f.getName() );
              }
              else {
                MessageDialog.openInformation( getShell(), "Not valid", "The selected resource has to be part of the source folder" );
              }
            }
          }
        }
      } );

    }
    return area;
  }

  @Override
  protected Command generateOkCommand() {
    return new AddCommand( editingDomain, task.getFonts(), o );
  }

  @Override
  protected IStatus validate() {
    IStatus status;
    if ( tFontName.getText() == null || tFontName.getText().trim().equals( "" ) ) {
      status = new Status( Status.ERROR, JavaFXUIPlugin.PLUGIN_ID, "Please enter a folder" );
    }
    else if ( tFile.getText() == null || tFile.getText().trim().equals( "" ) ) {
      status = new Status( Status.ERROR, JavaFXUIPlugin.PLUGIN_ID, "Please enter a file" );
    }
    else {
      status = new Status( Status.OK, JavaFXUIPlugin.PLUGIN_ID, "OK" );
    }
    return status;
  }

  @Override
  protected KeyValuePair getObject() {
    return o;
  }
}
TOP

Related Classes of at.bestsolution.efxclipse.tooling.jdt.ui.internal.editors.AddFontDialog

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.