| 1013 | |
| 1014 | |
| 1015 | class EditorAttributeInputColor(EditorAttributeInputBase): |
| 1016 | def __init__(self, widget, attributeName, propertyDef, attributeDict, appInstance, *args, **kwargs): |
| 1017 | super(EditorAttributeInputColor, self).__init__( |
| 1018 | widget, attributeName, propertyDef, attributeDict, appInstance, *args, **kwargs) |
| 1019 | self.css_height = "60px" |
| 1020 | self.spin_red = gui.SpinBox(0, 0, 255, 1, width="100%", height="100%") |
| 1021 | self.spin_green = gui.SpinBox( |
| 1022 | 0, 0, 255, 1, width="100%", height="100%") |
| 1023 | self.spin_blue = gui.SpinBox(0, 0, 255, 1, width="100%", height="100%") |
| 1024 | self.slide_red = gui.Slider(0, 0, 255, 1, width="100%", height="100%", style={ |
| 1025 | 'background-color': 'pink'}) |
| 1026 | self.slide_green = gui.Slider(0, 0, 255, 1, width="100%", height="100%", style={ |
| 1027 | 'background-color': 'lightgreen'}) |
| 1028 | self.slide_blue = gui.Slider(0, 0, 255, 1, width="100%", height="100%", style={ |
| 1029 | 'background-color': 'lightblue'}) |
| 1030 | ''' |
| 1031 | self.set_from_asciiart(""" |
| 1032 | |del|lbl |spin_r |spin_g |spin_b | |
| 1033 | |del|lbl |slide_r |slide_g |slide_b | |
| 1034 | """) |
| 1035 | ''' |
| 1036 | self.style.update({'grid-template-columns': "6% 46% 16% 16% 16%", 'grid-template-rows': "50% 50%", |
| 1037 | 'grid-template-areas': "'del lbl spin_r spin_g spin_b' 'del lbl slide_r slide_g slide_b'"}) |
| 1038 | self.append({'del': self.removeAttribute, 'lbl': self.label, 'spin_r': self.spin_red, 'spin_g': self.spin_green, |
| 1039 | 'spin_b': self.spin_blue, 'slide_r': self.slide_red, 'slide_g': self.slide_green, 'slide_b': self.slide_blue}) |
| 1040 | |
| 1041 | self.slide_red.onchange.do(self.onchange) |
| 1042 | self.slide_green.onchange.do(self.onchange) |
| 1043 | self.slide_blue.onchange.do(self.onchange) |
| 1044 | |
| 1045 | self.spin_red.onchange.do(self.onchange) |
| 1046 | self.spin_green.onchange.do(self.onchange) |
| 1047 | self.spin_blue.onchange.do(self.onchange) |
| 1048 | |
| 1049 | def to_str(self): |
| 1050 | return "rgb(%s,%s,%s)" % (self.slide_red.get_value(), self.slide_green.get_value(), self.slide_blue.get_value()) |
| 1051 | |
| 1052 | def from_str(self, value_str): |
| 1053 | components = [] |
| 1054 | if value_str is None or '(' not in value_str or ')' not in value_str: |
| 1055 | components = [0, 0, 0] |
| 1056 | else: |
| 1057 | components = value_str[value_str.index( |
| 1058 | '(')+1:value_str.index(')')].split(',') |
| 1059 | if len(components) < 3: |
| 1060 | components = [0, 0, 0] |
| 1061 | self.slide_red.set_value(components[0]) |
| 1062 | self.slide_green.set_value(components[1]) |
| 1063 | self.slide_blue.set_value(components[2]) |
| 1064 | |
| 1065 | self.spin_red.set_value(self.slide_red.get_value()) |
| 1066 | self.spin_green.set_value(self.slide_green.get_value()) |
| 1067 | self.spin_blue.set_value(self.slide_blue.get_value()) |
| 1068 | |
| 1069 | @gui.decorate_event |
| 1070 | def onchange(self, widget, new_value): |
| 1071 | if type(widget) == gui.SpinBox: |
| 1072 | self.slide_red.set_value(self.spin_red.get_value()) |