2021-09-09 08:50:42 +12:00
|
|
|
from PyQt5.QtGui import QTextCursor, QFont
|
2021-12-24 22:09:50 +13:00
|
|
|
from PyQt5.QtWidgets import (
|
|
|
|
QPlainTextEdit,
|
|
|
|
QWidget,
|
|
|
|
QPushButton,
|
|
|
|
QFileDialog,
|
|
|
|
QVBoxLayout,
|
|
|
|
)
|
2021-08-14 08:51:36 +12:00
|
|
|
|
|
|
|
|
|
|
|
class ConsoleWindow(QWidget):
|
|
|
|
def __init__(self):
|
|
|
|
super(ConsoleWindow, self).__init__()
|
|
|
|
self.layout = QVBoxLayout()
|
2022-01-09 04:48:30 +13:00
|
|
|
self.setWindowTitle("Rare Console")
|
2021-08-14 08:51:36 +12:00
|
|
|
self.setGeometry(0, 0, 600, 400)
|
|
|
|
|
|
|
|
self.console = Console()
|
|
|
|
self.layout.addWidget(self.console)
|
|
|
|
|
|
|
|
self.save_button = QPushButton(self.tr("Save output to file"))
|
|
|
|
self.layout.addWidget(self.save_button)
|
|
|
|
self.save_button.clicked.connect(self.save)
|
|
|
|
|
2021-11-02 09:49:17 +13:00
|
|
|
self.clear_button = QPushButton(self.tr("Clear"))
|
|
|
|
self.layout.addWidget(self.clear_button)
|
|
|
|
self.clear_button.clicked.connect(self.console.clear)
|
|
|
|
|
2021-08-14 08:51:36 +12:00
|
|
|
self.setLayout(self.layout)
|
|
|
|
|
|
|
|
def save(self):
|
2021-12-24 22:09:50 +13:00
|
|
|
file, ok = QFileDialog.getSaveFileName(
|
|
|
|
self, "Save output", "", "Log Files (*.log);;All Files (*)"
|
|
|
|
)
|
2021-08-14 08:51:36 +12:00
|
|
|
if ok:
|
|
|
|
if "." not in file:
|
|
|
|
file += ".log"
|
|
|
|
with open(file, "w") as f:
|
|
|
|
f.write(self.console.toPlainText())
|
|
|
|
f.close()
|
|
|
|
self.save_button.setText(self.tr("Saved"))
|
|
|
|
|
2022-01-09 05:08:22 +13:00
|
|
|
def log(self, text: str, end: str = "\n"):
|
|
|
|
self.console.log(text + end)
|
2021-08-14 08:51:36 +12:00
|
|
|
|
|
|
|
def error(self, text):
|
|
|
|
self.console.error(text)
|
|
|
|
|
|
|
|
|
|
|
|
class Console(QPlainTextEdit):
|
|
|
|
def __init__(self):
|
|
|
|
super().__init__()
|
|
|
|
self.setReadOnly(True)
|
2021-09-09 08:50:42 +12:00
|
|
|
self.setFont(QFont("monospace"))
|
2021-08-14 08:51:36 +12:00
|
|
|
self._cursor_output = self.textCursor()
|
|
|
|
|
|
|
|
def log(self, text):
|
|
|
|
self._cursor_output.insertText(text)
|
|
|
|
self.scroll_to_last_line()
|
|
|
|
|
|
|
|
def error(self, text):
|
2021-12-24 22:09:50 +13:00
|
|
|
self._cursor_output.insertHtml(f'<font color="Red">{text}</font>')
|
2021-08-14 08:51:36 +12:00
|
|
|
self.scroll_to_last_line()
|
|
|
|
|
|
|
|
def scroll_to_last_line(self):
|
|
|
|
cursor = self.textCursor()
|
|
|
|
cursor.movePosition(QTextCursor.End)
|
2021-12-24 22:09:50 +13:00
|
|
|
cursor.movePosition(
|
|
|
|
QTextCursor.Up if cursor.atBlockStart() else QTextCursor.StartOfLine
|
|
|
|
)
|
2021-08-14 08:51:36 +12:00
|
|
|
self.setTextCursor(cursor)
|