Ignore:
Timestamp:
01/18/12 11:59:51 (8 years ago)
Author:
pcosquer
Message:

3D branch: merge changes from trunk (rev [661])

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3D/openPLM/plmapp/navigate.py

    r595 r662  
    151151        self.graph.node_attr.update(self.NODE_ATTRIBUTES) 
    152152        self.graph.edge_attr.update(self.EDGE_ATTRIBUTES) 
     153        self.title_to_nodes = {} 
    153154 
    154155    def set_options(self, options): 
     
    202203        if self.options["prog"] == "twopi": 
    203204            self.graph.graph_attr["ranksep"] = "1.2" 
    204          
     205        
    205206    def _create_child_edges(self, obj, *args): 
    206207        if self.options[OSR] and self.users_result: 
     
    211212                continue 
    212213            child = PartController(link.child, None) 
    213             label = "Qty: %.2f\\nOrder: %d" % (link.quantity, link.order)  
     214            label = "Qty: %.2f %s\\nOrder: %d" % (link.quantity, 
     215                    link.get_shortened_unit(), link.order)  
    214216            self.graph.add_edge(obj.id, child.id, label) 
    215217            self._set_node_attributes(child) 
     
    226228                continue 
    227229            parent = PartController(link.parent, None) 
    228             label = "Qty: %.2f\\nOrder: %d" % (link.quantity, link.order)  
     230            label = "Qty: %.2f %s\\nOrder: %d" % (link.quantity, 
     231                    link.get_shortened_unit(), link.order)  
    229232            self.graph.add_edge(parent.id, obj.id, label) 
    230233            self._set_node_attributes(parent) 
     
    240243                continue 
    241244            part = PartController(link.part, None) 
    242             self.graph.add_edge(obj.id, part.id, " ") 
     245            # create a link part -> document: 
     246            # if layout is dot, the part is on top of the document 
     247            # cf. tickets #82 and #83 
     248            self.graph.add_edge(part.id, obj.id, " ") 
    243249            self._set_node_attributes(part) 
    244250     
     
    330336 
    331337    def _set_node_attributes(self, obj, obj_id=None, extra_label=""): 
    332         node = self.graph.get_node(obj_id or obj.id) 
     338        obj_id = obj_id or obj.id 
     339         
     340        # data and title_to_nodes are used to retrieve usefull data (url, tooltip) 
     341        # in convert_map 
     342        data = {} 
     343        node = self.graph.get_node(obj_id) 
     344        node.attr["tooltip"] = str(obj_id) 
     345        node.attr["URL"] = obj.plmobject_url + "navigate/" 
     346         
     347        # set node attributes according to its type 
    333348        type_ = type(obj) 
    334349        if issubclass(type_, PartController): 
     
    337352            type_ = DocumentController 
    338353        node.attr.update(self.TYPE_TO_ATTRIBUTES[type_]) 
    339         node.attr["URL"] = obj.plmobject_url + "navigate/" 
    340         node.attr["tooltip"] = "None" 
     354 
    341355        if isinstance(obj, PLMObjectController): 
    342             node.attr['label'] = get_path(obj).replace("/", "\\n") 
     356            # display the object's name if it is not empty 
     357            path = get_path(obj) 
     358            node.attr['label'] = obj.name.strip() or path.replace("/", "\\n") 
     359            data["title"] = path.replace("/", " - ") 
     360             
     361            # add urls to show/hide thumbnails and attached documents 
    343362            if type_ == DocumentController: 
    344                 node.attr["tooltip"] = "/ajax/thumbnails/" + get_path(obj) 
     363                data["url"] = "/ajax/thumbnails/" + get_path(obj) 
    345364            elif type_ == PartController and not self.options["doc"]: 
    346365                if obj.get_attached_documents(): 
    347366                    s = "+" if obj.id not in self.options["doc_parts"] else "-" 
    348                     node.attr["tooltip"] = s + str(obj.id) 
     367                    data["url"] = s + str(obj.id) 
    349368        elif isinstance(obj, UserController): 
    350             node.attr["label"] = obj.username 
     369            full_name =  u'%s\\n%s' % (obj.first_name, obj.last_name) 
     370            node.attr["label"] = full_name.strip() or obj.username 
     371            data["title"] = obj.username 
    351372        else: 
    352373            node.attr["label"] = obj.name 
    353374        node.attr["label"] += "\\n" + extra_label 
     375        # id is used by the javascript 
    354376        t = type_.__name__.replace("Controller", "") 
    355         node.attr["id"] = "_".join((str(obj_id or obj.id), t, str(obj.id))) 
     377        node.attr["id"] = "_".join((str(obj_id), t, str(obj.id))) 
     378        self.title_to_nodes[node.attr["id"]] = data 
    356379 
    357380    def convert_map(self, map_string): 
     
    360383        ajax_navigate = "/ajax/navigate/" + get_path(self.object) 
    361384        for area in ET.fromstring(map_string).findall("area"): 
     385            data = self.title_to_nodes.get(area.get("id"), {}) 
     386            # compute css position of the div 
    362387            left, top, x2, y2 = map(int, area.get("coords").split(",")) 
    363388            width = x2 - left 
    364389            height = y2 - top 
    365390            style = "position:absolute;z-index:5;top:%dpx;left:%dpx;width:%dpx;height:%dpx;" % (top, left, width, height) 
     391            # create a div with a title, and an <a> element 
    366392            id_ = "Nav-%s" % area.get("id") 
    367393            div = ET.Element("div", id=id_, style=style) 
    368394            div.set("class", "node" + " main_node" * (self.main_node == area.get("id"))) 
    369             url = area.get("title") 
     395            title = data.get("title") 
     396            if title: 
     397                div.set("title", title) 
     398            # add thumbnails and attached documents buttons 
     399            url = data.get("url", "None") 
    370400            if url.startswith("/ajax/thumbnails/"): 
    371401                thumbnails = ET.SubElement(div, "img", src="/media/img/search.png", 
     
    386416                show_doc.set("class", "node_show_docs" + self.BUTTON_CLASS) 
    387417                show_doc.set("onclick", "display_docs('%s', '%s', '%s');" % (id_, ajax_navigate, parts)) 
     418            # add the link 
    388419            a = ET.SubElement(div, "a", href=area.get("href"))  
    389420            span = ET.SubElement(a, "span") 
Note: See TracChangeset for help on using the changeset viewer.