add hard reboot

This commit is contained in:
Your Name 2026-01-09 03:59:59 +03:00
parent 5f72775d1a
commit cc0179ca6c
10 changed files with 144 additions and 1 deletions

View File

@ -1,10 +1,12 @@
from pathlib import Path
import subprocess
from PySide6.QtCore import Qt
from PySide6.QtGui import QFont
from PySide6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel
import build_info
from ui.confirm_dialog import ConfirmDialog
def build_dev_screen(on_exit) -> QWidget:
@ -22,10 +24,16 @@ def build_dev_screen(on_exit) -> QWidget:
exit_btn = QPushButton("Переход к рабочему столу")
exit_btn.setObjectName("DevExitBtn")
exit_btn.setMinimumHeight(72)
exit_btn.clicked.connect(on_exit)
exit_btn.clicked.connect(lambda: _confirm_exit(on_exit))
reboot_btn = QPushButton("Выполнить перезагрузку")
reboot_btn.setObjectName("DevExitBtn")
reboot_btn.setMinimumHeight(72)
reboot_btn.clicked.connect(_confirm_reboot)
layout.addLayout(hdr)
layout.addWidget(exit_btn)
layout.addWidget(reboot_btn)
layout.addStretch(1)
return screen
@ -70,3 +78,23 @@ def _build_persist_toggle() -> QWidget:
def _dev_flag_path() -> Path:
return Path(build_info.__file__).resolve().parent / "dev_mode_enable"
def _confirm_exit(on_exit):
dialog = ConfirmDialog(
"Подтверждение",
"Закрыть приложение и перейти к рабочему столу?",
"Выйти",
)
if dialog.exec() == ConfirmDialog.Accepted:
on_exit()
def _confirm_reboot():
dialog = ConfirmDialog(
"Подтверждение",
"Выполнить перезагрузку устройства?",
"Перезагрузить",
)
if dialog.exec() == ConfirmDialog.Accepted:
subprocess.run(["sudo", "reboot"], check=False)

View File

@ -190,4 +190,28 @@ QMenu::item:selected { background: #F3F4F6; }
padding: 10px 16px;
}
#LanguageConfirm:hover { background: #0B1220; }
#ConfirmDialog { background: #F4F6F8; }
#ConfirmCard {
background: #FFFFFF;
border-radius: 16px;
border: 1px solid #E5E7EB;
}
#ConfirmTitle { color: #111827; }
#ConfirmMessage { color: rgba(107,114,128,0.95); }
#ConfirmCancel {
background: #FFFFFF;
color: #111827;
border-radius: 12px;
border: 1px solid #E5E7EB;
padding: 8px 14px;
}
#ConfirmCancel:hover { background: #F9FAFB; }
#ConfirmOk {
background: #111827;
color: #FFFFFF;
border-radius: 12px;
padding: 8px 14px;
}
#ConfirmOk:hover { background: #0B1220; }
"""

View File

@ -176,4 +176,27 @@ QMenu::item:selected { background: #1B2330; }
padding: 10px 16px;
}
#LanguageConfirm:hover { background: #344968; }
#ConfirmDialog { background: #0B0E11; }
#ConfirmCard {
background: #141A22;
border-radius: 16px;
}
#ConfirmTitle { color: #E6EAF0; }
#ConfirmMessage { color: rgba(138,147,166,0.95); }
#ConfirmCancel {
background: #141A22;
color: #E6EAF0;
border-radius: 12px;
border: 1px solid #1B2330;
padding: 8px 14px;
}
#ConfirmCancel:hover { background: #1B2330; }
#ConfirmOk {
background: #2A3A52;
color: #E6EAF0;
border-radius: 12px;
padding: 8px 14px;
}
#ConfirmOk:hover { background: #344968; }
"""

68
ui/confirm_dialog.py Normal file
View File

@ -0,0 +1,68 @@
from PySide6.QtCore import Qt, QSize
from PySide6.QtGui import QFont
from PySide6.QtWidgets import (
QDialog,
QWidget,
QLabel,
QVBoxLayout,
QHBoxLayout,
QPushButton,
QSpacerItem,
QSizePolicy,
)
class ConfirmDialog(QDialog):
def __init__(self, title: str, message: str, confirm_text: str):
super().__init__()
self.setObjectName("ConfirmDialog")
self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
self.setWindowModality(Qt.ApplicationModal)
self.setMinimumSize(QSize(1024, 600))
root = QVBoxLayout(self)
root.setContentsMargins(24, 24, 24, 24)
root.setSpacing(16)
root.addItem(QSpacerItem(10, 10, QSizePolicy.Minimum, QSizePolicy.Expanding))
card = QWidget()
card.setObjectName("ConfirmCard")
card_layout = QVBoxLayout(card)
card_layout.setContentsMargins(18, 18, 18, 18)
card_layout.setSpacing(12)
title_lbl = QLabel(title)
title_lbl.setObjectName("ConfirmTitle")
title_lbl.setFont(QFont("", 20, 700))
msg_lbl = QLabel(message)
msg_lbl.setObjectName("ConfirmMessage")
msg_lbl.setFont(QFont("", 14, 500))
msg_lbl.setWordWrap(True)
actions = QHBoxLayout()
actions.setContentsMargins(0, 0, 0, 0)
actions.setSpacing(12)
cancel_btn = QPushButton("Отмена")
cancel_btn.setObjectName("ConfirmCancel")
cancel_btn.setMinimumHeight(50)
cancel_btn.setFont(QFont("", 14, 700))
cancel_btn.clicked.connect(self.reject)
ok_btn = QPushButton(confirm_text)
ok_btn.setObjectName("ConfirmOk")
ok_btn.setMinimumHeight(50)
ok_btn.setFont(QFont("", 14, 700))
ok_btn.clicked.connect(self.accept)
actions.addWidget(cancel_btn, 1)
actions.addWidget(ok_btn, 1)
card_layout.addWidget(title_lbl)
card_layout.addWidget(msg_lbl)
card_layout.addLayout(actions)
root.addWidget(card)
root.addItem(QSpacerItem(10, 10, QSizePolicy.Minimum, QSizePolicy.Expanding))