Skip to content

Commit a847164

Browse files
committed
setDropAllowed
1 parent a830add commit a847164

File tree

4 files changed

+66
-15
lines changed

4 files changed

+66
-15
lines changed

services/static-webserver/client/source/class/osparc/dashboard/DragWidget.js

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,65 @@
1616
************************************************************************ */
1717

1818
qx.Class.define("osparc.dashboard.DragWidget", {
19-
extend: qx.ui.basic.Atom,
19+
extend: qx.ui.core.Widget,
20+
type: "singleton",
2021

2122
construct: function() {
2223
this.base(arguments);
2324

25+
this._setLayout(new qx.ui.layout.HBox(10).set({
26+
alignY: "middle",
27+
}));
28+
2429
this.set({
2530
opacity: 0.9,
2631
padding: 10,
2732
zIndex: 1000,
28-
font: "text-14",
2933
backgroundColor: "strong-main",
3034
decorator: "rounded",
3135
visibility: "excluded",
3236
});
3337

3438
const root = qx.core.Init.getApplication().getRoot();
3539
root.add(this);
40+
41+
this.initDropAllowed();
42+
},
43+
44+
properties: {
45+
dropAllowed: {
46+
check: "Boolean",
47+
nullable: false,
48+
init: null,
49+
apply: "__dropAllowed",
50+
},
3651
},
3752

3853
members: {
54+
_createChildControlImpl: function(id) {
55+
let control;
56+
switch (id) {
57+
case "allowed-icon":
58+
control = new qx.ui.basic.Image();
59+
this._add(control);
60+
break;
61+
case "dragged-resource":
62+
control = new qx.ui.basic.Atom().set({
63+
font: "text-14",
64+
});
65+
this._add(control);
66+
break;
67+
}
68+
return control || this.base(arguments, id);
69+
},
70+
71+
__dropAllowed: function(allowed) {
72+
this.getChildControl("allowed-icon").set({
73+
source: allowed ? "@FontAwesome5Solid/check/14" : "@FontAwesome5Solid/times/14",
74+
textColor: allowed ? "text" : "danger-red",
75+
});
76+
},
77+
3978
__onMouseMoveDragging: function(e) {
4079
if (this.getContentElement()) {
4180
// place it next to the "dragdrop-own-cursor" indicator
@@ -50,7 +89,7 @@ qx.Class.define("osparc.dashboard.DragWidget", {
5089
document.addEventListener("mousemove", this.__onMouseMoveDragging.bind(this), false);
5190

5291
const cursor = qx.ui.core.DragDropCursor.getInstance();
53-
cursor.setAppearance("dragdrop-own-cursor");
92+
cursor.setAppearance("dragdrop-no-cursor");
5493
},
5594

5695
end: function() {

services/static-webserver/client/source/class/osparc/dashboard/FolderButtonItem.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -172,21 +172,20 @@ qx.Class.define("osparc.dashboard.FolderButtonItem", {
172172
// make it semi transparent while being dragged
173173
this.setOpacity(0.2);
174174
// init drag indicator
175-
this.__dragWidget = new osparc.dashboard.DragWidget();
175+
const dragWidget = osparc.dashboard.DragWidget.getInstance();
176+
dragWidget.getChildControl("dragged-resource").set({
176177
label: this.getTitle(),
177178
icon: "@FontAwesome5Solid/folder/16",
178179
});
179-
this.__dragWidget.start();
180+
dragWidget.start();
180181
});
181182

182183
this.addListener("dragend", () => {
183184
// bring back opacity after drag
184185
this.setOpacity(1);
185186
// hide drag indicator
186-
this.__dragWidget.end();
187-
// dispose drag indicator
188-
this.__dragWidget.dispose();
189-
this.__dragWidget = null;
187+
const dragWidget = osparc.dashboard.DragWidget.getInstance();
188+
dragWidget.end();
190189
});
191190
},
192191

@@ -239,13 +238,19 @@ qx.Class.define("osparc.dashboard.FolderButtonItem", {
239238
// do not allow
240239
e.preventDefault();
241240
}
241+
const dragWidget = osparc.dashboard.DragWidget.getInstance();
242+
dragWidget.setDropAllowed(compatible);
242243
});
243244

244245
this.addListener("dragleave", () => {
245246
this.getChildControl("icon").resetTextColor();
247+
const dragWidget = osparc.dashboard.DragWidget.getInstance();
248+
dragWidget.setDropAllowed(false);
246249
});
247250
this.addListener("dragend", () => {
248251
this.getChildControl("icon").resetTextColor();
252+
const dragWidget = osparc.dashboard.DragWidget.getInstance();
253+
dragWidget.setDropAllowed(false);
249254
});
250255

251256
this.addListener("drop", e => {

services/static-webserver/client/source/class/osparc/dashboard/StudyBrowser.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -669,21 +669,20 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
669669
// make it semi transparent while being dragged
670670
card.setOpacity(0.2);
671671
// init drag indicator
672-
this.__dragWidget = new osparc.dashboard.DragWidget();
672+
const dragWidget = osparc.dashboard.DragWidget.getInstance();
673+
dragWidget.getChildControl("dragged-resource").set({
673674
label: card.getTitle(),
674675
icon: "@FontAwesome5Solid/file/16",
675676
});
676-
this.__dragWidget.start();
677+
dragWidget.start();
677678
});
678679

679680
card.addListener("dragend", () => {
680681
// bring back opacity after drag
681682
card.setOpacity(1);
682683
// hide drag indicator
683-
this.__dragWidget.end();
684-
// dispose drag indicator
685-
this.__dragWidget.dispose();
686-
this.__dragWidget = null;
684+
const dragWidget = osparc.dashboard.DragWidget.getInstance();
685+
dragWidget.end();
687686
});
688687
},
689688

services/static-webserver/client/source/class/osparc/theme/Appearance.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ qx.Theme.define("osparc.theme.Appearance", {
1919
extend: osparc.theme.common.Appearance,
2020

2121
appearances: {
22+
"dragdrop-no-cursor": {
23+
style: () => {
24+
return {
25+
source: "",
26+
}
27+
}
28+
},
29+
2230
"dragdrop-own-cursor": {
2331
style: states => {
2432
let icon = "";

0 commit comments

Comments
 (0)