Fixed: [Issue 10] Users should be able to change terminal's title
diff --git a/com.google.eclipse.terminal.local/icons/change_title.gif b/com.google.eclipse.terminal.local/icons/change_title.gif
new file mode 100644
index 0000000..efc77a7
--- /dev/null
+++ b/com.google.eclipse.terminal.local/icons/change_title.gif
Binary files differ
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/Activator.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/Activator.java
index 43341d2..c1d40ac 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/Activator.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/Activator.java
@@ -17,7 +17,7 @@
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.resource.*;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.*;
+import org.osgi.framework.BundleContext;
 
 /**
  * The activator class controls the plug-in life cycle.
@@ -40,11 +40,15 @@
   }
 
   @Override protected void initializeImageRegistry(ImageRegistry registry) {
-    Bundle bundle = instance().getBundle();
-    URL newTerminalImageUrl = bundle.getEntry("icons/new_terminal.gif");
-    registry.put(NEW_TERMINAL, ImageDescriptor.createFromURL(newTerminalImageUrl));
-    URL scrollLockImageUrl = bundle.getEntry("icons/scroll_lock.gif");
-    registry.put(SCROLL_LOCK, ImageDescriptor.createFromURL(scrollLockImageUrl));
+    addImage(registry, CHANGE_TITLE, "icons/change_title.gif");
+    addImage(registry, NEW_TERMINAL, "icons/new_terminal.gif");
+    addImage(registry, SCROLL_LOCK, "icons/scroll_lock.gif");
+  }
+
+  private void addImage(ImageRegistry registry, String key, String path) {
+    URL imageUrl = instance().getBundle().getEntry(path);
+    registry.put(key, ImageDescriptor.createFromURL(imageUrl));
+
   }
 
   public static void log(String message, Throwable cause) {
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ImageKeys.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ImageKeys.java
index 25b78fb..0dfff3e 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ImageKeys.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ImageKeys.java
@@ -12,6 +12,7 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public final class ImageKeys {
+  public static final String CHANGE_TITLE = "changeTitle";
   public static final String NEW_TERMINAL = "newTerminal";
   public static final String SCROLL_LOCK = "scrollLock";
 
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java
index 96db96b..a9c5cee 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java
@@ -15,9 +15,12 @@
  */
 public class Messages extends NLS {
   public static String alwaysCloseWithoutWarn;
+  public static String changeTerminalTitle;
   public static String closeTerminalQuestion;
   public static String confirmCloseDialogTitle;
   public static String defaultViewTitle;
+  public static String enterTerminalTitleDialogTitle;
+  public static String enterTerminalTitlePrompt;
   public static String newLocalTerminal;
   public static String scrollLock;
 
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties
index a5c0377..59232db 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties
@@ -1,6 +1,9 @@
 alwaysCloseWithoutWarn=Always close without warn
+changeTerminalTitle=Change Title
 closeTerminalQuestion=Close terminal?
 confirmCloseDialogTitle=Confirm Close
 defaultViewTitle=Local Terminal
+enterTerminalTitleDialogTitle=Enter New Terminal Title
+enterTerminalTitlePrompt=Enter the new title for the terminal:
 newLocalTerminal=New Local Terminal
 scrollLock=Scroll Lock
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
index 2a1d9b8..7deb6d3 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
@@ -17,12 +17,14 @@
 import static org.eclipse.core.runtime.Path.fromOSString;
 import static org.eclipse.core.runtime.Status.OK_STATUS;
 import static org.eclipse.jface.resource.JFaceResources.TEXT_FONT;
+import static org.eclipse.jface.window.Window.OK;
 import static org.eclipse.ui.IWorkbenchPage.VIEW_ACTIVATE;
 
 import java.util.UUID;
 
 import org.eclipse.core.runtime.*;
 import org.eclipse.jface.action.*;
+import org.eclipse.jface.dialogs.*;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.util.*;
 import org.eclipse.swt.graphics.Font;
@@ -193,6 +195,8 @@
 
   private void setupToolBarActions() {
     IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
+    toolBarManager.add(new ChangeViewNameAction());
+    toolBarManager.add(new Separator());
     newTerminalAction = new NewTerminalAction();
     toolBarManager.add(newTerminalAction);
     scrollLockAction = new ScrollLockAction();
@@ -270,30 +274,6 @@
     return (IContextService) getSite().getService(IContextService.class);
   }
 
-  private class NewTerminalAction extends Action {
-    NewTerminalAction() {
-      setImageDescriptor(imageDescriptor(NEW_TERMINAL));
-      setText(newLocalTerminal);
-    }
-
-    @Override public void run() {
-      openTerminalView(UUID.randomUUID().toString(), workingDirectory);
-    }
-  }
-
-  private class ScrollLockAction extends Action {
-    ScrollLockAction() {
-      super(scrollLock, AS_RADIO_BUTTON);
-      setChecked(false);
-      setImageDescriptor(imageDescriptor(SCROLL_LOCK));
-    }
-
-    @Override public void run() {
-      boolean newValue = !terminalWidget.isScrollLockEnabled();
-      enableScrollLockAndUpdateAction(newValue);
-    }
-  }
-
   @Override public boolean isDirty() {
     if (checkCanBeClosed) {
       checkCanBeClosed = false;
@@ -327,4 +307,53 @@
   @Override public boolean isSaveAsAllowed() {
     return false;
   }
+
+  private class NewTerminalAction extends Action {
+    NewTerminalAction() {
+      setImageDescriptor(imageDescriptor(NEW_TERMINAL));
+      setText(newLocalTerminal);
+    }
+
+    @Override public void run() {
+      openTerminalView(UUID.randomUUID().toString(), workingDirectory);
+    }
+  }
+
+  private class ScrollLockAction extends Action {
+    ScrollLockAction() {
+      super(scrollLock, AS_RADIO_BUTTON);
+      setChecked(false);
+      setImageDescriptor(imageDescriptor(SCROLL_LOCK));
+    }
+
+    @Override public void run() {
+      boolean newValue = !terminalWidget.isScrollLockEnabled();
+      enableScrollLockAndUpdateAction(newValue);
+    }
+  }
+
+  private class ChangeViewNameAction extends Action {
+    ChangeViewNameAction() {
+      setImageDescriptor(imageDescriptor(CHANGE_TITLE));
+      setText(changeTerminalTitle);
+    }
+
+    @Override public void run() {
+      Shell shell = getViewSite().getShell();
+      final String currentTitle = getPartName();
+      InputDialog input = new InputDialog(shell, enterTerminalTitleDialogTitle, enterTerminalTitlePrompt, currentTitle,
+          new IInputValidator() {
+            @Override public String isValid(String newText) {
+              if (newText == null || newText.isEmpty() || currentTitle.equals(newText)) {
+                return "";
+              }
+              return null;
+            }
+          });
+      input.setBlockOnOpen(true);
+      if (input.open() == OK) {
+        setPartName(input.getValue());
+      }
+    }
+  }
 }