示例#1
0
class LabelEditConsole(EditConsole):
    def __init__(self, textoLabel='', texto='', parent=None):
        super().__init__(texto, parent)
        self._label = LabelConsole(textoLabel)

    def setTextoLabel(self, texto):
        self._label.setTexto(texto)

    def desenhoTela(self, tam):
        s = '{0}: '.format(self._label.desenhoTelaConsole(20))
        return s + super().desenhoTela(tam-len(s))
class MenuSalvarArquivoConsole(PainelDiretorioConsole):
    def __init__(self, initDir='.', parent=None):
        super().__init__(initDir, parent)
        self._configurarPainel()
        self._menu.arquivoSelecionado.connect(lambda arq: self._salvar())
        self._btnAceitar.setTexto("Salvar")
        self._btnAceitar.enterPressed.connect(self._salvar)
        self._edit.enterPressed.connect(self._salvar)

    def _configurarPainel(self):
        self._painelSobrescrever = PainelConsole()

        self._lblArquivoSobrescrever = LabelConsole()
        self._lblSobrescrever = LabelConsole("Voce deseja sobrescrever esse arquivo?")
        self._painelBtn = PainelBotoesConsole()
        self._btnSobrescreverSim = self._painelBtn.addButton("Sim")
        self._btnSobrescreverSim.enterPressed.connect(lambda: self._salvarArquivo(self._lblArquivoSobrescrever.getTexto()))
        self._btnSobrescreverNao = self._painelBtn.addButton("Nao")
        self._btnSobrescreverNao.enterPressed.connect(lambda: self._telaSobrescrever(False))

        self._painelSobrescrever.addTela(self._lblArquivoSobrescrever)
        self._painelSobrescrever.addTela(self._lblSobrescrever)
        self._painelSobrescrever.addTela(self._painelBtn)
        self._painelSobrescrever.setVisible(False)

        self.addTela(self._painelSobrescrever)

    def _telaSobrescrever(self, mostrar):
        for i in [self._btnAceitar, self._edit, self._menu]:
            i.setVisible(not mostrar)

        self._painelSobrescrever.setVisible(mostrar)

        if not mostrar:
            self._menu.setFocus()
        else:
            self._btnSobrescreverSim.setFocus()

    def _salvar(self):
        path = self._menu.path() + '/' + self._edit.getTexto()
        if QFileInfo(path).exists():
            self._lblArquivoSobrescrever.setTexto(path)
            self._telaSobrescrever(True)
        else:
            self._salvarArquivo(path)

    def _salvarArquivo(self, arq):
        self.arquivoSelecionado.emit(arq)
        if not self._menu.isVisible():
            self._telaSobrescrever(False)
示例#3
0
    def _configurarGui(self):
        self._lblUsuario = LabelConsole(parent=self)
        self._editReceber = TelaEditReceber(parent=self)
        self._lblSituacao = TelaSituacao(None,parent=self)
        self._editEnviar = TelaEditEnviar(parent=self)

        self.addTela(self._lblUsuario)
        self.addTela(self._editReceber)
        self.addTela(self._lblSituacao)
        self.addTela(self._editEnviar)
    def _configurarPainel(self):
        self._painelSobrescrever = PainelConsole()

        self._lblArquivoSobrescrever = LabelConsole()
        self._lblSobrescrever = LabelConsole("Voce deseja sobrescrever esse arquivo?")
        self._painelBtn = PainelBotoesConsole()
        self._btnSobrescreverSim = self._painelBtn.addButton("Sim")
        self._btnSobrescreverSim.enterPressed.connect(lambda: self._salvarArquivo(self._lblArquivoSobrescrever.getTexto()))
        self._btnSobrescreverNao = self._painelBtn.addButton("Nao")
        self._btnSobrescreverNao.enterPressed.connect(lambda: self._telaSobrescrever(False))

        self._painelSobrescrever.addTela(self._lblArquivoSobrescrever)
        self._painelSobrescrever.addTela(self._lblSobrescrever)
        self._painelSobrescrever.addTela(self._painelBtn)
        self._painelSobrescrever.setVisible(False)

        self.addTela(self._painelSobrescrever)
