class Login(QDialog, Ui_Dialog): """User validation""" def __init__(self, parent=None): super(Login, self).__init__(parent) self.setupUi(self) self.btnBoxLogin.button(QDialogButtonBox.Cancel).setText("Cancelar") self.btnBoxLogin.button(QDialogButtonBox.Cancel).clicked.connect(self.close) self.btnBoxLogin.button(QDialogButtonBox.Ok).clicked.connect(self.ok_clicked) self.load_icon = QMovie(":icons/loading.gif") sql_statement = """SELECT username, password, access FROM users WHERE users.username=:username AND users.password=:password""" self._validate_job = Db_Query_Thread(name="validation", query=sql_statement) self._validate_job.query_finished.connect(self.validate_login) self._user_logged = False self._username = None self._access = None def set_loading_icon(self, frame=None): self.btnBoxLogin.button(QDialogButtonBox.Ok).setIcon(QIcon(self.load_icon.currentPixmap())) def ok_clicked(self): """Calls validation methods""" self.btnBoxLogin.button(QDialogButtonBox.Ok).setEnabled(False) self.btnBoxLogin.button(QDialogButtonBox.Ok).setText("") self.load_icon.frameChanged.connect(self.set_loading_icon) self.load_icon.start() username = self.editUsername.text() password = self.editPassword.text() parameters = [["str", "username", username],["str","password",password]] self._validate_job.set_params(parameters) self._validate_job.start() def validate_login(self, db_result, error=None): self._validate_job.exit() if db_result: # correct username and password self._user_logged = True self._username = db_result[0].value(0) self._access = db_result[0].value(2) self.accept() else: if error == 'connError': message = unicode("Erro de autenticação\n\n""Banco de dados indisponível".decode('utf-8')) else: message = unicode("Erro de autenticação\n\n""Usuário e/ou Senha inválido(s)".decode('utf-8')) QMessageBox.critical(self, "Seareiros - Login", message) self.btnBoxLogin.button(QDialogButtonBox.Ok).setText("&OK") self.load_icon.frameChanged.disconnect(self.set_loading_icon) self.load_icon.stop() self.btnBoxLogin.button(QDialogButtonBox.Ok).setIcon(QIcon()) self.btnBoxLogin.button(QDialogButtonBox.Ok).setEnabled(True) self.editUsername.setFocus() self.editUsername.selectAll() def get_user_data(self): if self._user_logged: return [self._username, self._access] else: return None
class BaseTableModel(QAbstractTableModel): """ Base Model """ def __init__(self, parent=None): super(BaseTableModel, self).__init__(parent) self._loading_dialog = Loading() self._data = [] self._populate_job = Db_Query_Thread() def set_query_info(self, name, sql_statement, params=None): self._populate_job.set_name(name) self._populate_job.set_query(sql_statement) if params: self._populate_job.set_params(params) def load(self): self._populate_job.progress.connect(self._loading_dialog.setMessage) self._populate_job.query_row_num.connect(self._loading_dialog.setMaxRows) self._populate_job.query_row_read.connect(self._loading_dialog.incrementReadRows) self._populate_job.query_finished.connect(self.loadData) self._populate_job.start() self._loading_dialog.show() def loadData(self, record_list, error=None): self._populate_job.exit() self._loading_dialog.accept() self._loading_dialog.clear() if record_list: self._data = record_list else: self._data = [] if error == 'conError': message = unicode("Erro de autenticação\n\n""Banco de dados indisponível".decode('utf-8')) QMessageBox.critical(self, "Seareiros", message) self.reset() def get_record(self, row): return self._data[row] def rowCount(self, index=QModelIndex()): return len(self._data) def columnCount(self, index=QModelIndex()): if ( len(self._data) > 0 ): return self._data[0].count() else: return 0