# HG changeset patch # User souliane # Date 1423307232 -3600 # Node ID 462d0458e6790eb1292fdbc6cc92e4ad0dc1128d # Parent be3fd3874c3a8716554ec29a5801e53deda14804 browser_side: base_widget.DropCell raises an exception if the callback doesn't return a LiberviaWidget instance diff -r be3fd3874c3a -r 462d0458e679 src/browser/sat_browser/base_widget.py --- a/src/browser/sat_browser/base_widget.py Sat Feb 07 19:24:38 2015 +0100 +++ b/src/browser/sat_browser/base_widget.py Sat Feb 07 12:07:12 2015 +0100 @@ -46,6 +46,10 @@ import base_menu +class NoLiberviaWidgetException(Exception): + pass + + class DragLabel(DragWidget): def __init__(self, text, type_, host=None): @@ -106,14 +110,14 @@ @classmethod def addDropKey(cls, key, cb): - """Add a association between a key and a class to create on drop + """Add a association between a key and a class to create on drop. @param key: key to be associated (e.g. "CONTACT", "CHAT") - @param cb: either a LiberviaWidget instance, or a callback which return one + @param cb: a callable (either a class or method) returning a + LiberviaWidget instance """ DropCell.drop_keys[key] = cb - def onDragEnter(self, event): if self == LiberviaDragWidget.current: return @@ -138,6 +142,10 @@ return (row.rowIndex, cell.cellIndex) def onDrop(self, event): + """ + @raise NoLiberviaWidgetException: something else than a LiberviaWidget + has been returned by the callback. + """ self.removeStyleName('dragover') DOM.eventPreventDefault(event) dt = event.dataTransfer @@ -171,6 +179,8 @@ widgets_panel.removeWidget(_new_panel) elif item_type in self.drop_keys: _new_panel = self.drop_keys[item_type](self.host, item) + if not isinstance(_new_panel, LiberviaWidget): + raise NoLiberviaWidgetException else: log.warning("unmanaged item type") return