Mercurial > libervia-web
comparison src/browser/sat_browser/libervia_widget.py @ 734:26046f13e93b
browser_side: factorize retrieval of drop event data
author | souliane <souliane@mailoo.org> |
---|---|
date | Tue, 17 Nov 2015 19:59:14 +0100 |
parents | b395d1309936 |
children | f8a7a046ff9c |
comparison
equal
deleted
inserted
replaced
733:66beef5b943d | 734:26046f13e93b |
---|---|
156 @raise NoLiberviaWidgetException: something else than a LiberviaWidget | 156 @raise NoLiberviaWidgetException: something else than a LiberviaWidget |
157 has been returned by the callback. | 157 has been returned by the callback. |
158 """ | 158 """ |
159 self.removeStyleName('dragover') | 159 self.removeStyleName('dragover') |
160 DOM.eventPreventDefault(event) | 160 DOM.eventPreventDefault(event) |
161 dt = event.dataTransfer | 161 item, item_type = eventGetData(event) |
162 # 'text', 'text/plain', and 'Text' are equivalent. | |
163 try: | |
164 item, item_type = dt.getData("text/plain").split('\n') # Workaround for webkit, only text/plain seems to be managed | |
165 if item_type and item_type[-1] == '\0': # Workaround for what looks like a pyjamas bug: the \0 should not be there, and | |
166 item_type = item_type[:-1] # .strip('\0') and .replace('\0','') don't work. TODO: check this and fill a bug report | |
167 # item_type = dt.getData("type") | |
168 log.debug(u"message: %s" % item) | |
169 log.debug(u"type: %s" % item_type) | |
170 except: | |
171 log.debug("no message found") | |
172 item = ' ' | |
173 item_type = None | |
174 if item_type == "WIDGET": | 162 if item_type == "WIDGET": |
175 if not LiberviaDragWidget.current: | 163 if not LiberviaDragWidget.current: |
176 log.error("No widget registered in LiberviaDragWidget !") | 164 log.error("No widget registered in LiberviaDragWidget !") |
177 return | 165 return |
178 _new_panel = LiberviaDragWidget.current | 166 _new_panel = LiberviaDragWidget.current |
280 self.parent.removeStyleName('dragover') | 268 self.parent.removeStyleName('dragover') |
281 if self._getIndex() == self.tab_panel.tabBar.getSelectedTab(): | 269 if self._getIndex() == self.tab_panel.tabBar.getSelectedTab(): |
282 # the widget comes from the same tab, so nothing to do, we let it there | 270 # the widget comes from the same tab, so nothing to do, we let it there |
283 return | 271 return |
284 | 272 |
285 # FIXME: quite the same stuff as in DropCell, need some factorisation | 273 item, item_type = eventGetData(event) |
286 dt = event.dataTransfer | |
287 # 'text', 'text/plain', and 'Text' are equivalent. | |
288 try: | |
289 item, item_type = dt.getData("text/plain").split('\n') # Workaround for webkit, only text/plain seems to be managed | |
290 if item_type and item_type[-1] == '\0': # Workaround for what looks like a pyjamas bug: the \0 should not be there, and | |
291 item_type = item_type[:-1] # .strip('\0') and .replace('\0','') don't work. TODO: check this and fill a bug report | |
292 # item_type = dt.getData("type") | |
293 log.debug(u"message: %s" % item) | |
294 log.debug(u"type: %s" % item_type) | |
295 except: | |
296 log.debug("no message found") | |
297 item = ' ' | |
298 item_type = None | |
299 | |
300 if item_type == "WIDGET": | 274 if item_type == "WIDGET": |
301 if not LiberviaDragWidget.current: | 275 if not LiberviaDragWidget.current: |
302 log.error("No widget registered in LiberviaDragWidget !") | 276 log.error("No widget registered in LiberviaDragWidget !") |
303 return | 277 return |
304 _new_panel = LiberviaDragWidget.current | 278 _new_panel = LiberviaDragWidget.current |
811 widgets_count = self.getWidgetCount() | 785 widgets_count = self.getWidgetCount() |
812 if widgets_count == 1: | 786 if widgets_count == 1: |
813 self.tabBar.addStyleDependentName('oneTab') | 787 self.tabBar.addStyleDependentName('oneTab') |
814 self.host.resize() | 788 self.host.resize() |
815 self.selectTab(widget_index if widget_index < widgets_count else widgets_count - 1) | 789 self.selectTab(widget_index if widget_index < widgets_count else widgets_count - 1) |
790 | |
791 | |
792 def eventGetData(event): | |
793 """Retrieve the event data. | |
794 | |
795 @param event(EventObject) | |
796 @return tuple: (event_text, event_type) | |
797 """ | |
798 dt = event.dataTransfer | |
799 # 'text', 'text/plain', and 'Text' are equivalent. | |
800 try: | |
801 item, item_type = dt.getData("text/plain").split('\n') # Workaround for webkit, only text/plain seems to be managed | |
802 if item_type and item_type[-1] == '\0': # Workaround for what looks like a pyjamas bug: the \0 should not be there, and | |
803 item_type = item_type[:-1] # .strip('\0') and .replace('\0','') don't work. TODO: check this and fill a bug report | |
804 # item_type = dt.getData("type") | |
805 log.debug(u"event data: %s (type %s)" % (item, item_type)) | |
806 except: | |
807 log.debug("event data not found") | |
808 item = ' ' | |
809 item_type = None | |
810 return item, item_type |