|
@@ -16,6 +16,9 @@ import { getAdjustedColorMap } from '../../mol-util/color/color';
|
|
|
import { getColorMapParams } from '../../mol-util/color/params';
|
|
|
import { ChainIdColorTheme, ChainIdColorThemeParams } from './chain-id';
|
|
|
import { OperatorNameColorThemeParams, OperatorNameColorTheme } from './operator-name';
|
|
|
+import { EntityIdColorTheme, EntityIdColorThemeParams } from './entity-id';
|
|
|
+import { assertUnreachable } from '../../mol-util/type-helpers';
|
|
|
+import { EntitySourceColorTheme, EntitySourceColorThemeParams } from './entity-source';
|
|
|
|
|
|
// from Jmol http://jmol.sourceforge.net/jscolors/ (or 0xFFFFFF)
|
|
|
export const ElementSymbolColors = ColorMap({
|
|
@@ -26,13 +29,13 @@ export type ElementSymbolColors = typeof ElementSymbolColors
|
|
|
const DefaultElementSymbolColor = Color(0xFFFFFF);
|
|
|
const Description = 'Assigns a color to every atom according to its chemical element.';
|
|
|
|
|
|
-// TODO generalise `carbonColor` param to all themes?
|
|
|
-
|
|
|
export const ElementSymbolColorThemeParams = {
|
|
|
carbonColor: PD.MappedStatic('chain-id', {
|
|
|
- 'chain-id': PD.Group({ ...ChainIdColorThemeParams }),
|
|
|
- 'operator-name': PD.Group({ ...OperatorNameColorThemeParams }),
|
|
|
- 'element-symbol': PD.Group({})
|
|
|
+ 'chain-id': PD.Group(ChainIdColorThemeParams),
|
|
|
+ 'entity-id': PD.Group(EntityIdColorThemeParams),
|
|
|
+ 'entity-source': PD.Group(EntitySourceColorThemeParams),
|
|
|
+ 'operator-name': PD.Group(OperatorNameColorThemeParams),
|
|
|
+ 'element-symbol': PD.EmptyGroup()
|
|
|
}, { description: 'Use chain-id coloring for carbon atoms.' }),
|
|
|
saturation: PD.Numeric(0, { min: -6, max: 6, step: 0.1 }),
|
|
|
lightness: PD.Numeric(0.2, { min: -6, max: 6, step: 0.1 }),
|
|
@@ -54,11 +57,14 @@ export function elementSymbolColor(colorMap: ElementSymbolColors, element: Eleme
|
|
|
export function ElementSymbolColorTheme(ctx: ThemeDataContext, props: PD.Values<ElementSymbolColorThemeParams>): ColorTheme<ElementSymbolColorThemeParams> {
|
|
|
const colorMap = getAdjustedColorMap(props.colors.name === 'default' ? ElementSymbolColors : props.colors.params, props.saturation, props.lightness);
|
|
|
|
|
|
- const carbonColor = props.carbonColor.name === 'chain-id'
|
|
|
- ? ChainIdColorTheme(ctx, props.carbonColor.params).color
|
|
|
- : props.carbonColor.name === 'operator-name'
|
|
|
- ? OperatorNameColorTheme(ctx, props.carbonColor.params).color
|
|
|
- : undefined;
|
|
|
+ const pcc = props.carbonColor;
|
|
|
+ const carbonColor =
|
|
|
+ pcc.name === 'chain-id' ? ChainIdColorTheme(ctx, pcc.params).color :
|
|
|
+ pcc.name === 'entity-id' ? EntityIdColorTheme(ctx, pcc.params).color :
|
|
|
+ pcc.name === 'entity-source' ? EntitySourceColorTheme(ctx, pcc.params).color :
|
|
|
+ pcc.name === 'operator-name' ? OperatorNameColorTheme(ctx, pcc.params).color :
|
|
|
+ pcc.name === 'element-symbol' ? undefined :
|
|
|
+ assertUnreachable(pcc);
|
|
|
|
|
|
function elementColor(element: ElementSymbol, location: Location) {
|
|
|
return (carbonColor && element === 'C')
|