Merge branch 'master' of git.labs.intellij.net:idea/community
[idea/community.git] / platform / platform-impl / src / com / intellij / openapi / diff / impl / util / TextDiffType.java
1 /*
2  * Copyright 2000-2010 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.diff.impl.util;
17
18 import com.intellij.openapi.diff.DiffBundle;
19 import com.intellij.openapi.diff.DiffColors;
20 import com.intellij.openapi.diff.ex.DiffStatusBar;
21 import com.intellij.openapi.editor.Editor;
22 import com.intellij.openapi.editor.colors.EditorColorsScheme;
23 import com.intellij.openapi.editor.colors.TextAttributesKey;
24 import com.intellij.openapi.editor.markup.TextAttributes;
25 import com.intellij.util.containers.Convertor;
26 import org.jetbrains.annotations.NotNull;
27 import org.jetbrains.annotations.Nullable;
28
29 import java.awt.*;
30 import java.util.Arrays;
31 import java.util.List;
32
33 public class TextDiffType implements DiffStatusBar.LegendTypeDescriptor {
34   public static final TextDiffType INSERT = new TextDiffType(TextDiffTypeEnum.INSERT, DiffBundle.message("diff.type.inserted.name"), DiffColors.DIFF_INSERTED);
35   public static final TextDiffType CHANGED = new TextDiffType(TextDiffTypeEnum.CHANGED, DiffBundle.message("diff.type.changed.name"), DiffColors.DIFF_MODIFIED);
36   public static final TextDiffType DELETED = new TextDiffType(TextDiffTypeEnum.DELETED, DiffBundle.message("diff.type.deleted.name"), DiffColors.DIFF_DELETED);
37   public static final TextDiffType CONFLICT = new TextDiffType(TextDiffTypeEnum.CONFLICT, DiffBundle.message("diff.type.conflict.name"), DiffColors.DIFF_CONFLICT);
38
39   public static final TextDiffType NONE = new TextDiffType(TextDiffTypeEnum.NONE, DiffBundle.message("diff.type.none.name"), null);
40
41   private final TextDiffTypeEnum myType;
42   public static final List<TextDiffType> DIFF_TYPES = Arrays.asList(DELETED, CHANGED, INSERT);
43   public static final List<TextDiffType> MERGE_TYPES = Arrays.asList(DELETED, CHANGED, INSERT, CONFLICT);
44   private final TextAttributesKey myAttributesKey;
45   private final String myDisplayName;
46   public static final Convertor<TextDiffType, TextAttributesKey> ATTRIBUTES_KEY = new Convertor<TextDiffType, TextAttributesKey>() {
47     public TextAttributesKey convert(TextDiffType textDiffType) {
48       return textDiffType.getAttributesKey();
49     }
50   };
51
52   public static TextDiffType create(@NotNull final TextDiffTypeEnum type) {
53     if (TextDiffTypeEnum.INSERT.equals(type)) {
54       return INSERT;
55     } else if (TextDiffTypeEnum.CHANGED.equals(type)) {
56       return CHANGED;
57     } else if (TextDiffTypeEnum.DELETED.equals(type)) {
58       return DELETED;
59     } else if (TextDiffTypeEnum.CONFLICT.equals(type)) {
60       return CONFLICT;
61     } else {
62       // NONE
63       return NONE;
64     }
65   }
66
67   private TextDiffType(TextDiffTypeEnum type, String displayName, TextAttributesKey attrubutesKey) {
68     myType = type;
69     myAttributesKey = attrubutesKey;
70     myDisplayName = displayName;
71   }
72
73   public String getDisplayName() {
74     return myDisplayName;
75   }
76
77   @Nullable
78   public Color getLegendColor(EditorColorsScheme colorScheme) {
79     TextAttributes attributes = getTextAttributes(colorScheme);
80     return attributes != null ? attributes.getBackgroundColor() : null;
81   }
82
83   public TextAttributesKey getAttributesKey() {
84     return myAttributesKey;
85   }
86
87   public TextAttributes getTextAttributes(EditorColorsScheme scheme) {
88     return scheme.getAttributes(myAttributesKey);
89   }
90
91   @Nullable
92   public Color getPolygonColor(Editor editor) {
93     return getLegendColor(editor.getColorsScheme());
94   }
95
96   public TextAttributes getTextAttributes(Editor editor1) {
97     return getTextAttributes(editor1.getColorsScheme());
98   }
99
100   @Nullable
101   public Color getTextBackground(Editor editor) {
102     TextAttributes attributes = getTextAttributes(editor);
103     return attributes != null ? attributes.getBackgroundColor() : null;
104   }
105
106   public String toString(){
107     return myDisplayName;
108   }
109
110   public TextDiffTypeEnum getType() {
111     return myType;
112   }
113 }