blob: a73538b7909d64dce25eafd57fa333ccd3a154d3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.directory.studio.valueeditors.image;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.directory.api.util.Strings;
import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
import org.apache.directory.studio.connection.ui.ConnectionUIPlugin;
import org.apache.directory.studio.valueeditors.IValueEditor;
import org.apache.directory.studio.valueeditors.ValueEditorsActivator;
import org.apache.directory.studio.valueeditors.ValueEditorsConstants;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.ImageLoader;
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.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
/**
* The ImageDialog is used from the image value editor to view the current image
* and to select a new image.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class ImageDialog extends Dialog
{
/** The dialog setting key for the currently selected tab item */
private static final String SELECTED_TAB_DIALOGSETTINGS_KEY = ImageDialog.class.getName() + ".tab"; //$NON-NLS-1$
/** The maximum width for the image */
private static final int MAX_WIDTH = 400;
/** The maximum height for the image */
private static final int MAX_HEIGHT = 400;
/** The current image tab item */
private static final int CURRENT_TAB = 0;
/** The new image tab item */
private static final int NEW_TAB = 1;
/** The current image bytes */
private byte[] currentImageRawData;
/** The required image type */
private int requiredImageType;
/** The new image bytes */
private byte[] newImageRawData;
/** The new image bytes in the required image format */
private byte[] newImageRawDataInRequiredFormat;
// UI widgets
private TabFolder tabFolder;
private TabItem currentTab;
private Composite currentImageContainer;
private Image currentImage;
private Label currentImageLabel;
private Text currentImageTypeText;
private Text currentImageWidthText;
private Text currentImageHeightText;
private Text currentImageSizeText;
private Button currentImageSaveButton;
private TabItem newTab;
private Composite newImageContainer;
private Image newImage;
private Label newImageLabel;
private Text newImageTypeText;
private Text newImageWidthText;
private Text newImageHeightText;
private Text newImageSizeText;
private Text newImageFilenameText;
private Button newImageBrowseButton;
private Button okButton;
/**
* Creates a new instance of ImageDialog.
*
* @param parentShell the parent shell
* @param currentImageRawData the current image raw data
* @param requiredImageType the required image type
*/
public ImageDialog( Shell parentShell, byte[] currentImageRawData, int requiredImageType )
{
super( parentShell );
super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
this.currentImageRawData = currentImageRawData;
this.requiredImageType = requiredImageType;
newImageRawDataInRequiredFormat = null;
}
/**
* @see org.eclipse.jface.dialogs.Dialog#close()
*/
public boolean close()
{
// Disposing the current image
if ( ( currentImage != null ) && !currentImage.isDisposed() )
{
currentImage.dispose();
}
// Disposing the new image
if ( ( newImage != null ) && !newImage.isDisposed() )
{
newImage.dispose();
}
// Saving the selected tab item to dialog settings
ValueEditorsActivator.getDefault().getDialogSettings().put( SELECTED_TAB_DIALOGSETTINGS_KEY,
tabFolder.getSelectionIndex() );
return super.close();
}
/**
* @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
*/
protected void buttonPressed( int buttonId )
{
if ( buttonId == IDialogConstants.OK_ID )
{
if ( newImageRawData != null )
{
// Preparing the new image bytes for the required format
try
{
ImageData imageData = new ImageData( new ByteArrayInputStream( newImageRawData ) );
if ( imageData.type != requiredImageType )
{
// Converting the new image in the required format
ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[]
{ imageData };
ByteArrayOutputStream baos = new ByteArrayOutputStream();
imageLoader.save( baos, requiredImageType );
newImageRawDataInRequiredFormat = baos.toByteArray();
}
else
{
// Directly using the new image bytes
newImageRawDataInRequiredFormat = newImageRawData;
}
}
catch ( SWTException swte )
{
newImageRawDataInRequiredFormat = null;
}
}
}
else
{
newImageRawDataInRequiredFormat = null;
}
super.buttonPressed( buttonId );
}
/**
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
*/
protected void configureShell( Shell shell )
{
super.configureShell( shell );
shell.setText( Messages.getString( "ImageDialog.ImageEditor" ) ); //$NON-NLS-1$
shell.setImage( ValueEditorsActivator.getDefault().getImage( ValueEditorsConstants.IMG_IMAGEEDITOR ) );
}
/**
* @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
*/
protected void createButtonsForButtonBar( Composite parent )
{
okButton = createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false );
createButton( parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false );
// load dialog settings
try
{
int tabIndex = ValueEditorsActivator.getDefault().getDialogSettings().getInt(
SELECTED_TAB_DIALOGSETTINGS_KEY );
tabFolder.setSelection( tabIndex );
}
catch ( Exception e )
{
// Nothing to do
}
// Updating the tab folder on load
updateTabFolder();
}
/**
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
protected Control createDialogArea( Composite parent )
{
Composite composite = ( Composite ) super.createDialogArea( parent );
tabFolder = new TabFolder( composite, SWT.TOP );
tabFolder.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
tabFolder.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
updateTabFolder();
}
} );
// current image
if ( currentImageRawData != null && currentImageRawData.length > 0 )
{
currentTab = new TabItem( tabFolder, SWT.NONE );
currentTab.setText( Messages.getString( "ImageDialog.CurrentImage" ) ); //$NON-NLS-1$
currentImageContainer = createTabItemComposite();
currentImageLabel = createImageLabel( currentImageContainer );
Composite currentImageInfoContainer = createImageInfoContainer( currentImageContainer );
currentImageTypeText = createImageInfo( currentImageInfoContainer, Messages
.getString( "ImageDialog.ImageType" ) ); //$NON-NLS-1$
currentImageSizeText = createImageInfo( currentImageInfoContainer, Messages
.getString( "ImageDialog.ImageSize" ) ); //$NON-NLS-1$
currentImageWidthText = createImageInfo( currentImageInfoContainer, Messages
.getString( "ImageDialog.ImageWidth" ) ); //$NON-NLS-1$
currentImageHeightText = createImageInfo( currentImageInfoContainer, Messages
.getString( "ImageDialog.ImageHeight" ) ); //$NON-NLS-1$
Composite currentImageSaveContainer = createImageInfoContainer( currentImageContainer );
Label dummyLabel = BaseWidgetUtils.createLabel( currentImageSaveContainer, "", 1 ); //$NON-NLS-1$
GridData gd = new GridData( GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL );
dummyLabel.setLayoutData( gd );
currentImageSaveButton = createButton( currentImageSaveContainer, Messages.getString( "ImageDialog.Save" ) ); //$NON-NLS-1$
currentImageSaveButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent event )
{
FileDialog fileDialog = new FileDialog( ImageDialog.this.getShell(), SWT.SAVE );
fileDialog.setText( Messages.getString( "ImageDialog.SaveImage" ) ); //$NON-NLS-1$
fileDialog.setFilterExtensions( new String[]
{ "*.jpg" } ); //$NON-NLS-1$
String returnedFileName = fileDialog.open();
if ( returnedFileName != null )
{
try
{
File file = new File( returnedFileName );
FileOutputStream out = new FileOutputStream( file );
out.write( currentImageRawData );
out.flush();
out.close();
}
catch ( FileNotFoundException e )
{
ConnectionUIPlugin.getDefault().getExceptionHandler().handleException(
new Status( IStatus.ERROR, ValueEditorsConstants.PLUGIN_ID, IStatus.ERROR, Messages
.getString( "ImageDialog.CantWriteFile" ), e ) ); //$NON-NLS-1$
}
catch ( IOException e )
{
ConnectionUIPlugin.getDefault().getExceptionHandler().handleException(
new Status( IStatus.ERROR, ValueEditorsConstants.PLUGIN_ID, IStatus.ERROR, Messages
.getString( "ImageDialog.CantWriteFile" ), e ) ); //$NON-NLS-1$
}
}
}
} );
currentTab.setControl( currentImageContainer );
}
// new image
newTab = new TabItem( tabFolder, SWT.NONE );
newTab.setText( Messages.getString( "ImageDialog.NewImage" ) ); //$NON-NLS-1$
newImageContainer = createTabItemComposite();
newImageLabel = createImageLabel( newImageContainer );
Composite newImageInfoContainer = createImageInfoContainer( newImageContainer );
newImageTypeText = createImageInfo( newImageInfoContainer, Messages.getString( "ImageDialog.ImageType" ) ); //$NON-NLS-1$
newImageSizeText = createImageInfo( newImageInfoContainer, Messages.getString( "ImageDialog.ImageSize" ) ); //$NON-NLS-1$
newImageWidthText = createImageInfo( newImageInfoContainer, Messages.getString( "ImageDialog.ImageWidth" ) ); //$NON-NLS-1$
newImageHeightText = createImageInfo( newImageInfoContainer, Messages.getString( "ImageDialog.ImageHeight" ) ); //$NON-NLS-1$
Composite newImageSelectContainer = createImageInfoContainer( newImageContainer );
newImageFilenameText = new Text( newImageSelectContainer, SWT.SINGLE | SWT.BORDER );
GridData gd = new GridData( SWT.FILL, SWT.CENTER, true, false );
newImageFilenameText.setLayoutData( gd );
newImageFilenameText.addModifyListener( new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
updateNewImageGroup();
}
} );
newImageBrowseButton = createButton( newImageSelectContainer, Messages.getString( "ImageDialog.Browse" ) ); //$NON-NLS-1$
newImageBrowseButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent event )
{
FileDialog fileDialog = new FileDialog( ImageDialog.this.getShell(), SWT.OPEN );
fileDialog.setText( Messages.getString( "ImageDialog.SelectImage" ) ); //$NON-NLS-1$
fileDialog.setFileName( new File( newImageFilenameText.getText() ).getName() );
fileDialog.setFilterPath( new File( newImageFilenameText.getText() ).getParent() );
String returnedFileName = fileDialog.open();
if ( returnedFileName != null )
{
newImageFilenameText.setText( returnedFileName );
}
}
} );
newTab.setControl( newImageContainer );
applyDialogFont( composite );
return composite;
}
/**
* Creates a tab item composite.
*
* @return a tab item composite
*/
private Composite createTabItemComposite()
{
Composite composite = new Composite( tabFolder, SWT.NONE );
GridLayout compositeLayout = new GridLayout( 1, false );
compositeLayout.marginHeight = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_MARGIN );
compositeLayout.marginWidth = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_MARGIN );
compositeLayout.verticalSpacing = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_SPACING );
compositeLayout.horizontalSpacing = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_SPACING );
composite.setLayout( compositeLayout );
composite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
return composite;
}
/**
* Creates the image label.
*
* @param parent the parent
* @return the image label
*/
private Label createImageLabel( Composite parent )
{
Composite labelComposite = new Composite( parent, SWT.BORDER );
labelComposite.setLayout( new GridLayout() );
GridData gd = new GridData( SWT.FILL, SWT.FILL, true, true );
labelComposite.setLayoutData( gd );
labelComposite.setBackground( getShell().getDisplay().getSystemColor( SWT.COLOR_WIDGET_NORMAL_SHADOW ) );
Label imageLabel = new Label( labelComposite, SWT.CENTER );
gd = new GridData( SWT.CENTER, SWT.CENTER, true, true );
imageLabel.setLayoutData( gd );
return imageLabel;
}
/**
* Update current image tab.
*/
private void updateCurrentImageGroup()
{
if ( currentTab != null )
{
if ( ( currentImage != null ) && !currentImage.isDisposed() )
{
currentImage.dispose();
currentImage = null;
}
if ( currentImageRawData != null && currentImageRawData.length > 0 )
{
try
{
ImageData imageData = new ImageData( new ByteArrayInputStream( currentImageRawData ) );
currentImage = new Image( getShell().getDisplay(), resizeImage( imageData ) );
currentImageLabel.setText( "" ); //$NON-NLS-1$
currentImageLabel.setImage( currentImage );
GridData currentImageLabelGridData = new GridData( SWT.CENTER, SWT.CENTER, true, true );
currentImageLabelGridData.widthHint = currentImage.getBounds().width;
currentImageLabelGridData.heightHint = currentImage.getBounds().height;
currentImageLabel.setLayoutData( currentImageLabelGridData );
currentImageTypeText.setText( getImageType( imageData.type ) );
currentImageSizeText.setText( getSizeString( currentImageRawData.length ) );
currentImageWidthText.setText( NLS
.bind( Messages.getString( "ImageDialog.Pixel" ), imageData.width ) ); //$NON-NLS-1$
currentImageHeightText.setText( NLS.bind(
Messages.getString( "ImageDialog.Pixel" ), imageData.height ) ); //$NON-NLS-1$
}
catch ( SWTException swte )
{
currentImageLabel.setImage( null );
currentImageLabel.setText( Messages.getString( "ImageDialog.UnsupportedFormatSpaces" ) ); //$NON-NLS-1$
currentImageTypeText.setText( Messages.getString( "ImageDialog.UnsupportedFormat" ) ); //$NON-NLS-1$
currentImageSizeText.setText( getSizeString( currentImageRawData.length ) );
currentImageWidthText.setText( "-" ); //$NON-NLS-1$
currentImageHeightText.setText( "-" ); //$NON-NLS-1$
}
}
else
{
currentImageLabel.setImage( null );
currentImageLabel.setText( Messages.getString( "ImageDialog.NoImageSpaces" ) ); //$NON-NLS-1$
currentImageTypeText.setText( Messages.getString( "ImageDialog.NoImage" ) ); //$NON-NLS-1$
currentImageSizeText.setText( "-" ); //$NON-NLS-1$
currentImageWidthText.setText( "-" ); //$NON-NLS-1$
currentImageHeightText.setText( "-" ); //$NON-NLS-1$
}
currentImageSaveButton.setEnabled( currentImageRawData != null && currentImageRawData.length > 0 );
}
}
/**
* Update new image tab.
*/
private void updateNewImageGroup()
{
if ( ( newImage != null ) && !newImage.isDisposed() )
{
newImage.dispose();
newImage = null;
}
String newImageFileName = newImageFilenameText.getText();
if ( !Strings.isEmpty( newImageFileName ) ) //$NON-NLS-1$
{
try
{
File file = new File( newImageFileName );
FileInputStream in = new FileInputStream( file );
ByteArrayOutputStream out = new ByteArrayOutputStream( ( int ) file.length() );
byte[] buf = new byte[4096];
int len;
while ( ( len = in.read( buf ) ) > 0 )
{
out.write( buf, 0, len );
}
newImageRawData = out.toByteArray();
out.close();
in.close();
}
catch ( FileNotFoundException e )
{
newImageRawData = null;
newImageLabel.setImage( null );
newImageLabel.setText( Messages.getString( "ImageDialog.ErrorFileNotFound" ) ); //$NON-NLS-1$
newImageTypeText.setText( "-" ); //$NON-NLS-1$
newImageSizeText.setText( "-" ); //$NON-NLS-1$
newImageWidthText.setText( "-" ); //$NON-NLS-1$
newImageHeightText.setText( "-" ); //$NON-NLS-1$
}
catch ( IOException e )
{
newImageRawData = null;
newImageLabel.setImage( null );
newImageLabel.setText( NLS.bind(
Messages.getString( "ImageDialog.CantReadFile" ), new String[] { e.getMessage() } ) ); //$NON-NLS-1$
newImageTypeText.setText( "-" ); //$NON-NLS-1$
newImageSizeText.setText( "-" ); //$NON-NLS-1$
newImageWidthText.setText( "-" ); //$NON-NLS-1$
newImageHeightText.setText( "-" ); //$NON-NLS-1$
}
}
else
{
newImageRawData = null;
newImageLabel.setImage( null );
newImageLabel.setText( Messages.getString( "ImageDialog.NoImageSelected" ) ); //$NON-NLS-1$
newImageTypeText.setText( "-" ); //$NON-NLS-1$
newImageSizeText.setText( "-" ); //$NON-NLS-1$
newImageWidthText.setText( "-" ); //$NON-NLS-1$
newImageHeightText.setText( "-" ); //$NON-NLS-1$
}
if ( ( newImageRawData != null ) && ( newImageRawData.length > 0 ) )
{
try
{
ImageData imageData = new ImageData( new ByteArrayInputStream( newImageRawData ) );
newImage = new Image( getShell().getDisplay(), resizeImage( imageData ) );
newImageLabel.setImage( newImage );
newImageTypeText.setText( getImageType( imageData.type ) );
if ( imageData.type != requiredImageType )
{
newImageTypeText
.setText( newImageTypeText.getText()
+ NLS
.bind(
Messages.getString( "ImageDialog.WillBeConverted" ), new String[] { getImageType( requiredImageType ) } ) ); //$NON-NLS-1$
}
newImageSizeText.setText( getSizeString( newImageRawData.length ) );
newImageWidthText.setText( NLS.bind( Messages.getString( "ImageDialog.Pixel" ), imageData.width ) ); //$NON-NLS-1$
newImageHeightText.setText( NLS.bind( Messages.getString( "ImageDialog.Pixel" ), imageData.height ) ); //$NON-NLS-1$
}
catch ( SWTException swte )
{
newImageLabel.setImage( null );
newImageLabel.setText( Messages.getString( "ImageDialog.UnsupportedFormatSpaces" ) ); //$NON-NLS-1$
newImageTypeText.setText( Messages.getString( "ImageDialog.UnsupportedFormat" ) ); //$NON-NLS-1$
newImageSizeText.setText( getSizeString( newImageRawData.length ) );
newImageWidthText.setText( "-" ); //$NON-NLS-1$
newImageHeightText.setText( "-" ); //$NON-NLS-1$
}
}
if ( okButton != null )
{
okButton.setEnabled( newImage != null );
}
newImageLabel.getParent().layout();
newImageTypeText.getParent().layout();
}
/**
* Update tab folder and the tabs.
*/
private void updateTabFolder()
{
if ( currentImageSaveButton != null )
{
if ( tabFolder.getSelectionIndex() == CURRENT_TAB )
{
currentImageSaveButton.setFocus();
}
updateCurrentImageGroup();
}
if ( newImageBrowseButton != null )
{
if ( ( tabFolder.getSelectionIndex() == NEW_TAB ) || ( currentImageSaveButton == null ) )
{
newImageBrowseButton.setFocus();
}
updateNewImageGroup();
}
}
/**
* Resizes the image.
*
* @param imageData the image data to resize
*
* @return the resized image data
*/
private ImageData resizeImage( ImageData imageData )
{
// Computing the width scale factor
double widthScaleFactor = 1.0;
if ( imageData.width > MAX_WIDTH )
{
widthScaleFactor = ( double ) MAX_WIDTH / imageData.width;
}
// Computing the height scale factor
double heightScaleFactor = 1.0;
if ( imageData.height > MAX_HEIGHT )
{
heightScaleFactor = ( double ) MAX_HEIGHT / imageData.height;
}
// Taking the minimum of both
double minScalefactor = Math.min( heightScaleFactor, widthScaleFactor );
// Resizing the image data
return resize( imageData, ( int ) ( imageData.width * minScalefactor ),
( int ) ( imageData.height * minScalefactor ) );
}
/**
* Resizes an image using the GC (for better quality).
*
* @param imageData the image data
* @param width the width
* @param height the height
* @return the resized image
*/
private ImageData resize( ImageData imageData, int width, int height )
{
Image image = new Image( Display.getDefault(), imageData );
Image resizedImage = new Image( Display.getDefault(), width, height );
try
{
GC gc = new GC( resizedImage );
try
{
gc.setAntialias( SWT.ON );
gc.setInterpolation( SWT.HIGH );
gc.drawImage( image, 0, 0, image.getBounds().width, image.getBounds().height, 0, 0, width, height );
}
finally
{
gc.dispose();
}
ImageData resizedImageData = resizedImage.getImageData();
return resizedImageData;
}
finally
{
image.dispose();
resizedImage.dispose();
}
}
/**
* Creates the image info container.
*
* @param parent the parent
*
* @return the image info container
*/
private Composite createImageInfoContainer( Composite parent )
{
Composite imageInfoContainer = new Composite( parent, SWT.NONE );
GridLayout gl = new GridLayout( 2, false );
gl.marginHeight = gl.marginWidth = 0;
imageInfoContainer.setLayout( gl );
imageInfoContainer.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
return imageInfoContainer;
}
/**
* Creates the image info.
*
* @param label the label
* @param parent the parent
*
* @return the image info
*/
private Text createImageInfo( Composite parent, String label )
{
BaseWidgetUtils.createLabel( parent, label, 1 );
Text text = BaseWidgetUtils.createLabeledText( parent, "", 1 ); //$NON-NLS-1$
return text;
}
/**
* Creates the button.
*
* @param label the label
* @param parent the parent
*
* @return the button
*/
private Button createButton( Composite parent, String label )
{
Button button = BaseWidgetUtils.createButton( parent, label, 1 );
return button;
}
/**
* Gets the size string.
*
* @param length the length
*
* @return the size string
*/
private static String getSizeString( int length )
{
if ( length > 1000000 )
{
return ( length / 1000000 ) + NLS.bind( Messages.getString( "ImageDialog.MB" ), new Integer[] //$NON-NLS-1$
{ length } ); //$NON-NLS-1$
}
else if ( length > 1000 )
{
return ( length / 1000 ) + NLS.bind( Messages.getString( "ImageDialog.KB" ), new Integer[] //$NON-NLS-1$
{ length } ); //$NON-NLS-1$
}
else
{
return length + Messages.getString( "ImageDialog.Bytes" ); //$NON-NLS-1$
}
}
/**
* Gets the image info.
*
* @param imageRawData the image raw data
*
* @return the image info
*/
public static String getImageInfo( byte[] imageRawData )
{
if ( imageRawData == null )
{
return IValueEditor.NULL;
}
String text;
try
{
ByteArrayInputStream bais = new ByteArrayInputStream( imageRawData );
ImageData imageData = new ImageData( bais );
String typePrefix = getImageType( imageData.type );
if ( !Strings.isEmpty( typePrefix ) ) //$NON-NLS-1$
{
typePrefix += "-"; //$NON-NLS-1$
}
text = NLS
.bind(
Messages.getString( "ImageDialog.Image" ), new Object[] { typePrefix, imageData.width, imageData.height, imageRawData.length } ); //$NON-NLS-1$
}
catch ( SWTException swte )
{
text = NLS.bind( Messages.getString( "ImageDialog.InvalidImage" ), new Object[] { imageRawData.length } ); //$NON-NLS-1$
}
return text;
}
/**
* Gets the image type.
*
* @param swtCode the swt code
*
* @return the image type
*/
private static String getImageType( int swtCode )
{
switch ( swtCode )
{
case SWT.IMAGE_JPEG :
return "JPEG"; //$NON-NLS-1$
case SWT.IMAGE_GIF :
return "GIF"; //$NON-NLS-1$
case SWT.IMAGE_PNG :
return "PNG"; //$NON-NLS-1$
case SWT.IMAGE_BMP :
case SWT.IMAGE_BMP_RLE :
return "BMP"; //$NON-NLS-1$
default :
return "";
}
}
/**
* Gets the image data in required format.
*
* @return Returns the image data in required format or null.
*/
public byte[] getNewImageRawData()
{
return newImageRawDataInRequiredFormat;
}
}