Hello out there in ignition land! I have a question about moving windowsâŚ
I would like the users to have the ability to click anywhere on a popup window and drag the window to wherever they like. The behavior I am trying to imitate is that of the designer login window (attached). In this window you can click (pretty much) anywhere and drag the window around.
I have messed with the mouseMotion.mouseDragged event a bitâŚI figure you will have to evaluate the initial position of the window (not so sure here) and of the mouse (system.gui.convertPointToScreen, i think?) and continuously update them using the event mentioned. Iâm not sure Iâm going down the right track or notâŚ
Am I approaching this correctly? Is there a function built-in that Iâm unaware of (I did scour the manual for a while)? Is this designer login window powered by voodoo magic?
Any help is much appreciated!
This should work.
Add the following custom properties on the popup.
mX (Integer)
mY (Integer)
On the mousePressed event of the popup, enter the following:
event.source.mX = event.x
event.source.mY = event.y
On the mouseDragged event of the popup, enter the following:
[code]
window = system.gui.getParentWindow(event)
mouseX = event.x
mouseY = event.y
windowX = window.getX()
windowY = window.getY()
window.setLocation(mouseX+windowX-event.source.mX,mouseY+windowY-event.source.mY)[/code]
Finally got a chance to try this and it works like a charm. Thanks a bunch jaepark!
Hi, @jaepark it works great. How can I limit the dragging to the edge of my project area.
@jaepark I also would like to know how to set the âBoundsâ of the window, so it does not go off the screen when dragging. I setup a custom header on all of my windows and use the script in the header. My close button is also in my header. Iâm trying to get the same result that you would expect when dragging a titled window around. It usually stops at the edges of the project window.
Thanks.
@chris_d_sanders, this should do what youâre looking for:
mousePressed event script:
from javax.swing import JFrame, SwingUtilities
# Get window size.
window = system.gui.getParentWindow(event)
windowW = window.size.width
windowH = window.size.height
# Get application frame content pane size.
frame = SwingUtilities.getAncestorOfClass(JFrame, window)
frameW = frame.contentPane.size.width
frameH = frame.contentPane.size.height
# Set max positions to keep window within content pane.
event.source.putClientProperty('maxX', int(frameW - windowW))
event.source.putClientProperty('maxY', int(frameH - windowH))
# Set drag start location.
event.source.putClientProperty('dragStartX', event.x)
event.source.putClientProperty('dragStartY', event.y)
mouseDragged event script:
# Get values set when mouse pressed.
startX = event.source.getClientProperty('dragStartX')
startY = event.source.getClientProperty('dragStartY')
maxX = event.source.getClientProperty('maxX')
maxY = event.source.getClientProperty('maxY')
# Get current values.
mouseX = event.x
mouseY = event.y
window = system.gui.getParentWindow(event)
windowX = window.x
windowY = window.y
# Move window with drag, keeping it within content pane.
moveToX = min(max(mouseX + windowX - startX, 0), maxX)
moveToY = min(max(mouseY + windowY - startY, 0), maxY)
window.setLocation(moveToX, moveToY)