ucbuilder
Version:
:Shree Ganeshay Namah: new way app design
142 lines • 5.65 kB
JavaScript
import { ucWinFrame$Designer } from '../../designerFiles/renderer/controls/ucWinFrame.uc.designer.js';
export class ucWinFrame extends ucWinFrame$Designer {
async $() {
const parentExt = this.ucExtends.PARENT.ucExtends;
this.ucExtends.initalComponents.changeStage(this.container1);
parentExt.initalComponents.changeStage(this.container1);
this.lbl_title.innerText = parentExt.wrapperHT.getAttribute('x-caption') ?? '';
this.cmd_close.addEventListener('mousedown', (e) => {
e.preventDefault();
parentExt.close();
});
this.movableContainer(this.ucExtends.PARENT.ucExtends.wrapperHT, this.lbl_title);
this.makeResizable(this.ucExtends.PARENT.ucExtends.wrapperHT);
parentExt.Events.captionChanged.on((newCaption) => {
this.lbl_title.innerText = newCaption;
});
}
movableContainer(container, dragableObject) {
dragableObject.addEventListener('mousedown', mousedown_listner);
function mousedown_listner(downEvt) {
downEvt.preventDefault(); // stop text selection
const rect = container.getBoundingClientRect();
// Mouse position relative to container
const offsetX = downEvt.clientX - rect.left;
const offsetY = downEvt.clientY - rect.top;
function drag(moveEvt) {
const x = moveEvt.clientX - offsetX;
const y = moveEvt.clientY - offsetY;
container.style.position = "fixed"; // or absolute
container.style.left = x + "px";
container.style.top = y + "px";
}
window.addEventListener('mousemove', drag, false);
function mouseup_mouseleave_event() {
window.removeEventListener('mousemove', drag, false);
window.removeEventListener('mouseup', mouseup_mouseleave_event);
window.removeEventListener('mouseleave', mouseup_mouseleave_event);
}
window.addEventListener('mouseup', mouseup_mouseleave_event);
window.addEventListener('mouseleave', mouseup_mouseleave_event);
}
}
makeResizable(container) {
const MARGIN = 6;
const MIN_W = 250;
const MIN_H = 150;
let mode = "";
let startX = 0, startY = 0;
let startW = 0, startH = 0;
let startL = 0, startT = 0;
let activePointer = -1;
container.addEventListener("pointermove", (e) => {
if (activePointer !== -1)
return;
const r = container.getBoundingClientRect();
const top = e.clientY - r.top <= MARGIN;
const left = e.clientX - r.left <= MARGIN;
const right = r.right - e.clientX <= MARGIN;
const bottom = r.bottom - e.clientY <= MARGIN;
if (top && left)
mode = "nw";
else if (top && right)
mode = "ne";
else if (bottom && left)
mode = "sw";
else if (bottom && right)
mode = "se";
else if (top)
mode = "n";
else if (bottom)
mode = "s";
else if (left)
mode = "w";
else if (right)
mode = "e";
else
mode = "";
container.style.cursor = mode ? mode + "-resize" : "default";
});
container.addEventListener("pointerdown", (e) => {
if (!mode)
return;
activePointer = e.pointerId;
container.setPointerCapture(activePointer);
const r = container.getBoundingClientRect();
startX = e.clientX;
startY = e.clientY;
startW = r.width;
startH = r.height;
startL = r.left;
startT = r.top;
e.preventDefault();
});
container.addEventListener("pointermove", (e) => {
if (e.pointerId !== activePointer)
return;
let dx = e.clientX - startX;
let dy = e.clientY - startY;
let newW = startW;
let newH = startH;
let newL = startL;
let newT = startT;
if (mode.includes("e"))
newW = startW + dx;
if (mode.includes("s"))
newH = startH + dy;
if (mode.includes("w")) {
newW = startW - dx;
newL = startL + dx;
}
if (mode.includes("n")) {
newH = startH - dy;
newT = startT + dy;
}
if (newW < MIN_W) {
if (mode.includes("w"))
newL -= (MIN_W - newW);
newW = MIN_W;
}
if (newH < MIN_H) {
if (mode.includes("n"))
newT -= (MIN_H - newH);
newH = MIN_H;
}
container.style.width = newW + "px";
container.style.height = newH + "px";
container.style.left = newL + "px";
container.style.top = newT + "px";
});
container.addEventListener("pointerup", release);
container.addEventListener("pointercancel", release);
function release(e) {
if (e.pointerId !== activePointer)
return;
container.releasePointerCapture(activePointer);
activePointer = -1;
mode = "";
container.style.cursor = "default";
}
}
}
//# sourceMappingURL=ucWinFrame.uc.js.map