43 import org.eclipse.swt.widgets.Control; |
41 import org.eclipse.swt.widgets.Control; |
44 import org.eclipse.swt.widgets.Display; |
42 import org.eclipse.swt.widgets.Display; |
45 import org.eclipse.swt.widgets.Event; |
43 import org.eclipse.swt.widgets.Event; |
46 import org.eclipse.swt.widgets.Listener; |
44 import org.eclipse.swt.widgets.Listener; |
47 import org.eclipse.ui.IEditorInput; |
45 import org.eclipse.ui.IEditorInput; |
|
46 import org.eclipse.ui.IEditorPart; |
48 import org.eclipse.ui.IEditorSite; |
47 import org.eclipse.ui.IEditorSite; |
49 import org.eclipse.ui.IPersistableElement; |
48 import org.eclipse.ui.IPersistableElement; |
50 import org.eclipse.ui.PartInitException; |
49 import org.eclipse.ui.PartInitException; |
51 import org.eclipse.ui.PlatformUI; |
50 import org.eclipse.ui.PlatformUI; |
52 import org.eclipse.ui.part.EditorPart; |
51 import org.eclipse.ui.part.EditorPart; |
53 |
52 |
54 import com.nokia.carbide.discovery.ui.Activator; |
53 import com.nokia.carbide.discovery.ui.Activator; |
55 import com.nokia.carbide.discovery.ui.Messages; |
54 import com.nokia.carbide.discovery.ui.Messages; |
56 import com.nokia.carbide.internal.discovery.ui.extension.IPortalPage; |
55 import com.nokia.carbide.internal.discovery.ui.extension.IPortalEditor; |
57 import com.nokia.carbide.internal.discovery.ui.extension.IPortalPage.IActionBar; |
56 import com.nokia.carbide.internal.discovery.ui.extension.IPortalExtension; |
|
57 import com.nokia.carbide.internal.discovery.ui.extension.IPortalExtension.IActionBar; |
58 import com.nokia.cpp.internal.api.utils.core.Pair; |
58 import com.nokia.cpp.internal.api.utils.core.Pair; |
59 import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils; |
59 import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils; |
60 |
60 |
61 public class PortalEditor extends EditorPart { |
61 public class PortalEditor extends EditorPart implements IPortalEditor { |
62 |
62 |
63 private static final String ID = "com.nokia.carbide.discovery.ui.portalEditor"; //$NON-NLS-1$ |
63 private static final String ID = "com.nokia.carbide.discovery.ui.portalEditor"; //$NON-NLS-1$ |
64 private static final String CONTEXT_ID = ID + ".context"; //$NON-NLS-1$ |
64 private static final String CONTEXT_ID = ID + ".context"; //$NON-NLS-1$ |
65 private static IEditorInput input; |
65 private static IEditorInput input; |
66 private List<IPortalPage> uninitializedPages; |
66 private List<PortalPage> pages; |
67 private Composite backgroundParent; |
67 private Composite backgroundParent; |
68 private Image oldBGImg; |
68 private Image oldBGImg; |
69 private List<Resource> resources; |
69 private List<Resource> resources; |
70 private StackComposite stackComposite; |
70 private StackComposite stackComposite; |
71 |
|
72 private Map<IPortalPage, Control> pageToControlMap; |
|
73 private NavigationBar navigationBar; |
71 private NavigationBar navigationBar; |
74 |
72 |
75 public PortalEditor() { |
73 public PortalEditor() { |
76 resources = new ArrayList<Resource>(); |
74 resources = new ArrayList<Resource>(); |
77 loadPortalPages(); |
75 loadPortalPages(); |
78 pageToControlMap = new HashMap<IPortalPage, Control>(); |
|
79 } |
76 } |
80 |
77 |
81 private void loadPortalPages() { |
78 private void loadPortalPages() { |
82 List<Pair<IPortalPage, Integer>> pageExtensions = new ArrayList<Pair<IPortalPage,Integer>>(); |
79 List<Pair<PortalPage, Integer>> pageList = new ArrayList<Pair<PortalPage, Integer>>(); |
83 IConfigurationElement[] elements = |
80 IConfigurationElement[] elements = |
84 Platform.getExtensionRegistry().getConfigurationElementsFor(Activator.PLUGIN_ID + ".portalPage"); //$NON-NLS-1$ |
81 Platform.getExtensionRegistry().getConfigurationElementsFor(Activator.PLUGIN_ID + ".portalPage"); //$NON-NLS-1$ |
85 for (IConfigurationElement element : elements) { |
82 for (IConfigurationElement element : elements) { |
86 try { |
83 try { |
87 IPortalPage portalPage = (IPortalPage) element.createExecutableExtension("class"); //$NON-NLS-1$ |
84 IPortalExtension portalExtension = (IPortalExtension) element.createExecutableExtension("class"); //$NON-NLS-1$ |
88 String rankString = element.getAttribute("rank"); //$NON-NLS-1$ |
85 String id = element.getAttribute("id"); //$NON-NLS-1$ |
89 int rank = Integer.MAX_VALUE; |
86 String orderString = element.getAttribute("order"); //$NON-NLS-1$ |
90 if (rankString != null) { |
87 int order = Integer.MAX_VALUE; |
|
88 if (orderString != null) { |
91 try { |
89 try { |
92 rank = Integer.parseInt(rankString); |
90 order = Integer.parseInt(orderString); |
93 } |
91 } |
94 catch (NumberFormatException e) { |
92 catch (NumberFormatException e) { |
95 Activator.logError(MessageFormat.format(Messages.PortalEditor_PageRankError, |
93 Activator.logError(MessageFormat.format(Messages.PortalEditor_PageRankError, |
96 portalPage.getClass().getName()), e); |
94 portalExtension.getClass().getName()), e); |
97 } |
95 } |
98 } |
96 } |
99 pageExtensions.add(new Pair<IPortalPage, Integer>(portalPage, rank)); |
97 pageList.add(new Pair<PortalPage, Integer>(new PortalPage(portalExtension, id), order)); |
100 } |
98 } |
101 catch (CoreException e) { |
99 catch (CoreException e) { |
102 Activator.logError(Messages.PortalEditor_PageLoadError, e); |
100 Activator.logError(Messages.PortalEditor_PageLoadError, e); |
103 } |
101 } |
104 } |
102 } |
105 Collections.sort(pageExtensions, new Comparator<Pair<IPortalPage, Integer>>() { |
103 Collections.sort(pageList, new Comparator<Pair<PortalPage, Integer>>() { |
106 @Override |
104 @Override |
107 public int compare(Pair<IPortalPage, Integer> o1, Pair<IPortalPage, Integer> o2) { |
105 public int compare(Pair<PortalPage, Integer> o1, Pair<PortalPage, Integer> o2) { |
108 return o1.second.compareTo(o2.second); |
106 return o1.second.compareTo(o2.second); |
109 } |
107 } |
110 }); |
108 }); |
111 uninitializedPages = new ArrayList<IPortalPage>(); |
109 pages = new ArrayList<PortalPage>(); |
112 for (Pair<IPortalPage, Integer> pair : pageExtensions) { |
110 for (Pair<PortalPage, Integer> pair : pageList) { |
113 uninitializedPages.add(pair.first); |
111 pages.add(pair.first); |
114 } |
112 } |
115 } |
113 } |
116 |
114 |
117 @Override |
115 @Override |
118 public void doSave(IProgressMonitor monitor) { |
116 public void doSave(IProgressMonitor monitor) { |
149 private Composite createBody(final Composite parent) { |
147 private Composite createBody(final Composite parent) { |
150 // create background |
148 // create background |
151 backgroundParent = new Composite(parent, SWT.NONE); |
149 backgroundParent = new Composite(parent, SWT.NONE); |
152 applyBG(backgroundParent); |
150 applyBG(backgroundParent); |
153 GridLayoutFactory.fillDefaults().applyTo(backgroundParent); |
151 GridLayoutFactory.fillDefaults().applyTo(backgroundParent); |
154 // create top naviation bar |
152 // create top navigation bar |
155 navigationBar = createNavigationBar(backgroundParent); |
153 navigationBar = createNavigationBar(backgroundParent); |
156 GridDataFactory.swtDefaults().grab(true, false).align(SWT.CENTER, SWT.TOP).indent(10, 10).applyTo(navigationBar); |
154 GridDataFactory.swtDefaults().grab(true, false).align(SWT.CENTER, SWT.TOP).indent(10, 10).applyTo(navigationBar); |
157 // create stack composite |
155 // create stack composite |
158 createStackComposite(backgroundParent, navigationBar); |
156 createStackComposite(backgroundParent, navigationBar); |
159 return backgroundParent; |
157 return backgroundParent; |
160 } |
158 } |
161 |
159 |
162 private void createStackComposite(Composite parent, NavigationBar bar) { |
160 private void createStackComposite(Composite parent, NavigationBar bar) { |
163 stackComposite = new StackComposite(parent, backgroundParent); |
161 stackComposite = new StackComposite(parent, backgroundParent); |
164 for (IPortalPage page : uninitializedPages) { |
162 for (PortalPage page : pages) { |
165 Control control = createPage(page); |
163 page.setControl(createPage(page.getPortalExtension())); |
166 pageToControlMap.put(page, control); |
|
167 } |
164 } |
168 GridDataFactory.fillDefaults().grab(true, true).applyTo(stackComposite); |
165 GridDataFactory.fillDefaults().grab(true, true).applyTo(stackComposite); |
169 } |
166 } |
170 |
167 |
171 private Control createPage(IPortalPage page) { |
168 private Control createPage(IPortalExtension page) { |
172 Composite pageComposite = new SharedBackgroundComposite(stackComposite, backgroundParent); |
169 Composite pageComposite = new SharedBackgroundComposite(stackComposite, backgroundParent); |
173 GridLayoutFactory.fillDefaults().numColumns(2).spacing(20, 0).extendedMargins(20, 20, 20, 0).applyTo(pageComposite); |
170 GridLayoutFactory.fillDefaults().numColumns(2).spacing(20, 0).extendedMargins(20, 20, 20, 0).applyTo(pageComposite); |
174 ActionUIUpdater updater = new ActionUIUpdater(); |
171 ActionUIUpdater updater = new ActionUIUpdater(); |
175 IActionBar[] commandBars = page.createCommandBars(this, updater); |
172 IActionBar[] commandBars = page.createCommandBars(this, updater); |
176 if (commandBars.length > 0) { |
173 if (commandBars.length > 0) { |