source: internals/2016/linuxloginsmartcardwizard/trunk/proto1/mainwin.py @ 16545

Last change on this file since 16545 was 16545, checked in by dcorreia, 4 years ago

Added main window buttons icons.

File size: 7.1 KB
Line 
1#!/usr/bin/python3
2from PyQt5 import QtCore, QtGui, QtWidgets
3from PyQt5.QtWidgets import QMessageBox
4import os
5import fileHelper
6import config
7import subprocess
8
9
10class MyMainWindow(QtWidgets.QMainWindow):
11    def __init__(self):
12        super(MyMainWindow, self).__init__()
13        self.setObjectName("MainWindow")
14        self.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
15        self.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
16        self.setEnabled(True)
17        self.resize(550, 480)
18        self.setAutoFillBackground(True)
19        self.centerOnScreen()
20       
21        self.centralwidget = QtWidgets.QWidget(self)
22       
23        self.title = QtWidgets.QLabel(self.centralwidget)
24        self.title.setGeometry(QtCore.QRect(0, 0, 550, 70))
25        self.title.setStyleSheet("border-bottom: 1px solid grey;\n"
26                                 "background-color: white;\n"
27                                 "font: bold 17pt \"Ubuntu\";\n")
28        self.title.setAlignment(QtCore.Qt.AlignCenter)
29        font = QtGui.QFont()
30        font.setPointSize(12)
31
32        self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
33        self.layoutWidget.setGeometry(QtCore.QRect(75, 120, 400, 300))
34        self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
35        self.verticalLayout.setSpacing(40)
36        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
37        self.addUserButton = QtWidgets.QPushButton(self.layoutWidget)
38        self.addUserButton.setMinimumHeight(70)
39        self.addUserButton.setFont(font)
40        self.addUserButton.setIcon(QtGui.QIcon("img/add-business-card-symbol.png"))
41        self.addUserButton.setIconSize(QtCore.QSize(50, 50))
42        self.verticalLayout.addWidget(self.addUserButton)
43       
44        self.listConfigButton = QtWidgets.QPushButton(self.layoutWidget)
45        self.listConfigButton.setMinimumHeight(70)
46        self.listConfigButton.setFont(font)
47        self.listConfigButton.setIcon(QtGui.QIcon("img/business-cards-database.png"))
48        self.listConfigButton.setIconSize(QtCore.QSize(50, 50))
49        self.verticalLayout.addWidget(self.listConfigButton)
50       
51        self.resetConfigButton = QtWidgets.QPushButton(self.layoutWidget)
52        self.resetConfigButton.setMinimumHeight(70)
53        self.resetConfigButton.setFont(font)
54        self.resetConfigButton.setIcon(QtGui.QIcon("img/minus-sign-on-business-card.png"))
55        self.resetConfigButton.setIconSize(QtCore.QSize(50, 50))
56        self.verticalLayout.addWidget(self.resetConfigButton)
57
58        self.setCentralWidget(self.centralwidget)
59
60        self.messageBox = QtWidgets.QMessageBox()
61
62        self.setWindowTitle("SmartCard Login")
63        self.title.setText("SmartCard Login Configuration")
64        self.addUserButton.setText("    Assign Card to User Login")
65        self.listConfigButton.setText("      List Local Configurations")
66        self.resetConfigButton.setText("    Reset Login Configurations")
67
68        self.addUserButton.clicked.connect(self.openAddUserWizard)
69        self.listConfigButton.clicked.connect(self.listCurrentConfigs)
70        self.resetConfigButton.clicked.connect(self.resetLoginConfigs)
71
72        self.wizardProcess = None
73
74    def centerOnScreen(self):
75        resolution = QtWidgets.QDesktopWidget().screenGeometry()
76        self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
77                  (resolution.height() / 2) - (self.frameSize().height() / 2))
78
79    def openAddUserWizard(self):
80        if self.isWizardProcessActive():
81            self.messageBox.critical(self, "Title", "\nYou already have an add user login wizard open.\n\n"
82                                                    "Please finish or close the current wizard before\n"
83                                                    "trying to open a new add user login wizard.\n")
84        else:
85            self.wizardProcess = subprocess.Popen(["sudo", "python3", "w4pages.py"])
86
87    def listCurrentConfigs(self):
88        print("List current login configurations")
89        message = "\nBI Number".ljust(25) + " Full Name".ljust(25) + "  Username".ljust(25) + "\n"
90        localCombos = config.listLocalCombos()
91        if localCombos is None:
92            message = "\nYou have no local configurations yet.\n\n"\
93                      "Please use the 'Add User Login' option to add \n"\
94                      "a new local configuration to your computer.\n"
95        else:
96            for combo in config.listLocalCombos():
97                message += combo[0].ljust(25) + combo[1].ljust(25) + combo[2].ljust(25) + "\n"
98        self.messageBox.information(self, "Title", message)
99
100    def resetLoginConfigs(self):
101        if self.isWizardProcessActive():
102            self.messageBox.critical(self, "Title", "\nPlease close the current add user login wizard\n"
103                                                    "before trying to reset the login configurations.\n\n")
104        else:
105            if self.checkResetPopup():
106                fileHelper.executeCommand("python3 main.py reset")
107                self.messageBox.information(self, "Finished reset",
108                                                  "Finished reset of smartcard login configurations.")
109
110    def checkResetPopup(self):
111        message = "\nYou're about to reset your smartcard login \n" \
112                  "configurations in this computer.\n\n" \
113                  "You will lose all current login configurations \n" \
114                  "and disable smartcard login in your computer.\n\n" \
115                  "Do you still want to reset your current \n" \
116                  "smartcard login configurations?\n"
117        reply = self.messageBox.warning(self, "Reset Login Configurations", message,
118                                        QMessageBox.No, QMessageBox.Yes)
119        return reply == QMessageBox.Yes
120
121    def isWizardProcessActive(self):
122        if self.wizardProcess is None:
123            return False
124        elif self.wizardProcess.poll() is not None:
125            return False
126        else:
127            return True
128
129    def closeEvent(self, QCloseEvent):
130        if self.isWizardProcessActive():
131            reply = self.messageBox.warning(self, "Title",  "\nYou have an add user login wizard open.\n\n"
132                                                            "Closing this window will also close the wizard \n"
133                                                            "and you will lose all progress on the wizard.\n\n"
134                                                            "Do you still want to close this window?\n",
135                                                            QMessageBox.No, QMessageBox.Yes)
136            if reply == QMessageBox.Yes:
137                self.wizardProcess.kill()
138                QCloseEvent.accept()
139            else:
140                QCloseEvent.ignore()
141        else:
142            # No wizard running so we can close the window
143            QCloseEvent.accept()
144
145if __name__ == "__main__":
146    import sys
147    if os.geteuid() != 0:
148        print("Script not started as root. Running sudo...")
149        args = ["sudo", sys.executable] + sys.argv + [os.environ]
150        os.execlpe("gksudo", *args)
151    app = QtWidgets.QApplication(sys.argv)
152    ui = MyMainWindow()
153    ui.show()
154    sys.exit(app.exec_())
Note: See TracBrowser for help on using the repository browser.