Module soitool.modules.module_freetext
SOI module for arbitrary text.
Expand source code
"""SOI module for arbitrary text."""
from PySide2.QtWidgets import (
QWidget,
QVBoxLayout,
)
from PySide2.QtCore import Qt, QSize
from PySide2.QtGui import QIcon
from soitool.modules.fit_to_contents_widgets import (
TextEditWithSizeOfContent,
LineEditWithSizeOfContent,
)
from soitool.modules.module_base import (
ModuleBase,
DEFAULT_FONT,
prepare_line_edit_for_pdf_export,
prepare_text_edit_for_pdf_export,
)
class Meta(type(ModuleBase), type(QWidget)):
"""Used as a metaclass to enable multiple inheritance."""
class FreeTextModule(ModuleBase, QWidget, metaclass=Meta):
"""Module for arbitrary text.
## Note about widget size
This widget might be too small to be shown in a window by itself. If you
need to show only this widget, you should show it by wrapping it in a
QWidget.
Parameters
----------
data : list
First index should be header, second index should be body.
"""
def __init__(self, data=None):
self.type = "FreeTextModule"
QWidget.__init__(self)
ModuleBase.__init__(self)
self.line_edit_header = LineEditWithSizeOfContent()
self.line_edit_header.setFont(self.headline_font)
self.line_edit_header.setAlignment(Qt.AlignCenter)
self.text_edit_body = TextEditWithSizeOfContent()
self.text_edit_body.setFont(DEFAULT_FONT)
# When the contents of these widgets change we need to manually trigger
# adjust of size, even on self. Without adjust of size on self the
# widget will leave behind gray color when it is shrunk in the
# QGraphicsScene
self.line_edit_header.textChanged.connect(self.adjustSize)
self.text_edit_body.textChanged.connect(
lambda: (self.text_edit_body.adjustSize(), self.adjustSize())
)
self.layout = QVBoxLayout()
self.layout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
self.layout.setSpacing(0)
self.layout.setMargin(0)
self.layout.addWidget(self.line_edit_header)
self.layout.addWidget(self.text_edit_body)
self.setLayout(self.layout)
if data is not None:
header, body = data[0], data[1]
self.line_edit_header.setText(header)
self.text_edit_body.setText(body)
def sizeHint(self):
"""Overridden to give size hint that encapsulates the child widgets."""
size_hint_text_edit_body = self.text_edit_body.sizeHint()
size_hint_line_edit_header = self.line_edit_header.sizeHint()
return QSize(
max(
size_hint_text_edit_body.width(),
size_hint_line_edit_header.width(),
),
size_hint_text_edit_body.height()
+ size_hint_line_edit_header.height(),
)
def resizeEvent(self, event):
"""Update geometry before handling the resizeEvent.
See sources in module docstring.
Parameters
----------
event : QResizeEvent
event sent by Qt
"""
self.updateGeometry()
super(FreeTextModule, self).resizeEvent(event)
def get_size(self):
"""Get size of widget.
Returns
-------
Tuple
(width, height)
"""
size = self.sizeHint()
return (size.width(), size.height())
def get_data(self):
"""Return list containing module data.
Returns
-------
list of module content
first index contains header, second index contains body
"""
return [
self.line_edit_header.text(),
self.text_edit_body.toPlainText(),
]
def prepare_for_pdf_export(self):
"""Prepare for PDF-export."""
prepare_line_edit_for_pdf_export(self.line_edit_header)
prepare_text_edit_for_pdf_export(self.text_edit_body)
@staticmethod
def get_user_friendly_name():
"""Get user-friendly name of module."""
return "Fritekst"
@staticmethod
def get_icon():
"""Get icon of module."""
return QIcon("soitool/media/freetextmodule.png")
Classes
class FreeTextModule (data=None)
-
Module for arbitrary text.
Note about widget size
This widget might be too small to be shown in a window by itself. If you need to show only this widget, you should show it by wrapping it in a QWidget.
Parameters
data
:list
- First index should be header, second index should be body.
Class-variable 'type' should be set by derived class.
Expand source code
class FreeTextModule(ModuleBase, QWidget, metaclass=Meta): """Module for arbitrary text. ## Note about widget size This widget might be too small to be shown in a window by itself. If you need to show only this widget, you should show it by wrapping it in a QWidget. Parameters ---------- data : list First index should be header, second index should be body. """ def __init__(self, data=None): self.type = "FreeTextModule" QWidget.__init__(self) ModuleBase.__init__(self) self.line_edit_header = LineEditWithSizeOfContent() self.line_edit_header.setFont(self.headline_font) self.line_edit_header.setAlignment(Qt.AlignCenter) self.text_edit_body = TextEditWithSizeOfContent() self.text_edit_body.setFont(DEFAULT_FONT) # When the contents of these widgets change we need to manually trigger # adjust of size, even on self. Without adjust of size on self the # widget will leave behind gray color when it is shrunk in the # QGraphicsScene self.line_edit_header.textChanged.connect(self.adjustSize) self.text_edit_body.textChanged.connect( lambda: (self.text_edit_body.adjustSize(), self.adjustSize()) ) self.layout = QVBoxLayout() self.layout.setAlignment(Qt.AlignLeft | Qt.AlignTop) self.layout.setSpacing(0) self.layout.setMargin(0) self.layout.addWidget(self.line_edit_header) self.layout.addWidget(self.text_edit_body) self.setLayout(self.layout) if data is not None: header, body = data[0], data[1] self.line_edit_header.setText(header) self.text_edit_body.setText(body) def sizeHint(self): """Overridden to give size hint that encapsulates the child widgets.""" size_hint_text_edit_body = self.text_edit_body.sizeHint() size_hint_line_edit_header = self.line_edit_header.sizeHint() return QSize( max( size_hint_text_edit_body.width(), size_hint_line_edit_header.width(), ), size_hint_text_edit_body.height() + size_hint_line_edit_header.height(), ) def resizeEvent(self, event): """Update geometry before handling the resizeEvent. See sources in module docstring. Parameters ---------- event : QResizeEvent event sent by Qt """ self.updateGeometry() super(FreeTextModule, self).resizeEvent(event) def get_size(self): """Get size of widget. Returns ------- Tuple (width, height) """ size = self.sizeHint() return (size.width(), size.height()) def get_data(self): """Return list containing module data. Returns ------- list of module content first index contains header, second index contains body """ return [ self.line_edit_header.text(), self.text_edit_body.toPlainText(), ] def prepare_for_pdf_export(self): """Prepare for PDF-export.""" prepare_line_edit_for_pdf_export(self.line_edit_header) prepare_text_edit_for_pdf_export(self.text_edit_body) @staticmethod def get_user_friendly_name(): """Get user-friendly name of module.""" return "Fritekst" @staticmethod def get_icon(): """Get icon of module.""" return QIcon("soitool/media/freetextmodule.png")
Ancestors
- ModuleBase
- abc.ABC
- PySide2.QtWidgets.QWidget
- PySide2.QtCore.QObject
- PySide2.QtGui.QPaintDevice
- Shiboken.Object
Class variables
var staticMetaObject
Static methods
def get_icon()
-
Get icon of module.
Expand source code
@staticmethod def get_icon(): """Get icon of module.""" return QIcon("soitool/media/freetextmodule.png")
def get_user_friendly_name()
-
Get user-friendly name of module.
Expand source code
@staticmethod def get_user_friendly_name(): """Get user-friendly name of module.""" return "Fritekst"
Methods
def get_data(self)
-
Return list containing module data.
Returns
list
ofmodule
content
- first index contains header, second index contains body
Expand source code
def get_data(self): """Return list containing module data. Returns ------- list of module content first index contains header, second index contains body """ return [ self.line_edit_header.text(), self.text_edit_body.toPlainText(), ]
def get_size(self)
-
Get size of widget.
Returns
Tuple
- (width, height)
Expand source code
def get_size(self): """Get size of widget. Returns ------- Tuple (width, height) """ size = self.sizeHint() return (size.width(), size.height())
def prepare_for_pdf_export(self)
-
Prepare for PDF-export.
Expand source code
def prepare_for_pdf_export(self): """Prepare for PDF-export.""" prepare_line_edit_for_pdf_export(self.line_edit_header) prepare_text_edit_for_pdf_export(self.text_edit_body)
def resizeEvent(self, event)
-
Update geometry before handling the resizeEvent.
See sources in module docstring.
Parameters
event
:QResizeEvent
- event sent by Qt
Expand source code
def resizeEvent(self, event): """Update geometry before handling the resizeEvent. See sources in module docstring. Parameters ---------- event : QResizeEvent event sent by Qt """ self.updateGeometry() super(FreeTextModule, self).resizeEvent(event)
def sizeHint(self)
-
Overridden to give size hint that encapsulates the child widgets.
Expand source code
def sizeHint(self): """Overridden to give size hint that encapsulates the child widgets.""" size_hint_text_edit_body = self.text_edit_body.sizeHint() size_hint_line_edit_header = self.line_edit_header.sizeHint() return QSize( max( size_hint_text_edit_body.width(), size_hint_line_edit_header.width(), ), size_hint_text_edit_body.height() + size_hint_line_edit_header.height(), )
class Meta (name, bases, namespace, **kwargs)
-
Used as a metaclass to enable multiple inheritance.
Expand source code
class Meta(type(ModuleBase), type(QWidget)): """Used as a metaclass to enable multiple inheritance."""
Ancestors
- abc.ABCMeta
- Shiboken.ObjectType
- builtins.type