parent
6d15f8c16f
commit
6fa4553d08
|
@ -38,6 +38,7 @@ import AppLayouts.Browser.stores 1.0 as BrowserStores
|
||||||
import AppLayouts.stores 1.0
|
import AppLayouts.stores 1.0
|
||||||
|
|
||||||
import "popups"
|
import "popups"
|
||||||
|
import "panels"
|
||||||
import "activitycenter/popups"
|
import "activitycenter/popups"
|
||||||
import "activitycenter/stores" as AC
|
import "activitycenter/stores" as AC
|
||||||
|
|
||||||
|
@ -46,7 +47,6 @@ Item {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
property alias appLayout: appLayout
|
property alias appLayout: appLayout
|
||||||
property alias dragAndDrop: dragTarget
|
|
||||||
property RootStore rootStore: RootStore {}
|
property RootStore rootStore: RootStore {}
|
||||||
property AC.RootStore acStore: AC.RootStore {}
|
property AC.RootStore acStore: AC.RootStore {}
|
||||||
// set from main.qml
|
// set from main.qml
|
||||||
|
@ -954,85 +954,6 @@ Item {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DropArea {
|
|
||||||
id: dragTarget
|
|
||||||
|
|
||||||
signal droppedOnValidScreen(var drop)
|
|
||||||
property alias droppedUrls: rptDraggedPreviews.model
|
|
||||||
property var chatCommunitySectionModule: chatLayoutContainer.rootStore.chatCommunitySectionModule
|
|
||||||
property int activeChatType: chatCommunitySectionModule && chatCommunitySectionModule.activeItem.type
|
|
||||||
property bool enabled: !drag.source && !!loader.item && !!loader.item.appLayout
|
|
||||||
&& (
|
|
||||||
// in chat view
|
|
||||||
(mainModule.activeSection.sectionType === Constants.appSection.chat &&
|
|
||||||
(
|
|
||||||
// in a one-to-one chat
|
|
||||||
activeChatType === Constants.chatType.oneToOne ||
|
|
||||||
// in a private group chat
|
|
||||||
activeChatType === Constants.chatType.privateGroupChat
|
|
||||||
)
|
|
||||||
) ||
|
|
||||||
// In community section
|
|
||||||
mainModule.activeSection.sectionType === Constants.appSection.community
|
|
||||||
)
|
|
||||||
|
|
||||||
width: appMain.width
|
|
||||||
height: appMain.height
|
|
||||||
|
|
||||||
function cleanup() {
|
|
||||||
rptDraggedPreviews.model = []
|
|
||||||
}
|
|
||||||
|
|
||||||
onDropped: (drop) => {
|
|
||||||
if (enabled) {
|
|
||||||
droppedOnValidScreen(drop)
|
|
||||||
} else {
|
|
||||||
drop.accepted = false
|
|
||||||
}
|
|
||||||
cleanup()
|
|
||||||
}
|
|
||||||
onEntered: {
|
|
||||||
if (!enabled || !!drag.source) {
|
|
||||||
drag.accepted = false
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// needed because drag.urls is not a normal js array
|
|
||||||
rptDraggedPreviews.model = drag.urls.filter(img => Utils.hasDragNDropImageExtension(img))
|
|
||||||
}
|
|
||||||
onPositionChanged: {
|
|
||||||
rptDraggedPreviews.x = drag.x
|
|
||||||
rptDraggedPreviews.y = drag.y
|
|
||||||
}
|
|
||||||
onExited: cleanup()
|
|
||||||
Loader {
|
|
||||||
active: dragTarget.enabled && dragTarget.containsDrag
|
|
||||||
width: active ? parent.width : 0
|
|
||||||
height: active ? parent.height : 0
|
|
||||||
sourceComponent: Rectangle {
|
|
||||||
id: dropRectangle
|
|
||||||
color: Style.current.background
|
|
||||||
opacity: 0.8
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
id: rptDraggedPreviews
|
|
||||||
|
|
||||||
Image {
|
|
||||||
source: modelData
|
|
||||||
width: 80
|
|
||||||
height: 80
|
|
||||||
sourceSize.width: 160
|
|
||||||
sourceSize.height: 160
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
x: index * 10 + rptDraggedPreviews.x
|
|
||||||
y: index * 10 + rptDraggedPreviews.y
|
|
||||||
z: 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add SendModal here as it is used by the Wallet as well as the Browser
|
// Add SendModal here as it is used by the Wallet as well as the Browser
|
||||||
Loader {
|
Loader {
|
||||||
id: sendModal
|
id: sendModal
|
||||||
|
@ -1276,4 +1197,22 @@ Item {
|
||||||
keycardPopup.item.open()
|
keycardPopup.item.open()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DropAreaPanel {
|
||||||
|
width: appMain.width
|
||||||
|
height: appMain.height
|
||||||
|
activeChatType: chatCommunitySectionModule && chatCommunitySectionModule.activeItem.type
|
||||||
|
enabled: !drag.source && (
|
||||||
|
// in chat view
|
||||||
|
(mainModule.activeSection.sectionType === Constants.appSection.chat &&
|
||||||
|
(
|
||||||
|
// in a one-to-one chat
|
||||||
|
activeChatType === Constants.chatType.oneToOne ||
|
||||||
|
// in a private group chat
|
||||||
|
activeChatType === Constants.chatType.privateGroupChat
|
||||||
|
)
|
||||||
|
) ||
|
||||||
|
// In community section
|
||||||
|
mainModule.activeSection.sectionType === Constants.appSection.community)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
import QtQuick 2.14
|
||||||
|
import utils 1.0
|
||||||
|
|
||||||
|
DropArea {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property bool enabled: false
|
||||||
|
property alias droppedUrls: rptDraggedPreviews.model
|
||||||
|
property int activeChatType
|
||||||
|
|
||||||
|
signal droppedOnValidScreen(var drop)
|
||||||
|
|
||||||
|
function cleanup() {
|
||||||
|
rptDraggedPreviews.model = []
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
Global.dragArea = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
onDropped: (drop) => {
|
||||||
|
if (enabled) {
|
||||||
|
droppedOnValidScreen(drop)
|
||||||
|
} else {
|
||||||
|
drop.accepted = false
|
||||||
|
}
|
||||||
|
cleanup()
|
||||||
|
}
|
||||||
|
onEntered: {
|
||||||
|
if (!enabled || !!drag.source) {
|
||||||
|
drag.accepted = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// needed because drag.urls is not a normal js array
|
||||||
|
rptDraggedPreviews.model = drag.urls.filter(img => Utils.hasDragNDropImageExtension(img))
|
||||||
|
}
|
||||||
|
onPositionChanged: {
|
||||||
|
rptDraggedPreviews.x = drag.x
|
||||||
|
rptDraggedPreviews.y = drag.y
|
||||||
|
}
|
||||||
|
|
||||||
|
onExited: cleanup()
|
||||||
|
|
||||||
|
Loader {
|
||||||
|
active: root.containsDrag
|
||||||
|
width: active ? parent.width : 0
|
||||||
|
height: active ? parent.height : 0
|
||||||
|
sourceComponent: Rectangle {
|
||||||
|
id: dropRectangle
|
||||||
|
color: Style.current.background
|
||||||
|
opacity: 0.8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
id: rptDraggedPreviews
|
||||||
|
Image {
|
||||||
|
source: modelData
|
||||||
|
width: 80
|
||||||
|
height: 80
|
||||||
|
sourceSize.width: 160
|
||||||
|
sourceSize.height: 160
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
x: index * 10 + rptDraggedPreviews.x
|
||||||
|
y: index * 10 + rptDraggedPreviews.y
|
||||||
|
z: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -827,7 +827,7 @@ Rectangle {
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
enabled: control.isActiveChannel
|
enabled: control.isActiveChannel
|
||||||
target: Global.appMain.dragAndDrop
|
target: Global.dragArea
|
||||||
ignoreUnknownSignals: true
|
ignoreUnknownSignals: true
|
||||||
onDroppedOnValidScreen: (drop) => {
|
onDroppedOnValidScreen: (drop) => {
|
||||||
let validImages = validateImages(drop.urls)
|
let validImages = validateImages(drop.urls)
|
||||||
|
|
|
@ -10,6 +10,7 @@ Item {
|
||||||
|
|
||||||
property var applicationWindow
|
property var applicationWindow
|
||||||
property var appMain
|
property var appMain
|
||||||
|
property var dragArea
|
||||||
property bool popupOpened: false
|
property bool popupOpened: false
|
||||||
property int settingsSubsection: Constants.settingsSubsection.profile
|
property int settingsSubsection: Constants.settingsSubsection.profile
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue