Ejemplo n.º 1
0
class ServerConfigurationEditor(QWidget):
    currentConfigChanged = pyqtSignal(object)
    saved = pyqtSignal()

    def __init__(self, connectionFactory, parent=None) -> None:
        super().__init__(parent)
        self._srv_list = ServerListWidget()
        self._srv_form = ServerConfigForm(connectionFactory)
        self._workflow = ServerFormWorkflow(self._srv_form)
        self._model = None
        layout = QVBoxLayout(self)
        layout.addWidget(self._srv_list)
        layout.addWidget(self._srv_form)

    def selectServer(self, serverId):
        self._srv_list.selectServer(serverId)

    def _selectedServer(self, idx):
        data = self._model.index(idx).data(role=Qt.EditRole)
        self.currentConfigChanged.emit(data)

    def currentServerId(self):
        return self._srv_list.currentServerId()

    def setModel(self, model):
        self._model = model
        self._srv_list.setModel(model)

        self._mapper = QDataWidgetMapper(self)
        self._mapper.setModel(model)
        self._mapper.setItemDelegate(ServerFormItemDelegate(self))
        self._mapper.addMapping(self._srv_form, 1)
        self._mapper.currentIndexChanged.connect(self._workflow.restart)
        self._mapper.setCurrentIndex(self._srv_list.currentIndex())

        self._mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit)
        self._srv_form.saveBtn.clicked.connect(self._mapper.submit)
        self._srv_form.saveBtn.clicked.connect(self.saved)

        self._srv_list.currentIndexChanged.connect(
            self._mapper.setCurrentIndex)
        self._srv_list.currentIndexChanged.connect(self._selectedServer)
Ejemplo n.º 2
0
class SimpleModel():
    def __init__(self, dbcon=None, tblName=None, dictField=None):
        super(SimpleModel, self).__init__()
        self.tblName = tblName
        self.dicFields = dictField

    def setModel(self):
        '''
        Metodo para Configurar o SQLTABLEMODEL, para uma determina tabela na base de dados
        caso se a configuracao seja bem feita e devolvido um true e caso contrario e devolvido um 
        False e a mensagem de erro.
        '''
        bOK = False
        self.model = QSqlTableModel()
        self.model.setTable(self.tblName)
        self.model.sort(0, Qt.AscendingOrder)
        bOK = self.model.select()
        if bOK:
            return bOK
        else:
            msg.error(txt='Error Nao Foi possivel Configurar o model',
                      verbTxt=self.model.lastError().text())
            return bOK

    def setModelInView(self, tblView=None):
        '''
        Metodo para atribuir um Modelo a table View
        '''
        tblView.setModel(self.model)

    def setMapper(self):
        '''
        Metodo para configuara o mappper, onde iremos atribuir ao mapper um model e widgets para 
        podermos mapper a informacao no modelo,  mudaremos o tipo de submitPocalicy para manual para
        que so se atualize os campos com clickar do um botao atualizar
        '''
        self.mapper = QDataWidgetMapper()
        self.mapper.setModel(self.model)
        for idx, val in enumerate(self.dicFields['fldWidget']):
            self.mapper.addMapping(
                val, self.model.fieldIndex(self.dicFields['fldName'][idx]))
        self.mapper.setSubmitPolicy(self.mapper.ManualSubmit)
        self.mapper.toFirst()

    def setTblMapper(self, indexModel=None):
        '''
        Metodo para scronizar o click do TableView com os dados do mapper isto e
        para quando se selecionar um elemento na tabela, ser esse que ira aparecer no 
        widgets mapeados.
        '''
        currentModel = indexModel.model()
        clickedRow = indexModel.row()
        self.mapper.setCurrentModelIndex(indexModel)
        for i in range(len(self.dicFields['fldName'])):
            currentModel.index(clickedRow, i)

    def addData(self):
        '''
        Metodo para prepara a modelo e mapper para inserir um novo 
        elemento.
        '''
        row = self.model.rowCount()
        bOK = self.model.insertRow(row)
        self.mapper.setCurrentIndex(row)
        if bOK:
            return bOK
        else:
            msg.error(
                txt=
                'Error Nao Foi possivel Configurar o model para a insercao de um novo elemento.',
                verbTxt=self.model.lastError().text())
            return bOK

    def insertData(self, lstVal):
        '''
        Metodo para inserir novos dados na base de dados, 
        primeiro configura os tipos de compos depois leva os valores 
        da lista de valores e por fim executa e se a insercao for bem succedida 
        e envida retorna verdade caso contrario retorn falso e menssagem com erro
        '''
        insertRecord = QSqlRecord()
        for idx, val in enumerate(self.dicFields['fldName']):
            insertRecord.append(QSqlField(val, self.dicFields['fldType'][idx]))
        for indx, val in enumerate(lstVal):
            insertRecord.setValue(indx, val)
        bOK = self.model.insertRowIntoTable(insertRecord)
        if bOK:
            msg.inserted()
            self.model.select()
            return bOK
        else:
            msg.error(txt='Error Nao Foi possivel Inserir o novo elemento.',
                      verbTxt=self.model.lastError().text())
            return bOK

    def saveChange(self):
        '''
        Metodo para Atulizar os dados editados, caso or bem succedida 
        e envida retorna verdade caso contrario retorn falso e menssagem com erro
        '''
        bOK = self.mapper.submit()
        if bOK:
            msg.updated(txt='Dados Atulizados Com sucessos')
            self.model.select()
            return bOK
        else:
            msg.error(txt='Error Nao Foi possivel Atualizar o elemento .',
                      verbTxt=self.model.lastError().text())
            return bOK