1 /******************************************************************************* 2 * Copyright (c) 2015 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 ******************************************************************************/ 14 15 package org.eclipse.ui.internal.e4.migration; 16 17 import java.util.ArrayList; 18 import java.util.List; 19 import org.eclipse.swt.SWT; 20 import org.eclipse.swt.graphics.Rectangle; 21 import org.eclipse.ui.IMemento; 22 import org.eclipse.ui.XMLMemento; 23 import org.eclipse.ui.internal.IWorkbenchConstants; 24 25 public class WindowReader extends MementoReader { 26 public static final String STATUS_LINE_MANAGER_ID = "org.eclipse.jface.action.StatusLineManager"; //$NON-NLS-1$ 27 WindowReader(IMemento memento)28 WindowReader(IMemento memento) { 29 super(memento); 30 } 31 getBounds()32 Rectangle getBounds() { 33 Rectangle windowBounds = new Rectangle(0, 0, 0, 0); 34 Integer bigInt = getInteger(IWorkbenchConstants.TAG_X); 35 windowBounds.x = bigInt == null ? 0 : bigInt.intValue(); 36 bigInt = getInteger(IWorkbenchConstants.TAG_Y); 37 windowBounds.y = bigInt == null ? 0 : bigInt.intValue(); 38 bigInt = getInteger(IWorkbenchConstants.TAG_WIDTH); 39 windowBounds.width = bigInt == null ? 0 : bigInt.intValue(); 40 bigInt = getInteger(IWorkbenchConstants.TAG_HEIGHT); 41 windowBounds.height = bigInt == null ? 0 : bigInt.intValue(); 42 return windowBounds; 43 } 44 isMaximized()45 boolean isMaximized() { 46 return getBoolean(IWorkbenchConstants.TAG_MAXIMIZED, false); 47 48 } 49 isMinimized()50 boolean isMinimized() { 51 return getBoolean(IWorkbenchConstants.TAG_MINIMIZED, false); 52 53 } 54 isCoolbarVisible()55 boolean isCoolbarVisible() { 56 IMemento trimLayoutMem = getChild(IWorkbenchConstants.TAG_TRIM); 57 if (trimLayoutMem == null) { 58 return false; 59 } 60 61 boolean visible = false; 62 IMemento[] trimAreas = trimLayoutMem.getChildren(IWorkbenchConstants.TAG_TRIM_AREA); 63 IMemento topTrim = null; 64 for (IMemento trimArea : trimAreas) { 65 // ITrimManager.TOP == SWT.TOP 66 if (SWT.TOP == trimArea.getInteger(IMemento.TAG_ID)) { 67 topTrim = trimArea; 68 break; 69 } 70 } 71 if (topTrim != null) { 72 IMemento[] trimItems = topTrim.getChildren(IWorkbenchConstants.TAG_TRIM_ITEM); 73 for (IMemento trimItem : trimItems) { 74 if ("org.eclipse.ui.internal.WorkbenchWindow.topBar".equals(trimItem //$NON-NLS-1$ 75 .getString(IMemento.TAG_ID))) { 76 visible = true; 77 break; 78 } 79 } 80 } 81 return visible; 82 } 83 isStatusBarVisible()84 boolean isStatusBarVisible() { 85 return getStatusBar() != null; 86 } 87 getStatusBar()88 private IMemento getStatusBar() { 89 IMemento trimLayoutMem = getChild(IWorkbenchConstants.TAG_TRIM); 90 if (trimLayoutMem == null) { 91 return null; 92 } 93 94 IMemento[] trimAreas = trimLayoutMem.getChildren(IWorkbenchConstants.TAG_TRIM_AREA); 95 for (IMemento trimArea : trimAreas) { 96 // ITrimManager.TOP == SWT.TOP 97 if (SWT.BOTTOM == trimArea.getInteger(IMemento.TAG_ID)) { 98 return trimArea; 99 } 100 } 101 return null; 102 } 103 hasStatusLine()104 boolean hasStatusLine() { 105 IMemento statusBar = getStatusBar(); 106 if (statusBar != null) { 107 IMemento[] trimItemMems = statusBar.getChildren(IWorkbenchConstants.TAG_TRIM_ITEM); 108 for (IMemento trimItemMem : trimItemMems) { 109 if (STATUS_LINE_MANAGER_ID.equals(trimItemMem.getID())) { 110 return true; 111 } 112 } 113 } 114 return false; 115 } 116 isWelcomePageOpen()117 boolean isWelcomePageOpen() { 118 return (getChild(IWorkbenchConstants.TAG_INTRO) != null); 119 } 120 getPerspectiveReaders()121 List<PerspectiveReader> getPerspectiveReaders() { 122 List<PerspectiveReader> perspectives = new ArrayList<>(); 123 IMemento perspContainer = getPerspectiveContainer(); 124 if (perspContainer != null) { 125 IMemento[] perspectiveMems = perspContainer.getChildren(IWorkbenchConstants.TAG_PERSPECTIVE); 126 for (IMemento perspectiveMem : perspectiveMems) { 127 PerspectiveReader perspective = new PerspectiveReader(perspectiveMem); 128 perspectives.add(perspective); 129 } 130 } 131 return perspectives; 132 } 133 getPerspectiveContainer()134 private IMemento getPerspectiveContainer() { 135 IMemento perspContainer = null; 136 IMemento page = getPage(); 137 if (page != null) { 138 perspContainer = page.getChild(IWorkbenchConstants.TAG_PERSPECTIVES); 139 } 140 return perspContainer; 141 } 142 isSelected()143 boolean isSelected() { 144 IMemento page = getPage(); 145 if (page == null) { 146 return false; 147 } 148 Boolean selected = page.getBoolean(IWorkbenchConstants.TAG_FOCUS); 149 return selected == null ? false : selected.booleanValue(); 150 } 151 getActivePerspectiveId()152 String getActivePerspectiveId() { 153 String activePerspectiveId = null; 154 IMemento perspContainer = getPerspectiveContainer(); 155 if (perspContainer != null) { 156 activePerspectiveId = perspContainer.getString(IWorkbenchConstants.TAG_ACTIVE_PERSPECTIVE); 157 } 158 return activePerspectiveId; 159 } 160 getEditorStacks()161 List<InfoReader> getEditorStacks() { 162 IMemento editorArea = getEditorArea(); 163 List<InfoReader> readers = new ArrayList<>(); 164 if (editorArea != null) { 165 IMemento[] editorStackMems = editorArea.getChildren(IWorkbenchConstants.TAG_INFO); 166 for (IMemento memento : editorStackMems) { 167 readers.add(new InfoReader(memento)); 168 } 169 } 170 return readers; 171 } 172 getDefaultFastViewSide()173 public Integer getDefaultFastViewSide() { 174 Integer defaultFastViewSide = null; 175 IMemento fastViewData = getChild("fastViewData"); //$NON-NLS-1$ 176 if (fastViewData != null) { 177 defaultFastViewSide = fastViewData.getInteger(IWorkbenchConstants.TAG_FAST_VIEW_SIDE); 178 } 179 return defaultFastViewSide; 180 } 181 getEditorArea()182 private IMemento getEditorArea() { 183 IMemento editors = getEditorsMemento(); 184 if (editors != null) { 185 return editors.getChild(IWorkbenchConstants.TAG_AREA); 186 } 187 return null; 188 } 189 getEditors()190 List<EditorReader> getEditors() { 191 List<EditorReader> readers = new ArrayList<>(); 192 IMemento editors = getEditorsMemento(); 193 if (editors != null) { 194 IMemento[] editorMems = editors.getChildren(IWorkbenchConstants.TAG_EDITOR); 195 for (IMemento memento : editorMems) { 196 readers.add(new EditorReader(memento)); 197 } 198 } 199 return readers; 200 } 201 getEditorsMemento()202 private IMemento getEditorsMemento() { 203 IMemento page = getPage(); 204 if (page == null) { 205 return null; 206 } 207 return page.getChild(IWorkbenchConstants.TAG_EDITORS); 208 } 209 getViews()210 List<ViewReader> getViews() { 211 List<ViewReader> readers = new ArrayList<>(); 212 IMemento page = getPage(); 213 if (page == null) { 214 return readers; 215 } 216 IMemento editors = page.getChild(IWorkbenchConstants.TAG_VIEWS); 217 if (editors != null) { 218 IMemento[] editorMems = editors.getChildren(IWorkbenchConstants.TAG_VIEW); 219 for (IMemento memento : editorMems) { 220 readers.add(new ViewReader(memento)); 221 } 222 } 223 return readers; 224 } 225 getPage()226 private IMemento getPage() { 227 return getChild(IWorkbenchConstants.TAG_PAGE); 228 } 229 230 static class EditorReader extends MementoReader { 231 EditorReader(IMemento memento)232 private EditorReader(IMemento memento) { 233 super(memento); 234 } 235 getLabel()236 String getLabel() { 237 return getString(IWorkbenchConstants.TAG_TITLE); 238 } 239 getType()240 String getType() { 241 return getString(IWorkbenchConstants.TAG_ID); 242 } 243 getStackId()244 String getStackId() { 245 return getString(IWorkbenchConstants.TAG_WORKBOOK); 246 } 247 isSelected()248 boolean isSelected() { 249 return getBoolean(IWorkbenchConstants.TAG_FOCUS); 250 } 251 252 } 253 254 static class ViewReader extends MementoReader { 255 ViewReader(IMemento memento)256 private ViewReader(IMemento memento) { 257 super(memento); 258 } 259 getId()260 String getId() { 261 return getString(IWorkbenchConstants.TAG_ID); 262 } 263 getLabel()264 String getLabel() { 265 return getString(IWorkbenchConstants.TAG_PART_NAME); 266 } 267 getViewState()268 IMemento getViewState() { 269 IMemento viewStateMem = getChild(IWorkbenchConstants.TAG_VIEW_STATE); 270 if (viewStateMem == null) { 271 return null; 272 } 273 return createRenamedCopy(viewStateMem, IWorkbenchConstants.TAG_VIEW); 274 } 275 createRenamedCopy(IMemento memento, String newName)276 private XMLMemento createRenamedCopy(IMemento memento, String newName) { 277 XMLMemento newMem = XMLMemento.createWriteRoot(newName); 278 newMem.putMemento(memento); 279 return newMem; 280 } 281 282 } 283 284 } 285