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 = '&nbsp;'
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 = '&nbsp;'
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 = '&nbsp;'
809 item_type = None
810 return item, item_type