Example #1
0
class IncomingCall(AbstractWidget):
    def __init__(self,parent):
        super(IncomingCall,self).__init__(parent)
        self.ui = Ui_IncomingCall()
        self.ui.setupUi(self)
        self.post = Post(self)
        self.calling = False
        self.call_active = False
        self.ui.btn_hangup.clicked.connect(self.hangup)
        self.ui.btn_answer.clicked.connect(self.answer)
        self.ui.btn_close.clicked.connect(self.close)
        
    def incomingCall(self):
        if self.calling or self.call_active:
            return
        self.ui.btn_close.setEnabled(False)
        self.ui.btn_hangup.setEnabled(True)
        self.ui.btn_answer.setEnabled(True)        
        self.calling = True
        self.show()
    
    def hangup(self):
        self.parent.sb.hangupCall()
        
    def answer(self):
        self.parent.sb.answerCall()
        
    
    def callAnswered(self):
        self.call_active = True
        self.calling = False
        self.call_start = time.time()
        self.ui.btn_answer.setEnabled(False)
        self.post.showDuration()

    def callStopped(self):
        self.call_active = False
        self.calling = False
        self.ui.btn_close.setEnabled(True)
        self.ui.btn_hangup.setEnabled(False)
        self.ui.btn_answer.setEnabled(False)
    
    def showDuration(self):
        while self.call_active:
            now = time.time()-self.call_start
            minutes = int(now/60)
            seconds = int(now%60)
            self.ui.lbl_duration.setText("%02.d:%02.d"%(minutes,seconds))
            time.sleep(1)
        
    def closeEvent(self,event):
        if self.call_active or self.calling:
            event.ignore()
            self.hangup()
        else:
            event.accept()