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
17f2880494706ad8dfd43e21471096216be4ca7c69Xavier Ducrohetpackage com.android.ide.eclipse.adt.internal.ui;
1855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
19026ba97e98e0527d910e15c4e1512893a777a8d2Xavier Ducrohetimport com.android.ide.common.resources.ResourceFile;
20026ba97e98e0527d910e15c4e1512893a777a8d2Xavier Ducrohetimport com.android.ide.common.resources.ResourceItem;
213bd45f0b16f5ebfafd8080a0f17f71d85c9840edXavier Ducrohetimport com.android.resources.ResourceType;
2255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
2355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.viewers.ILabelProvider;
2455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.viewers.ILabelProviderListener;
2555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.viewers.ITableLabelProvider;
2655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.graphics.Image;
2755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.ISharedImages;
2855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.PlatformUI;
2955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
3055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/**
3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Label provider for the Resource Explorer TreeView.
3255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Each level of the tree is represented by a different class.
3355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * <ul>
3455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * <li>{@link ResourceType}. This represents the list of existing Resource Type present
3555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * in the resources. This can be matched to the subclasses inside the class <code>R</code>
3655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * </li>
3755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * <ul>
3855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * <li>{@link ResourceItem}. This represents one resource. The actual type can be
3955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * {@link ConfigurableResourceItem} (which can exist in various alternate versions),
4055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * or {@link IdResourceItem}.
4155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * This is similar to the resource Ids defined as <code>R.sometype.id</code>.
4255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * </li>
4355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * <ul>
4455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * <li>{@link ResourceFile}. This represents a particular version of the {@link ResourceItem}.
4555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * It is displayed as a list of resource qualifier.
4655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * </li>
47da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet * </ul>
48da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet * </ul>
49da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet * </ul>
50da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet *
5155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @see ResourceContentProvider
5255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */
5355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectpublic class ResourceLabelProvider implements ILabelProvider, ITableLabelProvider {
5455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    private Image mWarningImage;
55da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet
5655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public ResourceLabelProvider() {
5755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        mWarningImage = PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(
5855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                ISharedImages.IMG_OBJS_WARN_TSK).createImage();
5955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
6055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
6155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    /**
6255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @see #getColumnImage(Object, int)
6355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     */
64ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
6555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public Image getImage(Object element) {
6655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        // pass
6755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        return null;
6855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
6955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
7055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    /**
7155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @see #getColumnText(Object, int)
7255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     */
73ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
7455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public String getText(Object element) {
7555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        return getColumnText(element, 0);
7655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
7755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
78ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
7955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public void addListener(ILabelProviderListener listener) {
8055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        // pass
8155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
8255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
83ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
8455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public void dispose() {
8555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        mWarningImage.dispose();
8655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
8755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
88ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
8955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public boolean isLabelProperty(Object element, String property) {
9055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        return false;
9155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
9255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
93ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
9455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public void removeListener(ILabelProviderListener listener) {
9555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        // pass
9655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
9755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
98ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
9955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public Image getColumnImage(Object element, int columnIndex) {
10055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        if (columnIndex == 1) {
101da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet            if (element instanceof ResourceItem) {
102da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet                ResourceItem item = (ResourceItem)element;
10355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                if (item.hasDefault() == false) {
10455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                    return mWarningImage;
10555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                }
10655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            }
10755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        }
10855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        return null;
10955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
11055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
111ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
11255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public String getColumnText(Object element, int columnIndex) {
11355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        switch (columnIndex) {
11455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            case 0:
11555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                if (element instanceof ResourceType) {
11655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                    return ((ResourceType)element).getDisplayName();
11755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                } else if (element instanceof ResourceItem) {
11855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                    return ((ResourceItem)element).getName();
11955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                } else if (element instanceof ResourceFile) {
12055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                    return ((ResourceFile)element).getFolder().getConfiguration().toDisplayString();
12155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                }
12255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                break;
12355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            case 1:
124da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet                if (element instanceof ResourceItem) {
125da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet                    ResourceItem item = (ResourceItem)element;
126da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet                    if (item.isDeclaredInline()) {
12755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                        return "Declared inline";
128da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet                    } else {
129da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet                        int count = item.getAlternateCount();
130da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet                        if (count > 0) {
131da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet                            if (item.hasDefault()) {
132da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet                                count++;
133da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet                            }
134da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet                            return String.format("%1$d version(s)", count);
135da02c18ad5b54d97a1fcfd5f6633062b0c873c22Xavier Ducrohet                        }
13655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                    }
13755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                }
13855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                return null;
13955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        }
14055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        return null;
14155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
14255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project}
143