[ui] Introduce ClipboardHelper for copying to clipboard from QML

* add ClipboardHelper class that contains a QClipboard and exposes its method as Slots
* use Clipboard instead of hidden TextEdit where meaningful
This commit is contained in:
Yann Lanthony 2019-05-07 11:46:46 +02:00
parent 9ce077778b
commit 438622a14b
No known key found for this signature in database
GPG key ID: 519FAE6DF7A70642
6 changed files with 35 additions and 3 deletions

View file

@ -9,6 +9,7 @@ from PySide2.QtWidgets import QApplication
import meshroom import meshroom
from meshroom.core import nodesDesc from meshroom.core import nodesDesc
from meshroom.ui import components from meshroom.ui import components
from meshroom.ui.components.clipboard import ClipboardHelper
from meshroom.ui.components.filepath import FilepathHelper from meshroom.ui.components.filepath import FilepathHelper
from meshroom.ui.components.scene3D import Scene3DHelper from meshroom.ui.components.scene3D import Scene3DHelper
from meshroom.ui.palette import PaletteManager from meshroom.ui.palette import PaletteManager
@ -95,6 +96,7 @@ class MeshroomApp(QApplication):
# => expose them as context properties instead # => expose them as context properties instead
self.engine.rootContext().setContextProperty("Filepath", FilepathHelper(parent=self)) self.engine.rootContext().setContextProperty("Filepath", FilepathHelper(parent=self))
self.engine.rootContext().setContextProperty("Scene3DHelper", Scene3DHelper(parent=self)) self.engine.rootContext().setContextProperty("Scene3DHelper", Scene3DHelper(parent=self))
self.engine.rootContext().setContextProperty("Clipboard", ClipboardHelper(parent=self))
# additional context properties # additional context properties
self.engine.rootContext().setContextProperty("_PaletteManager", PaletteManager(self.engine, parent=self)) self.engine.rootContext().setContextProperty("_PaletteManager", PaletteManager(self.engine, parent=self))

View file

@ -1,11 +1,13 @@
def registerTypes(): def registerTypes():
from PySide2.QtQml import qmlRegisterType from PySide2.QtQml import qmlRegisterType
from meshroom.ui.components.clipboard import ClipboardHelper
from meshroom.ui.components.edge import EdgeMouseArea from meshroom.ui.components.edge import EdgeMouseArea
from meshroom.ui.components.filepath import FilepathHelper from meshroom.ui.components.filepath import FilepathHelper
from meshroom.ui.components.scene3D import Scene3DHelper, TrackballController from meshroom.ui.components.scene3D import Scene3DHelper, TrackballController
qmlRegisterType(EdgeMouseArea, "GraphEditor", 1, 0, "EdgeMouseArea") qmlRegisterType(EdgeMouseArea, "GraphEditor", 1, 0, "EdgeMouseArea")
qmlRegisterType(ClipboardHelper, "Meshroom.Helpers", 1, 0, "ClipboardHelper") # TODO: uncreatable
qmlRegisterType(FilepathHelper, "Meshroom.Helpers", 1, 0, "FilepathHelper") # TODO: uncreatable qmlRegisterType(FilepathHelper, "Meshroom.Helpers", 1, 0, "FilepathHelper") # TODO: uncreatable
qmlRegisterType(Scene3DHelper, "Meshroom.Helpers", 1, 0, "Scene3DHelper") # TODO: uncreatable qmlRegisterType(Scene3DHelper, "Meshroom.Helpers", 1, 0, "Scene3DHelper") # TODO: uncreatable
qmlRegisterType(TrackballController, "Meshroom.Helpers", 1, 0, "TrackballController") qmlRegisterType(TrackballController, "Meshroom.Helpers", 1, 0, "TrackballController")

View file

@ -0,0 +1,20 @@
from PySide2.QtCore import Slot, QObject
from PySide2.QtGui import QClipboard
class ClipboardHelper(QObject):
"""
Simple wrapper around a QClipboard with methods exposed as Slots for QML use.
"""
def __init__(self, parent=None):
super(ClipboardHelper, self).__init__(parent)
self._clipboard = QClipboard(parent=self)
@Slot(str)
def setText(self, value):
self._clipboard.setText(value)
@Slot()
def clear(self):
self._clipboard.clear()

View file

@ -0,0 +1,9 @@
pragma Singleton
import Meshroom.Helpers 1.0
/**
* Clipboard singleton object to copy values to paste buffer.
*/
ClipboardHelper {
}

View file

@ -5,5 +5,6 @@ SortFilterDelegateModel 1.0 SortFilterDelegateModel.qml
Request 1.0 request.js Request 1.0 request.js
Format 1.0 format.js Format 1.0 format.js
# using singleton here causes random crash at application exit # using singleton here causes random crash at application exit
# singleton Clipboard 1.0 Clipboard.qml
# singleton Filepath 1.0 Filepath.qml # singleton Filepath 1.0 Filepath.qml
# singleton Scene3DHelper 1.0 Scene3DHelper.qml # singleton Scene3DHelper 1.0 Scene3DHelper.qml

View file

@ -289,9 +289,7 @@ FloatingPane {
} }
MenuItem { MenuItem {
text: "Copy Path" text: "Copy Path"
// hidden TextEdit to copy to clipboard onTriggered: Clipboard.setText(Filepath.normpath(model.source))
TextEdit { id: fullpath; visible: false; text: Filepath.normpath(model.source) }
onTriggered: { fullpath.selectAll(); fullpath.copy(); }
} }
MenuSeparator {} MenuSeparator {}
MenuItem { MenuItem {