コード例 #1
0
ファイル: Main.py プロジェクト: mswiders1/multitalk
 def __init__(self,  qsettings=None):
     QtGui.QMainWindow.__init__(self)
     self.peerToWindow = {}
     self.setWindowTitle("Multitalk")
     self.canClose = False
     self.settings = qsettings
     self.ui=Ui_MainWindow()
     self.ui.setupUi(self)
     self.initModels()
     self.restoreWindowState()
     Main.logger = self.showMsgInLogView
     self.ui.newMessage.setFocus()
コード例 #2
0
ファイル: Main.py プロジェクト: mswiders1/multitalk
class Main(QtGui.QMainWindow):
    logger = None
    
    def __init__(self,  qsettings=None):
        QtGui.QMainWindow.__init__(self)
        self.peerToWindow = {}
        self.setWindowTitle("Multitalk")
        self.canClose = False
        self.settings = qsettings
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)
        self.initModels()
        self.restoreWindowState()
        Main.logger = self.showMsgInLogView
        self.ui.newMessage.setFocus()
        
    def showGui(self):
        if self.showLoginForm():
            QtGui.QMainWindow.show(self)
            return True
        else:
            self.close()
            return False
        
    def showLoginForm(self):
        (networkAddr,  ok)  = QtGui.QInputDialog.getText (self, Qt.QObject.trUtf8(self,"Podaj adres ip"), Qt.QObject.trUtf8(self,"Podaj adres ip lub anuluj"))
        if ok and len(unicode(networkAddr)) > 0:
           self.core.userInsertedNetworkAddr(unicode(networkAddr))
        elif ok:
            print "Gui: wprowadzono pusty adres hosta"
        while 1:
            (nickName, ok)  = QtGui.QInputDialog.getText (self, Qt.QObject.trUtf8(self,"Podaj nazwę"), Qt.QObject.trUtf8(self,"Podaj nick"))
            if ok and len(nickName) > 0:
                break
            elif ok:
                print "Gui: uzytkownik podal zly nick"
            else:
                return False
        self.core.handleUserInsertedNick(unicode(nickName))
        title = self.windowTitle()
        self.setWindowTitle(unicode(title) + u" (" + unicode(nickName) + ")")
        return True
        
    def on_sendButton_released(self):
        msg = str(self.ui.newMessage.text())
        self.ui.newMessage.setText("")
        self.core.sendMessage(TO_ALL,  msg)
        
    def on_peersView_clicked(self):
        index = self.ui.peersView.currentIndex()
        rowNumber = index.row()
        name,  uid = self.peersModel.getPeerData(rowNumber)
        if self.peerToWindow.keys().count(uid):
            print "Gui: okno juz jest otwarte"
        elif self.core.isThisMyUid(uid):
            print "Gui: sam z sobą chcesz rozmawiać?"
        else:
            print "Gui: otwieram okno rozmowy z %s(%s)" % (uid,  name)
            self.__openPrivateWin(uid,  name)
        
    def __openPrivateWin(self,  uid,  name):
        newWin = Private(self, self.core,  uid,  name)
        newWin.show()
        self.peerToWindow[uid] = newWin
        return newWin
        
    def conversationWindowClosed(self,  uid):
        del self.peerToWindow[uid]
        
    def addNode(self,  uid,  name):
        Main.logger(u"Dodano użytkownika %s" % name)
        self.peersModel.addPeer(uid,  name)
        
    def delNode(self,  uid,  name):
        Main.logger(u"Usunięto użytkownika %s" % (name))
        self.peersModel.delPeer(uid)
        if self.peerToWindow.keys().count(uid):
            print "Gui: blokuje okno rozmowy z uzytkownikiem %s " % uid
            self.peerToWindow[uid].userDisconnected()
            
    def messageReceived(self,  uidSender, senderName,  uidReceiver,  msg):
        isMsgToAll = uidReceiver == TO_ALL
        Main.logger(u"Otrzymano wiadomość '%s' od %s (do : %s)" %(msg,  uidSender,  uidReceiver))
        if isMsgToAll:
            self.conversationModel.addMessage(self.core.userNameByUid(uidSender),  msg)
        else:
            if self.core.isThisMyUid(uidSender):
                peerWin = self.peerToWindow[uidReceiver]
            elif self.peerToWindow.keys().count(uidSender):
                peerWin = self.peerToWindow[uidSender]
            else:
                print "Gui: brak okna dla %s " % uidSender
                peerWin = self.__openPrivateWin(uidSender,  senderName)
            peerWin.messageReceived(uidSender, msg)
            
   
    def on_newMessage_returnPressed(self):
        mouseEvent = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress, self.ui.sendButton.pos(), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier )
        QtGui.QApplication.sendEvent(self.focusWidget(), mouseEvent)
        mouseEvent = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonRelease, self.ui.sendButton.pos(), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier )
        QtGui.QApplication.sendEvent(self.focusWidget(), mouseEvent)
        self.ui.sendButton.click()
            
    def initModels(self):
        self.conversationModel = ConversationModel()
        self.ui.conversationView.setModel(self.conversationModel)
        tv = self.ui.conversationView.horizontalHeader()
        tv.setStretchLastSection(True)
        self.ui.conversationView.resizeColumnsToContents()
        self.peersModel = PeersModel()
        self.ui.peersView.setModel(self.peersModel)
        tv = self.ui.peersView.horizontalHeader()
        tv.setStretchLastSection(True)
        self.ui.conversationView.resizeColumnsToContents()
        
    def showMsgInLogView(self,  message):
        text = self.ui.logView.toPlainText()
        self.ui.logView.setPlainText(text.append(message).append("\n"))

    def restoreWindowState(self):
        self.settings = QtCore.QSettings(aboutMe, appName); 
        self.restoreGeometry(self.settings.value(windowGeo,  QtCore.QVariant()).toByteArray() );
        self.restoreState(self.settings.value(windowFlags,  QtCore.QVariant()).toByteArray() );
        self.ui.splitterUpDown.restoreState(self.settings.value(splitterUpDown,  QtCore.QVariant()).toByteArray() );
        self.ui.splitterLeftRight.restoreState(self.settings.value(splitterLeftRight,  QtCore.QVariant()).toByteArray() );
        
    def saveWindowState(self):
        self.settings.setValue(windowGeo, self.saveGeometry());
        self.settings.setValue(windowFlags, self.saveState());
        self.settings.setValue(splitterLeftRight, self.ui.splitterLeftRight.saveState());
        self.settings.setValue(splitterUpDown, self.ui.splitterUpDown.saveState());
        
    def closeEvent(self,  closeEvent):
        print "Gui: close event"
        self.saveWindowState()
        if self.core.closeApp():
            return
        else:
            closeEvent.ingore()
    
    def setBroadcastProgress(self,  progress):
        if progress == 0:
            self.pd = QtGui.QProgressDialog("Broadcast in progress.", QtCore.QString(), 0, 100,  self)
            self.pd.setWindowTitle("Progress...")
            self.pd.open()
        elif progress == 100:
            self.pd.cancel()
        else:
            self.pd.setValue(progress)
            self.pd.show()

    def setCore(self,  core):
        self.core = core