def onBrowserEvent(self, event): etype = DOM.eventGetType(event) if etype == "click": e = DOM.eventGetTarget(event) if not self.shouldTreeDelegateFocusToElement(e) and \ self.curSelection is not None: self.setFocus(True) elif etype in MouseListener.MOUSE_EVENTS: if etype == "mousedown": self.elementClicked(self.root, DOM.eventGetTarget(event)) MouseListener.fireMouseEvent(self.mouseListeners, self, event) elif etype == "blur" or etype == "focus": FocusListener.fireFocusEvent(self.focusListeners, self, event) elif etype == "keydown": if self.curSelection is None: if self.root.getChildCount() > 0: self.onSelection(self.root.getChild(0), True) Widget.onBrowserEvent(self, event) return if self.lastEventType == "keydown": return keycode = DOM.eventGetKeyCode(event) if keycode == KeyboardListener.KEY_UP: self.moveSelectionUp(self.curSelection, True) DOM.eventPreventDefault(event) elif keycode == KeyboardListener.KEY_DOWN: self.moveSelectionDown(self.curSelection, True) DOM.eventPreventDefault(event) elif keycode == KeyboardListener.KEY_LEFT: if self.curSelection.getState(): self.curSelection.setState(False) DOM.eventPreventDefault(event) elif keycode == KeyboardListener.KEY_RIGHT: if not self.curSelection.getState(): self.curSelection.setState(True) DOM.eventPreventDefault(event) elif etype == "keyup": if DOM.eventGetKeyCode(event) == KeyboardListener.KEY_TAB: chain = [] self.collectElementChain(chain, self.getElement(), DOM.eventGetTarget(event)) item = self.findItemByChain(chain, 0, self.root) if item != self.getSelectedItem(): self.setSelectedItem(item, True) elif etype == "keypress": KeyboardListener.fireKeyboardEvent(self.keyboardListeners, self, event) Widget.onBrowserEvent(self, event) self.lastEventType = etype
def onDragStart(self, event): dt = event.dataTransfer target = DOM.eventGetTarget(event) target = Widget(Element=target) id = target.getID() dt.setData("Text", "Dropped %s" % target.getID()) dt.effectAllowed = 'copy' if id == 'imgdrag1': parent = self.getParent() while not hasattr(parent, 'h2'): parent = parent.getParent() dt.setDragImage(parent.h2.getElement(), 10, 10) elif id == 'imgdrag2': dt.setDragImage(doc().getElementById('logo'), 10, 10) elif id == 'imgdrag3': # OK, it's a bit of a cheat, but the following works on current # Opera, IE, Firefox, Safari, Chrome. ctx = GWTCanvas(50, 50) self.makeCanvasImg(ctx) try: img = DOM.createImg() DOM.setAttribute(img, 'src', ctx.canvas.toDataURL()) dt.setDragImage(img, 25, 25) except: dt.setDragImage(ctx.canvas, 25, 25)
def setDragStartPosition(event): #, undo): dt = event.dataTransfer target = DOM.eventGetTarget(event) clientX, clientY = event.clientX, event.clientY absx, absy = clientX + Window.getScrollLeft( ), clientY + Window.getScrollTop() # para arrastar um component ou bloco entre abas from edu.uca.renderable.block.Block import Block from edu.uca.util.Serializable import saveStackBlock from edu.uca.Workspace import getWorkspace from edu.uca.renderable.hardware.ComponentBlock import ComponentBlock from edu.uca.util.Serializable import saveComponent if (isinstance(getWorkspace().getMovingBlock(), ComponentBlock)): package = json.dumps({ "offsetX": absx - DOM.getAbsoluteLeft(target), # armagenar a origem para undo "offsetY": absy - DOM.getAbsoluteTop(target), "componetHardware": saveComponent(getWorkspace().getMovingBlock()) }) elif (isinstance(getWorkspace().getMovingBlock(), Block)): package = json.dumps({ "offsetX": absx - DOM.getAbsoluteLeft(target), # armagenar a origem para undo "offsetY": absy - DOM.getAbsoluteTop(target), "stackBlock": saveStackBlock(getWorkspace().getMovingBlock()) }) dt.setData('text', package) dt.allowedEffects = 'copy' # using "copy" here because Windows Chrome does not like "move"
def getCurrentOffsetPosition(event): target = DOM.eventGetTarget(event) clientX, clientY = event.clientX, event.clientY # pega pos absoluta do ponteiro do mouse absx, absy = clientX + Window.getScrollLeft( ), clientY + Window.getScrollTop() # ? - sempre 0,0 return absx - DOM.getAbsoluteLeft(target), absy - DOM.getAbsoluteTop( target) # subtrai pos xy do blockspad
def onEventPreview(self, event): type = DOM.eventGetType(event) if type == "click": target = DOM.eventGetTarget(event) parentMenuElement = self.item.getParentMenu().getElement() if DOM.isOrHasChild(parentMenuElement, target): return False return PopupPanel.onEventPreview(self, event)
def onDragOver(self, event): target = DOM.eventGetTarget(event) t = Widget(Element=target) dt = event.dataTransfer dt.dropEffect = 'copy' class_names = t.getStyleName() if class_names is not None: if 'drophere' in class_names: DOM.eventPreventDefault(event)
def onDragStart(self, event): target = DOM.eventGetTarget(event) dt = event.dataTransfer try: id = Widget(Element=target).getID() except: id = '' dt.setData("Text", "Dropped %s" % id) effect_allowed = self.data[int(id[-1])] dt.effectAllowed = effect_allowed
def onDragLeave(self, event): target = DOM.eventGetTarget(event) t = Widget(Element=target) try: class_names = t.getStyleName() except: class_names = None if class_names is not None: if 'drophere' in class_names: t.removeStyleName('dragover')
def onDrop(self, event): dt = event.dataTransfer text = dt.getData('Text') target = DOM.eventGetTarget(event) t = Widget(Element=target) class_names = t.getStyleName() if class_names is not None: if 'drophere' in class_names: self.addMessage('%s onto %s<br>effectAllowed=%s, dropEffect=%s' % (text, target.id, dt.effectAllowed, dt.dropEffect)) DOM.eventPreventDefault(event)
def onDragEnter(self, event): target = DOM.eventGetTarget(event) t = Widget(Element=target) try: class_names = t.getStyleName() except: class_names = None if class_names is not None: if 'drophere' in class_names: t.addStyleName('dragover') DOM.eventPreventDefault(event)
def onDragOver(self, event): target = DOM.eventGetTarget(event) t = Widget(Element=target) class_names = t.getStyleName() if class_names is not None: if 'drophere' in class_names: dt = event.dataTransfer id = Widget(Element=target).getID() drop_effect = self.data[int(id[-1])] dt.dropEffect = drop_effect DOM.eventPreventDefault(event)
def onEventPreview(self, event): # preventDefault on mousedown events, outside of the # dialog, to stop text-selection on dragging type = DOM.eventGetType(event) if type == 'mousedown': target = DOM.eventGetTarget(event) elem = self.caption.getElement() event_targets_popup = target and DOM.isOrHasChild(elem, target) if event_targets_popup: DOM.eventPreventDefault(event) return PopupPanel.onEventPreview(self, event)
def onDrop(self, event): dt = event.dataTransfer text = dt.getData('Text') target = DOM.eventGetTarget(event) t = Widget(Element=target) class_names = t.getStyleName() DOM.eventPreventDefault(event) if class_names is not None: if 'drophere' in class_names: self.addMessage('%s onto %s' % (text, target.id)) return
def onEventPreview(self, event): type = DOM.eventGetType(event) if type == "click": target = DOM.eventGetTarget(event) parentMenuElement = self.item.getElement() if DOM.isOrHasChild(parentMenuElement, target): if self.item.onBrowserEvent(event): self.hide() return True return PopupPanel.onEventPreview(self, event)
def onEventPreview(self, event): # preventDefault on mousedown events, outside of the # dialog, to stop text-selection on dragging type = DOM.eventGetType(event) if type == "mousedown": target = DOM.eventGetTarget(event) elem = self.caption.getElement() event_targets_popup = target and DOM.isOrHasChild(elem, target) if event_targets_popup: DOM.eventPreventDefault(event) return PopupPanel.onEventPreview(self, event)
def onEventPreview(self, event): # preventDefault on mousedown events, outside of the # dialog, to stop text-selection on dragging type = DOM.eventGetType(event) print "onEventPreview", event, type if type == 'mousedown': target = DOM.eventGetTarget(event) event_targets_control = target and DOM.isOrHasChild(self.getElement(), target) print "onEventPreview", target, event_targets_control if event_targets_control: DOM.eventPreventDefault(event) return VerticalSliderDemo.onEventPreview(self, event)
def getEventTargetCell(self, event): td = DOM.eventGetTarget(event) while td is not None: if DOM.getAttribute(td, "tagName").lower() == "td": tr = DOM.getParent(td) body = DOM.getParent(tr) if DOM.compare(body, self.bodyElem): return td if DOM.compare(td, self.bodyElem): return None td = DOM.getParent(td) return None
def onDragStart(self, event): self.removeStyleName('drop_fail') dt = event.dataTransfer dt.effectAllowed = 'copy' target = DOM.eventGetTarget(event) widget = None for widget in self.children: if widget.getElement() == target: self.movingWidget = widget break dt.setData('Text', json.encode({'name': widget.student_name, 'age': widget.age, 'parent': self.getID()}))
def onEventPreview(self, event): type = DOM.eventGetType(event) if type == "click": target = DOM.eventGetTarget(event) parentMenuElement = self.item.getElement() if DOM.isOrHasChild(parentMenuElement, target): if self.item.findItem(target): self.hide() DOM.eventCancelBubble(event, True) DOM.eventStopPropagation(event) return True return PopupPanel.onEventPreview(self, event)
def onBrowserEvent(self, event): Widget.onBrowserEvent(self, event) item = self.findItem(DOM.eventGetTarget(event)) if item is None: return False type = DOM.eventGetType(event) if type == "click": self.doItemAction(item, True) return True elif type == "mouseover": self.itemOver(item) elif type == "mouseout": self.itemOver(None) return False
def onDragStart(self, event): dt = event.dataTransfer target = DOM.eventGetTarget(event) clientX = event.clientX clientY = event.clientY absx = clientX + Window.getScrollLeft() absy = clientY + Window.getScrollTop() package = json.encode({"text": DOM.getInnerText(target), "offsetX": absx - DOM.getAbsoluteLeft(target), "offsetY": absy - DOM.getAbsoluteTop(target)}) dt.setData('text', package) # using "copy" here because Windows Chrome does not like "move" dt.allowedEffects = 'copy' self.movingWidget = None for widget in self.children: if target == widget.getElement(): self.movingWidget = widget
def onDragStart(self, event): self.removeStyleName('drop_fail') dt = event.dataTransfer dt.effectAllowed = 'copy' target = DOM.eventGetTarget(event) widget = None for widget in self.children: if widget.getElement() == target: self.movingWidget = widget break dt.setData( 'Text', json.encode({ 'name': widget.student_name, 'age': widget.age, 'parent': self.getID() }))
def onDragStart(self, event): dt = event.dataTransfer target = DOM.eventGetTarget(event) clientX = event.clientX clientY = event.clientY absx = clientX + Window.getScrollLeft() absy = clientY + Window.getScrollTop() package = json.encode({ "text": DOM.getInnerText(target), "offsetX": absx - DOM.getAbsoluteLeft(target), "offsetY": absy - DOM.getAbsoluteTop(target) }) dt.setData('text', package) # using "copy" here because Windows Chrome does not like "move" dt.allowedEffects = 'copy' self.movingWidget = None for widget in self.children: if target == widget.getElement(): self.movingWidget = widget
def onDragStart(self, event): dt = event.dataTransfer target = DOM.eventGetTarget(event) target = Widget(Element=target) try: id = target.getID() except: id = '' if id == 'datadrag0': dt.setData('text/plain', 'Hello World!') elif id == 'datadrag1': logo = doc().getElementById('logo') logo_parent_element = DOM.getParent(logo) text = DOM.getInnerText(logo_parent_element) html = DOM.getInnerHTML(logo_parent_element) uri = DOM.getAttribute(logo, 'src') dt.setData('text/plain', text) dt.setData('text/html', html) dt.setData('text/uri-list', uri) elif id == 'datadrag2': dt.setData('x-star-trek/tribble', 'I am a tribble')
def onBrowserEvent(self, event): typ = DOM.eventGetType(event) if typ == "mousedown": target = DOM.eventGetTarget(event) if DOM.isOrHasChild(self.splitElem, target): self.startResizingFrom( DOM.eventGetClientX(event) - self.getAbsoluteLeft(), DOM.eventGetClientY(event) - self.getAbsoluteTop()) DOM.setCapture(self.getElement()) DOM.eventPreventDefault(event) elif typ == "mouseup": DOM.releaseCapture(self.getElement()) self.stopResizing() elif typ == 'mousemove': if self.isResizing: #assert DOM.getCaptureElement() is not None self.onSplitterResize( DOM.eventGetClientX(event) - self.getAbsoluteLeft(), DOM.eventGetClientY(event) - self.getAbsoluteTop()) DOM.eventPreventDefault(event)
def onBrowserEvent(self, event): typ = DOM.eventGetType(event) if typ == "mousedown": target = DOM.eventGetTarget(event) if DOM.isOrHasChild(self.splitElem, target): self.startResizingFrom(DOM.eventGetClientX(event) - self.getAbsoluteLeft(), DOM.eventGetClientY(event) - self.getAbsoluteTop()) DOM.setCapture(self.getElement()) DOM.eventPreventDefault(event) elif typ == "mouseup": DOM.releaseCapture(self.getElement()) self.stopResizing() elif typ == 'mousemove': if self.isResizing: #assert DOM.getCaptureElement() is not None self.onSplitterResize(DOM.eventGetClientX(event) - self.getAbsoluteLeft(), DOM.eventGetClientY(event) - self.getAbsoluteTop()) DOM.eventPreventDefault(event)
def setTarget(self, target=None): if target is not None: self.target = target else: self.target = DOM.eventGetTarget(self.evt)
def onBrowserEvent(self, event): # Should not act on button if disabled. if not self.isEnabled(): # This can happen when events are bubbled up from # non-disabled children return event_type = DOM.eventGetType(event) if event_type == "click": # If clicks are currently disallowed, keep it from bubbling or # being passed to the superclass. if not self.allowClick: DOM.eventStopPropagation(event) return elif event_type == "mousedown": if DOM.eventGetButton(event) == Event.BUTTON_LEFT: self.setFocus(True) self.onClickStart() DOM.setCapture(self.getElement()) self.isCapturing = True # Prevent dragging (on some browsers) DOM.eventPreventDefault(event) elif event_type == "mouseup": if self.isCapturing: self.isCapturing = False DOM.releaseCapture(self.getElement()) if self.isHovering() and \ DOM.eventGetButton(event) == Event.BUTTON_LEFT: self.onClick() elif event_type == "mousemove": if self.isCapturing: # Prevent dragging (on other browsers) DOM.eventPreventDefault(event) elif event_type == "mouseout": to = DOM.eventGetToElement(event) if (DOM.isOrHasChild(self.getElement(), DOM.eventGetTarget(event)) and (to is None or not DOM.isOrHasChild(self.getElement(), to))): if self.isCapturing: self.onClickCancel() self.setHovering(False) elif event_type == "mouseover": if DOM.isOrHasChild(self.getElement(), DOM.eventGetTarget(event)): self.setHovering(True) if self.isCapturing: self.onClickStart() elif event_type == "blur": if self.isFocusing: self.isFocusing = False self.onClickCancel() elif event_type == "losecapture": if self.isCapturing: self.isCapturing = False self.onClickCancel() ButtonBase.onBrowserEvent(self, event) # Synthesize clicks based on keyboard events AFTER the normal # key handling. if (DOM.eventGetTypeInt(event) & Event.KEYEVENTS) == 0: return keyCode = DOM.eventGetKeyCode(event) if event_type == "keydown": if keyCode == ' ': self.isFocusing = True self.onClickStart() elif event_type == "keyup": if self.isFocusing and keyCode == ' ': self.isFocusing = False self.onClick() elif event_type == "keypress": if keyCode == '\n' or keyCode == '\r': self.onClickStart() self.onClick()
def onDragStart(self, event): target = DOM.eventGetTarget(event) dt = event.dataTransfer dt.setData("Text", "Dropped %s" % target.id) dt.effectAllowed = 'copy'
def onBrowserEvent(self, event): if DOM.eventGetType(event) == "click": index = self.getDividerIndex(DOM.eventGetTarget(event)) if index != -1: self.showStack(index)
def onBrowserEvent(self, event): # Should not act on button if disabled. if not self.getEnabled(): # This can happen when events are bubbled up from # non-disabled children return event_type = DOM.eventGetType(event) if event_type == "click": # If clicks are currently disallowed, keep it from bubbling or # being passed to the superclass. if not self.allowClick: DOM.eventStopPropagation(event) return elif event_type == "mousedown": if DOM.eventGetButton(event) == Event.BUTTON_LEFT: self.setFocus(True) self.onClickStart() DOM.setCapture(self.getElement()) self.isCapturing = True # Prevent dragging (on some browsers) DOM.eventPreventDefault(event) elif event_type == "mouseup": if self.isCapturing: self.isCapturing = False DOM.releaseCapture(self.getElement()) if self.isHovering() and \ DOM.eventGetButton(event) == Event.BUTTON_LEFT: self.onClick() elif event_type == "mousemove": if self.isCapturing: # Prevent dragging (on other browsers) DOM.eventPreventDefault(event) elif event_type == "mouseout": to = DOM.eventGetToElement(event) if (DOM.isOrHasChild(self.getElement(), DOM.eventGetTarget(event)) and (to is None or not DOM.isOrHasChild(self.getElement(), to))): if self.isCapturing: self.onClickCancel() self.setHovering(False) elif event_type == "mouseover": if DOM.isOrHasChild(self.getElement(), DOM.eventGetTarget(event)): self.setHovering(True) if self.isCapturing: self.onClickStart() elif event_type == "blur": if self.isFocusing: self.isFocusing = False self.onClickCancel() elif event_type == "losecapture": if self.isCapturing: self.isCapturing = False self.onClickCancel() ButtonBase.onBrowserEvent(self, event) # Synthesize clicks based on keyboard events AFTER the normal # key handling. if (DOM.eventGetTypeInt(event) & Event.KEYEVENTS) == 0: return keyCode = DOM.eventGetKeyCode(event) if event_type == "keydown": if keyCode == ' ': self.isFocusing = True self.onClickStart() elif event_type == "keyup": if self.isFocusing and keyCode == ' ': self.isFocusing = False self.onClick() elif event_type == "keypress": if keyCode == '\n' or keyCode == '\r': self.onClickStart() self.onClick()
def _event_targets_btn(self, event): target = DOM.eventGetTarget(event) return target and DOM.isOrHasChild(self.btn.getElement(), target)
def _event_targets_control(self, event): target = DOM.eventGetTarget(event) return target and DOM.isOrHasChild(self.getElement(), target)
def _event_targets_title(self, event): target = DOM.eventGetTarget(event) return target and DOM.isOrHasChild(self.title.getElement(), target)