示例#1
0
	def __init__(self, con, jidTo, buddyList, parent = None, nick = None):
		super(AbstractDialog, self).__init__(parent)

		self.jidTo = []
		self.initialJidTo = []
		
		if len(list(jidTo)) > 1 and len(jidTo[0]) > 1:
			for el in list(jidTo):
				self.jidTo.append(el)
		else: self.jidTo.append(jidTo)
		
		for el in self.jidTo:
			self.initialJidTo.append(el)
			
		self.con = con
		self.buddyList = buddyList
		self.nick = nick
		
		# loading .ui
		uic.loadUi(PATH_UI_MESSAGE, self)
		self.dialogTitle()
		self.btn_update.hide()
		self.chb_members.hide()
		
		# ading QTextEdit
		self.messageTextEdit = MessageTextEdit(self)
		self.vlt_message_widget.insertWidget(-1, self.messageTextEdit)		
		self.tbr_browser.setPlainText("")
		self.messageTextEdit.setFocus()
		
		# chat members		
		if self.nick is None:
			self.chatMembers = ChatMembers(self)
			self.vlt_members.insertWidget(1, self.chatMembers)
			self.chatMembers.setConnection(self.con)
			
			if len(self.jidTo) is 1:
				self.chatMembers.constructMessageList()
			else:
				self.chatMembers.constructMUCList()
				
			self.showMembersBuddies(True)
			
			self.connect(self.btn_update, SIGNAL("clicked()"), self.chatMembers.updateMembers)
		else:
			# never show chat members if it is a privite chat with muc member
			self.btn_members.hide()

		# multimedia
		self.saveAsImgActs = []
		self.saveAsAudioActs = []
		self.saveAsVideoActs = []
		self.canvas = Canvas(self)
		self.vlt_top.insertWidget(1, self.canvas.scribbleArea)
		self.showMultimedia(False)
		self.connect(self.btn_color, SIGNAL("clicked()"), self.canvas.penColor)
		self.connect(self.btn_width, SIGNAL("clicked()"), self.canvas.penWidth)
		self.connect(self.btn_add, SIGNAL("clicked()"), self.canvas.add)
		self.connect(self.btn_undo, SIGNAL("clicked()"), self.canvas.undo)
		self.connect(self.btn_clear, SIGNAL("clicked()"), self.canvas.scribbleArea.clearImage)
		# save button
		menu_save = QMenu(self)
		newAction = menu_save.addAction("Save &audio As...")
		subMenu_audio = QMenu("Popup Submenu audio", self)
		for format in ['mp3']:
			format = str(format)
			text = "." + format.lower()
			action = QtGui.QAction(text, self, triggered=self.saveAudioFile)
			action.setData(format)
			self.saveAsAudioActs.append(action)
		for action in self.saveAsAudioActs:
			subMenu_audio.addAction(action)
		newAction.setMenu(subMenu_audio)	
			
		newAction = menu_save.addAction("Save &video As...")
		self.btn_save.setMenu(menu_save)
		subMenu_video = QMenu("Popup Submenu video", self)
		for format in ['avi']:
			format = str(format)
			text = "." + format.lower()
			action = QtGui.QAction(text, self, triggered=self.saveVideoFile)
			action.setData(format)
			self.saveAsVideoActs.append(action)
		for action in self.saveAsVideoActs:
			subMenu_video.addAction(action)
		newAction.setMenu(subMenu_video)

		newAction = menu_save.addAction("Save &image As...")
		subMenu_image = QMenu("Popup Submenu image", self)
		for format in QtGui.QImageWriter.supportedImageFormats():
			format = str(format)
			text = "." + format.lower()
			action = QtGui.QAction(text, self, triggered=self.saveImgFile)
			action.setData(format)
			self.saveAsImgActs.append(action)
		for action in self.saveAsImgActs:
			subMenu_image.addAction(action)
		newAction.setMenu(subMenu_image)	
        
		self.connect(self.btn_members, SIGNAL("toggled(bool)"), self.showMembersLayout)		
		self.connect(self.chb_members, SIGNAL("toggled(bool)"), self.showMembersBuddies)		
		self.connect(self.btn_multimedia, SIGNAL("toggled(bool)"), self.showMultimedia)
