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
equal deleted inserted replaced
2061:6e114e9bc527 2062:4d032dc346bf
    20 import java.util.Map;
    20 import java.util.Map;
    21 
    21 
    22 import org.eclipse.jface.resource.FontDescriptor;
    22 import org.eclipse.jface.resource.FontDescriptor;
    23 import org.eclipse.jface.resource.JFaceResources;
    23 import org.eclipse.jface.resource.JFaceResources;
    24 import org.eclipse.swt.SWT;
    24 import org.eclipse.swt.SWT;
       
    25 import org.eclipse.swt.custom.CLabel;
       
    26 import org.eclipse.swt.events.MouseAdapter;
       
    27 import org.eclipse.swt.events.MouseEvent;
       
    28 import org.eclipse.swt.events.MouseListener;
       
    29 import org.eclipse.swt.events.MouseTrackAdapter;
       
    30 import org.eclipse.swt.events.MouseTrackListener;
    25 import org.eclipse.swt.events.SelectionAdapter;
    31 import org.eclipse.swt.events.SelectionAdapter;
    26 import org.eclipse.swt.events.SelectionEvent;
    32 import org.eclipse.swt.events.SelectionEvent;
    27 import org.eclipse.swt.events.SelectionListener;
    33 import org.eclipse.swt.events.SelectionListener;
    28 import org.eclipse.swt.graphics.Font;
    34 import org.eclipse.swt.graphics.Font;
    29 import org.eclipse.swt.graphics.FontData;
    35 import org.eclipse.swt.graphics.FontData;
    30 import org.eclipse.swt.layout.FillLayout;
    36 import org.eclipse.swt.layout.FillLayout;
    31 import org.eclipse.swt.widgets.Button;
       
    32 import org.eclipse.swt.widgets.Composite;
    37 import org.eclipse.swt.widgets.Composite;
       
    38 import org.eclipse.swt.widgets.Control;
       
    39 import org.eclipse.swt.widgets.Event;
       
    40 
       
    41 import com.nokia.cpp.internal.api.utils.core.ListenerList;
    33 
    42 
    34 class NavigationBar extends RoundedCornerComposite {
    43 class NavigationBar extends RoundedCornerComposite {
       
    44 	private class Button extends CLabel {
       
    45 		private ListenerList<SelectionListener> listeners;
       
    46 		private boolean selection;
       
    47 		private MouseTrackListener mouseTrackListener;
       
    48 		private MouseListener mouseListener;
       
    49 		
       
    50 		public Button(Composite parent) {
       
    51 			super(parent, SWT.CENTER);
       
    52 			listeners = new ListenerList<SelectionListener>();
       
    53 			setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
       
    54 			addMouseTrackListener(mouseTrackListener = new MouseTrackAdapter() {
       
    55 				@Override
       
    56 				public void mouseExit(MouseEvent e) {
       
    57 					if (!selection)
       
    58 						setBackgroundColor();
       
    59 					
       
    60 				}
       
    61 				
       
    62 				@Override
       
    63 				public void mouseEnter(MouseEvent e) {
       
    64 					if (!selection)
       
    65 						setBackground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
       
    66 				}
       
    67 			});
       
    68 			
       
    69 			addMouseListener(mouseListener = new MouseAdapter() {
       
    70 				@Override
       
    71 				public void mouseUp(MouseEvent e) {
       
    72 					setSelection(true);
       
    73 				}
       
    74 			});
       
    75 		}
       
    76 		
       
    77 		@Override
       
    78 		protected void checkSubclass() {
       
    79 		}
       
    80 
       
    81 		public void addSelectionListener(SelectionListener listener) {
       
    82 			listeners.add(listener);
       
    83 		}
       
    84 
       
    85 		public void setSelection(boolean selection) {
       
    86 			if (this.selection != selection) {
       
    87 				this.selection = selection;
       
    88 				setBackgroundColor();
       
    89 				if (selection) {
       
    90 					for (Control control : getParent().getChildren()) {
       
    91 						if (control instanceof Button) {
       
    92 							if (!control.equals(this)) {
       
    93 								((Button) control).setSelection(false);
       
    94 							}
       
    95 						}
       
    96 					}
       
    97 					fireSelection();
       
    98 				}
       
    99 			}
       
   100 		}
       
   101 
       
   102 		private void fireSelection() {
       
   103 			Event e = new Event();
       
   104 			e.widget = this;
       
   105 			e.display = getDisplay();
       
   106 			for (SelectionListener listener : listeners) {
       
   107 				listener.widgetSelected(new SelectionEvent(e));
       
   108 			}
       
   109 			
       
   110 		}
       
   111 
       
   112 		private void setBackgroundColor() {
       
   113 			setBackground(getDisplay().getSystemColor(selection ? SWT.COLOR_WIDGET_NORMAL_SHADOW : SWT.COLOR_WHITE));
       
   114 		}
       
   115 		
       
   116 		@Override
       
   117 		public void dispose() {
       
   118 			removeMouseTrackListener(mouseTrackListener);
       
   119 			removeMouseListener(mouseListener);
       
   120 			super.dispose();
       
   121 		}
       
   122 	}
    35 
   123 
    36 	private final class ButtonListener extends SelectionAdapter {
   124 	private final class ButtonListener extends SelectionAdapter {
    37 		@Override
   125 		@Override
    38 		public void widgetSelected(SelectionEvent e) {
   126 		public void widgetSelected(SelectionEvent e) {
    39 			Button button = (Button) e.getSource();
   127 			Button button = (Button) e.getSource();
    40 			selectNavButton(button);
   128 			selectNavButton(button);
    41 		}
   129 		}
    42 	}
   130 	}
    43 
   131 
    44 	private static final int BUTTON_SPACING = -2;
   132 	private static final int BUTTON_SPACING = 0;
    45 	private PortalEditor portalEditor;
   133 	private PortalEditor portalEditor;
    46 	private Map<Button, PortalPage> buttonToPageMap;
   134 	private Map<Button, PortalPage> buttonToPageMap;
    47 	private SelectionListener listener;
   135 	private SelectionListener listener;
    48 	private Font buttonFont;
   136 	private Font buttonFont;
    49 	private Font selectedButtonFont;
   137 	private Font selectedButtonFont;
    68 	}
   156 	}
    69 
   157 
    70 	public void initUI() {
   158 	public void initUI() {
    71 		if (buttonToPageMap.isEmpty())
   159 		if (buttonToPageMap.isEmpty())
    72 			return;
   160 			return;
    73 		selectNavButton(buttonToPageMap.keySet().iterator().next());
   161 		buttonToPageMap.keySet().iterator().next().setSelection(true);
    74 	}
   162 	}
    75 
   163 
    76 	public void addNavButton(NavigationBar bar, PortalPage page) {
   164 	public void addNavButton(NavigationBar bar, PortalPage page) {
    77 		Button b = new Button(bar, SWT.TOGGLE);
   165 		Button b = new Button(bar);
    78 		b.setFont(buttonFont);
   166 		b.setFont(buttonFont);
    79 		b.setText(page.getTitle());
   167 		b.setText(page.getTitle());
       
   168 		b.setToolTipText(page.getTooltip());
    80 		b.setImage(portalEditor.createImage(page.getImageDescriptor(), 32, 32));
   169 		b.setImage(portalEditor.createImage(page.getImageDescriptor(), 32, 32));
    81 		b.addSelectionListener(listener);
   170 		b.addSelectionListener(listener);
    82 		buttonToPageMap.put(b, page);
   171 		buttonToPageMap.put(b, page);
    83 	}
   172 	}
    84 
   173 
    85 
   174 
    86 	public void selectNavButton(Button button) {
   175 	public void selectNavButton(Button button) {
    87 		for (Button other : buttonToPageMap.keySet()) {
       
    88 			other.setSelection(false);
       
    89 			other.setFont(buttonFont);
       
    90 		}
       
    91 		button.setSelection(true);
       
    92 		portalEditor.showPage(buttonToPageMap.get(button));
   176 		portalEditor.showPage(buttonToPageMap.get(button));
    93 		button.setFont(selectedButtonFont);
   177 		button.setFont(selectedButtonFont);
    94 		layout();
   178 		layout();
    95 	}
   179 	}
    96 }
   180 }