Index: trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/AboutDialog.java
===================================================================
--- trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/AboutDialog.java	(revision 195)
+++ trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/AboutDialog.java	(revision 195)
@@ -0,0 +1,75 @@
+package de.ugoe.cs.eventbench.swt;
+
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.Dialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.SWT;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Hyperlink;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+
+public class AboutDialog extends Dialog {
+
+	protected Object result;
+	protected Shell shlAboutEventbenchconsole;
+	private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
+
+	/**
+	 * Create the dialog.
+	 * @param parent
+	 * @param style
+	 */
+	public AboutDialog(Shell parent, int style) {
+		super(parent, style);
+		setText("SWT Dialog");
+	}
+
+	/**
+	 * Open the dialog.
+	 * @return the result
+	 */
+	public Object open() {
+		createContents();
+		shlAboutEventbenchconsole.open();
+		shlAboutEventbenchconsole.layout();
+		Display display = getParent().getDisplay();
+		while (!shlAboutEventbenchconsole.isDisposed()) {
+			if (!display.readAndDispatch()) {
+				display.sleep();
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * Create contents of the dialog.
+	 */
+	private void createContents() {
+		shlAboutEventbenchconsole = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		shlAboutEventbenchconsole.setSize(283, 113);
+		shlAboutEventbenchconsole.setText("About EventBenchConsole");
+		
+		Label lblEventbenchconsole = new Label(shlAboutEventbenchconsole, SWT.CENTER);
+		lblEventbenchconsole.setBounds(10, 10, 267, 15);
+		lblEventbenchconsole.setText("EventBenchConsole");
+		
+		Label lblFurtherInformationAbout = new Label(shlAboutEventbenchconsole, SWT.WRAP);
+		lblFurtherInformationAbout.setBounds(10, 31, 267, 31);
+		lblFurtherInformationAbout.setText("Further information about this software is provided on our homepage.");
+		
+		final Hyperlink hprlnkHttpeventbenchinformatikunigoettingende = formToolkit.createHyperlink(shlAboutEventbenchconsole, "http://eventbench.informatik.uni-goettingen.de", SWT.NONE);
+		hprlnkHttpeventbenchinformatikunigoettingende.addMouseListener(new MouseAdapter() {
+			@Override
+			public void mouseDown(MouseEvent e) {
+				Program.launch(hprlnkHttpeventbenchinformatikunigoettingende.getText());
+			}
+		});
+		hprlnkHttpeventbenchinformatikunigoettingende.setBounds(10, 68, 267, 17);
+		formToolkit.paintBordersFor(hprlnkHttpeventbenchinformatikunigoettingende);
+		hprlnkHttpeventbenchinformatikunigoettingende.setBackground(null);
+
+	}
+}
Index: trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/CommandHistoryDialog.java
===================================================================
--- trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/CommandHistoryDialog.java	(revision 194)
+++ trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/CommandHistoryDialog.java	(revision 195)
@@ -1,6 +1,16 @@
 package de.ugoe.cs.eventbench.swt;
+
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.LinkedList;
 
 import org.eclipse.swt.widgets.Dialog;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.List;
@@ -11,8 +21,22 @@
 import org.eclipse.swt.layout.GridData;
 
-public class CommandHistoryDialog extends Dialog {
-
+import de.ugoe.cs.util.StringTools;
+import de.ugoe.cs.util.console.CommandExecuter;
+import de.ugoe.cs.util.console.Console;
+import de.ugoe.cs.util.console.ConsoleObserver;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+
+public class CommandHistoryDialog extends Dialog implements ConsoleObserver {
+	
+	protected java.util.List<String> history = new LinkedList<String>();
+	
+	protected List commandHistoryList;
 	protected Object result;
 	protected Shell shell;
+	
+	boolean isOpen;
 
 	/**
@@ -23,5 +47,7 @@
 	public CommandHistoryDialog(Shell parent, int style) {
 		super(parent, style);
-		setText("SWT Dialog");
+		setText("Command History");
+		isOpen = false;
+		Console.getInstance().registerObserver(this);
 	}
 
@@ -34,4 +60,5 @@
 		shell.open();
 		shell.layout();
+		isOpen = true;
 		Display display = getParent().getDisplay();
 		while (!shell.isDisposed()) {
@@ -47,5 +74,10 @@
 	 */
 	private void createContents() {
-		shell = new Shell(getParent(), SWT.DIALOG_TRIM);
+		shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.RESIZE);
+		shell.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent arg0) {
+				isOpen = false;
+			}
+		});
 		shell.setSize(450, 300);
 		shell.setText(getText());
@@ -57,16 +89,113 @@
 		new Label(shell, SWT.NONE);
 		
-		List list = new List(shell, SWT.BORDER | SWT.V_SCROLL | SWT.MULTI);
-		list.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
+		commandHistoryList = new List(shell, SWT.BORDER | SWT.V_SCROLL | SWT.MULTI);
+		commandHistoryList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
+		for( String command : history ) {
+			commandHistoryList.add(command);
+		}
 		
 		Button btnExec = new Button(shell, SWT.NONE);
+		btnExec.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				for( String command : commandHistoryList.getSelection() ) {
+					CommandExecuter.getInstance().exec(command);
+				}
+			}
+		});
 		btnExec.setText("Execute");
 		
 		Button btnCopyToClipboard = new Button(shell, SWT.NONE);
