forked from Support/sp-hydra-veil-gui
105 lines
3.7 KiB
Python
Executable file
105 lines
3.7 KiB
Python
Executable file
from io import BytesIO
|
|
|
|
import qrcode
|
|
|
|
from PyQt6.QtWidgets import QDialog, QLabel, QPushButton, QVBoxLayout
|
|
from PyQt6.QtGui import QPixmap
|
|
from PyQt6.QtCore import Qt
|
|
|
|
|
|
class QRCodeDialog(QDialog):
|
|
def __init__(self, address_text, full_amount, currency_type=None, parent=None):
|
|
super().__init__(parent)
|
|
self.currency_type = currency_type
|
|
self.setWindowTitle("Payment Address QR Code")
|
|
self.setFixedSize(400, 450)
|
|
self.setModal(True)
|
|
|
|
layout = QVBoxLayout(self)
|
|
|
|
title_label = QLabel("Scan QR Code to Copy Address", self)
|
|
title_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
title_label.setStyleSheet(
|
|
"font-size: 16px; font-weight: bold; color: #00ffff; margin: 10px;")
|
|
layout.addWidget(title_label)
|
|
|
|
qr_label = QLabel(self)
|
|
qr_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
qr_label.setStyleSheet(
|
|
"margin: 10px; border: 2px solid #00ffff; border-radius: 10px;")
|
|
|
|
qr_pixmap = self.generate_qr_code(address_text, full_amount)
|
|
qr_label.setPixmap(qr_pixmap)
|
|
layout.addWidget(qr_label)
|
|
|
|
amount_label = QLabel("Amount:", self)
|
|
amount_label.setStyleSheet(
|
|
"font-size: 12px; color: #ffffff; margin-top: 10px;")
|
|
layout.addWidget(amount_label)
|
|
|
|
amount_text_label = QLabel(full_amount, self)
|
|
amount_text_label.setStyleSheet(
|
|
"font-size: 10px; color: #cccccc; margin: 5px; padding: 5px; border: 1px solid #666; border-radius: 5px;")
|
|
layout.addWidget(amount_text_label)
|
|
|
|
address_label = QLabel("Address:", self)
|
|
address_label.setStyleSheet(
|
|
"font-size: 12px; color: #ffffff; margin-top: 10px;")
|
|
layout.addWidget(address_label)
|
|
|
|
address_text_label = QLabel(address_text, self)
|
|
address_text_label.setWordWrap(True)
|
|
address_text_label.setStyleSheet(
|
|
"font-size: 10px; color: #cccccc; margin: 5px; padding: 5px; border: 1px solid #666; border-radius: 5px;")
|
|
layout.addWidget(address_text_label)
|
|
|
|
close_button = QPushButton("Close", self)
|
|
close_button.setStyleSheet(
|
|
"font-size: 14px; padding: 8px; margin: 10px;")
|
|
close_button.clicked.connect(self.close)
|
|
layout.addWidget(close_button)
|
|
|
|
self.setStyleSheet("""
|
|
QDialog {
|
|
background-color: #2c3e50;
|
|
border: 2px solid #00ffff;
|
|
border-radius: 10px;
|
|
}
|
|
""")
|
|
|
|
def generate_qr_code(self, text, full_amount):
|
|
qr = qrcode.QRCode(
|
|
version=1,
|
|
error_correction=qrcode.constants.ERROR_CORRECT_L,
|
|
box_size=8,
|
|
border=4,
|
|
)
|
|
|
|
if self.currency_type:
|
|
currency_lower = self.currency_type.lower()
|
|
if currency_lower == 'bitcoin':
|
|
qr_data = f"bitcoin:{text}?amount={full_amount}"
|
|
elif currency_lower == 'monero':
|
|
qr_data = f"monero:{text}?amount={full_amount}"
|
|
elif currency_lower == 'lightning':
|
|
qr_data = f"bitcoin:{text}?amount={full_amount}&lightning=ln"
|
|
elif currency_lower == 'litecoin':
|
|
qr_data = f"litecoin:{text}?amount={full_amount}"
|
|
else:
|
|
qr_data = f"{text}?amount={full_amount}"
|
|
else:
|
|
qr_data = text
|
|
|
|
qr.add_data(qr_data)
|
|
qr.make(fit=True)
|
|
|
|
qr_image = qr.make_image(fill_color="black", back_color="white")
|
|
|
|
buffer = BytesIO()
|
|
qr_image.save(buffer, format='PNG')
|
|
buffer.seek(0)
|
|
|
|
pixmap = QPixmap()
|
|
pixmap.loadFromData(buffer.getvalue())
|
|
|
|
return pixmap.scaled(150, 150, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation)
|