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 onMouseDown(self, sender, x, y): rx = x + Window.getScrollLeft() ry = y + Window.getScrollTop() if self.classify: self.PointList.append( Point(rx, ry, -1 ) ) else: self.PointList.append( Point(rx, ry, len(self.color)-1) )
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 onDrop(self, event): dt = event.dataTransfer text = dt.getData('text') package = json.decode(text) x = DOM.eventGetClientX(event) y = DOM.eventGetClientY(event) scrollY = Window.getScrollTop() scrollX = Window.getScrollLeft() offsetX = int(package['offsetX']) offsetY = int(package['offsetY']) at = self.getAbsoluteTop() al = self.getAbsoluteLeft() posX, posY = x - (al - scrollX), y - (at - scrollY) w = DragWidget6(package['text']) self.add(w) makeDraggable(w) # firefox seems to be off-by-one in x. # firefox-specific code? #w.setStyleAttribute('left', posX - offsetX -1) w.setStyleAttribute('left', posX - offsetX) w.setStyleAttribute('top', posY - offsetY) w.removeStyleName('invisible') self.addMessage( "top:%s, left:%s, cy:%s cx:%s, sy:%s sx:%s dropy:%s dropx:%s" % ( at, al, y, x, scrollY, scrollX, posY, posX)) DOM.eventPreventDefault(event)
def __init__(self, key, title, content): AbsolutePanel.__init__(self) self.edit_header = Label("Edit a Post", StyleName="header_label") self.edit_title_label = Label("Title:") self.edit_title = TextBox() self.edit_title.setMaxLength(255) self.edit_content = TextArea() self.edit_content.setVisibleLines(2) self.edit_button = Button("Save") self.edit_cancel_button = Button("Cancel") self.edit_hidden_key = Hidden() self.error_message_label = Label("", StyleName="error_message_label") edit_contents = VerticalPanel(StyleName="Contents", Spacing=4) edit_contents.add(self.edit_header) edit_contents.add(self.edit_title_label) edit_contents.add(self.edit_title) edit_contents.add(self.edit_content) edit_contents.add(self.edit_button) edit_contents.add(self.edit_cancel_button) edit_contents.add(self.error_message_label) edit_contents.add(self.edit_hidden_key) self.edit_dialog = DialogBox(glass=True) self.edit_dialog.setHTML('<b>Blog Post Form</b>') self.edit_dialog.setWidget(edit_contents) left = (Window.getClientWidth() - 900) / 2 + Window.getScrollLeft() top = (Window.getClientHeight() - 600) / 2 + Window.getScrollTop() self.edit_dialog.setPopupPosition(left, top) self.edit_dialog.hide()
def onDrop(self, event): dt = event.dataTransfer text = dt.getData('text') package = json.decode(text) x = DOM.eventGetClientX(event) y = DOM.eventGetClientY(event) scrollY = Window.getScrollTop() scrollX = Window.getScrollLeft() offsetX = int(package['offsetX']) offsetY = int(package['offsetY']) at = self.getAbsoluteTop() al = self.getAbsoluteLeft() posX, posY = x - (al - scrollX), y - (at - scrollY) w = DragWidget6(package['text']) self.add(w) makeDraggable(w) # firefox seems to be off-by-one in x. # firefox-specific code? #w.setStyleAttribute('left', posX - offsetX -1) w.setStyleAttribute('left', posX - offsetX) w.setStyleAttribute('top', posY - offsetY) w.removeStyleName('invisible') self.addMessage( "top:%s, left:%s, cy:%s cx:%s, sy:%s sx:%s dropy:%s dropx:%s" % (at, al, y, x, scrollY, scrollX, posY, posX)) DOM.eventPreventDefault(event)
def onClick(self, sender=None): self.setFocus(True) # work out the relative position of cursor event = DOM.eventGetCurrentEvent() mouse_x = DOM.eventGetClientX(event) + Window.getScrollLeft() mouse_y = DOM.eventGetClientY(event) + Window.getScrollTop() self.moveControl(mouse_x - self.getAbsoluteLeft(), mouse_y - self.getAbsoluteTop(), True)
def onClick(self, sender=None): self.setFocus(True); # work out the relative position of cursor event = DOM.eventGetCurrentEvent() mouse_x = DOM.eventGetClientX(event) + Window.getScrollLeft() mouse_y = DOM.eventGetClientY(event) + Window.getScrollTop() self.moveControl(mouse_x - self.getAbsoluteLeft(), mouse_y - self.getAbsoluteTop())
def onMouseDown(self, sender, x, y): # regardless of drag_enabled, onMouseDown must prevent # default, in order to avoid losing focus. DOM.eventPreventDefault(DOM.eventGetCurrentEvent()); if not self.drag_enabled: return self.dragging = True DOM.setCapture(self.getElement()) self.moveControl(x + Window.getScrollLeft(), y + Window.getScrollTop())
def onMouseDown(self, sender, x, y): # regardless of drag_enabled, onMouseDown must prevent # default, in order to avoid losing focus. DOM.eventPreventDefault(DOM.eventGetCurrentEvent()) if not self.drag_enabled: return self.dragging = True DOM.setCapture(self.getElement()) self.moveControl(x + Window.getScrollLeft(), y + Window.getScrollTop())
def __init__(self, message, messageTitle="Error"): self.dialog = DialogBox(glass=True) self.dialog.setHTML("<b>" + messageTitle + "</b>") dialogContents = VerticalPanel(StyleName="Contents", Spacing=4) dialogContents.add(HTML(message)) dialogContents.add(Button("Close", getattr(self, "onClose"))) self.dialog.setWidget(dialogContents) left = (Window.getClientWidth() - 200) / 2 + Window.getScrollLeft() top = (Window.getClientHeight() - 100) / 2 + Window.getScrollTop() self.dialog.setPopupPosition(left, top) self.dialog.show()
def onMouseDown(self, sender, x, y): # regardless of drag_enabled, onMouseDown must prevent # default, in order to avoid losing focus. self.setFocus(True) DOM.eventPreventDefault(DOM.eventGetCurrentEvent()) if not self.drag_enabled: return self.dragging = True GlassWidget.show(self) self.moveControl(x + Window.getScrollLeft(), y + Window.getScrollTop(), True)
def setGlassPosition(self): top = Window.getScrollTop() left = Window.getScrollLeft() height = Window.getClientHeight() width = Window.getClientWidth() DOM.setStyleAttribute(self.glass, "position", "absolute") DOM.setStyleAttribute(self.glass, "left", "%s" % \ left if left == 0 else "%spx" % left) DOM.setStyleAttribute(self.glass, "top", "%s" % \ top if top == 0 else "%spx" % top) DOM.setStyleAttribute(self.glass, "height", "%spx" % (top + height)) DOM.setStyleAttribute(self.glass, "width", "%spx" % (left + width))
def getDropPosition(target, event): dt = event.dataTransfer text = dt.getData('text') package = json.loads(text) x, y = DOM.eventGetClientX(event), DOM.eventGetClientY(event) scrollX, scrollY = Window.getScrollLeft(), Window.getScrollTop() if package == False: offsetX, offsetY = 0, 0 else: offsetX, offsetY = int(package['offsetX']), int( package['offsetY']) #BUG no chromium at, al = target.getAbsoluteTop(), target.getAbsoluteLeft() posX, posY = x - (al - scrollX), y - (at - scrollY) return max(posX - offsetX, 0), max(posY - offsetY, 0)
def showDialog(self, event): contents = VerticalPanel(StyleName="Contents", Spacing=4) contents.add(HTML('You can place any contents you like in a dialog box.')) contents.add(Button("Close", getattr(self, "onClose"))) self._dialog = DialogBox(glass=True) self._dialog.setHTML('<b>Welcome to the dialog box</b>') self._dialog.setWidget(contents) left = (Window.getClientWidth() - 200) / 2 + Window.getScrollLeft() top = (Window.getClientHeight() - 100) / 2 + Window.getScrollTop() self._dialog.setPopupPosition(left, top) self._dialog.show()
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) 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 onClickDefault(self, sender): # don't shown property editor if they clicked on nothing if None == self.chart.getTouchedPoint(): return event = DOM.eventGetCurrentEvent() # load properties of clicked-on slice into form self.copyChartPropertiesIntoForm(self.chart.getTouchedPoint()) if self.isFirstTime: # initially put upper left corner wherever they clicked... self.setPopupPosition( Window.getScrollLeft()+ DOM.eventGetClientX(event), Window.getScrollTop() + DOM.eventGetClientX(event)) self.show() self.isFirstTime = False else: # ...thereafter, just stay whereever they dragged it to self.show()
def onClickDefault(self, sender): # don't shown property editor if they clicked on nothing if None == self.chart.getTouchedPoint(): return event = DOM.eventGetCurrentEvent() # load properties of clicked-on slice into form self.copyChartPropertiesIntoForm(self.chart.getTouchedPoint()) if self.isFirstTime: # initially put upper left corner wherever they clicked... self.setPopupPosition( Window.getScrollLeft() + DOM.eventGetClientX(event), Window.getScrollTop() + DOM.eventGetClientX(event)) self.show() self.isFirstTime = False else: # ...thereafter, just stay whereever they dragged it to self.show()
def setGlassPosition(self): top = Window.getScrollTop() left = Window.getScrollLeft() height = Window.getClientHeight() width = Window.getClientWidth() el = self.getElement() DOM.setStyleAttribute(el, "position", "absolute") DOM.setStyleAttribute(el, "left", "%s" % left if left == 0 else "%spx" % left) DOM.setStyleAttribute(el, "top", "%s" % top if top == 0 else "%spx" % top) DOM.setStyleAttribute(el, "height", "%spx" % (top + height)) DOM.setStyleAttribute(el, "width", "%spx" % (left + width)) # under pyjd glasswidget cannot be transparent, # otherwise it drops the mousecapture, so we have # to give it a 1% opaque background color if pyjd.is_desktop: # pyjd uses IE style opacity DOM.setStyleAttribute(el, "filter", "alpha(opacity=1)") # this is the Moz form of transparency DOM.setStyleAttribute(el, "background", "rgba(255,255,255,0.1)")
def __init__(self, parent): AbsolutePanel.__init__(self) self.post_header = Label("Write a Post", StyleName="header_label") self.post_write_title_label = Label("Title:") self.post_title = TextBox() self.post_content = TextArea() self.post_button = Button("Post") self.cancel_button = Button("Cancel") self.error_message_label = Label("", StyleName="error_message_label") contents = VerticalPanel(StyleName="Contents", Spacing=4) contents.add(self.post_header) contents.add(self.post_write_title_label) contents.add(self.post_title) contents.add(self.post_content) contents.add(self.post_button) contents.add(self.cancel_button) contents.add(self.error_message_label) self.dialog = DialogBox(glass=True) self.dialog.setHTML('<b>Blog Post Form</b>') self.dialog.setWidget(contents) left = (Window.getClientWidth() - 900) / 2 + Window.getScrollLeft() top = (Window.getClientHeight() - 600) / 2 + Window.getScrollTop() self.dialog.setPopupPosition(left, top) self.dialog.hide()
def onMouseMove(self, sender, x, y): if not self.dragging: return self.moveControl(x + Window.getScrollLeft(), y + Window.getScrollTop())
def window_center(): left = (Window.getClientWidth() - 300) / 2 + Window.getScrollLeft() top = (Window.getClientHeight() - 100) / 2 + Window.getScrollTop() return left, top