core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/editor/NavigationBar.java
changeset 2062 4d032dc346bf
parent 2053 683a3be65e07
child 2068 8db6518f7141
--- a/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/editor/NavigationBar.java	Mon Sep 20 13:13:27 2010 -0600
+++ b/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/editor/NavigationBar.java	Mon Sep 20 14:29:54 2010 -0500
@@ -22,16 +22,104 @@
 import org.eclipse.jface.resource.FontDescriptor;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.MouseTrackAdapter;
+import org.eclipse.swt.events.MouseTrackListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.FontData;
 import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+
+import com.nokia.cpp.internal.api.utils.core.ListenerList;
 
 class NavigationBar extends RoundedCornerComposite {
+	private class Button extends CLabel {
+		private ListenerList<SelectionListener> listeners;
+		private boolean selection;
+		private MouseTrackListener mouseTrackListener;
+		private MouseListener mouseListener;
+		
+		public Button(Composite parent) {
+			super(parent, SWT.CENTER);
+			listeners = new ListenerList<SelectionListener>();
+			setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
+			addMouseTrackListener(mouseTrackListener = new MouseTrackAdapter() {
+				@Override
+				public void mouseExit(MouseEvent e) {
+					if (!selection)
+						setBackgroundColor();
+					
+				}
+				
+				@Override
+				public void mouseEnter(MouseEvent e) {
+					if (!selection)
+						setBackground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
+				}
+			});
+			
+			addMouseListener(mouseListener = new MouseAdapter() {
+				@Override
+				public void mouseUp(MouseEvent e) {
+					setSelection(true);
+				}
+			});
+		}
+		
+		@Override
+		protected void checkSubclass() {
+		}
+
+		public void addSelectionListener(SelectionListener listener) {
+			listeners.add(listener);
+		}
+
+		public void setSelection(boolean selection) {
+			if (this.selection != selection) {
+				this.selection = selection;
+				setBackgroundColor();
+				if (selection) {
+					for (Control control : getParent().getChildren()) {
+						if (control instanceof Button) {
+							if (!control.equals(this)) {
+								((Button) control).setSelection(false);
+							}
+						}
+					}
+					fireSelection();
+				}
+			}
+		}
+
+		private void fireSelection() {
+			Event e = new Event();
+			e.widget = this;
+			e.display = getDisplay();
+			for (SelectionListener listener : listeners) {
+				listener.widgetSelected(new SelectionEvent(e));
+			}
+			
+		}
+
+		private void setBackgroundColor() {
+			setBackground(getDisplay().getSystemColor(selection ? SWT.COLOR_WIDGET_NORMAL_SHADOW : SWT.COLOR_WHITE));
+		}
+		
+		@Override
+		public void dispose() {
+			removeMouseTrackListener(mouseTrackListener);
+			removeMouseListener(mouseListener);
+			super.dispose();
+		}
+	}
 
 	private final class ButtonListener extends SelectionAdapter {
 		@Override
@@ -41,7 +129,7 @@
 		}
 	}
 
-	private static final int BUTTON_SPACING = -2;
+	private static final int BUTTON_SPACING = 0;
 	private PortalEditor portalEditor;
 	private Map<Button, PortalPage> buttonToPageMap;
 	private SelectionListener listener;
@@ -70,13 +158,14 @@
 	public void initUI() {
 		if (buttonToPageMap.isEmpty())
 			return;
-		selectNavButton(buttonToPageMap.keySet().iterator().next());
+		buttonToPageMap.keySet().iterator().next().setSelection(true);
 	}
 
 	public void addNavButton(NavigationBar bar, PortalPage page) {
-		Button b = new Button(bar, SWT.TOGGLE);
+		Button b = new Button(bar);
 		b.setFont(buttonFont);
 		b.setText(page.getTitle());
+		b.setToolTipText(page.getTooltip());
 		b.setImage(portalEditor.createImage(page.getImageDescriptor(), 32, 32));
 		b.addSelectionListener(listener);
 		buttonToPageMap.put(b, page);
@@ -84,11 +173,6 @@
 
 
 	public void selectNavButton(Button button) {
-		for (Button other : buttonToPageMap.keySet()) {
-			other.setSelection(false);
-			other.setFont(buttonFont);
-		}
-		button.setSelection(true);
 		portalEditor.showPage(buttonToPageMap.get(button));
 		button.setFont(selectedButtonFont);
 		layout();