/**
* View Model that holds the "selectedColor" of the color picker container.
*/
Ext.define('Ext.ux.colorpick.SelectorModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.colorpick-selectormodel',
requires: [
'Ext.ux.colorpick.ColorUtils'
],
data: {
selectedColor: {
r: 255, // red
g: 255, // green
b: 255, // blue
h: 0, // hue,
s: 1, // saturation
v: 1, // value
a: 1 // alpha (opacity)
},
previousColor: {
r: 0, // red
g: 0, // green
b: 0, // blue
h: 0, // hue,
s: 1, // saturation
v: 1, // value
a: 1 // alpha (opacity)
}
},
formulas: {
// Hexadecimal representation of the color
hex: {
get: function(get) {
var r = get('selectedColor.r').toString(16),
g = get('selectedColor.g').toString(16),
b = get('selectedColor.b').toString(16),
result;
result = Ext.ux.colorpick.ColorUtils.rgb2hex(r, g, b);
return '#' + result;
},
set: function(hex) {
var rgb = Ext.ux.colorpick.ColorUtils.parseColor(hex);
this.changeRGB(rgb);
}
},
// "R" in "RGB"
red: {
get: function(get) {
return get('selectedColor.r');
},
set: function(r) {
this.changeRGB({ r: r });
}
},
// "G" in "RGB"
green: {
get: function(get) {
return get('selectedColor.g');
},
set: function(g) {
this.changeRGB({ g: g });
}
},
// "B" in "RGB"
blue: {
get: function(get) {
return get('selectedColor.b');
},
set: function(b) {
this.changeRGB({ b: b });
}
},
// "H" in HSV
hue: {
get: function(get) {
return get('selectedColor.h') * 360;
},
set: function(hue) {
this.changeHSV({ h: hue / 360 });
}
},
// "S" in HSV
saturation: {
get: function(get) {
return get('selectedColor.s') * 100;
},
set: function(saturation) {
this.changeHSV({ s: saturation / 100 });
}
},
// "V" in HSV
value: {
get: function(get) {
var v = get('selectedColor.v');
return v * 100;
},
set: function(value) {
this.changeHSV({ v: value / 100 });
}
},
alpha: {
get: function(data) {
var a = data('selectedColor.a');
return a * 100;
},
set: function(alpha) {
this.set('selectedColor', Ext.applyIf({
a: alpha / 100
}, this.data.selectedColor));
}
}
}, // formulas
changeHSV: function(hsv) {
var rgb;
Ext.applyIf(hsv, this.data.selectedColor);
rgb = Ext.ux.colorpick.ColorUtils.hsv2rgb(hsv.h, hsv.s, hsv.v);
hsv.r = rgb.r;
hsv.g = rgb.g;
hsv.b = rgb.b;
this.set('selectedColor', hsv);
},
changeRGB: function(rgb) {
var hsv;
Ext.applyIf(rgb, this.data.selectedColor);
hsv = Ext.ux.colorpick.ColorUtils.rgb2hsv(rgb.r, rgb.g, rgb.b);
rgb.h = hsv.h;
rgb.s = hsv.s;
rgb.v = hsv.v;
this.set('selectedColor', rgb);
}
});