155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/*
255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project *
455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Licensed under the Eclipse Public License, Version 1.0 (the "License");
555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * you may not use this file except in compliance with the License.
655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * You may obtain a copy of the License at
755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project *
855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project *      http://www.eclipse.org/org/documents/epl-v10.php
955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project *
1055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * See the License for the specific language governing permissions and
1455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * limitations under the License.
1555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */
1655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
1769425d803b34589309a69eddc53a338e1409b30cXavier Ducrohetpackage com.android.ide.eclipse.adt.internal.editors.ui.tree;
1855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
1955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ide.eclipse.adt.AdtPlugin;
2099e631c489877affbf11ecfba441844cfcd0299eTor Norbyeimport com.android.ide.eclipse.adt.internal.editors.IconFactory;
2169425d803b34589309a69eddc53a338e1409b30cXavier Ducrohetimport com.android.ide.eclipse.adt.internal.editors.descriptors.ElementDescriptor;
2269425d803b34589309a69eddc53a338e1409b30cXavier Ducrohetimport com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode;
2355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
2455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.viewers.ILabelProvider;
2555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.viewers.ILabelProviderListener;
2655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.graphics.Image;
2755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
2855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/**
2955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * UiModelTreeLabelProvider is a trivial implementation of {@link ILabelProvider}
3055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * where elements are expected to derive from {@link UiElementNode} or
3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * from {@link ElementDescriptor}.
32b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll *
3355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * It is used by both the master tree viewer and by the list in the Add... selection dialog.
3455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */
3555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectpublic class UiModelTreeLabelProvider implements ILabelProvider {
3655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
3755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public UiModelTreeLabelProvider() {
3855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
3955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
4055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    /**
4155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * Returns the element's logo with a fallback on the android logo.
4255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     */
43ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
4455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public Image getImage(Object element) {
4555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        ElementDescriptor desc = null;
46b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll        UiElementNode node = null;
47b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll
4855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        if (element instanceof ElementDescriptor) {
49b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll            desc = (ElementDescriptor) element;
5055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        } else if (element instanceof UiElementNode) {
51b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll            node = (UiElementNode) element;
5255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            desc = node.getDescriptor();
53b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll        }
54b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll
55b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll        if (desc != null) {
56b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll            Image img = desc.getCustomizedIcon();
57b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll            if (img != null) {
58b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll                if (node != null && node.hasError()) {
5999e631c489877affbf11ecfba441844cfcd0299eTor Norbye                    return IconFactory.getInstance().addErrorIcon(img);
60b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll                } else {
61b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll                    return img;
6255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                }
6355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            }
6455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        }
65b9e43549c362979758bee841a57b69a7ed9851a1Raphael Moll
6655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        return AdtPlugin.getAndroidLogo();
6755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
6855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
6955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    /**
7055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * Uses UiElementNode.shortDescription for the label for this tree item.
7155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     */
72ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
7355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public String getText(Object element) {
7455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        if (element instanceof ElementDescriptor) {
7555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            ElementDescriptor desc = (ElementDescriptor) element;
7655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            return desc.getUiName();
7755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        } else if (element instanceof UiElementNode) {
7855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            UiElementNode node = (UiElementNode) element;
7955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            return node.getShortDescription();
8055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        }
8155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        return element.toString();
8255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
8355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
84ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
8555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public void addListener(ILabelProviderListener listener) {
8655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        // pass
8755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
8855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
89ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
9055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public void dispose() {
9155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        // pass
9255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
9355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
94ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
9555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public boolean isLabelProperty(Object element, String property) {
9655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        // pass
9755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        return false;
9855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
9955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
100ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
10155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public void removeListener(ILabelProviderListener listener) {
10255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        // pass
10355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
10455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project}
10555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
10655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
107