mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-06-06 04:41:58 +02:00
[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:
parent
9ce077778b
commit
438622a14b
6 changed files with 35 additions and 3 deletions
|
@ -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))
|
||||||
|
|
|
@ -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")
|
||||||
|
|
20
meshroom/ui/components/clipboard.py
Normal file
20
meshroom/ui/components/clipboard.py
Normal 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()
|
9
meshroom/ui/qml/Utils/Clipboard.qml
Normal file
9
meshroom/ui/qml/Utils/Clipboard.qml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
pragma Singleton
|
||||||
|
import Meshroom.Helpers 1.0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clipboard singleton object to copy values to paste buffer.
|
||||||
|
*/
|
||||||
|
ClipboardHelper {
|
||||||
|
|
||||||
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue