Changeset 11199:d0e9c2fbc5f2 in orange


Ignore:
Timestamp:
11/23/12 18:43:14 (17 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Fixed new link creation when more than one links are possible.

Location:
Orange/OrangeCanvas
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/document/interactions.py

    r11198 r11199  
    382382            possible = self.scheme.propose_links(source_node, sink_node) 
    383383 
     384            log.debug("proposed (weighted) links: %r", 
     385                      [(s1.name, s2.name, w) for s1, s2, w in possible]) 
     386 
    384387            if not possible: 
    385388                raise NoPossibleLinksError 
    386389 
    387             links_to_add = [] 
    388             links_to_remove = [] 
    389  
    390             # Check for possible ties in the proposed link weights 
     390            source, sink, w = possible[0] 
     391            links_to_add = [(source, sink)] 
     392 
     393            show_link_dialog = False 
     394 
     395            # Ambiguous new link request. 
    391396            if len(possible) >= 2: 
    392                 source, sink, w1 = possible[0] 
     397                # Check for possible ties in the proposed link weights 
    393398                _, _, w2 = possible[1] 
    394                 if w1 == w2: 
    395                     # If there are ties in the weights a detailed link 
    396                     # dialog is presented to the user. 
     399                if w == w2: 
     400                    show_link_dialog = True 
     401 
     402                # Check for destructive action (i.e. would the new link 
     403                # replace a previous link) 
     404                if sink.single and self.scheme.find_links(sink_node=sink_node, 
     405                                                          sink_channel=sink): 
     406                    show_link_dialog = True 
     407 
     408                if show_link_dialog: 
    397409                    links_action = EditNodeLinksAction( 
    398410                                    self.document, source_node, sink_node) 
    399411                    try: 
    400                         links = links_action.edit_links() 
     412                        links_action.edit_links() 
    401413                    except Exception: 
    402414                        log.error("'EditNodeLinksAction' failed", 
    403415                                  exc_info=True) 
    404416                        raise 
    405                 else: 
    406                     links_to_add = [(source, sink)] 
    407             else: 
    408                 source, sink, _ = possible[0] 
    409                 links_to_add = [(source, sink)] 
    410  
    411             for source, sink in links_to_remove: 
    412                 existing_link = self.scheme.find_links( 
    413                                     source_node=source_node, 
    414                                     source_channel=source, 
    415                                     sink_node=sink_node, 
    416                                     sink_channel=sink) 
    417  
    418                 self.document.removeLink(existing_link) 
     417                    # EditNodeLinksAction already commits the links on accepted 
     418                    links_to_add = [] 
    419419 
    420420            for source, sink in links_to_add: 
  • Orange/OrangeCanvas/scheme/scheme.py

    r11189 r11199  
    359359        # Get existing links to sink channels that are Single. 
    360360        links = self.find_links(None, None, sink_node) 
    361         already_connected_sinks = [link for link in links \ 
     361        already_connected_sinks = [link.sink_channel for link in links \ 
    362362                                   if link.sink_channel.single] 
    363363 
     
    367367                weight = 0 
    368368            else: 
    369                 check = [not out_c.dynamic,  # Dynamic signals are lasts 
     369                check = [not out_c.dynamic,  # Dynamic signals are last 
    370370                         in_c not in already_connected_sinks, 
    371371                         bool(in_c.default), 
Note: See TracChangeset for help on using the changeset viewer.