Merge branch 'master' of git@git.labs.intellij.net:idea/community
[idea/community.git] / platform / platform-api / src / com / intellij / openapi / util / Iconable.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.openapi.util;
17
18 import com.intellij.util.containers.HashMap;
19 import org.jetbrains.annotations.Nullable;
20
21 import javax.swing.*;
22 import java.util.Map;
23
24 public interface Iconable {
25   int ICON_FLAG_VISIBILITY = 0x0001;
26   int ICON_FLAG_READ_STATUS = 0x0002;
27   int ICON_FLAG_OPEN = 0x0004;
28   int ICON_FLAG_CLOSED = 0x0008;
29
30   Icon getIcon(int flags);
31
32
33   class LastComputedIcon {
34
35     private static Key<Map<Integer, Icon>> LAST_COMPUTED_ICON = Key.create("lastComputedIcon"); 
36
37     @Nullable
38     public static Icon get(UserDataHolder holder, int flags) {
39       Map<Integer, Icon> map = holder.getUserData(LAST_COMPUTED_ICON);
40       return map != null ? map.get(flags) : null;
41     }
42
43     public static void put(UserDataHolder holder, Icon icon, int flags) {
44       Map<Integer, Icon> map = holder.getUserData(LAST_COMPUTED_ICON);
45       if (map == null) {
46         map = new HashMap<Integer, Icon>();
47         holder.putUserData(LAST_COMPUTED_ICON, map);
48       }
49
50       map.put(flags, icon);
51     }
52   }
53
54
55 }