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)
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)
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 __init__(self, textoLabel='', texto='', parent=None): super().__init__(texto, parent) self._label = LabelConsole(textoLabel)
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)
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)