setting.py (9086B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\clientsettings\setting.py 2 import uuid 3 from signals import Signal 4 5 class _UserSettingMixin(object): 6 7 @property 8 def settings_path(self): 9 return settings.user.ui 10 11 12 class _CharSettingMixin(object): 13 14 @property 15 def settings_path(self): 16 return settings.char.ui 17 18 19 class _PublicSettingMixin(object): 20 21 @property 22 def settings_path(self): 23 return settings.public.ui 24 25 26 class _DeviceSettingMixin(object): 27 28 @property 29 def settings_path(self): 30 return settings.public.device 31 32 33 class _AudioSettingMixin(object): 34 35 @property 36 def settings_path(self): 37 return settings.public.audio 38 39 40 class _WindowSettingMixin(object): 41 42 @property 43 def settings_path(self): 44 return settings.char.windows 45 46 47 class _SuppressSettingMixin(object): 48 49 @property 50 def settings_path(self): 51 return settings.user.suppress 52 53 54 class _BaseSetting(object): 55 NOT_SET = 'not_set' 56 57 def __init__(self, settings_key, default_value): 58 super(_BaseSetting, self).__init__() 59 self.settings_key = settings_key 60 self._current_value = self.NOT_SET 61 self._default_value = default_value 62 self.on_change = Signal('%s.on_change (%s)' % (self.__class__.__name__, self.settings_key)) 63 64 def get(self): 65 return self.settings_path.Get(self.settings_key, self.get_default()) 66 if self._current_value == self.NOT_SET: 67 self._current_value = self.settings_path.Get(self.settings_key, self.get_default()) 68 return self._current_value 69 70 def is_default(self): 71 return self.is_equal(self.get_default()) 72 73 def get_default(self): 74 if callable(self._default_value): 75 return self._default_value() 76 else: 77 return self._default_value 78 79 def is_equal(self, value): 80 return value == self.get() 81 82 def set(self, value): 83 self._validate(value) 84 if not self.is_equal(value): 85 self._set(value) 86 self._trigger_on_change(value) 87 88 def _trigger_on_change(self, value): 89 self.on_change(value) 90 91 def _set(self, value): 92 self._current_value = value 93 self.settings_path.Set(self.settings_key, value) 94 95 def _validate(self, value): 96 return True 97 98 def reset(self): 99 self.set(self.get_default()) 100 101 102 class _BaseSettingEnum(_BaseSetting): 103 104 def __init__(self, settings_key, default_value, options = None): 105 super(_BaseSettingEnum, self).__init__(settings_key, default_value) 106 self.options = tuple(options) if options else None 107 108 def _validate(self, value): 109 if self.options and value not in self.options: 110 raise ValueError('Unexpected settings value %s (allowed values: %s)' % (value, repr(self.options))) 111 112 113 class _BaseSettingBool(_BaseSetting): 114 115 def enable(self): 116 self.set(True) 117 118 def disable(self): 119 self.set(False) 120 121 def toggle(self): 122 self.set(not self.is_enabled()) 123 124 def is_enabled(self): 125 return self.get() 126 127 128 class _BaseSettingNumeric(_BaseSetting): 129 130 def __init__(self, settings_key, default_value, min_value = None, max_value = None): 131 super(_BaseSettingNumeric, self).__init__(settings_key, default_value) 132 self.min_value = min_value 133 self.max_value = max_value 134 135 def _validate(self, value): 136 if self.min_value is not None and value < self.min_value: 137 raise ValueError('Unexpected settings value %s (min_value=%s)' % (value, self.min_value)) 138 elif self.max_value is not None and value > self.max_value: 139 raise ValueError('Unexpected settings value %s (max_value=%s)' % (value, self.max_value)) 140 141 142 class _BaseSettingNumericList(_BaseSetting): 143 144 def __init__(self, settings_key, default_value, min_value = None, max_value = None): 145 super(_BaseSettingNumericList, self).__init__(settings_key, default_value) 146 self.min_value = min_value 147 self.max_value = max_value 148 149 def _validate(self, value): 150 for x in value: 151 if self.min_value is not None and x < self.min_value: 152 raise ValueError('Unexpected settings value %s (min_value=%s)' % (x, self.min_value)) 153 elif self.max_value is not None and x > self.max_value: 154 raise ValueError('Unexpected settings value %s (max_value=%s)' % (x, self.max_value)) 155 156 157 class _BaseSettingString(_BaseSetting): 158 pass 159 160 161 class _BaseSettingUUID(_BaseSetting): 162 163 def __init__(self, settings_key, default_value): 164 super(_BaseSettingUUID, self).__init__(settings_key, default_value) 165 166 def _validate(self, value): 167 if value is None: 168 return True 169 try: 170 uuid.UUID(value) 171 except ValueError: 172 raise ValueError('Unexpected settings value %s (not a valid uuid) ' % value) 173 174 def get(self): 175 value = super(_BaseSettingUUID, self).get() 176 if value is None: 177 return 178 else: 179 return uuid.UUID(value) 180 181 def set(self, value): 182 strValue = str(value) if value is not None else None 183 self._validate(strValue) 184 self.settings_path.Set(self.settings_key, strValue) 185 self.on_change(value) 186 187 188 class _BaseSettingUUIDList(_BaseSetting): 189 190 def __init__(self, settings_key, default_value): 191 super(_BaseSettingUUIDList, self).__init__(settings_key, default_value) 192 193 def _validate(self, value): 194 if value is None: 195 return True 196 try: 197 [ uuid.UUID(x) for x in value ] 198 return True 199 except ValueError: 200 raise ValueError('Unexpected settings value %s (contains invalid uuid) ' % value) 201 202 def get(self): 203 values = super(_BaseSettingUUIDList, self).get() 204 if values is None: 205 return 206 else: 207 return [ uuid.UUID(x) for x in values ] 208 209 def set(self, value): 210 str_value = [ str(x) for x in value ] if value is not None else None 211 self._validate(str_value) 212 self.settings_path.Set(self.settings_key, str_value) 213 self.on_change(value) 214 215 216 class CharSettingBool(_BaseSettingBool, _CharSettingMixin): 217 pass 218 219 220 class CharSettingNumeric(_BaseSettingNumeric, _CharSettingMixin): 221 pass 222 223 224 class CharSettingNumericList(_BaseSettingNumericList, _CharSettingMixin): 225 pass 226 227 228 class CharSettingEnum(_BaseSettingEnum, _CharSettingMixin): 229 pass 230 231 232 class CharSettingString(_BaseSettingString, _CharSettingMixin): 233 pass 234 235 236 class CharSettingUUID(_BaseSettingUUID, _CharSettingMixin): 237 pass 238 239 240 class CharSettingUUIDList(_BaseSettingUUIDList, _CharSettingMixin): 241 pass 242 243 244 class UserSettingBool(_BaseSettingBool, _UserSettingMixin): 245 pass 246 247 248 class UserSettingNumeric(_BaseSettingNumeric, _UserSettingMixin): 249 pass 250 251 252 class UserSettingEnum(_BaseSettingEnum, _UserSettingMixin): 253 pass 254 255 256 class UserSettingString(_BaseSettingString, _UserSettingMixin): 257 pass 258 259 260 class UserSettingUUID(_BaseSettingUUID, _UserSettingMixin): 261 pass 262 263 264 class PublicSettingBool(_BaseSettingBool, _PublicSettingMixin): 265 pass 266 267 268 class PublicSettingNumeric(_BaseSettingNumeric, _PublicSettingMixin): 269 pass 270 271 272 class PublicSettingEnum(_BaseSettingEnum, _PublicSettingMixin): 273 pass 274 275 276 class PublicSettingString(_BaseSettingString, _PublicSettingMixin): 277 pass 278 279 280 class DeviceSettingBool(_BaseSettingBool, _DeviceSettingMixin): 281 pass 282 283 284 class DeviceSettingEnum(_BaseSettingEnum, _DeviceSettingMixin): 285 pass 286 287 288 class AudioSettingBool(_BaseSettingBool, _AudioSettingMixin): 289 pass 290 291 292 class AudioSettingNumeric(_BaseSettingNumeric, _AudioSettingMixin): 293 pass 294 295 296 class AudioSettingEnum(_BaseSettingEnum, _AudioSettingMixin): 297 pass 298 299 300 class SuppressSettingBool(_BaseSettingBool, _SuppressSettingMixin): 301 pass 302 303 304 class SessionSettingBool(_BaseSettingBool): 305 306 def __init__(self, default_value): 307 super(SessionSettingBool, self).__init__(None, default_value) 308 self._value = default_value 309 310 def _set(self, value): 311 self._value = value 312 313 def get(self): 314 return self._value 315 316 317 class SessionSettingNumeric(_BaseSettingNumeric): 318 319 def __init__(self, default_value, min_value = None, max_value = None): 320 super(SessionSettingNumeric, self).__init__(None, default_value, min_value, max_value) 321 self._value = default_value 322 323 def _set(self, value): 324 self._value = value 325 326 def get(self): 327 return self._value 328 329 330 class SessionSettingEnum(_BaseSettingEnum): 331 332 def __init__(self, default_value, options = None): 333 super(SessionSettingEnum, self).__init__(None, default_value, options) 334 self._value = default_value 335 336 def _set(self, value): 337 self._value = value 338 339 def get(self): 340 return self._value 341 342 343 class SessionSettingString(_BaseSettingString): 344 345 def __init__(self, default_value): 346 super(SessionSettingString, self).__init__(None, default_value) 347 self._value = default_value 348 349 def _set(self, value): 350 self._value = value 351 352 def get(self): 353 return self._value