示例#5
0
    def _configurarGui(self):
        p = PainelBotoesConsole()
        self._btnEnviar = p.addButton("Enviar")
        self._btnEnviar.setEnabled(self._usuario != None)
        self._btnReceber = p.addButton("Receber")
        self._btnReceber.setEnabled(False)
        self._btnCancelar = p.addButton("Cancelar")
        self._btnCancelar.setVisible(False)

        layoutInformacao = VLayoutConsole()
        self._lblInformacao = LabelConsole()
        layoutInformacao.addTela(50, self._lblInformacao)

        layout = VLayoutConsole()
        self._barraPorcentagem = ProgressBarConsole()
        self._barraPorcentagem.setVisible(False)
        layout.addTela(50, self._barraPorcentagem, "^")

        self.addTela(p)
        self.addTela(layoutInformacao)
        self.addTela(layout)
示例#6
0
 def __init__(self, textoLabel='', texto='', parent=None):
     super().__init__(texto, parent)
     self._label = LabelConsole(textoLabel)
示例#7
0
class TelaConversaUsuario(PainelConsole):
    conversasNaoVisualizadas = pyqtSignal(Usuario, int)
    def __init__(self, servico, usuario, parent=None):
        super().__init__(parent)
        self._configurarGui()
        
        self._numConversasNaoVisualizadas = 0

        self._servico = servico
        self._usuario = None
        self.setUsuario(usuario)

        self._servico.informacaoTipoValorRecebida.connect(self._receberSituacao)
        self._servico.conversaRecebida.connect(self._receberConversa)
        self._editEnviar.situacaoModificada.connect(self._enviarSituacao)
        self._editEnviar.textoDigitado.connect(self._enviarConversa)

    def _configurarGui(self):
        self._lblUsuario = LabelConsole(parent=self)
        self._editReceber = TelaEditReceber(parent=self)
        self._lblSituacao = TelaSituacao(None,parent=self)
        self._editEnviar = TelaEditEnviar(parent=self)

        self.addTela(self._lblUsuario)
        self.addTela(self._editReceber)
        self.addTela(self._lblSituacao)
        self.addTela(self._editEnviar)

    def atualizarUsuario(self, usuario):
        if self._usuario.getIP() == usuario.getIP():
            self.setUsuario(usuario)

    def setUsuario(self, usuario):
        if not self._usuario or self._usuario.getNome() != usuario.getNome():
            nomeAntigo = self._usuario and self._usuario.getNome() or NOME_DEFAULT
            self._editReceber.setTexto(self._editReceber.getTexto().replace(nomeAntigo, usuario.getNome()))

        self._usuario = usuario
        self._servico.setPara(self._usuario.getIP())
        self._lblSituacao.setUsuario(usuario)
        self._lblUsuario.setTexto("{0} - {1} - {2}".format(usuario.getNome(), usuario.getStatus(), usuario.getIP()))

    def getUsuario(self):
        return self._usuario

    def _receberSituacao(self, de, tipo, valor):
        if tipo == ServicoConversa.INFORMACAO and de == self._usuario.getIP():
            self._lblSituacao.setSituacao(valor['informacao'])
            
    def atualizarNumConversasNaoVisualizadas(self, num):
        self._numConversasNaoVisualizadas = num
        self.conversasNaoVisualizadas.emit(self._usuario, self._numConversasNaoVisualizadas)

    def _receberConversa(self, de, inf):
        if de == self._usuario.getIP():
            self._editReceber.receberTexto(self._usuario.getNome(), inf)
            
            # Emitindo sinal para mostrar as conversas não visualizadas pelo usuário
            if not self.isVisible():
                self.atualizarNumConversasNaoVisualizadas(self._numConversasNaoVisualizadas + 1)

    def receberTexto(self, texto):
        self._editReceber.receberTexto(self._usuario.getNome(), texto)

    def _enviarSituacao(self, sit):
        self._servico.enviarInformacaoConversa(sit)

    def _enviarConversa(self, conv):
        self._servico.enviarConversa(conv)
        self._editReceber.receberTexto(self._servico.getNome(), conv)
