6aee0bd7c5cae3fd10a326f98dfa83c51efcb879
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / tables / mi / ColorProvider.java
1 package net.mograsim.plugin.tables.mi;
2
3 import org.eclipse.jface.resource.ColorRegistry;
4 import org.eclipse.jface.util.IPropertyChangeListener;
5 import org.eclipse.jface.viewers.TableViewer;
6 import org.eclipse.swt.graphics.Color;
7 import org.eclipse.ui.themes.IThemeManager;
8
9 public class ColorProvider
10 {
11         private final TableViewer viewer;
12         private final IThemeManager themeManager;
13         private ColorRegistry cRegistry;
14
15         private final static String modifBackground = "net.mograsim.plugin.modified_cell_bg_color",
16                         modifForeground = "net.mograsim.plugin.modified_cell_fg_color";
17         private final IPropertyChangeListener updateListener;
18
19         public ColorProvider(TableViewer viewer, IThemeManager themeManager)
20         {
21                 this.viewer = viewer;
22                 this.themeManager = themeManager;
23                 this.cRegistry = themeManager.getCurrentTheme().getColorRegistry();
24                 updateListener = e ->
25                 {
26                         switch (e.getProperty())
27                         {
28                         case IThemeManager.CHANGE_CURRENT_THEME:
29                                 cRegistry = themeManager.getCurrentTheme().getColorRegistry();
30                                 //$FALL-THROUGH$
31                         case modifBackground:
32                         case modifForeground:
33                                 viewer.refresh();
34                                 break;
35                         default:
36                                 break;
37                         }
38                 };
39                 themeManager.addPropertyChangeListener(updateListener);
40         }
41
42         public Color getBackground(Object element, int index)
43         {
44                 InstructionTableRow row = (InstructionTableRow) element;
45
46                 return row.data.getCell(row.address).getParameter(index).isDefault() ? viewer.getTable().getBackground()
47                                 : cRegistry.get(modifBackground);
48         }
49
50         public Color getForeground(Object element, int index)
51         {
52                 InstructionTableRow row = (InstructionTableRow) element;
53                 return row.data.getCell(row.address).getParameter(index).isDefault() ? viewer.getTable().getForeground()
54                                 : cRegistry.get(modifForeground);
55         }
56
57         public void dispose()
58         {
59                 themeManager.removePropertyChangeListener(updateListener);
60         }
61 }