dataText = new Text(shell, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL);
dataText = new StyledText(shell, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL); dataText.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
	void createWidgets() {		// Add the widgets to the shell in a grid layout.		GridLayout layout = new GridLayout();		layout.marginHeight = 0;		layout.numColumns = 2;		shell.setLayout(layout);		// Separate the menu bar from the rest of the widgets.		Label separator = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);		GridData gridData = new GridData();		gridData.horizontalSpan = 2;		gridData.horizontalAlignment = GridData.FILL;		separator.setLayoutData(gridData);				// Add a composite to contain some control widgets across the top.		Composite controls = new Composite(shell, SWT.NULL);		RowLayout rowLayout = new RowLayout();		rowLayout.marginTop = 0;		rowLayout.marginBottom = 5;		rowLayout.spacing = 8;		controls.setLayout(rowLayout);		gridData = new GridData();		gridData.horizontalSpan = 2;		controls.setLayoutData(gridData);				// Combo to change the background.		Group group = new Group(controls, SWT.NULL);		group.setLayout(new RowLayout());		group.setText(bundle.getString("Background"));		backgroundCombo = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY);		backgroundCombo.setItems(new String[] {			bundle.getString("None"),			bundle.getString("White"),			bundle.getString("Black"),			bundle.getString("Red"),			bundle.getString("Green"),			bundle.getString("Blue")});		backgroundCombo.select(backgroundCombo.indexOf(bundle.getString("White")));		backgroundCombo.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				changeBackground();			}		});				// Combo to change the x scale.		String[] values = {			"0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9", "1",			"1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "2",			"3", "4", "5", "6", "7", "8", "9", "10",};		group = new Group(controls, SWT.NULL);		group.setLayout(new RowLayout());		group.setText(bundle.getString("X_scale"));		scaleXCombo = new Combo(group, SWT.DROP_DOWN);		for (int i = 0; i < values.length; i++) {			scaleXCombo.add(values[i]);		}		scaleXCombo.select(scaleXCombo.indexOf("1"));		scaleXCombo.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				scaleX();			}		});				// Combo to change the y scale.		group = new Group(controls, SWT.NULL);		group.setLayout(new RowLayout());		group.setText(bundle.getString("Y_scale"));		scaleYCombo = new Combo(group, SWT.DROP_DOWN);		for (int i = 0; i < values.length; i++) {			scaleYCombo.add(values[i]);		}		scaleYCombo.select(scaleYCombo.indexOf("1"));		scaleYCombo.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				scaleY();			}		});				// Combo to change the alpha value.		group = new Group(controls, SWT.NULL);		group.setLayout(new RowLayout());		group.setText(bundle.getString("Alpha_K"));		alphaCombo = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY);		for (int i = 0; i <= 255; i += 5) {			alphaCombo.add(String.valueOf(i));		}		alphaCombo.select(alphaCombo.indexOf("255"));		alphaCombo.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				alpha();			}		});				// Check box to request incremental display.		group = new Group(controls, SWT.NULL);		group.setLayout(new RowLayout());		group.setText(bundle.getString("Display"));		incrementalCheck = new Button(group, SWT.CHECK);		incrementalCheck.setText(bundle.getString("Incremental"));		incrementalCheck.setSelection(incremental);		incrementalCheck.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				incremental = ((Button)event.widget).getSelection();			}		});		// Check box to request transparent display.		transparentCheck = new Button(group, SWT.CHECK);		transparentCheck.setText(bundle.getString("Transparent"));		transparentCheck.setSelection(transparent);		transparentCheck.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				transparent = ((Button)event.widget).getSelection();				if (image != null) {					imageCanvas.redraw();				}			}		});		// Check box to request mask display.		maskCheck = new Button(group, SWT.CHECK);		maskCheck.setText(bundle.getString("Mask"));		maskCheck.setSelection(showMask);		maskCheck.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				showMask = ((Button)event.widget).getSelection();				if (image != null) {					imageCanvas.redraw();				}			}		});		// Check box to request background display.		backgroundCheck = new Button(group, SWT.CHECK);		backgroundCheck.setText(bundle.getString("Background"));		backgroundCheck.setSelection(showBackground);		backgroundCheck.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				showBackground = ((Button)event.widget).getSelection();			}		});		// Group the animation buttons.		group = new Group(controls, SWT.NULL);		group.setLayout(new RowLayout());		group.setText(bundle.getString("Animation"));		// Push button to display the previous image in a multi-image file.		previousButton = new Button(group, SWT.PUSH);		previousButton.setText(bundle.getString("Previous"));		previousButton.setEnabled(false);		previousButton.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				previous();			}		});		// Push button to display the next image in a multi-image file.		nextButton = new Button(group, SWT.PUSH);		nextButton.setText(bundle.getString("Next"));		nextButton.setEnabled(false);		nextButton.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				next();			}		});		// Push button to toggle animation of a multi-image file.		animateButton = new Button(group, SWT.PUSH);		animateButton.setText(bundle.getString("Animate"));		animateButton.setEnabled(false);		animateButton.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				animate();			}		});		// Label to show the image file type.		typeLabel = new Label(shell, SWT.NULL);		typeLabel.setText(bundle.getString("Type_initial"));		typeLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Canvas to show the image.		imageCanvas = new Canvas(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.NO_REDRAW_RESIZE);		imageCanvas.setBackground(whiteColor);		imageCanvas.setCursor(crossCursor);		gridData = new GridData();		gridData.verticalSpan = 15;		gridData.horizontalAlignment = GridData.FILL;		gridData.verticalAlignment = GridData.FILL;		gridData.grabExcessHorizontalSpace = true;		gridData.grabExcessVerticalSpace = true;		imageCanvas.setLayoutData(gridData);		imageCanvas.addPaintListener(new PaintListener() {			public void paintControl(PaintEvent event) {				if (image != null)					paintImage(event);			}		});		imageCanvas.addMouseMoveListener(new MouseMoveListener() {			public void mouseMove(MouseEvent event) {				if (image != null) {					showColorAt(event.x, event.y);				}			}		});		// Set up the image canvas scroll bars.		ScrollBar horizontal = imageCanvas.getHorizontalBar();		horizontal.setVisible(true);		horizontal.setMinimum(0);		horizontal.setEnabled(false);		horizontal.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				scrollHorizontally((ScrollBar)event.widget);			}		});		ScrollBar vertical = imageCanvas.getVerticalBar();		vertical.setVisible(true);		vertical.setMinimum(0);		vertical.setEnabled(false);		vertical.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				scrollVertically((ScrollBar)event.widget);			}		});		// Label to show the image size.		sizeLabel = new Label(shell, SWT.NULL);		sizeLabel.setText(bundle.getString("Size_initial"));		sizeLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Label to show the image depth.		depthLabel = new Label(shell, SWT.NULL);		depthLabel.setText(bundle.getString("Depth_initial"));		depthLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Label to show the transparent pixel.		transparentPixelLabel = new Label(shell, SWT.NULL);		transparentPixelLabel.setText(bundle.getString("Transparent_pixel_initial"));		transparentPixelLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Label to show the time to load.		timeToLoadLabel = new Label(shell, SWT.NULL);		timeToLoadLabel.setText(bundle.getString("Time_to_load_initial"));		timeToLoadLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Separate the animation fields from the rest of the fields.		separator = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);		separator.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Label to show the logical screen size for animation.		screenSizeLabel = new Label(shell, SWT.NULL);		screenSizeLabel.setText(bundle.getString("Animation_size_initial"));		screenSizeLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Label to show the background pixel.		backgroundPixelLabel = new Label(shell, SWT.NULL);		backgroundPixelLabel.setText(bundle.getString("Background_pixel_initial"));		backgroundPixelLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Label to show the image location (x, y).		locationLabel = new Label(shell, SWT.NULL);		locationLabel.setText(bundle.getString("Image_location_initial"));		locationLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Label to show the image disposal method.		disposalMethodLabel = new Label(shell, SWT.NULL);		disposalMethodLabel.setText(bundle.getString("Disposal_initial"));		disposalMethodLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Label to show the image delay time.		delayTimeLabel = new Label(shell, SWT.NULL);		delayTimeLabel.setText(bundle.getString("Delay_initial"));		delayTimeLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Label to show the background pixel.		repeatCountLabel = new Label(shell, SWT.NULL);		repeatCountLabel.setText(bundle.getString("Repeats_initial"));		repeatCountLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Separate the animation fields from the palette.		separator = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);		separator.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Label to show if the image has a direct or indexed palette.		paletteLabel = new Label(shell, SWT.NULL);		paletteLabel.setText(bundle.getString("Palette_initial"));		paletteLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));		// Canvas to show the image's palette.		paletteCanvas = new Canvas(shell, SWT.BORDER | SWT.V_SCROLL | SWT.NO_REDRAW_RESIZE);		paletteCanvas.setFont(fixedWidthFont);		paletteCanvas.getVerticalBar().setVisible(true);		gridData = new GridData();		gridData.horizontalAlignment = GridData.FILL;		gridData.verticalAlignment = GridData.FILL;		GC gc = new GC(paletteLabel);		paletteWidth = gc.stringExtent(bundle.getString("Max_length_string")).x;		gc.dispose();		gridData.widthHint = paletteWidth;		gridData.heightHint = 16 * 11; // show at least 16 colors		paletteCanvas.setLayoutData(gridData);		paletteCanvas.addPaintListener(new PaintListener() {			public void paintControl(PaintEvent event) {				if (image != null)					paintPalette(event);			}		});		// Set up the palette canvas scroll bar.		vertical = paletteCanvas.getVerticalBar();		vertical.setVisible(true);		vertical.setMinimum(0);		vertical.setIncrement(10);		vertical.setEnabled(false);		vertical.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				scrollPalette((ScrollBar)event.widget);			}		});		// Sash to see more of image or image data.		sash = new Sash(shell, SWT.HORIZONTAL);		gridData = new GridData();		gridData.horizontalSpan = 2;		gridData.horizontalAlignment = GridData.FILL;		sash.setLayoutData(gridData);		sash.addSelectionListener (new SelectionAdapter () {			public void widgetSelected (SelectionEvent event) {				if (event.detail != SWT.DRAG) {					((GridData)paletteCanvas.getLayoutData()).heightHint = SWT.DEFAULT;					Rectangle paletteCanvasBounds = paletteCanvas.getBounds();					int minY = paletteCanvasBounds.y + 20;					Rectangle dataLabelBounds = dataLabel.getBounds();					int maxY = statusLabel.getBounds().y - dataLabelBounds.height - 20;					if (event.y > minY && event.y < maxY) {						Rectangle oldSash = sash.getBounds();						sash.setBounds(event.x, event.y, event.width, event.height);						int diff = event.y - oldSash.y;						Rectangle bounds = imageCanvas.getBounds();						imageCanvas.setBounds(bounds.x, bounds.y, bounds.width, bounds.height + diff);						bounds = paletteCanvasBounds;						paletteCanvas.setBounds(bounds.x, bounds.y, bounds.width, bounds.height + diff);						bounds = dataLabelBounds;						dataLabel.setBounds(bounds.x, bounds.y + diff, bounds.width, bounds.height);						bounds = dataText.getBounds();						dataText.setBounds(bounds.x, bounds.y + diff, bounds.width, bounds.height - diff);						//shell.layout(true);					}				}			}		});		// Label to show data-specific fields.		dataLabel = new Label(shell, SWT.NULL);		dataLabel.setText(bundle.getString("Pixel_data_initial"));		gridData = new GridData();		gridData.horizontalSpan = 2;		gridData.horizontalAlignment = GridData.FILL;		dataLabel.setLayoutData(gridData);				// Text to show a dump of the data.		dataText = new Text(shell, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL);		dataText.setFont(fixedWidthFont);		gridData = new GridData();		gridData.horizontalSpan = 2;		gridData.horizontalAlignment = GridData.FILL;		gridData.verticalAlignment = GridData.FILL;		gridData.heightHint = 128;		gridData.grabExcessVerticalSpace = true;		dataText.setLayoutData(gridData);		dataText.addMouseListener(new MouseAdapter() {			public void mouseDown(MouseEvent event) {				if (image != null && event.button == 1) {					showColorForData();				}			}		});		dataText.addKeyListener(new KeyAdapter() {			public void keyPressed(KeyEvent event) {				if (image != null) {					showColorForData();				}			}		});				// Label to show status and cursor location in image.		statusLabel = new Label(shell, SWT.NULL);		statusLabel.setText("");		gridData = new GridData();		gridData.horizontalSpan = 2;		gridData.horizontalAlignment = GridData.FILL;		statusLabel.setLayoutData(gridData);	}