java/ch/wlkl/wsh/Win.javaSrc
package ch.wlkl.wsh;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import all eclipse stuff !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.*;
public class Win extends Top {
public void print () {
System.out.println("hier bin ich " + getClass());
}
public void swtMain () {
Display display = new Display ();
Shell shell = new Shell (display);
say("shell.size " + shell.getSize());
final Composite comp = new Composite (shell, SWT.NO_RADIO_GROUP);
comp.setBounds(shell.getClientArea());
say("comp.size " + comp.getSize());
Label label = new Label (comp, SWT.CENTER);
label.setText ("Hello_world");
final Label lab2 = new Label (comp, SWT.LEFT);
lab2.setText ("anfangs text");
final Text tx = new Text (comp, SWT.LEFT ); //+ SWT.MULTI);
tx.setText ("und dies ist ein text...\nmit einer zweiten Zeile");
tx.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent ev) {
System.out.println("modifyText event " + ev);
System.out.println("modifyText source " + ev.getSource());
System.out.println("new Text " + ((Text) ev.getSource()).getText());
lab2.setText("new text = " + tx.getText());
comp.pack();
// comp.redraw();
}});
comp.setLayout(new RowLayout(SWT.VERTICAL));
comp.layout(true);
// comp.pack();
shell.open ();
say("lab2.size " + lab2.getSize());
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}
public void swtMain2 () {
final Display display = new Display ();
final Shell shell = new Shell (display);
say("shell.size " + shell.getSize());
final Composite comp = new Composite (shell, SWT.NO_RADIO_GROUP);
comp.setBounds(shell.getClientArea());
say("comp.size " + comp.getSize());
Label label = new Label (comp, SWT.CENTER);
label.setText ("Hello_world");
label.setSize(120, 30);
label.setLocation(20, 20);
final Label lab2 = new Label (comp, SWT.LEFT);
lab2.setText ("anfangs text");
lab2.setSize(620, 29);
lab2.setLocation(150, 20);
final Text tx = new Text (comp, SWT.LEFT + SWT.MULTI);
tx.setText ("und dies ist ein text...\nmit einer zweiten Zeile");
tx.setSize(300, 300);
tx.setLocation(20, 60);
tx.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent ev) {
// System.out.println("modifyText event " + ev);
// System.out.println("modifyText source " + ev.getSource());
// System.out.println("new Text " + ((Text) ev.getSource()).getText());
int p = tx.getCaretPosition();
String t = tx.getText();
String x = t.substring(p < 10 ? 0 : p - 10, p) + "###" + (t.length() > p + 10 ? t.substring(p, p+10) : t.substring(p));
lab2.setText("arround carret = " + x);
}
});
final Button bu = new Button(comp, SWT.PUSH);
bu.setText("selectionText state");
bu.setLocation(350, 60);
bu.setSize(350, 20);
bu.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent arg0) {
bu.setText("default selected point " + tx.getSelection() + " count " + tx.getSelectionCount() + " text " + tx.getSelectionText());
}
public void widgetSelected(SelectionEvent arg0) {
bu.setText("selected point " + tx.getSelection() + " count " + tx.getSelectionCount() + " text " + tx.getSelectionText());
}
} );
final Button b2 = new Button(comp, SWT.PUSH);
b2.setText("home ?");
b2.setLocation(350, 80);
b2.setSize(350, 20);
b2.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent arg0) {
}
public void widgetSelected(SelectionEvent arg0) {
b2.setText("home = " + new File(".").getAbsolutePath());
}
} );
final Button bOpen = new Button(comp, SWT.PUSH);
bOpen.setText("open");
bOpen.setLocation(350, 100);
bOpen.setSize(40, 20);
bOpen.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent arg0) {
}
public void widgetSelected(SelectionEvent arg0) {
System.out.println("open pushed");
MessageBox mb = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
mb.setText("Willst Du ein neues File ?ffnen und aktuellen Inhalt ?berschreiben?");
if (mb.open() != SWT.OK)
return;
String fName = new FileDialog(shell, SWT.SAVE).open();
if (fName == null)
return;
File f = new File(fName);
if (! (f.exists() && f.isFile())) {
mb = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);
mb.setText(f.getAbsolutePath() + " existiert nicht, oder ist kein File");
mb.open();
return;
}
BufferedReader r = null;
try {
r = new BufferedReader(new FileReader(f));
} catch (FileNotFoundException e) {
}
String src = "", s1;
try {
while (null != (s1 = r.readLine()))
src += s1 + "\n";
} catch (IOException e) {
fail(e.toString());
}
tx.setText(src);
}
});
final Button bSave = new Button(comp, SWT.PUSH);
bSave.setText("save");
bSave.setLocation(400, 100);
bSave.setSize(40, 20);
bSave.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent arg0) {
}
public void widgetSelected(SelectionEvent arg0) {
System.out.println("save pushed");
FileDialog fiDi = new FileDialog(shell, SWT.SAVE);
fiDi.setText("Walter's FileDialog style " + fiDi.getStyle());
System.out.println("SWT.SAVE " + SWT.SAVE + ", 1<<13 " + (1<<13));
System.out.println("SWT.OPEN " + SWT.OPEN + ", 1<<15 " + (1<<15));
fiDi.setFilterPath("./eins.txt");
String nm = fiDi.open ();
System.out.println("selected " + nm + ", file " + fiDi.getFileName() + " style " + fiDi.getStyle());
}
} );
// comp.setLayout(new RowLayout(SWT.VERTICAL));
// comp.layout(true);
//// comp.pack();
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}
boolean srcModified = false;
Display display = null;
Shell shell = null;
TextIO src = null;
Button srcOp = null;
Button srcSv = null;
Button srcAs = null;
Button runSh = null;
Button runDa = null;
Label outLb = null;
TextIO out = null;
Button outAs = null;
public void adapt () {
srcSv.setEnabled(src.isModified && src.file != null);
}
public void new3 () {
display = new Display();
// say("display " + display.getBounds());
shell = new Shell (display);
shell.setText("Walter's Java Shell");
// say("shell " + shell.getBounds());
src = new TextIO(shell);
srcOp = new Button(shell, SWT.PUSH);
srcOp.setText("open");
srcSv = new Button(shell, SWT.PUSH);
srcSv.setText("save");
srcAs = new Button(shell, SWT.PUSH);
srcAs.setText("save as");
runSh = new Button(shell, SWT.PUSH);
runSh.setText("shell");
runDa = new Button(shell, SWT.PUSH);
runDa.setText("data");
outLb = new Label(shell, SWT.SHADOW_IN + SWT.LEFT);
out = new TextIO(shell);
outAs = new Button(shell, SWT.PUSH);
outAs.setText("save as");
}
public int max(int i, int j) {
return i > j ? i : j;
}
public void layout3(int w, int h) {
int x1 = 5;
int y1 = 5;
int w1 = 50;
int x2 = 2 * x1 + w1;
int w2 = max(w - x2 - x1, 100);
int h0 = 20;
int h1 = max((h - h0 - 4 * y1) / 2, 5 * h0 + 4 * y1);
int y2 = x1 * 3 + h0 + h1;
src.text.setBounds(x2, y1, w2, h1);
srcOp.setBounds(x1, y1, w1, h0);
srcSv.setBounds(x1, y1+ (y1+h0), w1, h0);
srcAs.setBounds(x1, y1 + 2 * (y1+h0), w1, h0);
runSh.setBounds(x1, y2 - (y1+h0), w1, h0);
outLb.setBounds(x2, y2-y1-h0, w2, h0);
out.text.setBounds(x2, y2, w2 ,h1);
runDa.setBounds(x1, y2, w1, h0);
outAs.setBounds(x1, h-y1-h0, w1, h0);
}
public void swtMain3 () {
new3();
// layout3(shell.getClientArea().width, shell.getClientArea().height);
shell.addControlListener(new ControlListener() {
public void controlMoved(ControlEvent arg0) {
// say("shell moved to " + shell.getLocation());
}
public void controlResized(ControlEvent arg0) {
// say("shell resized to " + shell.getClientArea());
layout3(shell.getClientArea().width, shell.getClientArea().height);
}});
srcOp.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent arg0) {
}
public void widgetSelected(SelectionEvent arg0) {
src.open();
}
});
srcSv.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent arg0) {
}
public void widgetSelected(SelectionEvent arg0) {
src.save(src.file);
}
});
srcAs.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent arg0) {
}
public void widgetSelected(SelectionEvent arg0) {
src.save();
}
});
outAs.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent arg0) {
}
public void widgetSelected(SelectionEvent arg0) {
out.save();
}
});
runSh.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent arg0) {
}
public void widgetSelected(SelectionEvent arg0) {
compRun('s');
}
});
runDa.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent arg0) {
}
public void widgetSelected(SelectionEvent arg0) {
compRun('d');
}
});
adapt();
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}
public void compRun(char type) {
String s = src.text.getText();
PrintStream oldOut = System.out;
PrintStream oldErr = System.err;
String tyNa = type == 's' ? "shell" : type == 'd' ? "data" : "type " + type;
Write<String> bb = new WriteOut();
PrintStream newOut = new PrintStream(new OutputStream2Write(bb));
out.text.setText("");
bb.open("w");
outLb.setText("compiling " + tyNa);
Env.push(new Env<String, String>(">?", bb));
System.setOut(newOut);
System.setErr(newOut);
s = s == null ? "" : s;
Class<? extends Run> cl = new Compiler(Env.loader(), new Buf<String>(s)).compileClassCatch(type, null);
if (cl != null) {
outLb.setText("running " + tyNa + " " + cl);
try {
cl.newInstance().run();
} catch (Throwable e) {
bb.write("catched Throwable" + e);
Throwable c = e;
while (null != (c = c.getCause()))
bb.write(" caused by " + c);
e.printStackTrace();
}
}
Env.pop();
System.setOut(oldOut);
System.setErr(oldErr);
// r.run();
}
class TextIO {
Text text;
boolean isModified = false;
File file = null;
TextIO(Shell shell) {
text = new Text (shell, SWT.LEFT + SWT.MULTI);
text.addModifyListener(new ModifyListener () {
public void modifyText(ModifyEvent arg0) {
isModified = true;
adapt();
}});
}
public void open() {
if (isModified) {
MessageBox mb = new MessageBox(text.getShell(), SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
mb.setText("Willst Du ein neues File ?ffnen und aktuellen Inhalt ?berschreiben?");
if (mb.open() != SWT.OK)
return;
}
String fName = new FileDialog(text.getShell(), SWT.OPEN).open();
if (fName == null)
return;
File f = new File(fName);
if (! (f.exists() && f.isFile())) {
MessageBox mb = new MessageBox(text.getShell(), SWT.ICON_ERROR | SWT.OK);
mb.setText(f.getAbsolutePath() + " existiert nicht, oder ist kein File");
mb.open();
return;
}
open(f);
}
public void open(File f) {
BufferedReader r = null;
try {
r = new BufferedReader(new FileReader(f));
} catch (FileNotFoundException e) {
fail("cannot read file " + f.getAbsolutePath() + " exception " + e);
}
String src = "", s1;
try {
while (null != (s1 = r.readLine()))
src += s1 + "\n";
r.close();
} catch (IOException e) {
fail("read error on " + f.getAbsolutePath() + " exception " + e.toString());
}
text.setText(src);
isModified = false;
file = f;
adapt();
}
public void save() {
String fName = new FileDialog(text.getShell(), SWT.SAVE).open();
if (fName == null)
return;
File f = new File(fName);
if (f.exists()) {
MessageBox mb = new MessageBox(text.getShell(), SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
mb.setText("das bestehende File " + f.getAbsolutePath() + " ?berschrieben?");
if (mb.open() != SWT.OK)
return;
}
save(f);
}
public void save(File f) {
FileWriter w = null;
try {
w = new FileWriter(f);
w.write(text.getText());
w.close();
} catch (IOException e) {
fail("write error on file " + f.getAbsolutePath() + " exception " + e);
}
isModified = false;
file = f;
adapt();
}
}
class WriteOut implements Write<String> {
public void write(String arg) {
out.text.setText(out.text.getText() + Ut.crLf(arg) + "\r\n");
}
public void writeAll(String opt, Read<String> r) {
Cat.writeAll(this, opt, r);
}
public void close() {
}
public void open(String opt) {
}
public void reset(Object... args) {
// TODO Auto-generated method stub
}
}
public static void main (String ... args) {
Win win = new Win();
win.print();
win.swtMain3();
}
}