core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/editor/NavigationBar.java
--- 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();