示例#8
0
class TelaArquivo(PainelConsole):
    arquivoCancelado = pyqtSignal()
    arquivoFinalizado = pyqtSignal()
    def __init__(self, usuario=None, parent=None):
        super().__init__(parent)

        self._usuario = usuario
        self._servicoEnviar = ServicoArquivoEnviar(40000,40001)
        self._servicoReceber = ServicoArquivoReceber(40001,40000)     

        self._servicoReceber.pedidoReceberArquivo.connect(self._recebendoArquivo)
        self._servicoReceber.porcentagem.connect(self._alterarPorcentagem)
        self._servicoEnviar.porcentagem.connect(self._alterarPorcentagem)
        self._servicoReceber.cancelado.connect(self._estadoCancelado)
        self._servicoEnviar.cancelado.connect(self._estadoCancelado)
        self._servicoReceber.finalizado.connect(self._estadoFinalizado)
        self._servicoEnviar.finalizado.connect(self._estadoFinalizado)

        self._configurarGui()

        self._btnEnviar.enterPressed.connect(self._selecionarArquivoEnviar)
        self._btnReceber.enterPressed.connect(self._selecionarArquivoReceber)
        self._btnCancelar.enterPressed.connect(self.cancelar)

    def _configurarGui(self):
        p = PainelBotoesConsole()
        self._btnEnviar = p.addButton("Enviar")
        self._btnEnviar.setEnabled(self._usuario != None)
        self._btnReceber = p.addButton("Receber")
        self._btnReceber.setEnabled(False)
        self._btnCancelar = p.addButton("Cancelar")
        self._btnCancelar.setVisible(False)

        layoutInformacao = VLayoutConsole()
        self._lblInformacao = LabelConsole()
        layoutInformacao.addTela(50, self._lblInformacao)

        layout = VLayoutConsole()
        self._barraPorcentagem = ProgressBarConsole()
        self._barraPorcentagem.setVisible(False)
        layout.addTela(50, self._barraPorcentagem, "^")

        self.addTela(p)
        self.addTela(layoutInformacao)
        self.addTela(layout)

    def _alterarInformacao(self, texto):
        self._lblInformacao.setTexto(texto)

    def _estadoCancelado(self):
        self.arquivoCancelado.emit()
        self._alterarInformacao("Cancelado")
        QTimer.singleShot(2000, lambda: self._estadoInicial())
        
    def _estadoFinalizado(self):
        self.arquivoFinalizado.emit()
        self._alterarInformacao("Finalizado")
        QTimer.singleShot(2000, lambda: self._estadoInicial())

    def _estadoInicial(self):
        self._alterarPorcentagem(0)
        self._lblInformacao.setTexto("")
        self._btnEnviar.setEnabled(True)
        self._btnReceber.setEnabled(False)
        self._btnCancelar.setVisible(False)
        self._barraPorcentagem.setVisible(False)

    def _recebendoArquivo(self, de, nomeArquivo):
        self._alterarInformacao("Receber -> {0} de {1}".format(nomeArquivo, de))
        self._barraPorcentagem.setVisible(True)
        self._btnEnviar.setEnabled(False)
        self._btnReceber.setEnabled(True)
        self._btnCancelar.setVisible(True)
        
    def _alterarPorcentagem(self, valor):
        self._barraPorcentagem.setPorcentagem(valor)

    def trabalhando(self):
        return self._servicoEnviar.estaEnviandoArquivo() or self._servicoReceber.estaRecebendoArquivo()

    def setUsuario(self, usuario):
        temp = self._usuario
        self._usuario = usuario
        self._servicoEnviar.setPara(self._usuario.getIP())
        
        if not temp:
            self._estadoInicial()

    def cancelar(self):
        if self._servicoEnviar.estaEnviandoArquivo():
            self._servicoEnviar.cancelar()
        elif self._servicoReceber.estaRecebendoArquivo():
            self._servicoReceber.cancelar()

        self._estadoCancelado()

    def _selecionarArquivoEnviar(self):
        m = MenuAbrirArquivoConsole()
        p = PopupConsole(m)
        m.arquivoSelecionado.connect(lambda arq: p.close())
        m.arquivoSelecionado.connect(self.enviarArquivo)
        p.show()

    def enviarArquivo(self, path):
        self._servicoEnviar.enviarArquivo(path, self._usuario.getIP())
        self._alterarInformacao('Enviando '+QFileInfo(path).fileName())
        self._barraPorcentagem.setVisible(True)
        
    def _selecionarArquivoReceber(self):
        m = MenuSalvarArquivoConsole()
        p = PopupConsole(m)
        m.arquivoSelecionado.connect(lambda arq: p.close())
        m.arquivoSelecionado.connect(self.receberArquivo)
        p.show()

    def receberArquivo(self, path):
        self._servicoReceber.aceitarArquivo(path)