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 } |