toxygen/toxygen/widgets.py

132 lines
4.2 KiB
Python
Raw Normal View History

2017-04-11 20:10:03 +02:00
from PyQt5 import QtCore, QtGui, QtWidgets
2016-04-24 12:45:11 +02:00
2017-04-11 20:10:03 +02:00
class DataLabel(QtWidgets.QLabel):
2016-06-05 19:17:39 +02:00
"""
Label with elided text
"""
2016-06-23 21:50:17 +02:00
def setText(self, text):
2016-11-20 12:12:27 +01:00
text = ''.join('\u25AF' if len(bytes(c, 'utf-8')) >= 4 else c for c in text)
2016-04-24 12:45:11 +02:00
metrics = QtGui.QFontMetrics(self.font())
2016-06-23 21:50:17 +02:00
text = metrics.elidedText(text, QtCore.Qt.ElideRight, self.width())
super().setText(text)
2016-04-24 12:45:11 +02:00
2017-04-11 20:10:03 +02:00
class ComboBox(QtWidgets.QComboBox):
2016-10-30 16:13:12 +01:00
def __init__(self, *args):
super().__init__(*args)
2017-04-11 20:10:03 +02:00
self.view().setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)
2016-10-30 16:13:12 +01:00
2017-04-11 20:10:03 +02:00
class CenteredWidget(QtWidgets.QWidget):
2016-04-24 12:45:11 +02:00
def __init__(self):
super(CenteredWidget, self).__init__()
self.center()
def center(self):
qr = self.frameGeometry()
2017-04-11 20:10:03 +02:00
cp = QtWidgets.QDesktopWidget().availableGeometry().center()
2016-04-24 12:45:11 +02:00
qr.moveCenter(cp)
self.move(qr.topLeft())
2016-05-18 23:38:21 +02:00
2017-04-11 20:10:03 +02:00
class LineEdit(QtWidgets.QLineEdit):
def __init__(self, parent=None):
super(LineEdit, self).__init__(parent)
def contextMenuEvent(self, event):
menu = create_menu(self.createStandardContextMenu())
menu.exec_(event.globalPos())
del menu
2017-04-11 20:10:03 +02:00
class QRightClickButton(QtWidgets.QPushButton):
2016-06-05 19:17:39 +02:00
"""
Button with right click support
"""
2017-04-13 18:22:46 +02:00
rightClicked = QtCore.pyqtSignal()
2017-04-11 20:10:03 +02:00
2016-05-18 23:38:21 +02:00
def __init__(self, parent):
super(QRightClickButton, self).__init__(parent)
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.RightButton:
2017-04-13 18:22:46 +02:00
self.rightClicked.emit()
2016-05-18 23:38:21 +02:00
else:
super(QRightClickButton, self).mousePressEvent(event)
2017-04-11 20:10:03 +02:00
class RubberBand(QtWidgets.QRubberBand):
def __init__(self):
2017-04-11 20:10:03 +02:00
super(RubberBand, self).__init__(QtWidgets.QRubberBand.Rectangle, None)
self.setPalette(QtGui.QPalette(QtCore.Qt.transparent))
self.pen = QtGui.QPen(QtCore.Qt.blue, 4)
self.pen.setStyle(QtCore.Qt.SolidLine)
self.painter = QtGui.QPainter()
def paintEvent(self, event):
self.painter.begin(self)
self.painter.setPen(self.pen)
self.painter.drawRect(event.rect())
self.painter.end()
2016-05-30 20:38:21 +02:00
def create_menu(menu):
2016-06-05 19:17:39 +02:00
"""
:return translated menu
"""
2016-05-30 20:38:21 +02:00
for action in menu.actions():
text = action.text()
if 'Link Location' in text:
2016-06-05 19:17:39 +02:00
text = text.replace('Copy &Link Location',
QtWidgets.QApplication.translate("MainWindow", "Copy link location"))
2016-05-30 20:38:21 +02:00
elif '&Copy' in text:
text = text.replace('&Copy', QtWidgets.QApplication.translate("MainWindow", "Copy"))
2016-05-30 20:38:21 +02:00
elif 'All' in text:
text = text.replace('Select All', QtWidgets.QApplication.translate("MainWindow", "Select all"))
2016-05-30 20:38:21 +02:00
elif 'Delete' in text:
text = text.replace('Delete', QtWidgets.QApplication.translate("MainWindow", "Delete"))
2016-05-30 20:38:21 +02:00
elif '&Paste' in text:
text = text.replace('&Paste', QtWidgets.QApplication.translate("MainWindow", "Paste"))
2016-05-30 20:38:21 +02:00
elif 'Cu&t' in text:
text = text.replace('Cu&t', QtWidgets.QApplication.translate("MainWindow", "Cut"))
2016-05-30 20:38:21 +02:00
elif '&Undo' in text:
text = text.replace('&Undo', QtWidgets.QApplication.translate("MainWindow", "Undo"))
2016-05-30 20:38:21 +02:00
elif '&Redo' in text:
text = text.replace('&Redo', QtWidgets.QApplication.translate("MainWindow", "Redo"))
2016-05-30 20:38:21 +02:00
else:
menu.removeAction(action)
continue
action.setText(text)
return menu
2016-06-04 14:19:15 +02:00
class MultilineEdit(CenteredWidget):
def __init__(self, title, text, save):
super(MultilineEdit, self).__init__()
self.resize(350, 200)
self.setMinimumSize(QtCore.QSize(350, 200))
self.setMaximumSize(QtCore.QSize(350, 200))
self.setWindowTitle(title)
2017-04-11 20:10:03 +02:00
self.edit = QtWidgets.QTextEdit(self)
2016-06-04 14:19:15 +02:00
self.edit.setGeometry(QtCore.QRect(0, 0, 350, 150))
self.edit.setText(text)
2017-04-11 20:10:03 +02:00
self.button = QtWidgets.QPushButton(self)
2016-06-04 14:19:15 +02:00
self.button.setGeometry(QtCore.QRect(0, 150, 350, 50))
2017-04-11 20:10:03 +02:00
self.button.setText(QtWidgets.QApplication.translate("MainWindow", "Save"))
2016-06-04 14:19:15 +02:00
self.button.clicked.connect(self.button_click)
self.center()
self.save = save
def button_click(self):
self.save(self.edit.toPlainText())
self.close()