add hard reboot
This commit is contained in:
parent
5f72775d1a
commit
cc0179ca6c
@ -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)
|
||||
|
||||
@ -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; }
|
||||
"""
|
||||
|
||||
@ -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
68
ui/confirm_dialog.py
Normal 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))
|
||||
Loading…
x
Reference in New Issue
Block a user