+		btnCopyToClipboard.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
+				StringSelection content = new StringSelection(getSelectedCommands());
+				clipboard.setContents(content, null);
+			}
+		});
 		btnCopyToClipboard.setText("Copy to Clipboard");
 		
 		Button btnCreateBatchfile = new Button(shell, SWT.NONE);
+		btnCreateBatchfile.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent event) {
+				FileDialog fileDialog = new FileDialog(shell, SWT.SAVE);
+				String filename = fileDialog.open();
+				if( filename!=null ) {
+					File file = new File(filename);
+					boolean fileCreated;
+					try {
+						fileCreated = file.createNewFile();
+						if (!fileCreated) {
+							Console.traceln("Created batchfile " + filename);
+						} else {
+							Console.traceln("Overwrote file " + filename);
+						}
+					} catch (IOException e) {
+						Console.printerrln("Unable to create file " + filename);
+						Console.printStacktrace(e);
+					}
+					OutputStreamWriter writer = null;
+					try {
+						writer = new OutputStreamWriter(new FileOutputStream(file));
+					} catch (IOException e) {
+						Console.printerrln("Unable to open file for writing (read-only file):"
+								+ filename);
+						Console.printStacktrace(e);
+					}
+					try {
+						writer.write(getSelectedCommands());
+						writer.close();
+					} catch (IOException e) {
+						Console.printerrln("Unable to write to file.");
+						Console.printStacktrace(e);
+					}
+				}
+			}
+		});
 		btnCreateBatchfile.setText("Create Batchfile");
 
 	}
+
+	@Override
+	public void updateText(String newMessage) {
+		// ignore
+	}
+
+	@Override
+	public void errStream(String errMessage) {
+		// ignore
+	}
+
+	@Override
+	public void trace(String traceMessage) {
+		// ignore
+	}
+
+	@Override
+	public void printStacktrace(Exception e) {
+		// ignore
+		
+	}
+
+	@Override
+	public void commandNotification(String command) {
+		history.add(command);
+		if( isOpen ) {
+			commandHistoryList.add(command);
+		}
+	}
+	
+	public boolean isOpen() {
+		return isOpen;
+	}
+	
+	private String getSelectedCommands() {
+		StringBuilder commands = new StringBuilder();
+		for( String command : commandHistoryList.getSelection()) {
+			commands.append(command + StringTools.ENDLINE);
+		}
+		return commands.toString();
+	}
 }
Index: trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/ConsoleTabComposite.java
===================================================================
--- trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/ConsoleTabComposite.java	(revision 194)
+++ trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/ConsoleTabComposite.java	(revision 195)
@@ -69,5 +69,5 @@
 		btnEnter.setText("Enter");
 		
-		textConsoleOutput = new Text(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL);
+		textConsoleOutput = new Text(this, SWT.BORDER | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL);
 		GridData gd_textConsoleOutput = new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1);
 		gd_textConsoleOutput.heightHint = 102;
Index: trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/MainWindow.java
===================================================================
--- trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/MainWindow.java	(revision 194)
+++ trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/MainWindow.java	(revision 195)
@@ -5,4 +5,5 @@
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.Text;
@@ -13,4 +14,6 @@
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
+
+import de.ugoe.cs.util.console.CommandExecuter;
 
 public class MainWindow {
@@ -26,4 +29,6 @@
 	protected ModelsTabComposite modelsTabComposite;
 	protected DataTabComposite dataTabComposite;
+	
+	protected CommandHistoryDialog historyDialog;
 
 
@@ -36,4 +41,5 @@
 		createContents();
 		new SWTConsole(getTextConsoleOutput());
+		historyDialog = new CommandHistoryDialog(shell, SWT.NONE);
 		shell.open();
 		shell.layout();
@@ -64,7 +70,26 @@
 		
 		MenuItem mntmShowHistory = new MenuItem(menu_1, SWT.NONE);
+		mntmShowHistory.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if( !historyDialog.isOpen()) {
+					historyDialog.open();
+				}
+			}
+		});
 		mntmShowHistory.setText("Show History");
 		
 		MenuItem mntmExecBatchFile = new MenuItem(menu_1, SWT.NONE);
