| /******************************************************************************* |
| * Copyright (c) 2000, 2003 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Common Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/cpl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.swt.examples.javaviewer; |
| |
| |
| import org.eclipse.swt.*; |
| import org.eclipse.swt.custom.*; |
| import org.eclipse.swt.events.*; |
| import org.eclipse.swt.graphics.*; |
| import org.eclipse.swt.layout.*; |
| import org.eclipse.swt.widgets.*; |
| import java.util.*; |
| import java.io.*; |
| import java.text.*; |
| |
| /** |
| */ |
| public class JavaViewer { |
| Shell shell; |
| StyledText text; |
| JavaLineStyler lineStyler = new JavaLineStyler(); |
| FileDialog fileDialog; |
| static ResourceBundle resources = ResourceBundle.getBundle("examples_javaviewer"); |
| |
| Menu createFileMenu() { |
| Menu bar = shell.getMenuBar (); |
| Menu menu = new Menu (bar); |
| MenuItem item; |
| |
| // Open |
| item = new MenuItem (menu, SWT.CASCADE); |
| item.setText (resources.getString("Open_menuitem")); |
| item.setAccelerator(SWT.MOD1 + 'O'); |
| item.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent event) { |
| openFile(); |
| } |
| }); |
| |
| // Exit |
| item = new MenuItem (menu, SWT.PUSH); |
| item.setText (resources.getString("Exit_menuitem")); |
| item.addSelectionListener (new SelectionAdapter () { |
| public void widgetSelected (SelectionEvent e) { |
| menuFileExit (); |
| } |
| }); |
| return menu; |
| } |
| |
| void createMenuBar () { |
| Menu bar = new Menu (shell, SWT.BAR); |
| shell.setMenuBar (bar); |
| |
| MenuItem fileItem = new MenuItem (bar, SWT.CASCADE); |
| fileItem.setText (resources.getString("File_menuitem")); |
| fileItem.setMenu (createFileMenu ()); |
| |
| } |
| |
| void createShell (Display display) { |
| shell = new Shell (display); |
| shell.setText (resources.getString("Window_title")); |
| GridLayout layout = new GridLayout(); |
| layout.numColumns = 1; |
| shell.setLayout(layout); |
| shell.addShellListener (new ShellAdapter () { |
| public void shellClosed (ShellEvent e) { |
| lineStyler.disposeColors(); |
| text.removeLineStyleListener(lineStyler); |
| } |
| }); |
| } |
| void createStyledText() { |
| text = new StyledText (shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL); |
| GridData spec = new GridData(); |
| spec.horizontalAlignment = GridData.FILL; |
| spec.grabExcessHorizontalSpace = true; |
| spec.verticalAlignment = GridData.FILL; |
| spec.grabExcessVerticalSpace = true; |
| text.setLayoutData(spec); |
| text.addLineStyleListener(lineStyler); |
| text.setEditable(false); |
| Color bg = Display.getDefault().getSystemColor(SWT.COLOR_GRAY); |
| text.setBackground(bg); |
| } |
| |
| void displayError(String msg) { |
| MessageBox box = new MessageBox(shell, SWT.ICON_ERROR); |
| box.setMessage(msg); |
| box.open(); |
| } |
| |
| public static void main (String [] args) { |
| Display display = new Display(); |
| JavaViewer example = new JavaViewer (); |
| Shell shell = example.open (display); |
| while (!shell.isDisposed ()) |
| if (!display.readAndDispatch ()) display.sleep (); |
| display.dispose (); |
| } |
| |
| public Shell open (Display display) { |
| createShell (display); |
| createMenuBar (); |
| createStyledText (); |
| shell.setSize(500, 400); |
| shell.open (); |
| return shell; |
| } |
| |
| void openFile() { |
| final String textString; |
| if (fileDialog == null) { |
| fileDialog = new FileDialog(shell, SWT.OPEN); |
| } |
| |
| fileDialog.setFilterExtensions(new String[] {"*.java", "*.*"}); |
| fileDialog.open(); |
| String name = fileDialog.getFileName(); |
| |
| if ((name == null) || (name.length() == 0)) return; |
| |
| File file = new File(fileDialog.getFilterPath(), name); |
| if (!file.exists()) { |
| String message = MessageFormat.format(resources.getString("Err_file_no_exist"), new String[] {file.getName()}); |
| displayError(message); |
| return; |
| } |
| |
| try { |
| FileInputStream stream= new FileInputStream(file.getPath()); |
| try { |
| Reader in = new BufferedReader(new InputStreamReader(stream)); |
| char[] readBuffer= new char[2048]; |
| StringBuffer buffer= new StringBuffer((int) file.length()); |
| int n; |
| while ((n = in.read(readBuffer)) > 0) { |
| buffer.append(readBuffer, 0, n); |
| } |
| textString = buffer.toString(); |
| stream.close(); |
| } |
| catch (IOException e) { |
| // Err_file_io |
| String message = MessageFormat.format(resources.getString("Err_file_io"), new String[] {file.getName()}); |
| displayError(message); |
| return; |
| } |
| } |
| catch (FileNotFoundException e) { |
| String message = MessageFormat.format(resources.getString("Err_not_found"), new String[] {file.getName()}); |
| displayError(message); |
| return; |
| } |
| // Guard against superfluous mouse move events -- defer action until later |
| Display display = text.getDisplay(); |
| display.asyncExec(new Runnable() { |
| public void run() { |
| text.setText(textString); |
| } |
| }); |
| |
| // parse the block comments up front since block comments can go across |
| // lines - inefficient way of doing this |
| lineStyler.parseBlockComments(textString); |
| } |
| |
| void menuFileExit () { |
| shell.close (); |
| } |
| } |