Skip to content

Commit 0acf0b3

Browse files
committed
Color: Annotatedsettings
1 parent 9e5ff67 commit 0acf0b3

File tree

1 file changed

+56
-5
lines changed

1 file changed

+56
-5
lines changed

Orange/widgets/data/owcolor.py

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
from itertools import chain
33
import json
4+
from typing import List
45

56
import numpy as np
67

@@ -10,7 +11,7 @@
1011
from AnyQt.QtWidgets import QHeaderView, QColorDialog, QTableView, QComboBox, \
1112
QFileDialog, QMessageBox
1213

13-
from orangewidget.settings import IncompatibleContext
14+
from orangewidget.settings import IncompatibleContext, TypeSupport
1415

1516
import Orange
1617
from Orange.preprocess.transformation import Identity
@@ -232,6 +233,48 @@ def from_dict(cls, var, data):
232233
return obj, warnings
233234

234235

236+
class AttrDescTypeSupport(TypeSupport):
237+
@classmethod
238+
def pack_value(cls, value, _=None):
239+
packed = {k: list(tuple(x) for x in v) if k == "new_colors" else v
240+
for k, v in value.__dict__.items()
241+
if k.startswith("new_") and v is not None}
242+
packed["var"] = value.var.name
243+
return packed
244+
245+
@classmethod
246+
def unpack_value(cls, value, _, domain, *_a):
247+
var = domain[value["var"]]
248+
desc = cls.supported_types[0](var)
249+
if "new_name" in value:
250+
desc.name = value["new_name"]
251+
return desc
252+
253+
254+
class DiscAttrDescTypeSupport(AttrDescTypeSupport):
255+
supported_types = (DiscAttrDesc, )
256+
257+
@classmethod
258+
def unpack_value(cls, value, tp, domain, *_):
259+
desc = super().unpack_value(value, tp, domain)
260+
for i, color in enumerate(value.get("new_colors", ())):
261+
desc.set_color(i, color)
262+
for i, color in enumerate(value.get("new_values", ())):
263+
desc.set_value(i, color)
264+
return desc
265+
266+
267+
class ContAttrDescTypeSupport(AttrDescTypeSupport):
268+
supported_types = (ContAttrDesc, )
269+
270+
@classmethod
271+
def unpack_value(cls, value, tp, domain, *_):
272+
desc = super().unpack_value(value, tp, domain)
273+
if "new_palette_name" in value:
274+
desc.palette_name = value["new_palette_name"]
275+
return desc
276+
277+
235278
class ColorTableModel(QAbstractTableModel):
236279
"""
237280
Base color model for discrete and continuous variables. The model handles:
@@ -547,12 +590,12 @@ class Outputs:
547590

548591
settingsHandler = settings.PerfectDomainContextHandler(
549592
match_values=settings.PerfectDomainContextHandler.MATCH_VALUES_ALL)
550-
disc_descs = settings.ContextSetting([])
551-
cont_descs = settings.ContextSetting([])
593+
disc_descs: List[DiscAttrDesc] = settings.ContextSetting([])
594+
cont_descs: List[ContAttrDesc] = settings.ContextSetting([])
552595
selected_schema_index = settings.Setting(0)
553596
auto_apply = settings.Setting(True)
554597

555-
settings_version = 2
598+
settings_version = 3
556599

557600
want_main_area = False
558601

@@ -804,9 +847,17 @@ def was(n, o):
804847
self.report_raw(f"<table>{table}</table>")
805848

806849
@classmethod
807-
def migrate_context(cls, _, version):
850+
def migrate_context(cls, context, version):
808851
if not version or version < 2:
809852
raise IncompatibleContext
853+
if version < 3:
854+
values = context.values
855+
values["disc_descs"] = [
856+
DiscAttrDescTypeSupport.pack_value(desc)
857+
for desc in values["disc_descs"]]
858+
values["cont_descs"] = [
859+
ContAttrDescTypeSupport.pack_value(desc)
860+
for desc in values["cont_descs"]]
810861

811862

812863
if __name__ == "__main__": # pragma: no cover

0 commit comments

Comments
 (0)