#include #include #include #include #include #include #include #include #include #include class SimpleShutDownDialog : public QWidget { Q_OBJECT public: SimpleShutDownDialog() { setWindowTitle("Simple ShutDown Dialog"); setWindowIcon(QIcon(":/icons/ssdd-icon.png")); setWindowFlags(Qt::Dialog); setWindowModality(Qt::ApplicationModal); QVBoxLayout *mainLayout = new QVBoxLayout; QGridLayout *gridLayout = new QGridLayout; const QStringList labels = { "Logout", "Reboot", "Shutdown", "Switch User", "Suspend", "Hibernate", "About", "Exit" }; const QStringList icons = { "system-log-out", "view-refresh", "system-shutdown", "system-users", "media-playback-pause", "media-playback-stop", "help-about", "application-exit" }; const QStringList commands = { "openbox --exit", "systemctl reboot", "systemctl poweroff", "dm-tool switch-to-greeter", "systemctl suspend", "systemctl hibernate", "about", "exit" }; for (int i = 0; i < labels.size(); ++i) { QPushButton *button = new QPushButton; QVBoxLayout *vbox = new QVBoxLayout; QLabel *iconLabel = new QLabel; iconLabel->setPixmap(QIcon::fromTheme(icons[i]).pixmap(48)); QLabel *textLabel = new QLabel(labels[i]); vbox->addWidget(iconLabel, 0, Qt::AlignHCenter); vbox->addWidget(textLabel, 0, Qt::AlignHCenter); button->setLayout(vbox); connect(button, &QPushButton::clicked, this, [this, commands, i]() { onButtonClicked(commands[i]); }); gridLayout->addWidget(button, i / 4, i % 4); } mainLayout->addLayout(gridLayout); setLayout(mainLayout); } protected: void keyPressEvent(QKeyEvent *event) override { if (event->key() == Qt::Key_Escape) { QApplication::quit(); } else { QWidget::keyPressEvent(event); } } private slots: void onButtonClicked(const QString &command) { if (command == "about") { showAboutDialog(); } else if (command == "exit") { QApplication::quit(); } else { showConfirmationDialog(command); } } void showAboutDialog() { QMessageBox aboutBox; aboutBox.setWindowTitle("About Simple ShutDown Dialog"); aboutBox.setIconPixmap(QPixmap(":/icons/ssdd-icon.png").scaled(250, 250, Qt::KeepAspectRatio)); aboutBox.setText( "About Simple ShutDown Dialog

" "Version: 1.3
" "Author: kekePower
" "URL: https://git.kekepower.com/kekePower/ssdd
" "Description: This is a simple Shutdown Dialog for Openbox." ); aboutBox.exec(); } void showConfirmationDialog(const QString &command) { QMessageBox confirmBox; confirmBox.setWindowTitle("Confirmation"); confirmBox.setText(QString("Are you sure you want to %1?").arg(command)); confirmBox.setIcon(QMessageBox::Warning); confirmBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); if (confirmBox.exec() == QMessageBox::Yes) { QProcess::startDetached(command); } } }; #include "ssdd-qt.moc" int main(int argc, char *argv[]) { QApplication app(argc, argv); SimpleShutDownDialog dialog; dialog.show(); return app.exec(); }