+		mntmExecBatchFile.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				FileDialog fileDialog = new FileDialog(shell, SWT.OPEN);
+				String filename = fileDialog.open();
+				if( filename!=null ) {
+					String command = "exec '" + filename + "'";
+					CommandExecuter.getInstance().exec(command);
+				}
+			}
+		});
 		mntmExecBatchFile.setText("Exec. Batch File");
 		
@@ -72,7 +97,29 @@
 		
 		MenuItem mntmLoad = new MenuItem(menu_1, SWT.NONE);
+		mntmLoad.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				FileDialog fileDialog = new FileDialog(shell, SWT.OPEN);
+				String filename = fileDialog.open();
+				if( filename!=null ) {
+					String command = "load '" + filename + "'";
+					CommandExecuter.getInstance().exec(command);
+				}
+			}
+		});
 		mntmLoad.setText("Load...");
 		
 		MenuItem mntmSave = new MenuItem(menu_1, SWT.NONE);
+		mntmSave.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				FileDialog fileDialog = new FileDialog(shell, SWT.SAVE);
+				String filename = fileDialog.open();
+				if( filename!=null ) {
+					String command = "save '" + filename + "'";
+					CommandExecuter.getInstance().exec(command);
+				}
+			}
+		});
 		mntmSave.setText("Save...");
 		
@@ -80,4 +127,10 @@
 		
 		MenuItem mntmExit = new MenuItem(menu_1, SWT.NONE);
+		mntmExit.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				shell.dispose();
+			}
+		});
 		mntmExit.setText("Exit");
 		
@@ -89,4 +142,11 @@
 		
 		MenuItem mntmAbout = new MenuItem(menu_2, SWT.NONE);
+		mntmAbout.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				AboutDialog aboutDialog = new AboutDialog(shell, SWT.NONE);
+				aboutDialog.open();
+			}
+		});
 		mntmAbout.setText("About");
 		
@@ -125,5 +185,5 @@
 		modelsTabComposite = new ModelsTabComposite(tabFolder, SWT.NO_BACKGROUND);
 		modelsTab.setControl(modelsTabComposite);
-				
+		
 		dataTab = new TabItem(tabFolder, SWT.NONE);
 		dataTab.setText("Data");
Index: trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/ModelPropertiesDialog.java
===================================================================
--- trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/ModelPropertiesDialog.java	(revision 194)
+++ trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/ModelPropertiesDialog.java	(revision 195)
@@ -121,4 +121,10 @@
 		
 		Button btnClose = new Button(shlModelProperties, SWT.NONE);
+		btnClose.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				shlModelProperties.dispose();
+			}
+		});
 		btnClose.setText("Close");
 
Index: trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/SequencesTabComposite.java
===================================================================
--- trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/SequencesTabComposite.java	(revision 194)
+++ trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swt/SequencesTabComposite.java	(revision 195)
@@ -8,4 +8,5 @@
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.MessageBox;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.layout.GridData;
@@ -38,4 +39,14 @@
 		
 		Button btnEdit = new Button(this, SWT.NONE);
+		btnEdit.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				// TODO implement edit sequences.
+				MessageBox messageBox = new MessageBox(getShell(), SWT.ICON_INFORMATION);
+				messageBox.setText("Not implemented!");
+				messageBox.setMessage("Sorry! This functionality has not been implemented yet!");
+				messageBox.open();
+			}
+		});
 		btnEdit.setText("Edit");
 		
@@ -91,4 +102,14 @@
 		
 		Button btnParse = new Button(this, SWT.NONE);
+		btnParse.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				// TODO implement parsing of sequences
+				MessageBox messageBox = new MessageBox(getShell(), SWT.ICON_INFORMATION);
+				messageBox.setText("Not implemented!");
+				messageBox.setMessage("Sorry! This functionality has not been implemented yet!");
+				messageBox.open();
+			}
+		});
 		btnParse.setText("Parse");
 	}
