pleaase ensure that I can dragand drop components
Browse files- components/control-panel.js +3 -3
- script.js +49 -5
components/control-panel.js
CHANGED
|
@@ -61,15 +61,15 @@ class CustomControlPanel extends HTMLElement {
|
|
| 61 |
|
| 62 |
<script>
|
| 63 |
this.shadowRoot.querySelectorAll('.component-item').forEach(item => {
|
| 64 |
-
item.addEventListener('
|
|
|
|
| 65 |
const type = item.dataset.type;
|
| 66 |
document.dispatchEvent(new CustomEvent('component-selected', {
|
| 67 |
detail: { type }
|
| 68 |
}));
|
| 69 |
});
|
| 70 |
});
|
| 71 |
-
|
| 72 |
-
const deleteBtn = this.shadowRoot.getElementById('delete-btn');
|
| 73 |
if (deleteBtn) {
|
| 74 |
deleteBtn.addEventListener('click', () => {
|
| 75 |
document.dispatchEvent(new CustomEvent('delete-selected'));
|
|
|
|
| 61 |
|
| 62 |
<script>
|
| 63 |
this.shadowRoot.querySelectorAll('.component-item').forEach(item => {
|
| 64 |
+
item.addEventListener('mousedown', (e) => {
|
| 65 |
+
e.preventDefault();
|
| 66 |
const type = item.dataset.type;
|
| 67 |
document.dispatchEvent(new CustomEvent('component-selected', {
|
| 68 |
detail: { type }
|
| 69 |
}));
|
| 70 |
});
|
| 71 |
});
|
| 72 |
+
const deleteBtn = this.shadowRoot.getElementById('delete-btn');
|
|
|
|
| 73 |
if (deleteBtn) {
|
| 74 |
deleteBtn.addEventListener('click', () => {
|
| 75 |
document.dispatchEvent(new CustomEvent('delete-selected'));
|
script.js
CHANGED
|
@@ -171,16 +171,37 @@ const dx = x - m.x * canvas.width;
|
|
| 171 |
y: 0.5,
|
| 172 |
strength: 0.5,
|
| 173 |
polarity: 1,
|
| 174 |
-
turns: e.detail.type === 'coil' ? 5 : 0
|
|
|
|
| 175 |
};
|
| 176 |
|
| 177 |
components[e.detail.type + 's'].push(newComponent);
|
| 178 |
selectedComponent = newComponent;
|
| 179 |
drawField();
|
| 180 |
updateComponentDetails();
|
| 181 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 182 |
|
| 183 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 184 |
document.addEventListener('delete-selected', () => {
|
| 185 |
if (selectedComponent) {
|
| 186 |
const type = selectedComponent.type;
|
|
@@ -228,11 +249,34 @@ const dx = x - m.x * canvas.width;
|
|
| 228 |
}
|
| 229 |
}
|
| 230 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 231 |
drawField();
|
| 232 |
updateComponentDetails();
|
| 233 |
});
|
| 234 |
-
|
| 235 |
-
canvas.addEventListener('mousemove', (e) => {
|
| 236 |
if (!isDrawingWire && !selectedComponent) return;
|
| 237 |
|
| 238 |
const rect = canvas.getBoundingClientRect();
|
|
|
|
| 171 |
y: 0.5,
|
| 172 |
strength: 0.5,
|
| 173 |
polarity: 1,
|
| 174 |
+
turns: e.detail.type === 'coil' ? 5 : 0,
|
| 175 |
+
isBeingDragged: true // Flag for new component being dragged
|
| 176 |
};
|
| 177 |
|
| 178 |
components[e.detail.type + 's'].push(newComponent);
|
| 179 |
selectedComponent = newComponent;
|
| 180 |
drawField();
|
| 181 |
updateComponentDetails();
|
| 182 |
+
|
| 183 |
+
// Set up initial drag for newly created component
|
| 184 |
+
const handleMouseMove = (moveEvent) => {
|
| 185 |
+
const rect = canvas.getBoundingClientRect();
|
| 186 |
+
const x = moveEvent.clientX - rect.left;
|
| 187 |
+
const y = moveEvent.clientY - rect.top;
|
| 188 |
+
|
| 189 |
+
selectedComponent.x = x / canvas.width;
|
| 190 |
+
selectedComponent.y = y / canvas.height;
|
| 191 |
+
drawField();
|
| 192 |
+
updateComponentDetails();
|
| 193 |
+
};
|
| 194 |
|
| 195 |
+
const handleMouseUp = () => {
|
| 196 |
+
document.removeEventListener('mousemove', handleMouseMove);
|
| 197 |
+
document.removeEventListener('mouseup', handleMouseUp);
|
| 198 |
+
selectedComponent.isBeingDragged = false;
|
| 199 |
+
};
|
| 200 |
+
|
| 201 |
+
document.addEventListener('mousemove', handleMouseMove);
|
| 202 |
+
document.addEventListener('mouseup', handleMouseUp);
|
| 203 |
+
});
|
| 204 |
+
// Handle component deletion
|
| 205 |
document.addEventListener('delete-selected', () => {
|
| 206 |
if (selectedComponent) {
|
| 207 |
const type = selectedComponent.type;
|
|
|
|
| 249 |
}
|
| 250 |
}
|
| 251 |
|
| 252 |
+
if (selectedComponent) {
|
| 253 |
+
// Prevent text selection during drag
|
| 254 |
+
e.preventDefault();
|
| 255 |
+
|
| 256 |
+
// Set up drag handlers
|
| 257 |
+
const handleMouseMove = (moveEvent) => {
|
| 258 |
+
const newX = moveEvent.clientX - rect.left;
|
| 259 |
+
const newY = moveEvent.clientY - rect.top;
|
| 260 |
+
|
| 261 |
+
selectedComponent.x = newX / canvas.width;
|
| 262 |
+
selectedComponent.y = newY / canvas.height;
|
| 263 |
+
drawField();
|
| 264 |
+
updateComponentDetails();
|
| 265 |
+
};
|
| 266 |
+
|
| 267 |
+
const handleMouseUp = () => {
|
| 268 |
+
document.removeEventListener('mousemove', handleMouseMove);
|
| 269 |
+
document.removeEventListener('mouseup', handleMouseUp);
|
| 270 |
+
};
|
| 271 |
+
|
| 272 |
+
document.addEventListener('mousemove', handleMouseMove);
|
| 273 |
+
document.addEventListener('mouseup', handleMouseUp);
|
| 274 |
+
}
|
| 275 |
+
|
| 276 |
drawField();
|
| 277 |
updateComponentDetails();
|
| 278 |
});
|
| 279 |
+
canvas.addEventListener('mousemove', (e) => {
|
|
|
|
| 280 |
if (!isDrawingWire && !selectedComponent) return;
|
| 281 |
|
| 282 |
const rect = canvas.getBoundingClientRect();
|