| /******************************************************************************* |
| * Copyright (c) 2000, 2003 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials! |
| * are made available under the terms of the Common Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/cpl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * Dan Rubel <dan_rubel@instantiations.com> |
| * - Fix for bug 11490 - define hidden view (placeholder for view) in plugin.xml |
| ************************************************************************/ |
| package org.eclipse.ui.internal; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.eclipse.core.internal.runtime.Assert; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.ui.IFolderLayout; |
| import org.eclipse.ui.IPageLayout; |
| import org.eclipse.ui.IPerspectiveDescriptor; |
| import org.eclipse.ui.IPlaceholderFolderLayout; |
| import org.eclipse.ui.IViewLayout; |
| import org.eclipse.ui.IViewReference; |
| import org.eclipse.ui.PartInitException; |
| import org.eclipse.ui.activities.WorkbenchActivityHelper; |
| import org.eclipse.ui.internal.registry.ActionSetRegistry; |
| import org.eclipse.ui.internal.registry.IActionSetDescriptor; |
| import org.eclipse.ui.internal.registry.IViewDescriptor; |
| |
| /** |
| * This factory is used to define the initial layout of a part sash container. |
| * <p> |
| * Design notes: The design of <code>IPageLayout</code> is a reflection of |
| * three requirements: |
| * <ol> |
| * <li>A mechanism is required to define the initial layout for a page. </li> |
| * <li>The views and editors within a page will be persisted between |
| * sessions.</li> |
| * <li>The view and editor lifecycle for (1) and (2) should be identical.</li> |
| * </ol> |
| * </p> |
| * <p> |
| * In reflection of these requirements, the following strategy has been |
| * implemented for layout definition. |
| * <ol> |
| * <li>A view extension is added to the workbench registry for the view. |
| * This extension defines the extension id and extension class. </li> |
| * <li>A view is added to a page by invoking one of the add methods |
| * in <code>IPageLayout</code>. The type of view is passed as an |
| * extension id, rather than a handle. The page layout will map |
| * the extension id to a view class, create an instance of the class, |
| * and then add the view to the page.</li> |
| * </ol> |
| * </p> |
| */ |
| public class PageLayout implements IPageLayout { |
| private ArrayList actionSets = new ArrayList(3); |
| private IPerspectiveDescriptor descriptor; |
| private LayoutPart editorFolder; |
| private boolean editorVisible = true; |
| private boolean fixed; |
| private ArrayList fastViews = new ArrayList(3); |
| private Map mapIDtoFolder = new HashMap(10); |
| private Map mapIDtoPart = new HashMap(10); |
| private Map mapIDtoViewLayoutRec = new HashMap(10); |
| private ArrayList newWizardActionIds = new ArrayList(3); |
| private ArrayList perspectiveActionIds = new ArrayList(3); |
| private ViewSashContainer rootLayoutContainer; |
| private ArrayList showInPartIds = new ArrayList(3); |
| private ArrayList showViewActionIds = new ArrayList(3); |
| private ViewFactory viewFactory; |
| |
| /** |
| * Constructs a new PageLayout for other purposes. |
| */ |
| public PageLayout() { |
| //no-op |
| } |
| |
| /** |
| * Constructs a new PageLayout for the normal case of creating a new |
| * perspective. |
| */ |
| public PageLayout( |
| ViewSashContainer container, |
| ViewFactory viewFactory, |
| LayoutPart editorFolder, |
| IPerspectiveDescriptor descriptor) { |
| super(); |
| this.viewFactory = viewFactory; |
| this.rootLayoutContainer = container; |
| this.editorFolder = editorFolder; |
| this.descriptor = descriptor; |
| prefill(); |
| } |
| |
| /** |
| * Adds the editor to a layout. |
| */ |
| private void addEditorArea() { |
| try { |
| // Create the part. |
| LayoutPart newPart = createView(ID_EDITOR_AREA); |
| if (newPart == null) |
| // this should never happen as long as newID is the editor ID. |
| return; |
| |
| setRefPart(ID_EDITOR_AREA, newPart); |
| |
| // Add it to the layout. |
| rootLayoutContainer.add(newPart); |
| } catch (PartInitException e) { |
| WorkbenchPlugin.log(e.getMessage()); |
| } |
| } |
| |
| /** |
| * Adds an action set to the page. |
| * |
| * @param actionSetID Identifies the action set extension to use. It must |
| * exist within the workbench registry. |
| */ |
| public void addActionSet(String actionSetID) { |
| if (!actionSets.contains(actionSetID)) { |
| actionSets.add(actionSetID); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#addFastView(java.lang.String) |
| */ |
| public void addFastView(String id) { |
| addFastView(id, INVALID_RATIO); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#addFastView(java.lang.String, float) |
| */ |
| public void addFastView(String id, float ratio) { |
| if (checkPartInLayout(id)) |
| return; |
| if (id != null) { |
| try { |
| IViewReference ref = viewFactory.createView(id); |
| fastViews.add(ref); |
| |
| // force creation of the view layout rec |
| ViewLayoutRec rec = getViewLayoutRec(id, true); |
| |
| // remember the ratio, if valid |
| if (ratio >= IPageLayout.RATIO_MIN |
| && ratio <= IPageLayout.RATIO_MAX) { |
| rec.fastViewWidthRatio = ratio; |
| } |
| } catch (PartInitException e) { |
| WorkbenchPlugin.log(e.getMessage()); |
| } |
| } |
| } |
| |
| /** |
| * Returns the view layout record for the given view id, or null if not found. |
| * If create is true, the record is created if it doesn't already exist. |
| * |
| * @since 3.0 |
| */ |
| ViewLayoutRec getViewLayoutRec(String id, boolean create) { |
| Assert.isNotNull(getRefPart(id)); |
| |
| ViewLayoutRec rec = (ViewLayoutRec) mapIDtoViewLayoutRec.get(id); |
| if (rec == null && create) { |
| rec = new ViewLayoutRec(); |
| // set up the view layout appropriately if the page layout is fixed |
| if (isFixed()) { |
| rec.isCloseable = false; |
| rec.isMoveable = false; |
| } |
| mapIDtoViewLayoutRec.put(id, rec); |
| } |
| return rec; |
| } |
| |
| /** |
| * Adds a creation wizard to the File New menu. |
| * The id must name a new wizard extension contributed to the |
| * workbench's extension point (named <code>"org.eclipse.ui.newWizards"</code>). |
| * |
| * @param id the wizard id |
| */ |
| public void addNewWizardShortcut(String id) { |
| if (!newWizardActionIds.contains(id)) { |
| newWizardActionIds.add(id); |
| } |
| } |
| |
| /** |
| * Add the layout part to the page's layout |
| */ |
| private void addPart( |
| LayoutPart newPart, |
| String partId, |
| int relationship, |
| float ratio, |
| String refId) { |
| |
| setRefPart(partId, newPart); |
| |
| // If the referenced part is inside a folder, |
| // then use the folder as the reference part. |
| LayoutPart refPart = getFolderPart(refId); |
| if (refPart == null) |
| refPart = getRefPart(refId); |
| |
| // Add it to the layout. |
| if (refPart != null) { |
| ratio = normalizeRatio(ratio); |
| rootLayoutContainer.add( |
| newPart, |
| getPartSashConst(relationship), |
| ratio, |
| refPart); |
| } else { |
| WorkbenchPlugin.log(WorkbenchMessages.format("PageLayout.missingRefPart", new Object[] { refId })); //$NON-NLS-1$ |
| rootLayoutContainer.add(newPart); |
| } |
| } |
| |
| /** |
| * Adds a perspective shortcut to the Perspective menu. |
| * The id must name a perspective extension contributed to the |
| * workbench's extension point (named <code>"org.eclipse.ui.perspectives"</code>). |
| * |
| * @param id the perspective id |
| */ |
| public void addPerspectiveShortcut(String id) { |
| if (!perspectiveActionIds.contains(id)) { |
| perspectiveActionIds.add(id); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#addPlaceholder(java.lang.String, int, float, java.lang.String) |
| */ |
| public void addPlaceholder( |
| String viewId, |
| int relationship, |
| float ratio, |
| String refId) { |
| if (checkPartInLayout(viewId)) |
| return; |
| |
| // Create the placeholder. |
| PartPlaceholder newPart = new PartPlaceholder(viewId); |
| addPart(newPart, viewId, relationship, ratio, refId); |
| // force creation of the view layout rec |
| getViewLayoutRec(viewId, true); |
| } |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#addShowInPart(java.lang.String) |
| */ |
| public void addShowInPart(String id) { |
| if (!showInPartIds.contains(id)) { |
| showInPartIds.add(id); |
| } |
| } |
| |
| /** |
| * Adds a view to the Show View menu. The id must name a view extension |
| * contributed to the workbench's extension point (named <code>"org.eclipse.ui.views"</code>). |
| * |
| * @param id the view id |
| */ |
| public void addShowViewShortcut(String id) { |
| if (!showViewActionIds.contains(id)) { |
| showViewActionIds.add(id); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#addView(java.lang.String, int, float, java.lang.String) |
| */ |
| public void addView( |
| String viewId, |
| int relationship, |
| float ratio, |
| String refId) { |
| addView(viewId, relationship, ratio, refId, false, true); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#addView(java.lang.String, int, float, java.lang.String) |
| */ |
| private void addView( |
| String viewId, |
| int relationship, |
| float ratio, |
| String refId, |
| boolean standalone, |
| boolean showTitle) { |
| if (checkPartInLayout(viewId)) |
| return; |
| |
| try { |
| // Create the part. |
| LayoutPart newPart = createView(viewId); |
| if (newPart == null) { |
| addPlaceholder(viewId, relationship, ratio, refId); |
| LayoutHelper.addViewActivator(this, viewId); |
| } else { |
| ViewStack newFolder = new ViewStack(rootLayoutContainer.page); |
| newFolder.setStandalone(standalone, showTitle); |
| newFolder.add(newPart); |
| setFolderPart(viewId, newFolder); |
| addPart(newFolder, viewId, relationship, ratio, refId); |
| // force creation of the view layout rec |
| getViewLayoutRec(viewId, true); |
| } |
| } catch (PartInitException e) { |
| WorkbenchPlugin.log(e.getMessage()); |
| } |
| } |
| |
| /** |
| * Verify that the part is already present in the layout |
| * and cannot be added again. Log a warning message. |
| */ |
| /*package*/ |
| boolean checkPartInLayout(String partId) { |
| if (getRefPart(partId) != null) { |
| WorkbenchPlugin.log(WorkbenchMessages.format("PageLayout.duplicateRefPart", new Object[] { partId })); //$NON-NLS-1$ |
| return true; |
| } |
| for (int i = 0; i < fastViews.size(); i++) { |
| if (((IViewReference) fastViews.get(i)).getId().equals(partId)) |
| return true; |
| } |
| |
| return false; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#createFolder(java.lang.String, int, float, java.lang.String) |
| */ |
| public IFolderLayout createFolder( |
| String folderId, |
| int relationship, |
| float ratio, |
| String refId) { |
| if (checkPartInLayout(folderId)) |
| return new FolderLayout( |
| this, |
| (ViewStack) getRefPart(folderId), |
| viewFactory); |
| |
| // Create the folder. |
| ViewStack folder = new ViewStack(rootLayoutContainer.page); |
| folder.setID(folderId); |
| addPart(folder, folderId, relationship, ratio, refId); |
| |
| // Create a wrapper. |
| return new FolderLayout(this, folder, viewFactory); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#createPlaceholderFolder(java.lang.String, int, float, java.lang.String) |
| */ |
| public IPlaceholderFolderLayout createPlaceholderFolder( |
| String folderId, |
| int relationship, |
| float ratio, |
| String refId) { |
| if (checkPartInLayout(folderId)) |
| return new PlaceholderFolderLayout( |
| this, |
| (ContainerPlaceholder) getRefPart(folderId)); |
| |
| // Create the folder. |
| ContainerPlaceholder folder = new ContainerPlaceholder(null); |
| folder.setContainer(rootLayoutContainer); |
| folder.setRealContainer(new ViewStack(rootLayoutContainer.page)); |
| folder.setID(folderId); |
| addPart(folder, folderId, relationship, ratio, refId); |
| |
| // Create a wrapper. |
| return new PlaceholderFolderLayout(this, folder); |
| } |
| |
| /** |
| * Create a new <code>LayoutPart</code>. |
| * |
| * @param partID the id of the part to create. |
| * @return the <code>LayoutPart</code>, or <code>null</code> if it should not be |
| * created because of activity filtering. |
| * @throws PartInitException thrown if there is a problem creating the part. |
| */ |
| private LayoutPart createView(String partID) |
| throws PartInitException { |
| if (partID.equals(ID_EDITOR_AREA)) { |
| return editorFolder; |
| } else { |
| IViewDescriptor viewDescriptor = |
| viewFactory.getViewRegistry().find(partID); |
| if (WorkbenchActivityHelper.filterItem(viewDescriptor)) |
| return null; |
| return LayoutHelper.createView(getViewFactory(), partID); |
| } |
| } |
| |
| /** |
| * @return the action set list for the page. This is <code>List</code> of |
| * <code>String</code>s. |
| */ |
| public ArrayList getActionSets() { |
| return actionSets; |
| } |
| |
| /** |
| * @return Returns the <code>IPerspectiveDescriptor</code> that is driving |
| * the creation of this <code>PageLayout</code>. |
| */ |
| public IPerspectiveDescriptor getDescriptor() { |
| return descriptor; |
| } |
| |
| /** |
| * @return an identifier for the editor area. The editor area is |
| * automatically added to each layout before any other part. It should be |
| * used as a reference part for other views. |
| */ |
| public String getEditorArea() { |
| return ID_EDITOR_AREA; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#getEditorReuseThreshold() |
| */ |
| public int getEditorReuseThreshold() { |
| return -1; |
| } |
| |
| /** |
| * @return <code>ArrayList</code> |
| */ |
| public ArrayList getFastViews() { |
| return fastViews; |
| } |
| |
| /** |
| * @return the folder part containing the given view ID or <code>null</code> |
| * if none (i.e. part of the page layout instead of a folder layout). |
| */ |
| private ViewStack getFolderPart(String viewId) { |
| return (ViewStack) mapIDtoFolder.get(viewId); |
| } |
| |
| /** |
| * @return the new wizard actions the page. This is <code>List</code> of |
| * <code>String</code>s. |
| */ |
| public ArrayList getNewWizardActionIds() { |
| return newWizardActionIds; |
| } |
| |
| /** |
| * @return the part sash container const for a layout value. |
| */ |
| private int getPartSashConst(int nRelationship) { |
| return nRelationship; |
| } |
| |
| /** |
| * @return the perspective actions. This is <code>List</code> of |
| * <code>String</code>s. |
| */ |
| public ArrayList getPerspectiveActionIds() { |
| return perspectiveActionIds; |
| } |
| |
| /** |
| * @return the part for a given ID. |
| */ |
| /*package*/ |
| LayoutPart getRefPart(String partID) { |
| return (LayoutPart) mapIDtoPart.get(partID); |
| } |
| |
| /** |
| * @return the top level layout container. |
| */ |
| public ViewSashContainer getRootLayoutContainer() { |
| return rootLayoutContainer; |
| } |
| |
| /** |
| * @return the ids of the parts to list in the Show In... prompter. This is |
| * a <code>List</code> of <code>String</code>s. |
| */ |
| public ArrayList getShowInPartIds() { |
| return showInPartIds; |
| } |
| |
| /** |
| * @return the ids of the views to list in the Show View shortcuts. This is |
| * a <code>List</code> of <code>String</code>s. |
| */ |
| public ArrayList getShowViewActionIds() { |
| return showViewActionIds; |
| } |
| |
| /** |
| * @return the <code>ViewFactory</code> for this <code>PageLayout</code>. |
| * @since 3.0 |
| */ |
| /* package */ |
| ViewFactory getViewFactory() { |
| return viewFactory; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#isEditorAreaVisible() |
| */ |
| public boolean isEditorAreaVisible() { |
| return editorVisible; |
| } |
| |
| /** |
| * Trim the ratio so that direct manipulation of parts is easy. |
| * |
| * @param in the initial ratio. |
| * @return the normalized ratio. |
| */ |
| private float normalizeRatio(float in) { |
| if (in < RATIO_MIN) |
| in = RATIO_MIN; |
| if (in > RATIO_MAX) |
| in = RATIO_MAX; |
| return in; |
| } |
| |
| /** |
| * Prefill the layout with required parts. |
| */ |
| private void prefill() { |
| addEditorArea(); |
| |
| // Add default action sets. |
| ActionSetRegistry reg = |
| WorkbenchPlugin.getDefault().getActionSetRegistry(); |
| IActionSetDescriptor[] array = reg.getActionSets(); |
| int count = array.length; |
| for (int nX = 0; nX < count; nX++) { |
| IActionSetDescriptor desc = array[nX]; |
| if (desc.isInitiallyVisible()) |
| addActionSet(desc.getId()); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#setEditorAreaVisible(boolean) |
| */ |
| public void setEditorAreaVisible(boolean showEditorArea) { |
| editorVisible = showEditorArea; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#setEditorReuseThreshold(int) |
| */ |
| public void setEditorReuseThreshold(int openEditors) { |
| //no-op |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#setFixed(boolean) |
| */ |
| public void setFixed(boolean fixed) { |
| this.fixed = fixed; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#getFixed() |
| */ |
| public boolean isFixed() { |
| return fixed; |
| } |
| |
| /** |
| * Map the folder part containing the given view ID. |
| * |
| * @param viewId the part ID. |
| * @param container the <code>ContainerPlaceholder</code>. |
| */ |
| /*package*/ |
| void setFolderPart(String viewId, ContainerPlaceholder container) { |
| LayoutPart tabFolder = container.getRealContainer(); |
| mapIDtoFolder.put(viewId, tabFolder); |
| } |
| |
| /** |
| * Map the folder part containing the given view ID. |
| * |
| * @param viewId the part ID. |
| * @param folder the <code>ViewStack</code>. |
| */ |
| /*package*/ |
| void setFolderPart(String viewId, ViewStack folder) { |
| mapIDtoFolder.put(viewId, folder); |
| } |
| |
| /** |
| * Map an ID to a part. |
| * |
| * @param partId the part ID. |
| * @param part the <code>LayoutPart</code>. |
| */ |
| /*package*/ |
| void setRefPart(String partID, LayoutPart part) { |
| mapIDtoPart.put(partID, part); |
| } |
| |
| // stackPart(Layoutpart, String, String) added by dan_rubel@instantiations.com |
| /** |
| * Stack a part on top of another. |
| * |
| * @param newPart the new part. |
| * @param viewId the view ID. |
| * @param refId the reference ID. |
| */ |
| private void stackPart(LayoutPart newPart, String viewId, String refId) { |
| setRefPart(viewId, newPart); |
| // force creation of the view layout rec |
| getViewLayoutRec(viewId, true); |
| |
| // If ref part is in a folder than just add the |
| // new view to that folder. |
| ViewStack folder = getFolderPart(refId); |
| if (folder != null) { |
| folder.add(newPart); |
| setFolderPart(viewId, folder); |
| return; |
| } |
| |
| // If the ref part is in the page layout then create |
| // a new folder and add the new view. |
| LayoutPart refPart = getRefPart(refId); |
| if (refPart != null) { |
| ViewStack newFolder = new ViewStack(rootLayoutContainer.page); |
| rootLayoutContainer.replace(refPart, newFolder); |
| newFolder.add(refPart); |
| newFolder.add(newPart); |
| setFolderPart(refId, newFolder); |
| setFolderPart(viewId, newFolder); |
| return; |
| } |
| |
| // If ref part is not found then just do add. |
| WorkbenchPlugin.log(WorkbenchMessages.format("PageLayout.missingRefPart", new Object[] { refId })); //$NON-NLS-1$ |
| rootLayoutContainer.add(newPart); |
| } |
| |
| // stackPlaceholder(String, String) added by dan_rubel@instantiations.com |
| /** |
| * Stack a placeholder on top of another. |
| * |
| * @param viewId the view ID. |
| * @param refId the reference ID. |
| */ |
| public void stackPlaceholder(String viewId, String refId) { |
| if (checkPartInLayout(viewId)) |
| return; |
| |
| // Create the placeholder. |
| PartPlaceholder newPart = new PartPlaceholder(viewId); |
| |
| LayoutPart refPart = getRefPart(refId); |
| if (refPart != null) { |
| newPart.setContainer(refPart.getContainer()); |
| } |
| |
| stackPart(newPart, viewId, refId); |
| } |
| |
| // stackView(String, String) modified by dan_rubel@instantiations.com |
| /** |
| * Stack one view on top of another. |
| * |
| * @param viewId the view ID. |
| * @param refId the reference ID. |
| */ |
| public void stackView(String viewId, String refId) { |
| if (checkPartInLayout(viewId)) |
| return; |
| |
| // Create the new part. |
| try { |
| LayoutPart newPart = createView(viewId); |
| if (newPart == null) { |
| stackPlaceholder(viewId, refId); |
| LayoutHelper.addViewActivator(this, viewId); |
| } |
| else |
| stackPart(newPart, viewId, refId); |
| } catch (PartInitException e) { |
| WorkbenchPlugin.log(e.getMessage()); |
| } |
| } |
| |
| /** |
| * Converts SWT position constants into layout position constants. |
| * |
| * @param swtConstant one of SWT.TOP, SWT.BOTTOM, SWT.LEFT, or SWT.RIGHT |
| * @return one of IPageLayout.TOP, IPageLayout.BOTTOM, IPageLayout.LEFT, IPageLayout.RIGHT, or -1 indicating an |
| * invalid input |
| * |
| * @since 3.0 |
| */ |
| public static int swtConstantToLayoutPosition(int swtConstant) { |
| switch(swtConstant) { |
| case SWT.TOP: return IPageLayout.TOP; |
| case SWT.BOTTOM: return IPageLayout.BOTTOM; |
| case SWT.RIGHT: return IPageLayout.RIGHT; |
| case SWT.LEFT: return IPageLayout.LEFT; |
| } |
| |
| return -1; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#addStandaloneView(java.lang.String, boolean, int, float, java.lang.String) |
| * @since 3.0 |
| */ |
| public void addStandaloneView(String viewId, boolean showTitle, int relationship, float ratio, String refId) { |
| addView(viewId, relationship, ratio, refId, true, showTitle); |
| ViewLayoutRec rec = getViewLayoutRec(viewId, true); |
| rec.isStandalone = true; |
| rec.showTitle = showTitle; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPageLayout#getViewLayout(java.lang.String) |
| * @since 3.0 |
| */ |
| public IViewLayout getViewLayout(String viewId) { |
| ViewLayoutRec rec = getViewLayoutRec(viewId, true); |
| if (rec == null) { |
| return null; |
| } |
| return new ViewLayout(this, rec); |
| } |
| |
| /** |
| * @since 3.0 |
| */ |
| public Map getIDtoViewLayoutRecMap() { |
| return mapIDtoViewLayoutRec; |
| } |
| } |