示例#2
0
class AbstractDialog(QWidget):
	def __init__(self, con, jidTo, buddyList, parent = None, nick = None):
		super(AbstractDialog, self).__init__(parent)

		self.jidTo = []
		self.initialJidTo = []
		
		if len(list(jidTo)) > 1 and len(jidTo[0]) > 1:
			for el in list(jidTo):
				self.jidTo.append(el)
		else: self.jidTo.append(jidTo)
		
		for el in self.jidTo:
			self.initialJidTo.append(el)
			
		self.con = con
		self.buddyList = buddyList
		self.nick = nick
		
		# loading .ui
		uic.loadUi(PATH_UI_MESSAGE, self)
		self.dialogTitle()
		self.btn_update.hide()
		self.chb_members.hide()
		
		# ading QTextEdit
		self.messageTextEdit = MessageTextEdit(self)
		self.vlt_message_widget.insertWidget(-1, self.messageTextEdit)		
		self.tbr_browser.setPlainText("")
		self.messageTextEdit.setFocus()
		
		# chat members		
		if self.nick is None:
			self.chatMembers = ChatMembers(self)
			self.vlt_members.insertWidget(1, self.chatMembers)
			self.chatMembers.setConnection(self.con)
			
			if len(self.jidTo) is 1:
				self.chatMembers.constructMessageList()
			else:
				self.chatMembers.constructMUCList()
				
			self.showMembersBuddies(True)
			
			self.connect(self.btn_update, SIGNAL("clicked()"), self.chatMembers.updateMembers)
		else:
			# never show chat members if it is a privite chat with muc member
			self.btn_members.hide()

		# multimedia
		self.saveAsImgActs = []
		self.saveAsAudioActs = []
		self.saveAsVideoActs = []
		self.canvas = Canvas(self)
		self.vlt_top.insertWidget(1, self.canvas.scribbleArea)
		self.showMultimedia(False)
		self.connect(self.btn_color, SIGNAL("clicked()"), self.canvas.penColor)
		self.connect(self.btn_width, SIGNAL("clicked()"), self.canvas.penWidth)
		self.connect(self.btn_add, SIGNAL("clicked()"), self.canvas.add)
		self.connect(self.btn_undo, SIGNAL("clicked()"), self.canvas.undo)
		self.connect(self.btn_clear, SIGNAL("clicked()"), self.canvas.scribbleArea.clearImage)
		# save button
		menu_save = QMenu(self)
		newAction = menu_save.addAction("Save &audio As...")
		subMenu_audio = QMenu("Popup Submenu audio", self)
		for format in ['mp3']:
			format = str(format)
			text = "." + format.lower()
			action = QtGui.QAction(text, self, triggered=self.saveAudioFile)
			action.setData(format)
			self.saveAsAudioActs.append(action)
		for action in self.saveAsAudioActs:
			subMenu_audio.addAction(action)
		newAction.setMenu(subMenu_audio)	
			
		newAction = menu_save.addAction("Save &video As...")
		self.btn_save.setMenu(menu_save)
		subMenu_video = QMenu("Popup Submenu video", self)
		for format in ['avi']:
			format = str(format)
			text = "." + format.lower()
			action = QtGui.QAction(text, self, triggered=self.saveVideoFile)
			action.setData(format)
			self.saveAsVideoActs.append(action)
		for action in self.saveAsVideoActs:
			subMenu_video.addAction(action)
		newAction.setMenu(subMenu_video)

		newAction = menu_save.addAction("Save &image As...")
		subMenu_image = QMenu("Popup Submenu image", self)
		for format in QtGui.QImageWriter.supportedImageFormats():
			format = str(format)
			text = "." + format.lower()
			action = QtGui.QAction(text, self, triggered=self.saveImgFile)
			action.setData(format)
			self.saveAsImgActs.append(action)
		for action in self.saveAsImgActs:
			subMenu_image.addAction(action)
		newAction.setMenu(subMenu_image)	
        
		self.connect(self.btn_members, SIGNAL("toggled(bool)"), self.showMembersLayout)		
		self.connect(self.chb_members, SIGNAL("toggled(bool)"), self.showMembersBuddies)		
		self.connect(self.btn_multimedia, SIGNAL("toggled(bool)"), self.showMultimedia)
	
	def saveAudioFile(self):
		QMessageBox.critical(self, "Error occured", "Cannot save .mp3 file; codec not found.", QMessageBox.Ok)
		
	def saveVideoFile(self):
		QMessageBox.critical(self, "Error occured", "Cannot save .avi file; codec not found.", QMessageBox.Ok)
	
	def saveImgFile(self):
		# opens dialog to save file with selected file type
		fileFormat = self.sender().data()
		initialPath = QDir.currentPath() + '/untitled.' + fileFormat
		fileName = QFileDialog.getSaveFileName(self, 
			"Save As...", initialPath,
			".%s Files (*.%s);;All Files (*)" % (fileFormat.lower(), fileFormat))
		if fileName:
			return self.canvas.scribbleArea.saveImage(fileName, fileFormat)
		return False
	
	def showMultimedia(self, checked):
		if checked:
			self.canvas.scribbleArea.show()
			self.btn_color.show()
			self.btn_width.show()
			self.btn_save.show()
			self.btn_add.show()
			self.btn_undo.show()
			self.btn_clear.show()
			self.btn_canvas_session.show()
			self.btn_audio_session.show()
			self.btn_mute.show()
		else:
			self.canvas.scribbleArea.hide()
			self.btn_color.hide()
			self.btn_width.hide()
			self.btn_save.hide()
			self.btn_add.hide()
			self.btn_undo.hide()
			self.btn_clear.hide()
			self.btn_canvas_session.hide()
			self.btn_audio_session.hide()
			self.btn_mute.hide()

	def dialogTitle(self):
		if len(self.jidTo) is 1:
			if self.nick:
				mucPattern = """([\w\-\|][\w\-\.\|]+@[\w\-][\w\-\.]+[a-zA-Z]{1,4})/[\w\-\|][\w\-\.\|]*"""
				group = re.findall(mucPattern, self.jidTo[0])				
				self.setWindowTitle("Chat with " + self.nick + " from " + group[0]) 
			else:
				self.setWindowTitle("Chat with " + self.con.getName(self.jidTo[0]))
		else:
			self.setWindowTitle("Group chat (" + str(len(self.jidTo)) + ")")	
			
	def updateDialog(self):
		if len(self.jidTo) is 1:
			if self.initialJidTo != self.jidTo: # if person is new					
				initialJid = self.setCheckboxes()
				self.chb_members.setChecked(False)
				self.showMembersBuddies(False)
				self.close()
				
				self.buddyList.newDialog(self.jidTo[0])
				
				# restore initial jidTo
				self.jidTo = []
				for el in initialJid:
					self.jidTo.append(unicode(el))
				self.jidTo.append(self.con.jabberID)
				self.jidTo = sorted(self.jidTo)
		else:
			self.jidTo.append(self.con.jabberID)
			if not self.oldMUC(): # if selected people are new
				initialJid = self.setCheckboxes()		
				self.jidTo = sorted(self.jidTo)
				
				# create or join group (always include our jid too)
				if not self.buddyList.MUCExists(self.jidTo):
					self.con.createMUC(self.jidTo)
				
				self.buddyList.newMUCItem(self.jidTo)
				self.buddyList.newMUCDialog(self.jidTo)
				
				# restore initial jidTo
				self.jidTo = []
				for el in initialJid:
					self.jidTo.append(unicode(el))
				self.chb_members.setChecked(False)
				self.showMembersBuddies(False)
				self.close()
			
	def oldMUC(self):
		# True - elements in self.initialJidTo match ones in self.jidTo, 
		# False - otherwise
		match = 0
		for initJid in self.initialJidTo:
			for jid in self.jidTo:
				if initJid == jid:
					match = match + 1
				if len(self.jidTo) == len(self.initialJidTo) == match:
					return True
		return False
			
	def setCheckboxes(self):
		initialJid = []
		for child in self.chatMembers.buddies.values():
			if child.jid in self.initialJidTo and child.jid not in self.jidTo: # old desselected
				child.setState(Qt.Checked)
				initialJid.append(child.jid)
			elif child.jid in self.initialJidTo: # old
				child.setState(Qt.Checked)
				initialJid.append(child.jid)
			elif child.jid in self.jidTo: # new person found in roster
				child.setState(Qt.Unchecked)
			else:
				child.setState(Qt.Unchecked)
		self.showMembersBuddies(True)
		return initialJid
			
	def showMembersLayout(self, checked):
		if checked:
			self.chatMembers.show()
			self.btn_update.show()
			self.chb_members.show()
		else:
			self.chatMembers.hide()
			self.btn_update.hide()
			self.chb_members.hide()
			
	def showMembersBuddies(self, checked):
		self.chatMembers.showMembersBuddies(self.chb_members.isChecked())