Ignore:
Timestamp:
11/26/12 13:32:28 (17 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added annotation font and color serialization.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/scheme/readwrite.py

    r11139 r11202  
    99import cPickle 
    1010 
    11 try: 
    12     from ast import literal_eval 
    13 except ImportError: 
    14     literal_eval = eval 
     11from ast import literal_eval 
    1512 
    1613import logging 
     
    2623 
    2724def parse_scheme(scheme, stream): 
    28     """Parse saved scheme string 
     25    """Parse a saved scheme from `stream` and populate a `scheme` 
     26    instance (:class:`Scheme`). 
     27 
    2928    """ 
    3029    from xml.etree.ElementTree import parse 
     
    3332    version = scheme_el.attrib.get("version", None) 
    3433    if version is None: 
     34        # Fallback: check for "widgets" tag. 
    3535        if scheme_el.find("widgets") is not None: 
    3636            version = "1.0" 
     
    115115            rect = annot_el.attrib.get("rect", "(0, 0, 20, 20)") 
    116116            rect = literal_eval(rect) 
    117             annot = SchemeTextAnnotation(rect, annot_el.text or "") 
     117 
     118            font_family = annot_el.attrib.get("font-family", "").strip() 
     119            font_size = annot_el.attrib.get("font-size", "").strip() 
     120 
     121            font = {} 
     122            if font_family: 
     123                font["family"] = font_family 
     124            if font_size: 
     125                font["size"] = literal_eval(font_size) 
     126 
     127            annot = SchemeTextAnnotation(rect, annot_el.text or "", font=font) 
    118128        elif annot_el.tag == "arrow": 
    119129            start = annot_el.attrib.get("start", "(0, 0)") 
    120130            end = annot_el.attrib.get("end", "(0, 0)") 
    121131            start, end = map(literal_eval, (start, end)) 
    122             annot = SchemeArrowAnnotation(start, end) 
     132 
     133            color = annot_el.attrib.get("fill", "red") 
     134            annot = SchemeArrowAnnotation(start, end, color=color) 
    123135        annotations.append(annot) 
    124136 
     
    206218 
    207219def scheme_to_ows_stream(scheme, stream): 
    208     """Write scheme to a a stream in Orange Scheme .ows format 
     220    """Write scheme to a a stream in Orange Scheme .ows (v 2.0) format. 
    209221    """ 
    210222    builder = TreeBuilder(element_factory=Element) 
     
    266278            tag = "text" 
    267279            attrs.update({"rect": repr(annotation.rect)}) 
     280 
     281            # Save the font attributes 
     282            font = annotation.font 
     283            attrs.update({"font-family": font.get("family", None), 
     284                          "font-size": font.get("size", None)}) 
     285            attrs = [(key, value) for key, value in attrs.items() \ 
     286                     if value is not None] 
     287            attrs = dict((key, unicode(value)) for key, value in attrs) 
     288 
    268289            data = annotation.text 
    269290 
     
    272293            attrs.update({"start": repr(annotation.start_pos), 
    273294                          "end": repr(annotation.end_pos)}) 
     295 
     296            # Save the arrow color 
     297            try: 
     298                color = annotation.color 
     299                attrs.update({"fill": color}) 
     300            except AttributeError: 
     301                pass 
     302 
    274303            data = None 
    275304        else: 
Note: See TracChangeset for help on using the changeset viewer.