| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- from PyQt5.QtGui import QImage, QTextDocument
- from PyQt5.QtWidgets import QTextEdit
- from path import Path
- import uuid
- IMAGE_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.bmp']
- FONT_SIZES = [7, 8, 9, 10, 11, 12, 13, 14, 18, 24, 36, 48, 64, 72, 96, 144, 288]
- HTML_EXTENSIONS = ['.htm', '.html']
- class WysiwygTextEdit(QTextEdit):
- def __init__(self, parent):
- super().__init__(parent)
- def canInsertFromMimeData(self, source):
- if source.hasImage():
- return True
- else:
- return super(WysiwygTextEdit, self).canInsertFromMimeData(source)
- def insertFromMimeData(self, source):
- cursor = self.textCursor()
- document = self.document()
- if source.hasUrls():
- for u in source.urls():
- file_ext = Path(str(u.toLocalFile())).splitext()
- if u.isLocalFile() and file_ext in IMAGE_EXTENSIONS:
- image = QImage(u.toLocalFile())
- document.addResource(QTextDocument.ImageResource, u, image)
- cursor.insertImage(u.toLocalFile())
- else:
- # If we hit a non-image or non-local URL break the loop and fall out
- # to the super call & let Qt handle it
- break
- else:
- # If all were valid images, finish here.
- return
- elif source.hasImage():
- image = source.imageData()
- uuid_ = uuid.uuid4().hex
- document.addResource(QTextDocument.ImageResource, uuid_, image)
- cursor.insertImage(uuid)
- return
- super(WysiwygTextEdit, self).insertFromMimeData(source)
|