| /* |
| * Copyright (C) 2012 The Android Open Source Project |
| * |
| * Licensed under the Eclipse Public License, Version 1.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.eclipse.org/org/documents/epl-v10.php |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.android.ide.eclipse.adt.internal.editors.layout.gle2; |
| |
| import static com.android.SdkConstants.ATTR_ID; |
| |
| import com.android.ide.common.layout.BaseLayoutRule; |
| import com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate; |
| import com.android.ide.eclipse.adt.internal.editors.layout.uimodel.UiViewElementNode; |
| |
| import org.eclipse.core.resources.IMarker; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.graphics.Color; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Shell; |
| |
| import java.util.List; |
| |
| /** Actual tooltip showing multiple lines for various widgets that have lint errors */ |
| class LintTooltip extends Shell { |
| private final LayoutCanvas mCanvas; |
| private final List<UiViewElementNode> mNodes; |
| |
| LintTooltip(LayoutCanvas canvas, List<UiViewElementNode> nodes) { |
| super(canvas.getDisplay(), SWT.ON_TOP | SWT.NO_FOCUS | SWT.TOOL); |
| mCanvas = canvas; |
| mNodes = nodes; |
| |
| createContents(); |
| } |
| |
| protected void createContents() { |
| Display display = getDisplay(); |
| Color fg = display.getSystemColor(SWT.COLOR_INFO_FOREGROUND); |
| Color bg = display.getSystemColor(SWT.COLOR_INFO_BACKGROUND); |
| setBackground(bg); |
| GridLayout gridLayout = new GridLayout(2, false); |
| setLayout(gridLayout); |
| |
| LayoutEditorDelegate delegate = mCanvas.getEditorDelegate(); |
| |
| boolean first = true; |
| for (UiViewElementNode node : mNodes) { |
| IMarker marker = delegate.getIssueForNode(node); |
| if (marker != null) { |
| String message = marker.getAttribute(IMarker.MESSAGE, null); |
| if (message != null) { |
| Label icon = new Label(this, SWT.NONE); |
| icon.setForeground(fg); |
| icon.setBackground(bg); |
| icon.setImage(node.getIcon()); |
| |
| Label label = new Label(this, SWT.WRAP); |
| if (first) { |
| label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1)); |
| first = false; |
| } |
| |
| String id = BaseLayoutRule.stripIdPrefix(node.getAttributeValue(ATTR_ID)); |
| if (id.isEmpty()) { |
| if (node.getXmlNode() != null) { |
| id = node.getXmlNode().getNodeName(); |
| } else { |
| id = node.getDescriptor().getUiName(); |
| } |
| } |
| |
| label.setText(String.format("%1$s: %2$s", id, message)); |
| } |
| } |
| } |
| } |
| |
| @Override |
| protected void checkSubclass() { |
| // Disable the check that prevents subclassing of SWT components |
| } |
| } |